aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Grehan <grehan@FreeBSD.org>2004-03-02 06:49:21 +0000
committerPeter Grehan <grehan@FreeBSD.org>2004-03-02 06:49:21 +0000
commit4daf20b2f1ac85f9d2c1c35cca7047876b97a2f7 (patch)
tree7946c5b7f55109dc8ab4dea976e862ea0a0df42c
parent9c3078173af42f1cfa68495202fae23db33b2ed6 (diff)
Notes
-rw-r--r--sys/powerpc/aim/mmu_oea.c4
-rw-r--r--sys/powerpc/include/sr.h6
-rw-r--r--sys/powerpc/include/vmparam.h2
-rw-r--r--sys/powerpc/powerpc/mmu_oea.c4
-rw-r--r--sys/powerpc/powerpc/pmap.c4
5 files changed, 17 insertions, 3 deletions
diff --git a/sys/powerpc/aim/mmu_oea.c b/sys/powerpc/aim/mmu_oea.c
index ddab773ecc99d..cdf3bce624c0c 100644
--- a/sys/powerpc/aim/mmu_oea.c
+++ b/sys/powerpc/aim/mmu_oea.c
@@ -698,6 +698,7 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
*/
pmap_pinit(&ofw_pmap);
ofw_pmap.pm_sr[KERNEL_SR] = KERNEL_SEGMENT;
+ ofw_pmap.pm_sr[KERNEL2_SR] = KERNEL2_SEGMENT;
if ((chosen = OF_finddevice("/chosen")) == -1)
panic("pmap_bootstrap: can't find /chosen");
OF_getprop(chosen, "mmu", &mmui, 4);
@@ -751,6 +752,7 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
kernel_pmap->pm_sr[i] = EMPTY_SEGMENT;
}
kernel_pmap->pm_sr[KERNEL_SR] = KERNEL_SEGMENT;
+ kernel_pmap->pm_sr[KERNEL2_SR] = KERNEL_SEGMENT;
kernel_pmap->pm_active = ~0;
/*
@@ -1385,6 +1387,8 @@ pmap_pinit(pmap_t pmap)
int i, mask;
u_int entropy;
+ KASSERT((int)pmap < VM_MIN_KERNEL_ADDRESS, ("pmap_pinit: virt pmap"));
+
entropy = 0;
__asm __volatile("mftb %0" : "=r"(entropy));
diff --git a/sys/powerpc/include/sr.h b/sys/powerpc/include/sr.h
index e4a29ece7fed3..4a5525a97b7d0 100644
--- a/sys/powerpc/include/sr.h
+++ b/sys/powerpc/include/sr.h
@@ -42,10 +42,12 @@
#define SR_VSID_MASK 0x00ffffff /* Virtual Segment ID mask */
/* Kernel segment register usage */
-#define USER_SR 13
-#define KERNEL_SR 14
+#define USER_SR 12
+#define KERNEL_SR 13
+#define KERNEL2_SR 14
#define KERNEL_VSIDBITS 0xfffff
#define KERNEL_SEGMENT (0xfffff0 + KERNEL_SR)
+#define KERNEL2_SEGMENT (0xfffff0 + KERNEL2_SR)
#define EMPTY_SEGMENT 0xfffff0
#define USER_ADDR ((void *)(USER_SR << ADDR_SR_SHFT))
#define SEGMENT_LENGTH 0x10000000
diff --git a/sys/powerpc/include/vmparam.h b/sys/powerpc/include/vmparam.h
index 588d712c9a3d7..6bcea668bf908 100644
--- a/sys/powerpc/include/vmparam.h
+++ b/sys/powerpc/include/vmparam.h
@@ -94,7 +94,7 @@
#define VM_MAXUSER_ADDRESS ((vm_offset_t)0x7ffff000)
#define VM_MAX_ADDRESS VM_MAXUSER_ADDRESS
#define VM_MIN_KERNEL_ADDRESS ((vm_offset_t)(KERNEL_SR << ADDR_SR_SHFT))
-#define VM_MAX_KERNEL_ADDRESS (VM_MIN_KERNEL_ADDRESS + SEGMENT_LENGTH - 1)
+#define VM_MAX_KERNEL_ADDRESS (VM_MIN_KERNEL_ADDRESS + 2*SEGMENT_LENGTH - 1)
#define KERNBASE 0x100000 /* start of kernel virtual */
diff --git a/sys/powerpc/powerpc/mmu_oea.c b/sys/powerpc/powerpc/mmu_oea.c
index ddab773ecc99d..cdf3bce624c0c 100644
--- a/sys/powerpc/powerpc/mmu_oea.c
+++ b/sys/powerpc/powerpc/mmu_oea.c
@@ -698,6 +698,7 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
*/
pmap_pinit(&ofw_pmap);
ofw_pmap.pm_sr[KERNEL_SR] = KERNEL_SEGMENT;
+ ofw_pmap.pm_sr[KERNEL2_SR] = KERNEL2_SEGMENT;
if ((chosen = OF_finddevice("/chosen")) == -1)
panic("pmap_bootstrap: can't find /chosen");
OF_getprop(chosen, "mmu", &mmui, 4);
@@ -751,6 +752,7 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
kernel_pmap->pm_sr[i] = EMPTY_SEGMENT;
}
kernel_pmap->pm_sr[KERNEL_SR] = KERNEL_SEGMENT;
+ kernel_pmap->pm_sr[KERNEL2_SR] = KERNEL_SEGMENT;
kernel_pmap->pm_active = ~0;
/*
@@ -1385,6 +1387,8 @@ pmap_pinit(pmap_t pmap)
int i, mask;
u_int entropy;
+ KASSERT((int)pmap < VM_MIN_KERNEL_ADDRESS, ("pmap_pinit: virt pmap"));
+
entropy = 0;
__asm __volatile("mftb %0" : "=r"(entropy));
diff --git a/sys/powerpc/powerpc/pmap.c b/sys/powerpc/powerpc/pmap.c
index ddab773ecc99d..cdf3bce624c0c 100644
--- a/sys/powerpc/powerpc/pmap.c
+++ b/sys/powerpc/powerpc/pmap.c
@@ -698,6 +698,7 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
*/
pmap_pinit(&ofw_pmap);
ofw_pmap.pm_sr[KERNEL_SR] = KERNEL_SEGMENT;
+ ofw_pmap.pm_sr[KERNEL2_SR] = KERNEL2_SEGMENT;
if ((chosen = OF_finddevice("/chosen")) == -1)
panic("pmap_bootstrap: can't find /chosen");
OF_getprop(chosen, "mmu", &mmui, 4);
@@ -751,6 +752,7 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
kernel_pmap->pm_sr[i] = EMPTY_SEGMENT;
}
kernel_pmap->pm_sr[KERNEL_SR] = KERNEL_SEGMENT;
+ kernel_pmap->pm_sr[KERNEL2_SR] = KERNEL_SEGMENT;
kernel_pmap->pm_active = ~0;
/*
@@ -1385,6 +1387,8 @@ pmap_pinit(pmap_t pmap)
int i, mask;
u_int entropy;
+ KASSERT((int)pmap < VM_MIN_KERNEL_ADDRESS, ("pmap_pinit: virt pmap"));
+
entropy = 0;
__asm __volatile("mftb %0" : "=r"(entropy));