svn commit: r212277 - in user/nwhitehorn/ps3: dev/ofw powerpc/aim powerpc/ps3

Nathan Whitehorn nwhitehorn at FreeBSD.org
Mon Sep 6 23:05:39 UTC 2010


Author: nwhitehorn
Date: Mon Sep  6 23:05:38 2010
New Revision: 212277
URL: http://svn.freebsd.org/changeset/base/212277

Log:
  Set the Data Address Breakpoint Register to throw exceptions on NULL
  pointer dereferences. Fix two that appeared related to FDT.

Modified:
  user/nwhitehorn/ps3/dev/ofw/ofw_fdt.c
  user/nwhitehorn/ps3/powerpc/aim/nexus.c
  user/nwhitehorn/ps3/powerpc/ps3/platform_ps3.c

Modified: user/nwhitehorn/ps3/dev/ofw/ofw_fdt.c
==============================================================================
--- user/nwhitehorn/ps3/dev/ofw/ofw_fdt.c	Mon Sep  6 22:59:58 2010	(r212276)
+++ user/nwhitehorn/ps3/dev/ofw/ofw_fdt.c	Mon Sep  6 23:05:38 2010	(r212277)
@@ -95,6 +95,7 @@ OFW_DEF(ofw_fdt);
 
 static void *fdtp = NULL;
 
+extern int pmap_bootstrapped;
 static int
 ofw_fdt_init(ofw_t ofw, void *data)
 {
@@ -138,6 +139,9 @@ ofw_fdt_peer(ofw_t ofw, phandle_t node)
 	phandle_t p;
 	int depth, offset;
 
+	if (fdtp == NULL)
+		return (-1);
+
 	if (node == 0) {
 		/* Find root node */
 		offset = fdt_path_offset(fdtp, "/");
@@ -382,6 +386,9 @@ ofw_fdt_finddevice(ofw_t ofw, const char
 	phandle_t p;
 	int offset;
 
+	if (fdtp == NULL)
+		return (-1);
+
 	offset = fdt_path_offset(fdtp, device);
 
 	p = (phandle_t)(uintptr_t)fdt_offset_ptr(fdtp, offset, sizeof(p));

Modified: user/nwhitehorn/ps3/powerpc/aim/nexus.c
==============================================================================
--- user/nwhitehorn/ps3/powerpc/aim/nexus.c	Mon Sep  6 22:59:58 2010	(r212276)
+++ user/nwhitehorn/ps3/powerpc/aim/nexus.c	Mon Sep  6 23:05:38 2010	(r212277)
@@ -211,9 +211,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;
@@ -227,6 +224,10 @@ nexus_attach(device_t dev)
 	    rman_manage_region(&sc->sc_rman, start, end))
 		panic("nexus_probe IRQ rman");
 
+	if ((root = OF_peer(0)) == -1)
+		return (bus_generic_attach(dev));
+
+		
 	/*
 	 * Now walk the OFW tree to locate top-level devices
 	 */

Modified: user/nwhitehorn/ps3/powerpc/ps3/platform_ps3.c
==============================================================================
--- user/nwhitehorn/ps3/powerpc/ps3/platform_ps3.c	Mon Sep  6 22:59:58 2010	(r212276)
+++ user/nwhitehorn/ps3/powerpc/ps3/platform_ps3.c	Mon Sep  6 23:05:38 2010	(r212277)
@@ -156,6 +156,9 @@ ps3_attach(platform_t plat)
 	pmap_mmu_install("mmu_ps3", BUS_PROBE_SPECIFIC);
 	cpu_idle_hook = ps3_cpu_idle;
 
+	/* Set a breakpoint to make NULL an invalid address */
+	lv1_set_dabr(0x7 /* read and write, MMU on */, 2 /* kernel accesses */);
+
 	return (0);
 }
 


More information about the svn-src-user mailing list