public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] usb: fix SB700 usb subsystem hang bug
@ 2008-11-14  3:18 Andiry Xu
  2008-11-14  3:27 ` Greg KH
  0 siblings, 1 reply; 2+ messages in thread
From: Andiry Xu @ 2008-11-14  3:18 UTC (permalink / raw)
  To: linux-usb, linux-kernel
  Cc: greg, volker.armin.hemmann, shane.huang, libin.yang, andiry.xu

This patch is required for AMD SB700 south bridge revision A12 and A13 to avoid
USB subsystem hang symptom. The USB subsystem hang symptom is observed when the
system has multiple USB devices connected to it. In some cases a USB hub may be
required to observe this symptom.

This patch works around the problem by correcting the internal register setting
that will help by changing the behavior of the internal logic to avoid the
USB subsystem hang issue. The change in the behavior of the logic does not
impact the normal operation of the USB subsystem.

Signed-off-by: Andiry Xu <andiry.xu@amd.com>
Signed-off-by: Libin Yang <libin.yang@amd.com>

diff -ruN a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
--- a/drivers/usb/host/ehci-pci.c	2008-11-13 23:15:51.000000000 +0800
+++ b/drivers/usb/host/ehci-pci.c	2008-11-13 23:17:01.000000000 +0800
@@ -66,6 +66,8 @@
 {
 	struct ehci_hcd		*ehci = hcd_to_ehci(hcd);
 	struct pci_dev		*pdev = to_pci_dev(hcd->self.controller);
+	struct pci_dev		*p_smbus;
+	u8			rev;
 	u32			temp;
 	int			retval;
 
@@ -166,6 +168,25 @@
 			pci_write_config_byte(pdev, 0x4b, tmp | 0x20);
 		}
 		break;
+	case PCI_VENDOR_ID_ATI:
+		/* SB700 old version has a bug in EHCI controller,
+		 * which causes usb devices lose response in some cases.
+		 */
+		if (pdev->device == 0x4396) {
+			p_smbus = pci_get_device(PCI_VENDOR_ID_ATI,
+						 PCI_DEVICE_ID_ATI_SBX00_SMBUS,
+						 NULL);
+			if (!p_smbus)
+				break;
+			rev = p_smbus->revision;
+			if ((rev == 0x3a) || (rev == 0x3b)) {
+				u8 tmp;
+				pci_read_config_byte(pdev, 0x53, &tmp);
+				pci_write_config_byte(pdev, 0x53, tmp | (1<<3));
+			}
+			pci_dev_put(p_smbus);
+		}
+		break;
 	}
 
 	ehci_reset(ehci);



^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] usb: fix SB700 usb subsystem hang bug
  2008-11-14  3:18 [PATCH] usb: fix SB700 usb subsystem hang bug Andiry Xu
@ 2008-11-14  3:27 ` Greg KH
  0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2008-11-14  3:27 UTC (permalink / raw)
  To: Andiry Xu
  Cc: linux-usb, linux-kernel, volker.armin.hemmann, shane.huang,
	libin.yang

On Fri, Nov 14, 2008 at 11:18:28AM +0800, Andiry Xu wrote:
> This patch is required for AMD SB700 south bridge revision A12 and A13 to avoid
> USB subsystem hang symptom. The USB subsystem hang symptom is observed when the
> system has multiple USB devices connected to it. In some cases a USB hub may be
> required to observe this symptom.
> 
> This patch works around the problem by correcting the internal register setting
> that will help by changing the behavior of the internal logic to avoid the
> USB subsystem hang issue. The change in the behavior of the logic does not
> impact the normal operation of the USB subsystem.
> 
> Signed-off-by: Andiry Xu <andiry.xu@amd.com>
> Signed-off-by: Libin Yang <libin.yang@amd.com>

Care to add the "Reported-by:" and "Tested-by:" lines for the people who
helped bring this to your attention and resend it?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-11-14  3:31 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-14  3:18 [PATCH] usb: fix SB700 usb subsystem hang bug Andiry Xu
2008-11-14  3:27 ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox