pmap_directbase is a failed experiment, nuke it.
This commit is contained in:
parent
ff34925b8f
commit
23a95653af
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue