aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/xhci.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/host/xhci.c')
-rw-r--r--drivers/usb/host/xhci.c62
1 files changed, 51 insertions, 11 deletions
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 8d45bbde3da4..4549068758f5 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -375,6 +375,21 @@ void xhci_event_ring_work(unsigned long arg)
375} 375}
376#endif 376#endif
377 377
378static int xhci_run_finished(struct xhci_hcd *xhci)
379{
380 if (xhci_start(xhci)) {
381 xhci_halt(xhci);
382 return -ENODEV;
383 }
384 xhci->shared_hcd->state = HC_STATE_RUNNING;
385
386 if (xhci->quirks & XHCI_NEC_HOST)
387 xhci_ring_cmd_db(xhci);
388
389 xhci_dbg(xhci, "Finished xhci_run for USB3 roothub\n");
390 return 0;
391}
392
378/* 393/*
379 * Start the HC after it was halted. 394 * Start the HC after it was halted.
380 * 395 *
@@ -395,7 +410,13 @@ int xhci_run(struct usb_hcd *hcd)
395 struct xhci_hcd *xhci = hcd_to_xhci(hcd); 410 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
396 struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller); 411 struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller);
397 412
413 /* Start the xHCI host controller running only after the USB 2.0 roothub
414 * is setup.
415 */
416
398 hcd->uses_new_polling = 1; 417 hcd->uses_new_polling = 1;
418 if (!usb_hcd_is_primary_hcd(hcd))
419 return xhci_run_finished(xhci);
399 420
400 xhci_dbg(xhci, "xhci_run\n"); 421 xhci_dbg(xhci, "xhci_run\n");
401 /* unregister the legacy interrupt */ 422 /* unregister the legacy interrupt */
@@ -469,16 +490,23 @@ int xhci_run(struct usb_hcd *hcd)
469 xhci_queue_vendor_command(xhci, 0, 0, 0, 490 xhci_queue_vendor_command(xhci, 0, 0, 0,
470 TRB_TYPE(TRB_NEC_GET_FW)); 491 TRB_TYPE(TRB_NEC_GET_FW));
471 492
472 if (xhci_start(xhci)) { 493 xhci_dbg(xhci, "Finished xhci_run for USB2 roothub\n");
473 xhci_halt(xhci); 494 return 0;
474 return -ENODEV; 495}
475 }
476 496
477 if (xhci->quirks & XHCI_NEC_HOST) 497static void xhci_only_stop_hcd(struct usb_hcd *hcd)
478 xhci_ring_cmd_db(xhci); 498{
499 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
479 500
480 xhci_dbg(xhci, "Finished xhci_run\n"); 501 spin_lock_irq(&xhci->lock);
481 return 0; 502 xhci_halt(xhci);
503
504 /* The shared_hcd is going to be deallocated shortly (the USB core only
505 * calls this function when allocation fails in usb_add_hcd(), or
506 * usb_remove_hcd() is called). So we need to unset xHCI's pointer.
507 */
508 xhci->shared_hcd = NULL;
509 spin_unlock_irq(&xhci->lock);
482} 510}
483 511
484/* 512/*
@@ -495,7 +523,15 @@ void xhci_stop(struct usb_hcd *hcd)
495 u32 temp; 523 u32 temp;
496 struct xhci_hcd *xhci = hcd_to_xhci(hcd); 524 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
497 525
526 if (!usb_hcd_is_primary_hcd(hcd)) {
527 xhci_only_stop_hcd(xhci->shared_hcd);
528 return;
529 }
530
498 spin_lock_irq(&xhci->lock); 531 spin_lock_irq(&xhci->lock);
532 /* Make sure the xHC is halted for a USB3 roothub
533 * (xhci_stop() could be called as part of failed init).
534 */
499 xhci_halt(xhci); 535 xhci_halt(xhci);
500 xhci_reset(xhci); 536 xhci_reset(xhci);
501 spin_unlock_irq(&xhci->lock); 537 spin_unlock_irq(&xhci->lock);
@@ -528,6 +564,8 @@ void xhci_stop(struct usb_hcd *hcd)
528 * This is called when the machine is rebooting or halting. We assume that the 564 * This is called when the machine is rebooting or halting. We assume that the
529 * machine will be powered off, and the HC's internal state will be reset. 565 * machine will be powered off, and the HC's internal state will be reset.
530 * Don't bother to free memory. 566 * Don't bother to free memory.
567 *
568 * This will only ever be called with the main usb_hcd (the USB3 roothub).
531 */ 569 */
532void xhci_shutdown(struct usb_hcd *hcd) 570void xhci_shutdown(struct usb_hcd *hcd)
533{ 571{
@@ -694,10 +732,12 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
694 struct usb_hcd *hcd = xhci_to_hcd(xhci); 732 struct usb_hcd *hcd = xhci_to_hcd(xhci);
695 int retval; 733 int retval;
696 734
697 /* Wait a bit if the bus needs to settle from the transistion to 735 /* Wait a bit if either of the roothubs need to settle from the
698 * suspend. 736 * transistion into bus suspend.
699 */ 737 */
700 if (time_before(jiffies, xhci->bus_state[0].next_statechange)) 738 if (time_before(jiffies, xhci->bus_state[0].next_statechange) ||
739 time_before(jiffies,
740 xhci->bus_state[1].next_statechange))
701 msleep(100); 741 msleep(100);
702 742
703 spin_lock_irq(&xhci->lock); 743 spin_lock_irq(&xhci->lock);