Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Dec 2008 04:43:25 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r185622 - head/sys/dev/pccbb
Message-ID:  <200812050443.mB54hPs8043288@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812050443.mB54hPs8043288>