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-all mailing list