Port-powerpc archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: evbppc reserved-tlb cleanup
# Jachym Holecek 2006-10-31:
> The patch below changes evbppc to map just 0 upto endkernel to make sure
> the trap code has everything it could possibly need. Looks OK to commit?
As Simon noted, this is wrong, we must map console/devices after
(vaddr_t)roundup(physmem, 16MB) so that pmap_tlbmiss() continues
to work. Updated patch below, does it look OK this time?
-- Jachym
Index: powerpc/ibm4xx/pmap.c
===================================================================
RCS file: /cvsroot/src/sys/arch/powerpc/ibm4xx/pmap.c,v
retrieving revision 1.43
diff -d -p -u -r1.43 pmap.c
--- powerpc/ibm4xx/pmap.c 16 Oct 2006 18:14:35 -0000 1.43
+++ powerpc/ibm4xx/pmap.c 4 Nov 2006 16:57:50 -0000
@@ -1478,9 +1478,9 @@ pmap_tlbmiss(vaddr_t va, int ctx)
tlbmiss_ev.ev_count++;
/*
- * XXXX We will reserve 0-0x80000000 for va==pa mappings.
+ * We will reserve 0 upto ${ramsize} for va == pa mappings.
*/
- if (ctx != KERNEL_PID || (va & 0x80000000)) {
+ if (ctx != KERNEL_PID || (va < ctob((vaddr_t)physmem))) {
pte = pte_find((struct pmap *)__UNVOLATILE(ctxbusy[ctx]), va);
if (pte == NULL) {
/* Map unmanaged addresses directly for kernel access */
Index: evbppc/explora/machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbppc/explora/machdep.c,v
retrieving revision 1.15
diff -d -p -u -r1.15 machdep.c
--- evbppc/explora/machdep.c 23 Oct 2006 06:49:17 -0000 1.15
+++ evbppc/explora/machdep.c 4 Nov 2006 16:58:01 -0000
@@ -188,15 +188,14 @@ bootstrap(u_int startkernel, u_int endke
/*
* Setup initial tlbs.
- * Physical memory and console device are
+ * Kernel memory and console device are
* mapped into the first (reserved) tlbs.
*/
- t = 0;
- for (maddr = 0; maddr < phys_mem[0].size; maddr += TLB_PG_SIZE)
+ for (maddr = 0; maddr < endkernel; maddr += TLB_PG_SIZE)
ppc4xx_tlb_reserve(maddr, maddr, TLB_PG_SIZE, TLB_EX);
- /* Map PCKBC, PCKBC2, COM, LPT. */
+ /* Map PCKBC, PCKBC2, COM, LPT. This is far beyond physmem. */
ppc4xx_tlb_reserve(BASE_ISA, BASE_ISA, TLB_PG_SIZE, TLB_I | TLB_G);
#ifndef COM_IS_CONSOLE
Index: evbppc/obs405/obs200_machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbppc/obs405/obs200_machdep.c,v
retrieving revision 1.4
diff -d -p -u -r1.4 obs200_machdep.c
--- evbppc/obs405/obs200_machdep.c 16 Oct 2006 18:14:35 -0000 1.4
+++ evbppc/obs405/obs200_machdep.c 4 Nov 2006 16:58:09 -0000
@@ -132,12 +132,13 @@ initppc(u_int startkernel, u_int endkern
bios_board_init(info_block, startkernel);
memsize = bios_board_memsize_get();
- /* Linear map whole physmem. */
- for (va = 0; va < memsize; va += TLB_PG_SIZE)
+ /* Linear map kernel memory. */
+ for (va = 0; va < endkernel; va += TLB_PG_SIZE)
ppc4xx_tlb_reserve(va, va, TLB_PG_SIZE, TLB_EX);
- /* Map console right after RAM. */
- ppc4xx_tlb_reserve(OBS405_CONADDR, va, TLB_PG_SIZE, TLB_I | TLB_G);
+ /* Map console after physmem (see pmap_tlbmiss()). */
+ ppc4xx_tlb_reserve(OBS405_CONADDR, roundup(memsize, TLB_PG_SIZE),
+ TLB_PG_SIZE, TLB_I | TLB_G);
/* Initialize IBM405GPr CPU */
ibm40x_memsize_init(memsize, startkernel);
Index: evbppc/obs405/obs266_machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbppc/obs405/obs266_machdep.c,v
retrieving revision 1.5
diff -d -p -u -r1.5 obs266_machdep.c
--- evbppc/obs405/obs266_machdep.c 16 Oct 2006 18:14:35 -0000 1.5
+++ evbppc/obs405/obs266_machdep.c 4 Nov 2006 16:58:13 -0000
@@ -128,12 +128,13 @@ initppc(u_int startkernel, u_int endkern
openbios_board_init(info_block, startkernel);
memsize = openbios_board_memsize_get();
- /* Linear map whole physmem */
- for (va = 0; va < memsize; va += TLB_PG_SIZE)
+ /* Linear map kernel memory */
+ for (va = 0; va < endkernel; va += TLB_PG_SIZE)
ppc4xx_tlb_reserve(va, va, TLB_PG_SIZE, TLB_EX);
- /* Map console just after RAM */
- ppc4xx_tlb_reserve(OBS405_CONADDR, va, TLB_PG_SIZE, TLB_I | TLB_G);
+ /* Map console after RAM (see pmap_tlbmiss()) */
+ ppc4xx_tlb_reserve(OBS405_CONADDR, roundup(memsize, TLB_PG_SIZE),
+ TLB_PG_SIZE, TLB_I | TLB_G);
/* Initialize IBM405GPr CPU */
ibm40x_memsize_init(memsize, startkernel);
Index: evbppc/walnut/machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbppc/walnut/machdep.c,v
retrieving revision 1.30
diff -d -p -u -r1.30 machdep.c
--- evbppc/walnut/machdep.c 16 Oct 2006 18:14:35 -0000 1.30
+++ evbppc/walnut/machdep.c 4 Nov 2006 16:58:15 -0000
@@ -195,12 +195,13 @@ initppc(u_int startkernel, u_int endkern
availmemr[0].start = startkernel;
availmemr[0].size = board_data.mem_size - availmemr[0].start;
- /* Linear map whole physmem */
- for (va = 0; va < board_data.mem_size; va += TLB_PG_SIZE)
+ /* Linear map kernel memory */
+ for (va = 0; va < endkernel; va += TLB_PG_SIZE)
ppc4xx_tlb_reserve(va, va, TLB_PG_SIZE, TLB_EX);
- /* Map console just after RAM */
- ppc4xx_tlb_reserve(0xef000000, va, TLB_PG_SIZE, TLB_I | TLB_G);
+ /* Map console after physmem (see pmap_tlbmiss()) */
+ ppc4xx_tlb_reserve(0xef000000, roundup(physmemr[0].size, TLB_PG_SIZE),
+ TLB_PG_SIZE, TLB_I | TLB_G);
/*
* Initialize lwp0 and current pcb and pmap pointers.
Home |
Main Index |
Thread Index |
Old Index