Date: Tue, 7 Aug 2012 00:15:33 +0000 (UTC) From: Jakub Wojciech Klama <jceel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r239117 - user/jceel/soc2012_armv6/sys/arm/arm Message-ID: <201208070015.q770FXp8099101@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jceel Date: Tue Aug 7 00:15:33 2012 New Revision: 239117 URL: http://svn.freebsd.org/changeset/base/239117 Log: Add support for high/low vector addresses in arm_mmu_init(). Modified: user/jceel/soc2012_armv6/sys/arm/arm/machdep.c Modified: user/jceel/soc2012_armv6/sys/arm/arm/machdep.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/arm/machdep.c Mon Aug 6 23:46:17 2012 (r239116) +++ user/jceel/soc2012_armv6/sys/arm/arm/machdep.c Tue Aug 7 00:15:33 2012 (r239117) @@ -151,7 +151,8 @@ extern vm_offset_t ksym_start, ksym_end; static void arm_valloc_pages(struct pv_addr *, size_t, size_t); static void arm_process_devmap(struct pmap_devmap *); -static void arm_bootstrap_pagetables(uint32_t, struct pv_addr *, struct pv_addr *); +static void arm_bootstrap_pagetables(uint32_t, struct pv_addr *, + struct pv_addr *, int); void sendsig(catcher, ksi, mask) @@ -822,15 +823,18 @@ arm_valloc_pages(struct pv_addr *result, } static void -arm_bootstrap_pagetables(uint32_t memsize, struct pv_addr *vectors, struct pv_addr *l1pt) +arm_bootstrap_pagetables(uint32_t memsize, struct pv_addr *vectors, struct pv_addr *l1pt, int high_vectors) { struct pv_addr *l2pt = arm_bootstrap_l2pt; + vm_offset_t vectors_va; vm_offset_t l2_start; vm_offset_t pagetables_size = 0; int l2_needed; int l2_devmap; int i, j; + vectors_va = high_vectors ? ARM_VECTORS_HIGH : ARM_VECTORS_LOW; + /* Allocate L1 pagetable */ arm_valloc_pages(l1pt, L1_TABLE_SIZE / PAGE_SIZE, L1_TABLE_SIZE / PAGE_SIZE); pagetables_size += L1_TABLE_SIZE; @@ -881,8 +885,8 @@ arm_bootstrap_pagetables(uint32_t memsiz } /* Link and map vectors page */ - pmap_link_l2pt(l1pt->pv_va, ARM_VECTORS_HIGH, &l2pt[l2_needed - 1]); - pmap_map_entry(l1pt->pv_va, ARM_VECTORS_HIGH, vectors->pv_pa, + pmap_link_l2pt(l1pt->pv_va, vectors_va, &l2pt[l2_needed - 1]); + pmap_map_entry(l1pt->pv_va, vectors_va, vectors->pv_pa, VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE, PTE_CACHE); /* Map kernel and structures */ @@ -1005,7 +1009,7 @@ arm_mmu_init(uint32_t memsize, uint32_t arm_process_devmap(arm_pmap_devmap); /* Construct bootstrap pagetables */ - arm_bootstrap_pagetables(memsize, &systempage, &pagetable); + arm_bootstrap_pagetables(memsize, &systempage, &pagetable, high_vectors); pmap_devmap_bootstrap(pagetable.pv_va, arm_pmap_devmap); edebugf("L1 table pa=0x%x va=0x%x\n", pagetable.pv_pa, pagetable.pv_va); @@ -1053,7 +1057,8 @@ arm_mmu_init(uint32_t memsize, uint32_t undefined_init(); init_proc0(kernelstack.pv_va); - arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); + arm_vector_init(high_vectors ? ARM_VECTORS_HIGH : ARM_VECTORS_LOW, + ARM_VEC_ALL); dump_avail[0] = 0; dump_avail[1] = memsize;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201208070015.q770FXp8099101>