From: Bin Liu <b-liu@ti.com>
To: Paul Elder <paul.elder@ideasonboard.com>
Cc: laurent.pinchart@ideasonboard.com,
kieran.bingham@ideasonboard.com, drinkcat@chromium.org,
balbi@kernel.org, gregkh@linuxfoundation.org,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [v3] usb: gadget: musb: fix short isoc packets with inventra dma
Date: Wed, 16 Jan 2019 09:33:22 -0600 [thread overview]
Message-ID: <20190116153322.GG18026@uda0271908> (raw)
On Tue, Jan 15, 2019 at 07:01:45PM -0500, Paul Elder wrote:
> Handling short packets (length < max packet size) in the Inventra DMA
> engine in the MUSB driver causes the MUSB DMA controller to hang. An
> example of a problem that is caused by this problem is when streaming
> video out of a UVC gadget, only the first video frame is transferred.
>
> For short packets (mode-0 or mode-1 DMA), MUSB_TXCSR_TXPKTRDY must be
> set manually by the driver. This was previously done in musb_g_tx
> (musb_gadget.c), but incorrectly (all csr flags were cleared, and only
> MUSB_TXCSR_MODE and MUSB_TXCSR_TXPKTRDY were set). Fixing that problem
> allows some requests to be transferred correctly, but multiple requests
> were often put together in one USB packet, and caused problems if the
> packet size was not a multiple of 4. Instead, set MUSB_TXCSR_TXPKTRDY
> in dma_controller_irq (musbhsdma.c), just like host mode transfers.
>
> This topic was originally tackled by Nicolas Boichat [0] [1] and is
> discussed further at [2] as part of his GSoC project [3].
>
> [0] https://groups.google.com/forum/?hl=en#!topic/beagleboard-gsoc/k8Azwfp75CU
> [1] https://gitorious.org/beagleboard-usbsniffer/beagleboard-usbsniffer-kernel/commit/b0be3b6cc195ba732189b04f1d43ec843c3e54c9?p=beagleboard-usbsniffer:beagleboard-usbsniffer-kernel.git;a=patch;h=b0be3b6cc195ba732189b04f1d43ec843c3e54c9
> [2] http://beagleboard-usbsniffer.blogspot.com/2010/07/musb-isochronous-transfers-fixed.html
> [3] http://elinux.org/BeagleBoard/GSoC/USBSniffer
>
> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> ---
> Changes in v3:
>
> - remove unnecessary chunk for sending short packet
>
> Changes in v2:
>
> - no more flushing FIFO
> - greatly simplified short packet if guard in musb_g_tx, and removed
> unnecessary variables
> - minor indentation and wording changes
> drivers/usb/musb/musb_gadget.c | 13 +------------
> drivers/usb/musb/musbhsdma.c | 21 +++++++++++----------
> 2 files changed, 12 insertions(+), 22 deletions(-)
Applied. Thanks.
Regards,
-Bin.
WARNING: multiple messages have this Message-ID (diff)
From: Bin Liu <b-liu@ti.com>
To: Paul Elder <paul.elder@ideasonboard.com>
Cc: <laurent.pinchart@ideasonboard.com>,
<kieran.bingham@ideasonboard.com>, <drinkcat@chromium.org>,
<balbi@kernel.org>, <gregkh@linuxfoundation.org>,
<linux-usb@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3] usb: gadget: musb: fix short isoc packets with inventra dma
Date: Wed, 16 Jan 2019 09:33:22 -0600 [thread overview]
Message-ID: <20190116153322.GG18026@uda0271908> (raw)
In-Reply-To: <20190116000145.5816-1-paul.elder@ideasonboard.com>
On Tue, Jan 15, 2019 at 07:01:45PM -0500, Paul Elder wrote:
> Handling short packets (length < max packet size) in the Inventra DMA
> engine in the MUSB driver causes the MUSB DMA controller to hang. An
> example of a problem that is caused by this problem is when streaming
> video out of a UVC gadget, only the first video frame is transferred.
>
> For short packets (mode-0 or mode-1 DMA), MUSB_TXCSR_TXPKTRDY must be
> set manually by the driver. This was previously done in musb_g_tx
> (musb_gadget.c), but incorrectly (all csr flags were cleared, and only
> MUSB_TXCSR_MODE and MUSB_TXCSR_TXPKTRDY were set). Fixing that problem
> allows some requests to be transferred correctly, but multiple requests
> were often put together in one USB packet, and caused problems if the
> packet size was not a multiple of 4. Instead, set MUSB_TXCSR_TXPKTRDY
> in dma_controller_irq (musbhsdma.c), just like host mode transfers.
>
> This topic was originally tackled by Nicolas Boichat [0] [1] and is
> discussed further at [2] as part of his GSoC project [3].
>
> [0] https://groups.google.com/forum/?hl=en#!topic/beagleboard-gsoc/k8Azwfp75CU
> [1] https://gitorious.org/beagleboard-usbsniffer/beagleboard-usbsniffer-kernel/commit/b0be3b6cc195ba732189b04f1d43ec843c3e54c9?p=beagleboard-usbsniffer:beagleboard-usbsniffer-kernel.git;a=patch;h=b0be3b6cc195ba732189b04f1d43ec843c3e54c9
> [2] http://beagleboard-usbsniffer.blogspot.com/2010/07/musb-isochronous-transfers-fixed.html
> [3] http://elinux.org/BeagleBoard/GSoC/USBSniffer
>
> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> ---
> Changes in v3:
>
> - remove unnecessary chunk for sending short packet
>
> Changes in v2:
>
> - no more flushing FIFO
> - greatly simplified short packet if guard in musb_g_tx, and removed
> unnecessary variables
> - minor indentation and wording changes
> drivers/usb/musb/musb_gadget.c | 13 +------------
> drivers/usb/musb/musbhsdma.c | 21 +++++++++++----------
> 2 files changed, 12 insertions(+), 22 deletions(-)
Applied. Thanks.
Regards,
-Bin.
next reply other threads:[~2019-01-16 15:33 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-16 15:33 Bin Liu [this message]
2019-01-16 15:33 ` [PATCH v3] usb: gadget: musb: fix short isoc packets with inventra dma Bin Liu
-- strict thread matches above, loose matches on Subject: below --
2019-01-16 0:01 [v3] " Paul Elder
2019-01-16 0:01 ` [PATCH v3] " Paul Elder
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=20190116153322.GG18026@uda0271908 \
--to=b-liu@ti.com \
--cc=balbi@kernel.org \
--cc=drinkcat@chromium.org \
--cc=gregkh@linuxfoundation.org \
--cc=kieran.bingham@ideasonboard.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=paul.elder@ideasonboard.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 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.