diff options
author | Jim Dickerson <jim.dickerson@hpe.com> | 2017-09-18 10:39:14 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-09-18 11:10:41 -0400 |
commit | 114ec3a6f9096d211a4aff4277793ba969a62c73 (patch) | |
tree | ea108e6e74f16bd5ed5e335b0a61c0c2ced6e5be | |
parent | 5a838a13c9b4e5dd188b7a6eaeb894e9358ead0c (diff) |
usb: pci-quirks.c: Corrected timeout values used in handshake
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.
Cc: <stable@vger.kernel.org>
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>
-rw-r--r-- | drivers/usb/host/pci-quirks.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c index 658d9d1f9ea3..e02dbb1e1cdd 100644 --- 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); | |||
1022 | * | 1022 | * |
1023 | * Takes care of the handoff between the Pre-OS (i.e. BIOS) and the OS. | 1023 | * Takes care of the handoff between the Pre-OS (i.e. BIOS) and the OS. |
1024 | * It signals to the BIOS that the OS wants control of the host controller, | 1024 | * It signals to the BIOS that the OS wants control of the host controller, |
1025 | * and then waits 5 seconds for the BIOS to hand over control. | 1025 | * and then waits 1 second for the BIOS to hand over control. |
1026 | * If we timeout, assume the BIOS is broken and take control anyway. | 1026 | * If we timeout, assume the BIOS is broken and take control anyway. |
1027 | */ | 1027 | */ |
1028 | static void quirk_usb_handoff_xhci(struct pci_dev *pdev) | 1028 | static void quirk_usb_handoff_xhci(struct pci_dev *pdev) |
@@ -1069,9 +1069,9 @@ static void quirk_usb_handoff_xhci(struct pci_dev *pdev) | |||
1069 | if (val & XHCI_HC_BIOS_OWNED) { | 1069 | if (val & XHCI_HC_BIOS_OWNED) { |
1070 | writel(val | XHCI_HC_OS_OWNED, base + ext_cap_offset); | 1070 | writel(val | XHCI_HC_OS_OWNED, base + ext_cap_offset); |
1071 | 1071 | ||
1072 | /* Wait for 5 seconds with 10 microsecond polling interval */ | 1072 | /* Wait for 1 second with 10 microsecond polling interval */ |
1073 | timeout = handshake(base + ext_cap_offset, XHCI_HC_BIOS_OWNED, | 1073 | timeout = handshake(base + ext_cap_offset, XHCI_HC_BIOS_OWNED, |
1074 | 0, 5000, 10); | 1074 | 0, 1000000, 10); |
1075 | 1075 | ||
1076 | /* Assume a buggy BIOS and take HC ownership anyway */ | 1076 | /* Assume a buggy BIOS and take HC ownership anyway */ |
1077 | if (timeout) { | 1077 | if (timeout) { |
@@ -1100,7 +1100,7 @@ hc_init: | |||
1100 | * operational or runtime registers. Wait 5 seconds and no more. | 1100 | * operational or runtime registers. Wait 5 seconds and no more. |
1101 | */ | 1101 | */ |
1102 | timeout = handshake(op_reg_base + XHCI_STS_OFFSET, XHCI_STS_CNR, 0, | 1102 | timeout = handshake(op_reg_base + XHCI_STS_OFFSET, XHCI_STS_CNR, 0, |
1103 | 5000, 10); | 1103 | 5000000, 10); |
1104 | /* Assume a buggy HC and start HC initialization anyway */ | 1104 | /* Assume a buggy HC and start HC initialization anyway */ |
1105 | if (timeout) { | 1105 | if (timeout) { |
1106 | val = readl(op_reg_base + XHCI_STS_OFFSET); | 1106 | val = readl(op_reg_base + XHCI_STS_OFFSET); |