Lines Matching refs:xhci
18 #include "xhci.h"
19 #include "xhci-trace.h"
20 #include "xhci-pci.h"
92 static void xhci_msix_sync_irqs(struct xhci_hcd *xhci)
94 struct usb_hcd *hcd = xhci_to_hcd(xhci);
100 for (i = 0; i < xhci->msix_count; i++)
106 static void xhci_cleanup_msix(struct xhci_hcd *xhci)
108 struct usb_hcd *hcd = xhci_to_hcd(xhci);
118 for (i = 0; i < xhci->msix_count; i++)
119 free_irq(pci_irq_vector(pdev, i), xhci_to_hcd(xhci));
121 free_irq(pci_irq_vector(pdev, 0), xhci_to_hcd(xhci));
131 static int xhci_setup_msi(struct xhci_hcd *xhci)
137 struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller);
141 xhci_dbg_trace(xhci, trace_xhci_dbg_init,
147 0, "xhci_hcd", xhci_to_hcd(xhci));
149 xhci_dbg_trace(xhci, trace_xhci_dbg_init,
160 static int xhci_setup_msix(struct xhci_hcd *xhci)
163 struct usb_hcd *hcd = xhci_to_hcd(xhci);
169 * with max number of interrupters based on the xhci HCSPARAMS1.
173 xhci->msix_count = min(num_online_cpus() + 1,
174 HCS_MAX_INTRS(xhci->hcs_params1));
176 ret = pci_alloc_irq_vectors(pdev, xhci->msix_count, xhci->msix_count,
179 xhci_dbg_trace(xhci, trace_xhci_dbg_init,
184 for (i = 0; i < xhci->msix_count; i++) {
186 "xhci_hcd", xhci_to_hcd(xhci));
195 xhci_dbg_trace(xhci, trace_xhci_dbg_init, "disable MSI-X interrupt");
197 free_irq(pci_irq_vector(pdev, i), xhci_to_hcd(xhci));
204 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
208 pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller);
213 if (xhci->quirks & XHCI_BROKEN_MSI)
221 ret = xhci_setup_msix(xhci);
224 ret = xhci_setup_msi(xhci);
232 xhci_err(xhci, "No msi-x/msi found and no IRQ in BIOS\n");
245 xhci_err(xhci, "request interrupt %d failed\n",
268 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
273 xhci_cleanup_msix(xhci);
277 static int xhci_pci_reinit(struct xhci_hcd *xhci, struct pci_dev *pdev)
287 xhci_dbg(xhci, "MWI active\n");
289 xhci_dbg(xhci, "Finished xhci_pci_reinit\n");
293 static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
303 xhci->quirks |= driver_data->quirks;
312 xhci->quirks |= XHCI_RESET_EP_QUIRK;
313 xhci_dbg_trace(xhci, trace_xhci_dbg_quirks,
318 xhci->quirks |= XHCI_SLOW_SUSPEND;
319 xhci_dbg_trace(xhci, trace_xhci_dbg_quirks,
325 xhci->quirks |= XHCI_BROKEN_STREAMS;
330 xhci->quirks |= XHCI_BROKEN_MSI;
331 xhci_dbg_trace(xhci, trace_xhci_dbg_quirks,
335 xhci->quirks |= XHCI_TRUST_TX_LENGTH;
340 xhci->quirks |= XHCI_BROKEN_STREAMS;
344 xhci->quirks |= XHCI_TRUST_TX_LENGTH;
347 xhci->quirks |= XHCI_NEC_HOST;
349 if (pdev->vendor == PCI_VENDOR_ID_AMD && xhci->hci_version == 0x96)
350 xhci->quirks |= XHCI_AMD_0x96_HOST;
354 xhci->quirks |= XHCI_AMD_PLL_FIX;
361 xhci->quirks |= XHCI_SUSPEND_DELAY;
365 xhci->quirks |= XHCI_SNPS_BROKEN_SUSPEND;
368 xhci->quirks |= XHCI_DISABLE_SPARSE;
369 xhci->quirks |= XHCI_RESET_ON_RESUME;
373 xhci->quirks |= XHCI_TRUST_TX_LENGTH;
380 xhci->quirks |= XHCI_U2_DISABLE_WAKE;
384 xhci->quirks |= XHCI_BROKEN_D3COLD_S2I;
387 xhci->quirks |= XHCI_LPM_SUPPORT;
388 xhci->quirks |= XHCI_INTEL_HOST;
389 xhci->quirks |= XHCI_AVOID_BEI;
393 xhci->quirks |= XHCI_EP_LIMIT_QUIRK;
394 xhci->limit_active_eps = 64;
395 xhci->quirks |= XHCI_SW_BW_CHECKING;
404 xhci->quirks |= XHCI_SPURIOUS_REBOOT;
409 xhci->quirks |= XHCI_SPURIOUS_REBOOT;
410 xhci->quirks |= XHCI_SPURIOUS_WAKEUP;
421 xhci->quirks |= XHCI_PME_STUCK_QUIRK;
425 xhci->quirks |= XHCI_SSIC_PORT_UNUSED;
430 xhci->quirks |= XHCI_INTEL_USB_ROLE_SW;
437 xhci->quirks |= XHCI_MISSING_CAS;
442 xhci->quirks |= XHCI_RESET_TO_DEFAULT;
456 xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW;
460 xhci->quirks |= XHCI_RESET_ON_RESUME;
461 xhci->quirks |= XHCI_TRUST_TX_LENGTH;
462 xhci->quirks |= XHCI_BROKEN_STREAMS;
466 xhci->quirks |= XHCI_TRUST_TX_LENGTH;
467 xhci->quirks |= XHCI_ZERO_64B_REGS;
471 xhci->quirks |= XHCI_RESET_ON_RESUME;
472 xhci->quirks |= XHCI_ZERO_64B_REGS;
475 xhci->quirks |= XHCI_RESET_ON_RESUME;
480 xhci->quirks |= XHCI_BROKEN_STREAMS;
483 xhci->quirks |= XHCI_LPM_SUPPORT;
491 xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
492 xhci->quirks |= XHCI_BROKEN_STREAMS;
496 xhci->quirks |= XHCI_TRUST_TX_LENGTH;
497 xhci->quirks |= XHCI_NO_64BIT_SUPPORT;
503 xhci->quirks |= XHCI_NO_64BIT_SUPPORT;
507 xhci->quirks |= XHCI_ASMEDIA_MODIFY_FLOWCONTROL;
510 xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_7;
515 xhci->quirks |= XHCI_RESET_PLL_ON_DISCONNECT;
520 xhci->quirks |= XHCI_NO_SOFT_RETRY;
523 xhci->quirks |= XHCI_ZHAOXIN_HOST;
524 xhci->quirks |= XHCI_LPM_SUPPORT;
527 xhci->quirks |= XHCI_RESET_ON_RESUME;
528 xhci->quirks |= XHCI_ZHAOXIN_TRB_FETCH;
532 xhci->quirks |= XHCI_ZHAOXIN_TRB_FETCH;
536 if (xhci->hci_version >= 0x120)
537 xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW;
539 if (xhci->quirks & XHCI_RESET_ON_RESUME)
540 xhci_dbg_trace(xhci, trace_xhci_dbg_quirks,
559 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
560 struct xhci_hub *rhub = &xhci->usb3_rhub;
593 struct xhci_hcd *xhci;
597 xhci = hcd_to_xhci(hcd);
598 if (!xhci->sbrn)
599 pci_read_config_byte(pdev, XHCI_SBRN_OFFSET, &xhci->sbrn);
602 xhci->imod_interval = 40000;
611 if (xhci->quirks & XHCI_PME_STUCK_QUIRK)
614 xhci_dbg(xhci, "Got SBRN %u\n", (unsigned int) xhci->sbrn);
617 return xhci_pci_reinit(xhci, pdev);
637 struct xhci_hcd *xhci;
670 xhci = hcd_to_xhci(hcd);
671 xhci->reset = reset;
672 xhci->shared_hcd = usb_create_shared_hcd(&xhci_pci_hc_driver, &dev->dev,
674 if (!xhci->shared_hcd) {
679 retval = xhci_ext_cap_init(xhci);
683 retval = usb_add_hcd(xhci->shared_hcd, dev->irq,
689 if (!(xhci->quirks & XHCI_BROKEN_STREAMS) &&
690 HCC_MAX_PSA(xhci->hcc_params) >= 4)
691 xhci->shared_hcd->can_do_streams = 1;
698 else if (xhci->quirks & XHCI_DEFAULT_PM_RUNTIME_ALLOW)
706 usb_put_hcd(xhci->shared_hcd);
716 struct xhci_hcd *xhci;
718 xhci = hcd_to_xhci(pci_get_drvdata(dev));
720 xhci->xhc_state |= XHCI_STATE_REMOVING;
722 if (xhci->quirks & XHCI_DEFAULT_PM_RUNTIME_ALLOW)
725 if (xhci->shared_hcd) {
726 usb_remove_hcd(xhci->shared_hcd);
727 usb_put_hcd(xhci->shared_hcd);
728 xhci->shared_hcd = NULL;
732 if (xhci->quirks & XHCI_SPURIOUS_WAKEUP)
747 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
753 reg = (void __iomem *) xhci->cap_regs +
782 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
786 reg = (void __iomem *) xhci->cap_regs + 0x80a4;
803 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
811 if (xhci->quirks & XHCI_COMP_MODE_QUIRK)
817 xhci->quirks & (XHCI_BROKEN_D3COLD_S2I))
821 if (xhci->quirks & XHCI_PME_STUCK_QUIRK)
824 if (xhci->quirks & XHCI_SSIC_PORT_UNUSED)
827 if (xhci->quirks & XHCI_DISABLE_SPARSE)
830 ret = xhci_suspend(xhci, do_wakeup);
833 xhci_msix_sync_irqs(xhci);
835 if (ret && (xhci->quirks & XHCI_SSIC_PORT_UNUSED))
843 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
847 reset_control_reset(xhci->reset);
870 if (xhci->quirks & XHCI_SSIC_PORT_UNUSED)
873 if (xhci->quirks & XHCI_PME_STUCK_QUIRK)
876 retval = xhci_resume(xhci, msg);
882 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
898 if (!(xhci->quirks & XHCI_RESET_TO_DEFAULT))
901 for (i = 0; i < HCS_MAX_PORTS(xhci->hcs_params1); i++) {
902 port = &xhci->hw_ports[i];
908 slot_id = xhci_find_slot_id_by_port(port->rhub->hcd, xhci,
910 if (!slot_id || !xhci->devs[slot_id]) {
911 xhci_err(xhci, "No dev for slot_id %d for port %d-%d in U3\n",
916 udev = xhci->devs[slot_id]->udev;
922 xhci_dbg(xhci, "port %d-%d in U3 without wakeup, disable it\n",
933 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
937 xhci_cleanup_msix(xhci);
940 if (xhci->quirks & XHCI_SPURIOUS_WAKEUP)
968 * load firmware, so don't encumber the xhci-pci driver with it.