usb: xhci: Enable TT to support LS/FS devices behind a HS hub
So far LS/FS devices directly attached to xHC root port can be successfully enumerated by xHCI driver, but if they are connected behind a hub, the enumeration process fails to address the device. It turns out xHCI driver still misses a part that in the device's input slot context, all Transaction Translator (TT) related fields are not programmed. The xHCI spec defines how to enable TT. Now LS/FS devices like USB keyboard/mouse can be enumerated behind a high speed hub. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
196ef8323c
commit
78e3098752
@ -783,6 +783,20 @@ void xhci_setup_addressable_virt_dev(struct xhci_ctrl *ctrl,
|
||||
BUG();
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DM_USB
|
||||
/* Set up TT fields to support FS/LS devices */
|
||||
if (speed == USB_SPEED_LOW || speed == USB_SPEED_FULL) {
|
||||
dev = dev_get_parent_priv(udev->dev);
|
||||
if (dev->speed == USB_SPEED_HIGH) {
|
||||
hub = dev_get_uclass_priv(udev->dev);
|
||||
if (hub->tt.multi)
|
||||
slot_ctx->dev_info |= cpu_to_le32(DEV_MTT);
|
||||
slot_ctx->tt_info |= cpu_to_le32(TT_PORT(udev->portnr));
|
||||
slot_ctx->tt_info |= cpu_to_le32(TT_SLOT(dev->slot_id));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
port_num = hop_portnr;
|
||||
debug("port_num = %d\n", port_num);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user