NetBSD Problem Report #36654
From martin@duskware.de Mon Jul 16 08:57:38 2007
Return-Path: <martin@duskware.de>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
by narn.NetBSD.org (Postfix) with ESMTP id 3BABF63B96E
for <gnats-bugs@gnats.netbsd.org>; Mon, 16 Jul 2007 08:57:38 +0000 (UTC)
Message-Id: <20070716020604.6329B63B93E@narn.NetBSD.org>
Date: Mon, 16 Jul 2007 02:06:04 +0000 (UTC)
From: djb_netbsd@charter.net
Reply-To: djb_netbsd@charter.net
To: netbsd-bugs-owner@NetBSD.org
Subject: cbb0: Bad Vcc status set at cold boot - ThinkPad 570 / TI PCI1450
X-Send-Pr-Version: www-1.0
>Number: 36654
>Category: kern
>Synopsis: cbb0: Bad Vcc status set at cold boot - ThinkPad 570 / TI PCI1450
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: kern-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Mon Jul 16 09:00:01 +0000 2007
>Originator: Dave Barnes
>Release: 4.99.19 (-current about 5/07/07)
>Organization:
>Environment:
NetBSD 4.99.19 on ThinkPad 570
>Description:
Cardbus interface initially comes up with bad Vcc status if a cardbus card is in either slot when laptop is powered up. See also kern/36652
To clear this error on the TI PCI1450 must set CVS bit in CB_SOCKET_FORCE to clear the error bits BAD_VCC and DATA_LOST, cause a recheck of voltage sense settings and re-enable power control.
>How-To-Repeat:
Insert cardbus card in either slot before turning on ThinkPad 570.
>Fix:
diffs attached fix this problem as well as addressing kern/36652
*******************************************************************
--- dev/pci/pccbb.c.orig 2007-07-15 20:47:51.000000000 -0500
+++ dev/pci/pccbb.c 2007-07-15 20:33:03.000000000 -0500
@@ -1255,6 +1255,10 @@
status = bus_space_read_4(memt, memh, CB_SOCKET_STAT);
osock_ctrl = sock_ctrl = bus_space_read_4(memt, memh, CB_SOCKET_CTRL);
+ if (status & (CB_SOCKET_STAT_BADVCC | CB_SOCKET_STAT_DATALOST)) { /* bad Vcc request or data lost ? */
+ bus_space_write_4(memt, memh, CB_SOCKET_FORCE, CB_SOCKET_FORCE_CVS); /* clear error and force card recheck */
+ }
+
switch (command & CARDBUS_VCCMASK) {
case CARDBUS_VCC_UC:
break;
@@ -1367,8 +1371,9 @@
sock_ctrl &= ~CB_SOCKET_CTRL_VCCMASK;
sock_ctrl &= ~CB_SOCKET_CTRL_VPPMASK;
bus_space_write_4(memt, memh, CB_SOCKET_CTRL, sock_ctrl);
- status &= ~CB_SOCKET_STAT_BADVCC;
- bus_space_write_4(memt, memh, CB_SOCKET_STAT, status);
+
+ bus_space_write_4(memt, memh, CB_SOCKET_FORCE, CB_SOCKET_FORCE_CVS); /* clear error bits and force card recheck */
+
printf("new status 0x%x\n", bus_space_read_4(memt, memh,
CB_SOCKET_STAT));
return 0;
**********************************************************************
--- dev/pci/pccbbreg.h.orig 2007-07-15 20:47:51.000000000 -0500
+++ dev/pci/pccbbreg.h 2007-07-15 20:34:42.000000000 -0500
@@ -226,6 +226,7 @@
#define CB_SOCKET_STAT_YVSOCK 0x80000000 /* Y.Y V Socket */
/* socket force event register (CB_SOCKET_FORCE) elements */
+#define CB_SOCKET_FORCE_CVS 0x4000 /* bit 14 - force voltage sense check and re-enable socket power control */
#define CB_SOCKET_FORCE_BADVCC 0x0200 /* Bad Vcc Request */
(Contact us)
$NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.