pmap_directbase is a failed experiment, nuke it.

This commit is contained in:
matt 2015-06-01 19:16:44 +00:00
parent ff34925b8f
commit 23a95653af
3 changed files with 22 additions and 70 deletions

View File

@ -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, psize_t memsize, vsize_t kernelstart)
*/
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_base, vaddr_t vectors, vaddr_t iovbase,
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_base, vaddr_t vectors, vaddr_t iovbase,
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_base, vaddr_t vectors, vaddr_t iovbase,
/*
* 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,

View File

@ -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 *ok_p, vaddr_t va)
{
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
}

View File

@ -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