lkml.org 
[lkml]   [2017]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.13 062/160] usb: pci-quirks.c: Corrected timeout values used in handshake
    Date
    4.13-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jim Dickerson <jim.dickerson@hpe.com>

    commit 114ec3a6f9096d211a4aff4277793ba969a62c73 upstream.

    Servers were emitting failed handoff messages but were not
    waiting the full 1 second as designated in section 4.22.1 of
    the eXtensible Host Controller Interface specifications. The
    handshake was using wrong units so calls were made with milliseconds
    not microseconds. Comments referenced 5 seconds not 1 second as
    in specs.

    The wrong units were also corrected in a second handshake call.

    Signed-off-by: Jim Dickerson <jim.dickerson@hpe.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/host/pci-quirks.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    --- a/drivers/usb/host/pci-quirks.c
    +++ b/drivers/usb/host/pci-quirks.c
    @@ -1022,7 +1022,7 @@ EXPORT_SYMBOL_GPL(usb_disable_xhci_ports
    *
    * Takes care of the handoff between the Pre-OS (i.e. BIOS) and the OS.
    * It signals to the BIOS that the OS wants control of the host controller,
    - * and then waits 5 seconds for the BIOS to hand over control.
    + * and then waits 1 second for the BIOS to hand over control.
    * If we timeout, assume the BIOS is broken and take control anyway.
    */
    static void quirk_usb_handoff_xhci(struct pci_dev *pdev)
    @@ -1069,9 +1069,9 @@ static void quirk_usb_handoff_xhci(struc
    if (val & XHCI_HC_BIOS_OWNED) {
    writel(val | XHCI_HC_OS_OWNED, base + ext_cap_offset);

    - /* Wait for 5 seconds with 10 microsecond polling interval */
    + /* Wait for 1 second with 10 microsecond polling interval */
    timeout = handshake(base + ext_cap_offset, XHCI_HC_BIOS_OWNED,
    - 0, 5000, 10);
    + 0, 1000000, 10);

    /* Assume a buggy BIOS and take HC ownership anyway */
    if (timeout) {
    @@ -1100,7 +1100,7 @@ hc_init:
    * operational or runtime registers. Wait 5 seconds and no more.
    */
    timeout = handshake(op_reg_base + XHCI_STS_OFFSET, XHCI_STS_CNR, 0,
    - 5000, 10);
    + 5000000, 10);
    /* Assume a buggy HC and start HC initialization anyway */
    if (timeout) {
    val = readl(op_reg_base + XHCI_STS_OFFSET);

    \
     
     \ /
      Last update: 2017-10-10 22:32    [W:4.059 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site