svn commit: r185622 - head/sys/dev/pccbb

Warner Losh imp at FreeBSD.org
Thu Dec 4 20:43:26 PST 2008


Author: imp
Date: Fri Dec  5 04:43:25 2008
New Revision: 185622
URL: http://svn.freebsd.org/changeset/base/185622

Log:
  Implement a method described in NetBSD PR 36652 for coping with the
  BAD VCC bit.

Modified:
  head/sys/dev/pccbb/pccbb.c

Modified: head/sys/dev/pccbb/pccbb.c
==============================================================================
--- head/sys/dev/pccbb/pccbb.c	Fri Dec  5 00:01:34 2008	(r185621)
+++ head/sys/dev/pccbb/pccbb.c	Fri Dec  5 04:43:25 2008	(r185622)
@@ -837,7 +837,18 @@ cbb_power(device_t brdev, int volts)
 	}
 	if (status & CBB_STATE_BAD_VCC_REQ) {
 		device_printf(sc->dev, "Bad Vcc requested\n");	
-		/* XXX Do we want to do something to mitigate things here? */
+		/*
+		 * Turn off the power, and try again.  Retrigger other
+		 * active interrupts via force register.  From NetBSD
+		 * PR 36652, coded by me to description there.
+		 */
+		sock_ctrl &= ~CBB_SOCKET_CTRL_VCCMASK;
+		sock_ctrl &= ~CBB_SOCKET_CTRL_VPPMASK;
+		cbb_set(sc, CBB_SOCKET_CONTROL, sock_ctrl);
+		status &= ~CBB_STATE_BAD_VCC_REQ;
+		status &= ~CBB_STATE_DATA_LOST;
+		status |= CBB_FORCE_CV_TEST;
+		cbb_set(sc, CBB_SOCKET_FORCE, status);
 		goto done;
 	}
 	if (sc->chipset == CB_TOPIC97) {


More information about the svn-src-head mailing list