Skip site navigation (1)Skip section navigation (2)
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>