linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sebastian von Ohr <vonohr@smaract.com>
To: "felipe.balbi@linux.intel.com" <felipe.balbi@linux.intel.com>
Cc: "linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>
Subject: [BUG REPORT] usb: dwc3: Timeouts with USB 2.0 LPM active
Date: Mon, 3 May 2021 13:12:04 +0000	[thread overview]
Message-ID: <c9b5559a05f5459d92e3c704772edb46@smaract.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 2157 bytes --]

I'm running an Intel Apollo Lake SoM (Celeron N3350E) which I want to use as 
a USB gadget with the functionFS gadget driver. I have created two bulk 
endpoints for sending and receiving data. The hardware and cabling is only USB 
2.0 capable. In one test case the receive side of the SoM is slowed down 
deliberately (200ms sleep between reads) while the host PC tries to send as 
fast as possible. This setup leads to send timeouts on every second 
transmission on the host PC.

I believe this is an issue with the USB 2.0 LPM feature, more specifically 
hardware LPM done by the host USB controller. I have tested different USB 
descriptors and the issue is gone when removing the USB_LPM_SUPPORT flag from 
the USB 2.0 extension descriptor (actually removing only USB_BESL_SUPPORT seems 
to suffice). Also the issue occurs only on some newer PCs and adding a hub 
(doesn't matter if 2.0 or 3.0 capable) makes the issue go away. I can 
reproduce this issue with a Windows 10 (1909) host running an Intel B360 
chipset. I use libusb v1.0.24 with the WinUSB driver on the host side to send 
data on the bulk endpoint.

See the attached dwc3 trace and registers. It was created using the current 
5.12.1 kernel version. It shows multiple WakeUp [U0] events in short succession 
but never any event showing different link states than U0. The host is doing 8 
transmissions of 16 bytes to the device, but the device only receives 4 of 
these transmissions. The first transmissions always succeeds while the next one 
will timeout on the host. I believe this is because the device is currently not 
ready to receive new data. But instead of sending the data when the delay on 
the receive side is over the request never finishes and times out after 1 
second (or even longer when I increase the timeout value).

Is the USB 2.0 LPM extension even supposed to work with the dwc3 controller? I 
can work around this issue currently by downgrading the device to USB 2.0 only 
(setting bcdUSB to 0x0200). But I believe USB 3.0 capable device must support 
LPM, so this issue might come up again when having USB 3.0 capable hardware.

[-- Attachment #2: dwc3_trace.tar.gz --]
[-- Type: application/x-gzip, Size: 15279 bytes --]

             reply	other threads:[~2021-05-03 13:17 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-03 13:12 Sebastian von Ohr [this message]
2021-05-03 13:52 ` [BUG REPORT] usb: dwc3: Timeouts with USB 2.0 LPM active Felipe Balbi
2021-05-03 14:15   ` Sebastian von Ohr
2021-05-04  6:28     ` Felipe Balbi
2021-05-04  9:47       ` Sebastian von Ohr
2021-05-05 12:37         ` Felipe Balbi
2021-05-12  9:28           ` Sebastian von Ohr
2021-05-05  8:02   ` Mathias Nyman

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=c9b5559a05f5459d92e3c704772edb46@smaract.com \
    --to=vonohr@smaract.com \
    --cc=felipe.balbi@linux.intel.com \
    --cc=linux-usb@vger.kernel.org \
    /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;
as well as URLs for NNTP newsgroup(s).