lkml.org 
[lkml]   [2020]   [Apr]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 155/168] xhci: prevent bus suspend if a roothub port detected a over-current condition
    Date
    From: Mathias Nyman <mathias.nyman@linux.intel.com>

    commit e9fb08d617bfae5471d902112667d0eeb9dee3c4 upstream.

    Suspending the bus and host controller while a port is in a over-current
    condition may halt the host.
    Also keep the roothub running if over-current is active.

    Cc: <stable@vger.kernel.org>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20200421140822.28233-3-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/host/xhci-hub.c | 9 +++++++++
    1 file changed, 9 insertions(+)

    --- a/drivers/usb/host/xhci-hub.c
    +++ b/drivers/usb/host/xhci-hub.c
    @@ -1569,6 +1569,8 @@ int xhci_hub_status_data(struct usb_hcd
    }
    if ((temp & PORT_RC))
    reset_change = true;
    + if (temp & PORT_OC)
    + status = 1;
    }
    if (!status && !reset_change) {
    xhci_dbg(xhci, "%s: stopping port polling.\n", __func__);
    @@ -1634,6 +1636,13 @@ retry:
    port_index);
    goto retry;
    }
    + /* bail out if port detected a over-current condition */
    + if (t1 & PORT_OC) {
    + bus_state->bus_suspended = 0;
    + spin_unlock_irqrestore(&xhci->lock, flags);
    + xhci_dbg(xhci, "Bus suspend bailout, port over-current detected\n");
    + return -EBUSY;
    + }
    /* suspend ports in U0, or bail out for new connect changes */
    if ((t1 & PORT_PE) && (t1 & PORT_PLS_MASK) == XDEV_U0) {
    if ((t1 & PORT_CSC) && wake_enabled) {

    \
     
     \ /
      Last update: 2020-04-28 20:44    [W:4.281 / U:0.156 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site