Date: Thu, 7 Aug 2014 07:41:52 +0000 (UTC) From: Andrew Turner <andrew@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r269657 - in projects/arm64/sys: arm/arm arm64/arm64 Message-ID: <53e32dc0.5f40.7ce3b63e@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: andrew Date: Thu Aug 7 07:41:51 2014 New Revision: 269657 URL: http://svnweb.freebsd.org/changeset/base/269657 Log: Reserve a 2MiB block of memory for devmap so we don't need to add the early boot ranges. This should reduce the need for early platform dependent code. Modified: projects/arm64/sys/arm/arm/devmap.c projects/arm64/sys/arm64/arm64/machdep.c projects/arm64/sys/arm64/arm64/pmap.c Modified: projects/arm64/sys/arm/arm/devmap.c ============================================================================== --- projects/arm64/sys/arm/arm/devmap.c Thu Aug 7 05:47:53 2014 (r269656) +++ projects/arm64/sys/arm/arm/devmap.c Thu Aug 7 07:41:51 2014 (r269657) @@ -57,6 +57,8 @@ static struct arm_devmap_entry akva_devm static u_int akva_devmap_idx; static vm_offset_t akva_devmap_vaddr = VM_MAX_KERNEL_ADDRESS; +extern int early_boot; + #if 0 /* * Print the contents of the static mapping table using the provided printf-like @@ -275,8 +277,14 @@ pmap_mapdev(vm_offset_t pa, vm_size_t si offset = pa & PAGE_MASK; pa = trunc_page(pa); size = round_page(size + offset); - - va = kva_alloc(size); + + if (early_boot) { + akva_devmap_vaddr = trunc_page(akva_devmap_vaddr - size); + va = akva_devmap_vaddr; + KASSERT(va >= VM_MAX_KERNEL_ADDRESS - L2_SIZE, + ("Too many early devmap mappings")); + } else + va = kva_alloc(size); if (!va) panic("pmap_mapdev: Couldn't alloc kernel virtual memory"); Modified: projects/arm64/sys/arm64/arm64/machdep.c ============================================================================== --- projects/arm64/sys/arm64/arm64/machdep.c Thu Aug 7 05:47:53 2014 (r269656) +++ projects/arm64/sys/arm64/arm64/machdep.c Thu Aug 7 07:41:51 2014 (r269657) @@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$"); #include <sys/systm.h> #include <sys/buf.h> #include <sys/bus.h> +#include <sys/cons.h> #include <sys/cpu.h> #include <sys/efi.h> #include <sys/imgact.h> @@ -56,6 +57,7 @@ __FBSDID("$FreeBSD$"); #include <vm/vm_pager.h> #include <machine/cpu.h> +#include <machine/devmap.h> #include <machine/machdep.h> #include <machine/metadata.h> #include <machine/pcb.h> @@ -73,6 +75,7 @@ static struct trapframe proc0_tf; vm_paddr_t phys_avail[PHYS_AVAIL_SIZE]; +int early_boot = 1; int cold = 1; long realmem = 0; @@ -563,11 +566,16 @@ initarm(struct arm64_bootparams *abp) pmap_bootstrap(abp->kern_l1pt, KERNBASE - abp->kern_delta, lastaddr - KERNBASE); + arm_devmap_bootstrap(0, NULL); + + cninit(); + init_proc0(abp->kern_stack); mutex_init(); init_param2(physmem); kdb_init(); + early_boot = 0; printf("End initarm\n"); } Modified: projects/arm64/sys/arm64/arm64/pmap.c ============================================================================== --- projects/arm64/sys/arm64/arm64/pmap.c Thu Aug 7 05:47:53 2014 (r269656) +++ projects/arm64/sys/arm64/arm64/pmap.c Thu Aug 7 07:41:51 2014 (r269657) @@ -366,7 +366,7 @@ pmap_bootstrap(vm_offset_t l1pt, vm_padd freemempos = pmap_bootstrap_l2(l1pt, va, freemempos); /* And the l3 tables for the early devmap */ freemempos = pmap_bootstrap_l3(l1pt, - arm_devmap_lastaddr() & ~L2_OFFSET, freemempos); + VM_MAX_KERNEL_ADDRESS - L2_SIZE, freemempos); /* Flush the cache and tlb to ensure the new entries are valid */ /* TODO: Flush the cache, we are relying on it being off */ @@ -387,7 +387,7 @@ pmap_bootstrap(vm_offset_t l1pt, vm_padd dpcpu_init((void *)dpcpu, 0); virtual_avail = roundup2(freemempos, L1_SIZE); - virtual_end = arm_devmap_lastaddr() & ~L1_OFFSET; + virtual_end = VM_MAX_KERNEL_ADDRESS - L2_SIZE; kernel_vm_end = virtual_avail; pa = pmap_early_vtophys(l1pt, freemempos);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?53e32dc0.5f40.7ce3b63e>