All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bin Meng <bmeng.cn@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 03/14] usb: xhci: Don't assume LS/FS devices are always behind a HS hub
Date: Mon, 18 Sep 2017 06:40:39 -0700	[thread overview]
Message-ID: <1505742050-5697-4-git-send-email-bmeng.cn@gmail.com> (raw)
In-Reply-To: <1505742050-5697-1-git-send-email-bmeng.cn@gmail.com>

At present xHCI driver assumes LS/FS devices are attached directly
to a HS hub. If they are connected to a LS/FS hub, the driver will
fail to perform the USB enumeration process on such devices.

This is fixed by looking from the device itself all the way up to
the HS hub where the TT that serves the device is located.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
---

 drivers/usb/host/xhci-mem.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index d5eab3a..84982a9 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -786,12 +786,22 @@ void xhci_setup_addressable_virt_dev(struct xhci_ctrl *ctrl,
 #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);
+		struct udevice *parent = udev->dev;
+
+		dev = udev;
+		do {
+			port_num = dev->portnr;
+			dev = dev_get_parent_priv(parent);
+			if (usb_hub_is_root_hub(dev->dev))
+				break;
+			parent = dev->dev->parent;
+		} while (dev->speed != USB_SPEED_HIGH);
+
+		if (!usb_hub_is_root_hub(dev->dev)) {
+			hub = dev_get_uclass_priv(dev->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_PORT(port_num));
 			slot_ctx->tt_info |= cpu_to_le32(TT_SLOT(dev->slot_id));
 		}
 	}
-- 
2.9.2

  parent reply	other threads:[~2017-09-18 13:40 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-18 13:40 [U-Boot] [PATCH 00/14] usb: xhci: Add interrupt transfer support and full speed device support Bin Meng
2017-09-18 13:40 ` [U-Boot] [PATCH 01/14] dm: usb: Fix broken usb_stop() Bin Meng
2017-09-22  4:56   ` Stefan Roese
2017-09-18 13:40 ` [U-Boot] [PATCH 02/14] dm: usb: Remove no longer needed blk_unbind_all() Bin Meng
2017-09-22  4:57   ` Stefan Roese
2017-09-18 13:40 ` Bin Meng [this message]
2017-09-22  4:58   ` [U-Boot] [PATCH 03/14] usb: xhci: Don't assume LS/FS devices are always behind a HS hub Stefan Roese
2017-09-18 13:40 ` [U-Boot] [PATCH 04/14] usb: Handle audio extension endpoint descriptor in usb_parse_config() Bin Meng
2017-09-22  4:59   ` Stefan Roese
2017-09-18 13:40 ` [U-Boot] [PATCH 05/14] usb: xhci: Add interrupt transfer support Bin Meng
2017-09-22  5:00   ` Stefan Roese
2017-09-18 13:40 ` [U-Boot] [PATCH 06/14] usb: Only get 64 bytes device descriptor for full speed devices Bin Meng
2017-09-22  5:01   ` Stefan Roese
2017-09-18 13:40 ` [U-Boot] [PATCH 07/14] usb: Read device descriptor after device is addressed for xHCI Bin Meng
2017-09-22  5:01   ` Stefan Roese
2017-09-18 13:40 ` [U-Boot] [PATCH 08/14] usb: xhci: Fix max packet size for full speed device endpoint 0 Bin Meng
2017-09-22  5:02   ` Stefan Roese
2017-09-18 13:40 ` [U-Boot] [PATCH 09/14] usb: hub: Clear port reset before usb_hub_port_connect_change() Bin Meng
2017-09-22  5:03   ` Stefan Roese
2017-09-18 13:40 ` [U-Boot] [PATCH 10/14] usb: hub: Clear BH reset status change for a 3.0 hub Bin Meng
2017-09-22  5:04   ` Stefan Roese
2017-09-18 13:40 ` [U-Boot] [PATCH 11/14] usb: xhci: Honor endpoint's interval Bin Meng
2017-09-22  5:06   ` Stefan Roese
2017-09-18 13:40 ` [U-Boot] [PATCH 12/14] usb: xhci: Program max burst size for endpoint Bin Meng
2017-09-22  5:11   ` Stefan Roese
2017-09-18 13:40 ` [U-Boot] [PATCH 13/14] usb: xhci: Set 'Error Count' to 0 for isoch endpoints Bin Meng
2017-09-22  5:12   ` Stefan Roese
2017-09-18 13:40 ` [U-Boot] [PATCH 14/14] usb: xhci: Set 'Average TRB Length' to 8 for control endpoints Bin Meng
2017-09-22  5:13   ` Stefan Roese
2017-09-18 15:13 ` [U-Boot] [PATCH 00/14] usb: xhci: Add interrupt transfer support and full speed device support Marek Vasut
2017-09-18 15:26   ` Stefan Roese
2017-09-18 15:33     ` Marek Vasut
2017-09-18 15:38     ` Stefan Roese
2017-09-19  1:38       ` Bin Meng
2017-09-19  4:54         ` Stefan Roese
2017-09-19  4:58           ` Bin Meng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1505742050-5697-4-git-send-email-bmeng.cn@gmail.com \
    --to=bmeng.cn@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.