From david-b@pacbell.net Fri Sep  2 19:02:20 2005
From: David Brownell <david-b@pacbell.net>
Subject: USB: EHCI workaround for NForce and mem > 2GB
Date: Fri, 2 Sep 2005 18:58:09 -0700
Cc: Greg KH <greg@kroah.com>, moverby@amd.com
Message-Id: <200509021858.09499.david-b@pacbell.net>

NVidia reports (via Mark Overby) that some of their EHCI controllers
don't like certain data structure addresses beyond the 2GB mark.
He provided an earlier version of this patch.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/usb/host/ehci-hcd.c |   17 +++++++++++++++++
 1 file changed, 17 insertions(+)

--- gregkh-2.6.orig/drivers/usb/host/ehci-hcd.c	2005-09-12 11:01:56.000000000 -0700
+++ gregkh-2.6/drivers/usb/host/ehci-hcd.c	2005-09-12 11:01:56.000000000 -0700
@@ -400,6 +400,23 @@ static int ehci_hc_reset (struct usb_hcd
 				return -EIO;
 			}
 			break;
+		case PCI_VENDOR_ID_NVIDIA:
+			/* NVidia reports that certain chips don't handle
+			 * QH, ITD, or SITD addresses above 2GB.  (But TD,
+			 * data buffer, and periodic schedule are normal.)
+			 */
+			switch (pdev->device) {
+			case 0x003c:	/* MCP04 */
+			case 0x005b:	/* CK804 */
+			case 0x00d8:	/* CK8 */
+			case 0x00e8:	/* CK8S */
+				if (pci_set_consistent_dma_mask(pdev,
+							DMA_31BIT_MASK) < 0)
+					ehci_warn (ehci, "can't enable NVidia "
+						"workaround for >2GB RAM\n");
+				break;
+			}
+			break;
 		}
 
 		/* optional debug port, normally in the first BAR */