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>