From owner-svn-src-user@FreeBSD.ORG Tue Aug 7 00:15:34 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 50EE2106566B; Tue, 7 Aug 2012 00:15:34 +0000 (UTC) (envelope-from jceel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 228318FC15; Tue, 7 Aug 2012 00:15:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q770FXTG099103; Tue, 7 Aug 2012 00:15:33 GMT (envelope-from jceel@svn.freebsd.org) Received: (from jceel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q770FXp8099101; Tue, 7 Aug 2012 00:15:33 GMT (envelope-from jceel@svn.freebsd.org) Message-Id: <201208070015.q770FXp8099101@svn.freebsd.org> From: Jakub Wojciech Klama Date: Tue, 7 Aug 2012 00:15:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239117 - user/jceel/soc2012_armv6/sys/arm/arm X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Aug 2012 00:15:34 -0000 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;