diff options
author | nwhitehorn <nwhitehorn@FreeBSD.org> | 2015-01-01 22:26:12 +0000 |
---|---|---|
committer | nwhitehorn <nwhitehorn@FreeBSD.org> | 2015-01-01 22:26:12 +0000 |
commit | 96234b61c45d23ce5b18de83324a3e43a3ca97ff (patch) | |
tree | 6c5f48e2a44f107fd2834fe12fced03b5ae9d616 /sys/powerpc/aim | |
parent | dabb40130f55c119eb04d09fd8bd5dbea07a496a (diff) | |
download | FreeBSD-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.c | 23 |
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); } /* |