linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
To: Alan Stern <stern@rowland.harvard.edu>,
	Michael Olbrich <m.olbrich@pengutronix.de>
Cc: Thinh Nguyen <Thinh.Nguyen@synopsys.com>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	Felipe Balbi <balbi@kernel.org>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"kernel@pengutronix.de" <kernel@pengutronix.de>
Subject: Re: [PATCH 2/2] usb: dwc3: gadget: restart the transfer if a isoc request is queued too late
Date: Wed, 13 Nov 2019 19:14:59 +0000	[thread overview]
Message-ID: <587b0adf-b71d-6fde-407b-46089ed5d695@synopsys.com> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1911131036340.1558-100000@iolanthe.rowland.org>

Hi Michael,

Alan Stern wrote:
> On Wed, 13 Nov 2019, Michael Olbrich wrote:
>
>> On Wed, Nov 13, 2019 at 03:55:01AM +0000, Thinh Nguyen wrote:
>>> Michael Olbrich wrote:
>>>> Currently, most gadget drivers handle isoc transfers on a best effort
>>>> bases: If the request queue runs empty, then there will simply be gaps in
>>>> the isoc data stream.
>>>>
>>>> The UVC gadget depends on this behaviour. It simply provides new requests
>>>> when video frames are available and assumes that they are sent as soon as
>>>> possible.
>>>>
>>>> The dwc3 gadget currently works differently: It assumes that there is a
>>>> contiguous stream of requests without any gaps. If a request is too late,
>>>> then it is dropped by the hardware.
>>>> For the UVC gadget this means that a live stream stops after the first
>>>> frame because all following requests are late.
>>> Can you explain little more how UVC gadget fails?
>>> dwc3 controller expects a steady stream of data otherwise it will result
>>> in missed_isoc status, and it should be fine as long as new requests are
>>> queued. The controller doesn't just drop the request unless there's some
>>> other failure.
>> UVC (with a live stream) does not fill the complete bandwidth of an
>> isochronous endpoint. Let's assume for the example that one video frame
>> fills 3 requests. Because it is a live stream, there will be a gap between
>> video frames. This is unavoidable, especially for compressed video. So the
>> UVC gadget will have requests for the frame numbers 1 2 3 5 6 7 9 10 11 13 14
>> 15 and so on.
>> The dwc3 hardware tries to send those with frame numbers 1 2 3 4 5 6 7 8 9
>> 10 11 12. So except for the fist few requests, all are late and result in a
>> missed_isoc. I tried to just ignore the missed_isoc but that did not work
>> for me. I only received the first frame at the other end.
>> Maybe I missing something here, i don't have access to the hardware
>> documentation, so I can only guess from the existing driver.

The reason I asked is because your patch doesn't seem to address the 
actual issue.

For the 2 checks you do here
1. There are currently no requests queued in the hardware
2. The current frame number provided by DSTS does not match the frame
     number returned by the last transfer.

For #1, it's already done in the dwc3 driver. (check 
dwc3_gadget_endpoint_transfer_in_progress())
For #2, it's unlikely that DSTS current frame number will match with the 
XferNotReady's frame number. So this check doesn't mean much.

So I'm still wondering how does this patch help resolve your issue.

> How about changing the gadget driver instead?  For frames where the UVC
> gadget knows no video frame data is available (numbers 4, 8, 12, and so
> on in the example above), queue a zero-length request.  Then there
> won't be any gaps in the isochronous packet stream.
>
> Alan Stern

What Alan suggests may work. Have you tried this?

BR,
Thinh

  reply	other threads:[~2019-11-13 19:15 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-11 15:26 [PATCH 0/2] usb: dwc3: gadget: improve isoc handling Michael Olbrich
2019-11-11 15:26 ` [PATCH 1/2] usb: dwc3: gadget: make starting isoc transfers more robust Michael Olbrich
2019-11-12 20:41   ` kbuild test robot
2019-11-13  3:55   ` Thinh Nguyen
2019-11-13  8:02     ` Michael Olbrich
2019-11-13 19:40       ` Thinh Nguyen
2019-11-11 15:26 ` [PATCH 2/2] usb: dwc3: gadget: restart the transfer if a isoc request is queued too late Michael Olbrich
2019-11-13  3:55   ` Thinh Nguyen
2019-11-13  7:53     ` Michael Olbrich
2019-11-13 15:39       ` Alan Stern
2019-11-13 19:14         ` Thinh Nguyen [this message]
2019-11-14 12:14           ` Michael Olbrich
2019-11-14 20:11             ` Thinh Nguyen
2019-11-15 21:06               ` Alan Stern
2019-11-28 11:36                 ` Michael Olbrich
2019-11-28 17:59                   ` Alan Stern
2019-12-02 15:41                     ` Michael Olbrich
2019-12-02 17:02                       ` Alan Stern
2020-04-09  7:59               ` Michael Grzeschik
2020-04-10  1:09                 ` Thinh Nguyen
2020-04-10 22:03                   ` Michael Grzeschik
2020-04-11  0:59                     ` Thinh Nguyen
2020-04-21  6:51                       ` Michael Grzeschik
2020-04-21 23:41                         ` Thinh Nguyen

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=587b0adf-b71d-6fde-407b-46089ed5d695@synopsys.com \
    --to=thinh.nguyen@synopsys.com \
    --cc=balbi@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=kernel@pengutronix.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=m.olbrich@pengutronix.de \
    --cc=stern@rowland.harvard.edu \
    /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).