patch "usb: xhci: fix config fail of FS hub behind a HS hub with MTT" added to usb-linus
Subsystems (3)
This is a note to let you know that I've just added the patch titled
usb: xhci: fix config fail of FS hub behind a HS hub with MTT
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
Quoted 1 line
From
096b110a3dd3c868e4610937c80d2e3f3357c1a9Mon Sep 17 00:00:00 2001
From: Chunfeng Yun <[email protected]>
Date: Fri, 4 Dec 2015 15:53:43 +0200
Subject: usb: xhci: fix config fail of FS hub behind a HS hub with MTT
if a full speed hub connects to a high speed hub which supports MTT, the MTT field of its slot context will be set to 1 when xHCI driver setups an xHCI virtual device in xhci_setup_addressable_virt_dev(); once usb core fetch its hub descriptor, and need to update the xHC's internal data structures for the device, the HUB field of its slot context will be set to 1 too, meanwhile MTT is also set before, this will cause configure endpoint command fail, so in the case, we should clear MTT to 0 for full speed hub according to section 6.2.2
--- drivers/usb/host/xhci.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/usb/host/xhci.c +8 -0
@@ -4778,8 +4778,16 @@ int xhci_update_hub_device(struct usb_hcd *hcd, struct usb_device *hdev, ctrl_ctx->add_flags |=cpu_to_le32 (SLOT_FLAG ); slot_ctx =xhci_get_slot_ctx (xhci, config_cmd->in_ctx); slot_ctx->dev_info |=cpu_to_le32 (DEV_HUB ); +/* +* refer to section 6.2.2: MTT should be 0 for full speed hub, +* but it may be already set to 1 when setup an xHCI virtual +* device, so clear it anyway. +*/ if (tt->multi) slot_ctx->dev_info |=cpu_to_le32 (DEV_MTT ); +else if (hdev->speed ==USB_SPEED_FULL ) + slot_ctx->dev_info &=cpu_to_le32 (~DEV_MTT ); +if (xhci->hci_version >0x95 ) { xhci_dbg(xhci, "xHCI version %x needs hub " "TT think time and number of ports\n",
Signature · 1 line
2.6.2