* Patch "xhci: set missing SuperSpeedPlus Link Protocol bit in roothub descriptor" has been added to the 4.13-stable tree
@ 2017-10-09 12:03 gregkh
0 siblings, 0 replies; only message in thread
From: gregkh @ 2017-10-09 12:03 UTC (permalink / raw)
To: mathias.nyman, gregkh; +Cc: stable, stable-commits
This is a note to let you know that I've just added the patch titled
xhci: set missing SuperSpeedPlus Link Protocol bit in roothub descriptor
to the 4.13-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
xhci-set-missing-superspeedplus-link-protocol-bit-in-roothub-descriptor.patch
and it can be found in the queue-4.13 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.
>From 7bea22b124d77845c85a62eaa29a85ba6cc2f899 Mon Sep 17 00:00:00 2001
From: Mathias Nyman <mathias.nyman@linux.intel.com>
Date: Mon, 18 Sep 2017 17:39:18 +0300
Subject: xhci: set missing SuperSpeedPlus Link Protocol bit in roothub descriptor
From: Mathias Nyman <mathias.nyman@linux.intel.com>
commit 7bea22b124d77845c85a62eaa29a85ba6cc2f899 upstream.
A SuperSpeedPlus roothub needs to have the Link Protocol (LP) bit set in
the bmSublinkSpeedAttr[] entry of a SuperSpeedPlus descriptor.
If the xhci controller has an optional Protocol Speed ID (PSI) table then
that will be used as a base to create the roothub SuperSpeedPlus
descriptor.
The PSI table does not however necessary contain the LP bit so we need
to set it manually.
Check the psi speed and set LP bit if speed is 10Gbps or higher.
We're not setting it for 5 to 10Gbps as USB 3.1 specification always
mention SuperSpeedPlus for 10Gbps or higher, and some SSIC USB 3.0 speeds
can be over 5Gbps, such as SSIC-G3B-L1 at 5830 Mbps
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/host/xhci-hub.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
--- a/drivers/usb/host/xhci-hub.c
+++ b/drivers/usb/host/xhci-hub.c
@@ -112,7 +112,7 @@ static int xhci_create_usb3_bos_desc(str
/* If PSI table exists, add the custom speed attributes from it */
if (usb3_1 && xhci->usb3_rhub.psi_count) {
- u32 ssp_cap_base, bm_attrib, psi;
+ u32 ssp_cap_base, bm_attrib, psi, psi_mant, psi_exp;
int offset;
ssp_cap_base = USB_DT_BOS_SIZE + USB_DT_USB_SS_CAP_SIZE;
@@ -139,6 +139,15 @@ static int xhci_create_usb3_bos_desc(str
for (i = 0; i < xhci->usb3_rhub.psi_count; i++) {
psi = xhci->usb3_rhub.psi[i];
psi &= ~USB_SSP_SUBLINK_SPEED_RSVD;
+ psi_exp = XHCI_EXT_PORT_PSIE(psi);
+ psi_mant = XHCI_EXT_PORT_PSIM(psi);
+
+ /* Shift to Gbps and set SSP Link BIT(14) if 10Gpbs */
+ for (; psi_exp < 3; psi_exp++)
+ psi_mant /= 1000;
+ if (psi_mant >= 10)
+ psi |= BIT(14);
+
if ((psi & PLT_MASK) == PLT_SYM) {
/* Symmetric, create SSA RX and TX from one PSI entry */
put_unaligned_le32(psi, &buf[offset]);
Patches currently in stable-queue which might be from mathias.nyman@linux.intel.com are
queue-4.13/usb-xhci-free-the-right-ring-in-xhci_add_endpoint.patch
queue-4.13/xhci-fix-finding-correct-bus_state-structure-for-usb-3.1-hosts.patch
queue-4.13/revert-xhci-limit-usb2-port-wake-support-for-amd-promontory-hosts.patch
queue-4.13/xhci-set-missing-superspeedplus-link-protocol-bit-in-roothub-descriptor.patch
queue-4.13/usb-host-xhci-plat-allow-sysdev-to-inherit-from-acpi.patch
queue-4.13/usb-pci-quirks.c-corrected-timeout-values-used-in-handshake.patch
queue-4.13/xhci-fix-wrong-endpoint-esit-value-shown-in-tracing.patch
queue-4.13/xhci-fix-sleeping-with-spin_lock_irq-held-in-asmedia-1042a-workaround.patch
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2017-10-09 12:05 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-09 12:03 Patch "xhci: set missing SuperSpeedPlus Link Protocol bit in roothub descriptor" has been added to the 4.13-stable tree gregkh
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.