1. 24 6月, 2020 1 次提交
  2. 15 5月, 2020 1 次提交
  3. 21 4月, 2020 1 次提交
  4. 16 4月, 2020 1 次提交
  5. 13 3月, 2020 2 次提交
  6. 24 2月, 2020 1 次提交
  7. 13 2月, 2020 2 次提交
  8. 10 2月, 2020 1 次提交
  9. 11 12月, 2019 1 次提交
  10. 16 11月, 2019 1 次提交
  11. 03 9月, 2019 1 次提交
  12. 25 7月, 2019 1 次提交
  13. 19 6月, 2019 1 次提交
    • M
      usb: xhci: Don't try to recover an endpoint if port is in error state. · b8c3b718
      Mathias Nyman 提交于
      A USB3 device needs to be reset and re-enumarated if the port it
      connects to goes to a error state, with link state inactive.
      
      There is no use in trying to recover failed transactions by resetting
      endpoints at this stage. Tests show that in rare cases, after multiple
      endpoint resets of a roothub port the whole host controller might stop
      completely.
      
      Several retries to recover from transaction error can happen as
      it can take a long time before the hub thread discovers the USB3
      port error and inactive link.
      
      We can't reliably detect the port error from slot or endpoint context
      due to a limitation in xhci, see xhci specs section 4.8.3:
      "There are several cases where the EP State field in the Output
      Endpoint Context may not reflect the current state of an endpoint"
      and
      "Software should maintain an accurate value for EP State, by tracking it
      with an internal variable that is driven by Events and Doorbell accesses"
      
      Same appears to be true for slot state.
      
      set a flag to the corresponding slot if a USB3 roothub port link goes
      inactive to prevent both queueing new URBs and resetting endpoints.
      Reported-by: NRapolu Chiranjeevi <chiranjeevi.rapolu@intel.com>
      Tested-by: NRapolu Chiranjeevi <chiranjeevi.rapolu@intel.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NMathias Nyman <mathias.nyman@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b8c3b718
  14. 05 6月, 2019 1 次提交
    • J
      usb: xhci: Add Clear_TT_Buffer · ef513be0
      Jim Lin 提交于
      USB 2.0 specification chapter 11.17.5 says "as part of endpoint halt
      processing for full-/low-speed endpoints connected via a TT, the host
      software must use the Clear_TT_Buffer request to the TT to ensure
      that the buffer is not in the busy state".
      
      In our case, a full-speed speaker (ConferenceCam) is behind a high-
      speed hub (ConferenceCam Connect), sometimes once we get STALL on a
      request we may continue to get STALL with the folllowing requests,
      like Set_Interface.
      
      Here we invoke usb_hub_clear_tt_buffer() to send Clear_TT_Buffer
      request to the hub of the device for the following Set_Interface
      requests to the device to get ACK successfully.
      Signed-off-by: NJim Lin <jilin@nvidia.com>
      Acked-by: NMathias Nyman <mathias.nyman@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ef513be0
  15. 22 5月, 2019 1 次提交
  16. 27 4月, 2019 2 次提交
  17. 23 3月, 2019 1 次提交
    • M
      xhci: Don't let USB3 ports stuck in polling state prevent suspend · d92f2c59
      Mathias Nyman 提交于
      Commit 2f31a67f ("usb: xhci: Prevent bus suspend if a port connect
      change or polling state is detected") was intended to prevent ports that
      were still link training from being forced to U3 suspend state mid
      enumeration.
      This solved enumeration issues for devices with slow link training.
      
      Turns out some devices are stuck in the link training/polling state,
      and thus that patch will prevent suspend completely for these devices.
      This is seen with USB3 card readers in some MacBooks.
      
      Instead of preventing suspend, give some time to complete the link
      training. On successful training the port will end up as connected
      and enabled.
      If port instead is stuck in link training the bus suspend will continue
      suspending after 360ms (10 * 36ms) timeout (tPollingLFPSTimeout).
      
      Original patch was sent to stable, this one should go there as well
      
      Fixes: 2f31a67f ("usb: xhci: Prevent bus suspend if a port connect change or polling state is detected")
      Cc: stable@vger.kernel.org
      Signed-off-by: NMathias Nyman <mathias.nyman@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d92f2c59
  18. 17 12月, 2018 1 次提交
  19. 07 12月, 2018 3 次提交
  20. 06 12月, 2018 1 次提交
  21. 10 11月, 2018 2 次提交
  22. 28 9月, 2018 2 次提交
  23. 25 6月, 2018 2 次提交
    • A
      USB: xhci-hcd: Add get_resuming_ports method · 8f9cc83c
      Alan Stern 提交于
      This patch adds support for the new get_resuming_ports HCD method to
      the xhci-hcd driver.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Acked-by: NMathias Nyman <mathias.nyman@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8f9cc83c
    • M
      xhci: Fix perceived dead host due to runtime suspend race with event handler · 229bc19f
      Mathias Nyman 提交于
      Don't rely on event interrupt (EINT) bit alone to detect pending port
      change in resume. If no change event is detected the host may be suspended
      again, oterwise roothubs are resumed.
      
      There is a lag in xHC setting EINT. If we don't notice the pending change
      in resume, and the controller is runtime suspeded again, it causes the
      event handler to assume host is dead as it will fail to read xHC registers
      once PCI puts the controller to D3 state.
      
      [  268.520969] xhci_hcd: xhci_resume: starting port polling.
      [  268.520985] xhci_hcd: xhci_hub_status_data: stopping port polling.
      [  268.521030] xhci_hcd: xhci_suspend: stopping port polling.
      [  268.521040] xhci_hcd: // Setting command ring address to 0x349bd001
      [  268.521139] xhci_hcd: Port Status Change Event for port 3
      [  268.521149] xhci_hcd: resume root hub
      [  268.521163] xhci_hcd: port resume event for port 3
      [  268.521168] xhci_hcd: xHC is not running.
      [  268.521174] xhci_hcd: handle_port_status: starting port polling.
      [  268.596322] xhci_hcd: xhci_hc_died: xHCI host controller not responding, assume dead
      
      The EINT lag is described in a additional note in xhci specs 4.19.2:
      
      "Due to internal xHC scheduling and system delays, there will be a lag
      between a change bit being set and the Port Status Change Event that it
      generated being written to the Event Ring. If SW reads the PORTSC and
      sees a change bit set, there is no guarantee that the corresponding Port
      Status Change Event has already been written into the Event Ring."
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NMathias Nyman <mathias.nyman@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      229bc19f
  24. 01 6月, 2018 2 次提交
  25. 25 5月, 2018 5 次提交
  26. 22 4月, 2018 1 次提交
  27. 20 4月, 2018 1 次提交