svn commit: r208427 - stable/8/sys/powerpc/aim

Nathan Whitehorn nwhitehorn at FreeBSD.org
Sun May 23 02:18:41 UTC 2010


Author: nwhitehorn
Date: Sun May 23 02:18:40 2010
New Revision: 208427
URL: http://svn.freebsd.org/changeset/base/208427

Log:
  MFC r208152,208172:
  
  On PowerMac11,2 and (presumably) PowerMac12,1, we need to quiesce the
  firmware in order to take over control of the SMU. Without doing this,
  the firmware background process doing fan control will run amok as we
  take over the system and crash the management chip.
  
  This is limited to these two machines because our kernel is heavily
  dependent on firmware accesses, and so quiescing firmware can cause
  nasty problems.

Modified:
  stable/8/sys/powerpc/aim/ofw_machdep.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)
  stable/8/sys/geom/sched/   (props changed)

Modified: stable/8/sys/powerpc/aim/ofw_machdep.c
==============================================================================
--- stable/8/sys/powerpc/aim/ofw_machdep.c	Sun May 23 02:16:29 2010	(r208426)
+++ stable/8/sys/powerpc/aim/ofw_machdep.c	Sun May 23 02:18:40 2010	(r208427)
@@ -75,6 +75,7 @@ static int	(*ofwcall)(void *);
 static void	*fdt;
 int		ofw_real_mode;
 
+static void	ofw_quiesce(void);
 static int	openfirmware(void *args);
 
 /*
@@ -291,6 +292,12 @@ OF_bootstrap()
 			return status;
 
 		OF_init(openfirmware);
+
+		/*
+		 * On some machines, we need to quiesce OF to turn off
+		 * background processes.
+		 */
+		ofw_quiesce();
 	} else {
 		status = OF_install(OFW_FDT, 0);
 
@@ -303,6 +310,39 @@ OF_bootstrap()
 	return (status);
 }
 
+static void
+ofw_quiesce(void)
+{
+	phandle_t rootnode;
+	char model[32];
+	struct {
+		cell_t name;
+		cell_t nargs;
+		cell_t nreturns;
+	} args;
+
+	/*
+	 * Only quiesce Open Firmware on PowerMac11,2 and 12,1. It is
+	 * necessary there to shut down a background thread doing fan
+	 * management, and is harmful on other machines.
+	 *
+	 * Note: we don't need to worry about which OF module we are
+	 * using since this is called only from very early boot, within
+	 * OF's boot context.
+	 */
+
+	rootnode = OF_finddevice("/");
+	if (OF_getprop(rootnode, "model", model, sizeof(model)) > 0) {
+		if (strcmp(model, "PowerMac11,2") == 0 ||
+		    strcmp(model, "PowerMac12,1") == 0) {
+			args.name = (cell_t)(uintptr_t)"quiesce";
+			args.nargs = 0;
+			args.nreturns = 0;
+			openfirmware(&args);
+		}
+	}
+}
+
 static int
 openfirmware(void *args)
 {


More information about the svn-src-all mailing list