|
@@ -200,6 +200,26 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+ /* optional debug port, normally in the first BAR */
|
|
|
+ temp = pci_find_capability(pdev, PCI_CAP_ID_DBG);
|
|
|
+ if (temp) {
|
|
|
+ pci_read_config_dword(pdev, temp, &temp);
|
|
|
+ temp >>= 16;
|
|
|
+ if (((temp >> 13) & 7) == 1) {
|
|
|
+ u32 hcs_params = ehci_readl(ehci,
|
|
|
+ &ehci->caps->hcs_params);
|
|
|
+
|
|
|
+ temp &= 0x1fff;
|
|
|
+ ehci->debug = hcd->regs + temp;
|
|
|
+ temp = ehci_readl(ehci, &ehci->debug->control);
|
|
|
+ ehci_info(ehci, "debug port %d%s\n",
|
|
|
+ HCS_DEBUG_PORT(hcs_params),
|
|
|
+ (temp & DBGP_ENABLED) ? " IN USE" : "");
|
|
|
+ if (!(temp & DBGP_ENABLED))
|
|
|
+ ehci->debug = NULL;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
retval = ehci_setup(hcd);
|
|
|
if (retval)
|
|
|
return retval;
|
|
@@ -228,25 +248,6 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- /* optional debug port, normally in the first BAR */
|
|
|
- temp = pci_find_capability(pdev, 0x0a);
|
|
|
- if (temp) {
|
|
|
- pci_read_config_dword(pdev, temp, &temp);
|
|
|
- temp >>= 16;
|
|
|
- if ((temp & (3 << 13)) == (1 << 13)) {
|
|
|
- temp &= 0x1fff;
|
|
|
- ehci->debug = hcd->regs + temp;
|
|
|
- temp = ehci_readl(ehci, &ehci->debug->control);
|
|
|
- ehci_info(ehci, "debug port %d%s\n",
|
|
|
- HCS_DEBUG_PORT(ehci->hcs_params),
|
|
|
- (temp & DBGP_ENABLED)
|
|
|
- ? " IN USE"
|
|
|
- : "");
|
|
|
- if (!(temp & DBGP_ENABLED))
|
|
|
- ehci->debug = NULL;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/* at least the Genesys GL880S needs fixup here */
|
|
|
temp = HCS_N_CC(ehci->hcs_params) * HCS_N_PCC(ehci->hcs_params);
|
|
|
temp &= 0x0f;
|