This might be good to get into the final 2.6.11 release, now that the NF4 boards are starting to appear.
- Dave
Turns out that a workaround for a different EHCI chip trips up at least one NForce4 board. Neither controller can multiply right. Signed-off-by: David Brownell <[EMAIL PROTECTED]> --- 1.115/drivers/usb/host/ehci-hcd.c 2005-01-12 19:31:18 -08:00 +++ edited/drivers/usb/host/ehci-hcd.c 2005-02-05 11:12:57 -08:00 @@ -421,8 +421,29 @@ temp = HCS_N_CC(ehci->hcs_params) * HCS_N_PCC(ehci->hcs_params); temp &= 0x0f; if (temp && HCS_N_PORTS(ehci->hcs_params) > temp) { - temp |= (ehci->hcs_params & ~0xf); - ehci->hcs_params = temp; + ehci_dbg (ehci, "bogus port configuration: " + "cc=%d x pcc=%d < ports=%d\n", + HCS_N_CC(ehci->hcs_params), + HCS_N_PCC(ehci->hcs_params), + HCS_N_PORTS(ehci->hcs_params)); + +#ifdef CONFIG_PCI + if (hcd->self.controller->bus == &pci_bus_type) { + struct pci_dev *pdev; + + pdev = to_pci_dev(hcd->self.controller); + switch (pdev->vendor) { + case 0x17a0: /* GENESYS */ + /* GL880S: should be PORTS=2 */ + temp |= (ehci->hcs_params & ~0xf); + ehci->hcs_params = temp; + break; + case PCI_VENDOR_ID_NVIDIA: + /* NF4: should be PCC=10 */ + break; + } + } +#endif } /* force HC to halt state */