From: Kever Yang <kever.yang@rock-chips.com>
To: Douglas Anderson <dianders@chromium.org>,
John Youn <John.Youn@synopsys.com>,
balbi@ti.com
Cc: william.wu@rock-chips.com, huangtao@rock-chips.com,
heiko@sntech.de, stefan.wahren@i2se.com,
linux-rockchip@lists.infradead.org,
linux-rpi-kernel@lists.infradead.org,
Julius Werner <jwerner@chromium.org>,
gregory.herrero@intel.com, yousaf.kaukab@intel.com,
dinguyen@opensource.altera.com, stern@rowland.harvard.edu,
ming.lei@canonical.com, johnyoun@synopsys.com,
gregkh@linuxfoundation.org, linux-usb@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v6 11/22] usb: dwc2: host: There's not really a TT for the root hub
Date: Sun, 31 Jan 2016 17:25:03 +0800 [thread overview]
Message-ID: <56ADD2EF.9040504@rock-chips.com> (raw)
In-Reply-To: <1454034013-24657-12-git-send-email-dianders@chromium.org>
Doug,
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
Thanks,
- Kever
On 01/29/2016 10:20 AM, Douglas Anderson wrote:
> I find that when I plug a full speed (NOT high speed) hub into a dwc2
> port and then I plug a bunch of devices into that full speed hub that
> dwc2 goes bat guano crazy. Specifically, it just spews errors like this
> in the console:
> usb usb1: clear tt 1 (9043) error -22
>
> The specific test case I used looks like this:
> /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc2/1p, 480M
> |__ Port 1: Dev 17, If 0, Class=Hub, Driver=hub/4p, 12M
> |__ Port 2: Dev 19, If 0, ..., Driver=usbhid, 1.5M
> |__ Port 4: Dev 20, If 0, ..., Driver=usbhid, 12M
> |__ Port 4: Dev 20, If 1, ..., Driver=usbhid, 12M
> |__ Port 4: Dev 20, If 2, ..., Driver=usbhid, 12M
>
> Showing VID/PID:
> Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
> Bus 001 Device 017: ID 03eb:3301 Atmel Corp. at43301 4-Port Hub
> Bus 001 Device 020: ID 045e:0745 Microsoft Corp. Nano Transceiver ...
> Bus 001 Device 019: ID 046d:c404 Logitech, Inc. TrackMan Wheel
>
> I spent a bunch of time trying to figure out why there are errors to
> begin with. I believe that the issue may be a hardware issue where the
> transceiver sometimes accidentally sends a PREAMBLE packet if you send a
> packet to a full speed device right after one to a low speed device.
> Luckily the USB driver retries and the second time things work OK.
>
> In any case, things kinda seem work despite the errors, except for the
> "clear tt" spew mucking up my console. Chalk it up for a win for
> retries and robust protocols.
>
> So getting back to the "clear tt" problem, it appears that we get those
> because there's not actually a TT here to clear. It's my understanding
> that when dwc2 operates in low speed or full speed mode that there's no
> real TT out there. That makes all these attempts to "clear the TT"
> somewhat meaningless and also causes the spew in the log.
>
> Let's just skip all the useless TT clears. Eventually we should root
> cause the errors, but even if we do this is still a proper fix and is
> likely to avoid the "clear tt" error in the future.
>
> Note that hooking up a Full Speed USB Audio Device (Jabra 510) to this
> same hub with the keyboard / trackball shows that even audio works over
> this janky connection. As a point to note, this particular change (skip
> bogus TT clears) compared to just commenting out the dev_err() in
> hub_tt_work() actually produces better audio.
>
> Note: don't ask me where I got a full speed USB hub or whether the
> massive amount of dust that accumulated on it while it was in my junk
> box affected its funtionality. Just smile and nod.
>
> Signed-off-by: Douglas Anderson <dianders@chromium.org>
> ---
> Changes in v6:
> - There's not really a TT for the root hub new for v6
>
> Changes in v5: None
> Changes in v4: None
> Changes in v3: None
> Changes in v2: None
>
> drivers/usb/dwc2/hcd_intr.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/usb/dwc2/hcd_intr.c b/drivers/usb/dwc2/hcd_intr.c
> index 5d25a5ec9736..fe44870f84eb 100644
> --- a/drivers/usb/dwc2/hcd_intr.c
> +++ b/drivers/usb/dwc2/hcd_intr.c
> @@ -87,6 +87,7 @@ static void dwc2_hc_handle_tt_clear(struct dwc2_hsotg *hsotg,
> struct dwc2_host_chan *chan,
> struct dwc2_qtd *qtd)
> {
> + struct usb_device *root_hub = dwc2_hsotg_to_hcd(hsotg)->self.root_hub;
> struct urb *usb_urb;
>
> if (!chan->qh)
> @@ -102,6 +103,15 @@ static void dwc2_hc_handle_tt_clear(struct dwc2_hsotg *hsotg,
> if (!usb_urb || !usb_urb->dev || !usb_urb->dev->tt)
> return;
>
> + /*
> + * The root hub doesn't really have a TT, but Linux thinks it
> + * does because how could you have a "high speed hub" that
> + * directly talks directly to low speed devices without a TT?
> + * It's all lies. Lies, I tell you.
> + */
> + if (usb_urb->dev->tt->hub == root_hub)
> + return;
> +
> if (qtd->urb->status != -EPIPE && qtd->urb->status != -EREMOTEIO) {
> chan->qh->tt_buffer_dirty = 1;
> if (usb_hub_clear_tt_buffer(usb_urb))
next prev parent reply other threads:[~2016-01-31 9:25 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-29 2:19 [PATCH v6 0/22] usb: dwc2: host: Fix and speed up all the stuff, especially with splits Douglas Anderson
2016-01-29 2:19 ` [PATCH v6 01/22] usb: dwc2: rockchip: Make the max_transfer_size automatic Douglas Anderson
2016-01-29 2:19 ` [PATCH v6 02/22] usb: dwc2: host: Get aligned DMA in a more supported way Douglas Anderson
2016-01-29 2:19 ` [PATCH v6 03/22] usb: dwc2: host: Set host_rx_fifo_size to 525 for rk3066 Douglas Anderson
2016-01-29 2:19 ` [PATCH v6 04/22] usb: dwc2: host: Avoid use of chan->qh after qh freed Douglas Anderson
2016-01-29 2:19 ` [PATCH v6 05/22] usb: dwc2: host: Always add to the tail of queues Douglas Anderson
2016-01-29 2:19 ` [PATCH v6 06/22] usb: dwc2: host: fix split transfer schedule sequence Douglas Anderson
2016-01-29 2:19 ` [PATCH v6 07/22] usb: dwc2: host: Add scheduler tracing Douglas Anderson
2016-01-29 2:19 ` [PATCH v6 08/22] usb: dwc2: host: Add a delay before releasing periodic bandwidth Douglas Anderson
2016-01-29 2:20 ` [PATCH v6 09/22] usb: dwc2: host: Giveback URB in tasklet context Douglas Anderson
2016-01-29 2:20 ` [PATCH v6 10/22] usb: dwc2: host: Properly set the HFIR Douglas Anderson
2016-01-31 9:23 ` Kever Yang
2016-01-31 22:19 ` Doug Anderson
2016-02-10 2:08 ` John Youn
2016-01-29 2:20 ` [PATCH v6 11/22] usb: dwc2: host: There's not really a TT for the root hub Douglas Anderson
2016-01-31 9:25 ` Kever Yang [this message]
2016-01-29 2:20 ` [PATCH v6 12/22] usb: dwc2: host: Use periodic interrupt even with DMA Douglas Anderson
2016-01-29 2:20 ` [PATCH v6 13/22] usb: dwc2: host: Rename some fields in struct dwc2_qh Douglas Anderson
2016-01-29 2:20 ` [PATCH v6 14/22] usb: dwc2: host: Reorder things in hcd_queue.c Douglas Anderson
2016-01-29 2:20 ` [PATCH v6 15/22] usb: dwc2: host: Split code out to make dwc2_do_reserve() Douglas Anderson
2016-01-29 2:20 ` [PATCH v6 16/22] usb: dwc2: host: Add scheduler logging for missed SOFs Douglas Anderson
2016-01-29 2:20 ` [PATCH v6 17/22] usb: dwc2: host: Manage frame nums better in scheduler Douglas Anderson
2016-02-03 20:29 ` Doug Anderson
2016-02-09 9:53 ` Herrero, Gregory
2016-01-29 2:20 ` [PATCH v6 18/22] usb: dwc2: host: Schedule periodic right away if it's time Douglas Anderson
2016-01-31 9:36 ` Kever Yang
2016-01-31 22:09 ` Doug Anderson
2016-02-01 3:32 ` Kever Yang
2016-02-01 4:36 ` Doug Anderson
2016-02-02 0:36 ` Doug Anderson
2016-02-02 7:04 ` Kever Yang
2016-02-02 23:28 ` Doug Anderson
2016-01-29 2:20 ` [PATCH v6 19/22] usb: dwc2: host: Add dwc2_hcd_get_future_frame_number() call Douglas Anderson
2016-01-29 2:20 ` [PATCH v6 20/22] usb: dwc2: host: Properly set even/odd frame Douglas Anderson
2016-02-02 7:46 ` Kever Yang
2016-02-02 22:47 ` Doug Anderson
2016-02-03 7:47 ` Kever Yang
2016-01-29 2:20 ` [PATCH v6 21/22] usb: dwc2: host: Totally redo the microframe scheduler Douglas Anderson
2016-01-29 2:20 ` [PATCH v6 22/22] usb: dwc2: host: If using uframe scheduler, end splits better Douglas Anderson
2016-02-02 23:57 ` [PATCH v6 0/22] usb: dwc2: host: Fix and speed up all the stuff, especially with splits John Youn
2016-02-03 18:23 ` Doug Anderson
2016-02-10 2:25 ` John Youn
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=56ADD2EF.9040504@rock-chips.com \
--to=kever.yang@rock-chips.com \
--cc=John.Youn@synopsys.com \
--cc=balbi@ti.com \
--cc=dianders@chromium.org \
--cc=dinguyen@opensource.altera.com \
--cc=gregkh@linuxfoundation.org \
--cc=gregory.herrero@intel.com \
--cc=heiko@sntech.de \
--cc=huangtao@rock-chips.com \
--cc=johnyoun@synopsys.com \
--cc=jwerner@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux-rpi-kernel@lists.infradead.org \
--cc=linux-usb@vger.kernel.org \
--cc=ming.lei@canonical.com \
--cc=stefan.wahren@i2se.com \
--cc=stern@rowland.harvard.edu \
--cc=william.wu@rock-chips.com \
--cc=yousaf.kaukab@intel.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome