Module Name:    src
Committed By:   matt
Date:           Mon Jun  1 19:16:44 UTC 2015

Modified Files:
        src/sys/arch/arm/arm32: arm32_kvminit.c pmap.c
        src/sys/arch/arm/include/arm32: pmap.h

Log Message:
pmap_directbase is a failed experiment, nuke it.


To generate a diff of this commit:
cvs rdiff -u -r1.34 -r1.35 src/sys/arch/arm/arm32/arm32_kvminit.c
cvs rdiff -u -r1.323 -r1.324 src/sys/arch/arm/arm32/pmap.c
cvs rdiff -u -r1.140 -r1.141 src/sys/arch/arm/include/arm32/pmap.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/arm32/arm32_kvminit.c
diff -u src/sys/arch/arm/arm32/arm32_kvminit.c:1.34 src/sys/arch/arm/arm32/arm32_kvminit.c:1.35
--- src/sys/arch/arm/arm32/arm32_kvminit.c:1.34	Sat May 30 23:59:33 2015
+++ src/sys/arch/arm/arm32/arm32_kvminit.c	Mon Jun  1 19:16:44 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: arm32_kvminit.c,v 1.34 2015/05/30 23:59:33 matt Exp $	*/
+/*	$NetBSD: arm32_kvminit.c,v 1.35 2015/06/01 19:16:44 matt Exp $	*/
 
 /*
  * Copyright (c) 2002, 2003, 2005  Genetec Corporation.  All rights reserved.
@@ -124,7 +124,7 @@
 #include "opt_multiprocessor.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: arm32_kvminit.c,v 1.34 2015/05/30 23:59:33 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: arm32_kvminit.c,v 1.35 2015/06/01 19:16:44 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -166,11 +166,6 @@ extern char _end[];
 	((paddr_t)((vaddr_t)(va) - KERNEL_BASE_VOFFSET))
 #define KERN_PHYSTOV(bmi, pa) \
 	((vaddr_t)((paddr_t)(pa) + KERNEL_BASE_VOFFSET))
-#elif defined(ARM_MMU_EXTENDED) && defined(__HAVE_MM_MD_DIRECT_MAPPED_PHYS)
-#define KERN_VTOPHYS(bmi, va) \
-	((paddr_t)((vaddr_t)(va) - pmap_directbase + (bmi)->bmi_start))
-#define KERN_PHYSTOV(bmi, pa) \
-	((vaddr_t)((paddr_t)(pa) - (bmi)->bmi_start + pmap_directbase))
 #else
 #define KERN_VTOPHYS(bmi, va) \
 	((paddr_t)((vaddr_t)(va) - KERNEL_BASE + (bmi)->bmi_start))
@@ -233,26 +228,7 @@ arm32_bootmem_init(paddr_t memstart, psi
 	 */
 	if (bmi->bmi_start < bmi->bmi_kernelstart) {
 		pv->pv_pa = bmi->bmi_start;
-#if defined(ARM_MMU_EXTENDED) && defined(__HAVE_MM_MD_DIRECT_MAPPED_PHYS)
-		pv->pv_va = pmap_directbase;
-#else
-		/*
-		 * If there's lots of memory the kernel could be placed far
-		 * from the start of RAM.  If that's the case, don't map the
-		 * RAM that would have virtual addresses below KERNEL_BASE.
-		 */
-		if (pv->pv_pa < KERN_VTOPHYS(bmi, KERNEL_BASE)) {
-			psize_t size = KERN_VTOPHYS(bmi, KERNEL_BASE) - pv->pv_pa;
-			bmi->bmi_freepages += size / PAGE_SIZE;
-#ifdef VERBOSE_INIT_ARM
-			printf("%s: adding %lu free pages: [%#lx..%#lx]\n",
-			    __func__, size / PAGE_SIZE, pv->pv_va,
-			    pv->pv_pa + size - 1);
-#endif
-			pv->pv_pa = KERN_VTOPHYS(bmi, KERNEL_BASE);
-		}
-		pv->pv_va = KERNEL_BASE;
-#endif
+		pv->pv_va = KERN_PHYSTOV(bmi, pv->pv_pa);
 		pv->pv_size = bmi->bmi_kernelstart - pv->pv_pa;
 		bmi->bmi_freepages += pv->pv_size / PAGE_SIZE;
 #ifdef VERBOSE_INIT_ARM
@@ -431,24 +407,9 @@ arm32_kernel_vm_init(vaddr_t kernel_vm_b
 	KASSERT(mapallmem_p);
 #ifdef ARM_MMU_EXTENDED
 	/*
-	 * We can only use address beneath kernel_vm_base to map physical
-	 * memory.
-	 */
-	const psize_t physical_size =
-	    roundup(physical_end - physical_start, L1_SS_SIZE);
-	KASSERT(kernel_vm_base >= physical_size);
-	/*
-	 * If we don't have enough memory via TTBR1, we have use addresses
-	 * from TTBR0 to map some of the physical memory.  But try to use as
-	 * much high memory space as possible.
+	 * The direct map VA space ends at the start of the kernel VM space.
 	 */
 	pmap_directlimit = kernel_vm_base;
-	if (kernel_vm_base - KERNEL_BASE < physical_size
-	    && kernel_vm_base - physical_size >= physical_start) {
-		pmap_directbase -= KERNEL_BASE_VOFFSET;
-		printf("%s: changing pmap_directbase to %#lx\n", __func__,
-		    pmap_directbase);
-	}
 #else
 	KASSERT(kernel_vm_base - KERNEL_BASE >= physical_end - physical_start);
 #endif /* ARM_MMU_EXTENDED */
@@ -763,15 +724,12 @@ arm32_kernel_vm_init(vaddr_t kernel_vm_b
 	pv_addr_t *pv = SLIST_FIRST(&bmi->bmi_chunks);
 	if (!mapallmem_p || pv->pv_pa == bmi->bmi_start) {
 		cur_pv = *pv;
+		KASSERTMSG(cur_pv.pv_va >= KERNEL_BASE, "%#lx", cur_pv.pv_va);
 		pv = SLIST_NEXT(pv, pv_list);
 	} else {
-#if defined(ARM_MMU_EXTENDED) && defined(__HAVE_MM_MD_DIRECT_MAPPED_PHYS)
-		cur_pv.pv_va = pmap_directbase;
-#else
 		cur_pv.pv_va = KERNEL_BASE;
-#endif
-		cur_pv.pv_pa = bmi->bmi_start;
-		cur_pv.pv_size = pv->pv_pa - bmi->bmi_start;
+		cur_pv.pv_pa = KERN_VTOPHYS(bmi, cur_pv.pv_va);
+		cur_pv.pv_size = pv->pv_pa - cur_pv.pv_pa;
 		cur_pv.pv_prot = VM_PROT_READ | VM_PROT_WRITE;
 		cur_pv.pv_cache = PTE_CACHE;
 	}
@@ -881,7 +839,6 @@ arm32_kernel_vm_init(vaddr_t kernel_vm_b
 	/*
 	 * Now we map the stuff that isn't directly after the kernel
 	 */
-
 	if (map_vectors_p) {
 		/* Map the vector page. */
 		pmap_map_entry(l1pt_va, systempage.pv_va, systempage.pv_pa,

Index: src/sys/arch/arm/arm32/pmap.c
diff -u src/sys/arch/arm/arm32/pmap.c:1.323 src/sys/arch/arm/arm32/pmap.c:1.324
--- src/sys/arch/arm/arm32/pmap.c:1.323	Sat May 30 23:59:33 2015
+++ src/sys/arch/arm/arm32/pmap.c	Mon Jun  1 19:16:44 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.323 2015/05/30 23:59:33 matt Exp $	*/
+/*	$NetBSD: pmap.c,v 1.324 2015/06/01 19:16:44 matt Exp $	*/
 
 /*
  * Copyright 2003 Wasabi Systems, Inc.
@@ -216,7 +216,7 @@
 
 #include <arm/locore.h>
 
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.323 2015/05/30 23:59:33 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.324 2015/06/01 19:16:44 matt Exp $");
 
 //#define PMAP_DEBUG
 #ifdef PMAP_DEBUG
@@ -514,9 +514,8 @@ bool pmap_initialized;
 
 #if defined(ARM_MMU_EXTENDED) && defined(__HAVE_MM_MD_DIRECT_MAPPED_PHYS)
 /*
- * Start of direct-mapped memory
+ * Virtual end of direct-mapped memory
  */
-vaddr_t pmap_directbase = KERNEL_BASE;
 vaddr_t pmap_directlimit;
 #endif
 
@@ -7820,13 +7819,7 @@ arm_pmap_alloc_poolpage(int flags)
 	 */
 	if (arm_poolpage_vmfreelist != VM_FREELIST_DEFAULT) {
 		return uvm_pagealloc_strat(NULL, 0, NULL, flags,
-#if defined(__HAVE_MM_MD_DIRECT_MAPPED_PHYS) && defined(ARM_MMU_EXTENDED)
-		    (pmap_directbase < KERNEL_BASE
-			? UVM_PGA_STRAT_ONLY
-			: UVM_PGA_STRAT_FALLBACK),
-#else
 		    UVM_PGA_STRAT_FALLBACK,
-#endif
 		    arm_poolpage_vmfreelist);
 	}
 
@@ -7858,15 +7851,18 @@ pmap_direct_mapped_phys(paddr_t pa, bool
 {
 	bool ok = false;
 	if (physical_start <= pa && pa < physical_end) {
+#ifdef KERNEL_BASE_VOFFSET
+		const vaddr_t newva = pa + KERNEL_BASE_VOFFSET;
+#else
+		const vaddr_t newva = KERNEL_BASE + pa - physical_start;
+#endif
 #ifdef ARM_MMU_EXTENDED
-		const vaddr_t newva = pmap_directbase + pa - physical_start;
 		if (newva >= KERNEL_BASE && newva < pmap_directlimit) {
+#endif
 			va = newva;
 			ok = true;
+#ifdef ARM_MMU_EXTENDED
 		}
-#else
-		va = KERNEL_BASE + pa - physical_start;
-		ok = true;
 #endif
 	}
 	KASSERT(ok_p);
@@ -7896,12 +7892,12 @@ paddr_t
 pmap_unmap_poolpage(vaddr_t va)
 {
 	KASSERT(va >= KERNEL_BASE);
-#if defined(ARM_MMU_EXTENDED)
-	return va - pmap_directbase + physical_start;
-#else
 #ifdef PMAP_CACHE_VIVT
 	cpu_idcache_wbinv_range(va, PAGE_SIZE);
 #endif
+#if defined(KERNEL_BASE_VOFFSET)
+        return va - KERNEL_BASE_VOFFSET;
+#else
         return va - KERNEL_BASE + physical_start;
 #endif
 }

Index: src/sys/arch/arm/include/arm32/pmap.h
diff -u src/sys/arch/arm/include/arm32/pmap.h:1.140 src/sys/arch/arm/include/arm32/pmap.h:1.141
--- src/sys/arch/arm/include/arm32/pmap.h:1.140	Sat May 30 23:59:33 2015
+++ src/sys/arch/arm/include/arm32/pmap.h	Mon Jun  1 19:16:44 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.h,v 1.140 2015/05/30 23:59:33 matt Exp $	*/
+/*	$NetBSD: pmap.h,v 1.141 2015/06/01 19:16:44 matt Exp $	*/
 
 /*
  * Copyright (c) 2002, 2003 Wasabi Systems, Inc.
@@ -428,9 +428,8 @@ extern vaddr_t	pmap_curmaxkvaddr;
 
 #if defined(ARM_MMU_EXTENDED) && defined(__HAVE_MM_MD_DIRECT_MAPPED_PHYS)
 /*
- * Starting VA of direct mapped memory (usually KERNEL_BASE).
+ * Ending VA of direct mapped memory (usually KERNEL_VM_BASE).
  */
-extern vaddr_t pmap_directbase;
 extern vaddr_t pmap_directlimit;
 #endif
 

Reply via email to