summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/aim
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2015-01-01 22:26:12 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2015-01-01 22:26:12 +0000
commit96234b61c45d23ce5b18de83324a3e43a3ca97ff (patch)
tree6c5f48e2a44f107fd2834fe12fced03b5ae9d616 /sys/powerpc/aim
parentdabb40130f55c119eb04d09fd8bd5dbea07a496a (diff)
downloadFreeBSD-src-96234b61c45d23ce5b18de83324a3e43a3ca97ff.zip
FreeBSD-src-96234b61c45d23ce5b18de83324a3e43a3ca97ff.tar.gz
Allow booting with both a real Open Firmware tree and a flattened version of
the Open Firmware, as provided by petitboot, for example. Note that this is not quite complete, since RTAS instantiation still depends on callable firmware. MFC after: 2 weeks
Diffstat (limited to 'sys/powerpc/aim')
-rw-r--r--sys/powerpc/aim/mmu_oea64.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/sys/powerpc/aim/mmu_oea64.c b/sys/powerpc/aim/mmu_oea64.c
index 2db7fcb..9677b52 100644
--- a/sys/powerpc/aim/mmu_oea64.c
+++ b/sys/powerpc/aim/mmu_oea64.c
@@ -188,6 +188,7 @@ extern unsigned char _etext[];
extern unsigned char _end[];
extern int dumpsys_minidump;
+extern int ofw_real_mode;
/*
* Map of physical memory regions.
@@ -850,7 +851,7 @@ moea64_late_bootstrap(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernelend
ihandle_t mmui;
phandle_t chosen;
phandle_t mmu;
- size_t sz;
+ ssize_t sz;
int i;
vm_offset_t pa, va;
void *dpcpu;
@@ -861,15 +862,17 @@ moea64_late_bootstrap(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernelend
*/
chosen = OF_finddevice("/chosen");
- if (chosen != -1 && OF_getprop(chosen, "mmu", &mmui, 4) != -1) {
- mmu = OF_instance_to_package(mmui);
- if (mmu == -1 || (sz = OF_getproplen(mmu, "translations")) == -1)
- sz = 0;
- if (sz > 6144 /* tmpstksz - 2 KB headroom */)
- panic("moea64_bootstrap: too many ofw translations");
-
- if (sz > 0)
- moea64_add_ofw_mappings(mmup, mmu, sz);
+ if (!ofw_real_mode && chosen != -1 &&
+ OF_getprop(chosen, "mmu", &mmui, 4) != -1) {
+ mmu = OF_instance_to_package(mmui);
+ if (mmu == -1 ||
+ (sz = OF_getproplen(mmu, "translations")) == -1)
+ sz = 0;
+ if (sz > 6144 /* tmpstksz - 2 KB headroom */)
+ panic("moea64_bootstrap: too many ofw translations");
+
+ if (sz > 0)
+ moea64_add_ofw_mappings(mmup, mmu, sz);
}
/*
OpenPOWER on IntegriCloud