svn commit: r215067 - head/sys/powerpc/aim
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Tue Nov 9 23:53:48 UTC 2010
Author: nwhitehorn
Date: Tue Nov 9 23:53:47 2010
New Revision: 215067
URL: http://svn.freebsd.org/changeset/base/215067
Log:
Make AIM early-boot code function correctly without Open Firmware.
Modified:
head/sys/powerpc/aim/mmu_oea64.c
head/sys/powerpc/aim/nexus.c
head/sys/powerpc/aim/ofw_machdep.c
Modified: head/sys/powerpc/aim/mmu_oea64.c
==============================================================================
--- head/sys/powerpc/aim/mmu_oea64.c Tue Nov 9 22:32:11 2010 (r215066)
+++ head/sys/powerpc/aim/mmu_oea64.c Tue Nov 9 23:53:47 2010 (r215067)
@@ -274,7 +274,6 @@ static struct mem_region *regions;
static struct mem_region *pregions;
static u_int phys_avail_count;
static int regions_sz, pregions_sz;
-extern int ofw_real_mode;
extern struct pmap ofw_pmap;
@@ -1118,7 +1117,8 @@ moea64_bootstrap(mmu_t mmup, vm_offset_t
* mode.
*/
- if (!ofw_real_mode) {
+ chosen = OF_finddevice("/chosen");
+ if (chosen != -1 && OF_getprop(chosen, "mmu", &mmui, 4) != -1) {
#ifndef __powerpc64__
moea64_pinit(mmup, &ofw_pmap);
@@ -1126,10 +1126,6 @@ moea64_bootstrap(mmu_t mmup, vm_offset_t
ofw_pmap.pm_sr[i] = kernel_pmap->pm_sr[i];
#endif
- if ((chosen = OF_finddevice("/chosen")) == -1)
- panic("moea64_bootstrap: can't find /chosen");
- OF_getprop(chosen, "mmu", &mmui, 4);
-
if ((mmu = OF_instance_to_package(mmui)) == -1)
panic("moea64_bootstrap: can't get mmu package");
if ((sz = OF_getproplen(mmu, "translations")) == -1)
Modified: head/sys/powerpc/aim/nexus.c
==============================================================================
--- head/sys/powerpc/aim/nexus.c Tue Nov 9 22:32:11 2010 (r215066)
+++ head/sys/powerpc/aim/nexus.c Tue Nov 9 23:53:47 2010 (r215067)
@@ -213,9 +213,6 @@ nexus_attach(device_t dev)
struct nexus_softc *sc;
u_long start, end;
- if ((root = OF_peer(0)) == -1)
- panic("nexus_probe: OF_peer failed.");
-
sc = device_get_softc(dev);
start = 0;
@@ -229,6 +226,9 @@ nexus_attach(device_t dev)
rman_manage_region(&sc->sc_rman, start, end))
panic("nexus_probe IRQ rman");
+ if ((root = OF_peer(0)) == 0)
+ return (bus_generic_attach(dev));
+
/*
* Now walk the OFW tree to locate top-level devices
*/
Modified: head/sys/powerpc/aim/ofw_machdep.c
==============================================================================
--- head/sys/powerpc/aim/ofw_machdep.c Tue Nov 9 22:32:11 2010 (r215066)
+++ head/sys/powerpc/aim/ofw_machdep.c Tue Nov 9 23:53:47 2010 (r215067)
@@ -333,6 +333,12 @@ OF_initial_setup(void *fdt_ptr, void *ju
#endif
fdt = fdt_ptr;
+
+ #ifdef FDT_DTB_STATIC
+ /* Check for a statically included blob */
+ if (fdt == NULL)
+ fdt = &fdt_static_dtb;
+ #endif
}
boolean_t
@@ -361,7 +367,7 @@ OF_bootstrap()
* background processes.
*/
ofw_quiesce();
- } else {
+ } else if (fdt != NULL) {
status = OF_install(OFW_FDT, 0);
if (status != TRUE)
More information about the svn-src-head
mailing list