lkml.org 
[lkml]   [2014]   [Dec]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRE: query on DWC3
Date
> From: linux-usb-owner@vger.kernel.org [mailto:linux-usb-owner@vger.kernel.org] On Behalf Of sundeep subbaraya
> Sent: Friday, December 12, 2014 9:13 PM
>
> Hi Felipe,
>
> In DWC3 driver, for three stage Control OUT transfer there is a check:
>
> else if (!IS_ALIGNED(req->request.length, dep->endpoint.maxpacket)
>
> && (dep->number == 0)) {.
> }
>
> I understand that we check for alignment of sizes and if not we
> prepare trb with maxpacket and enable interrupt on short packet. In
> databook I could not find anything related to this, it talks only
> about addresses should be aligned. In Control transfer programming
> model there is no difference between Control OUT or IN transfer, if
> three stage transfer - prepare trb with length wLength. Initially I
> followed this and not able to receive data on EP0 OUT.:( .After adding
> the above check it is working. Please help me to understand why we do
> this?

Hi Sundeep,

Please see section 8.2.3.3 "Buffer Size Rules and Zero-Length Packets"
in the databook:

For OUT endpoints, the following rules apply:

- The total size of a Buffer Descriptor must be a multiple of
MaxPacketSize

The wording may be a little confusing, it actually means that the size
of the data buffer for OUT endpoints must be a multiple of MaxPacketSize.
Section 8.2.5 states it more clearly:

- An OUT transfer’s transfer size (Total TRB buffer allocation)
must be a multiple of MaxPacketSize even if software is expecting
a fixed non-multiple of MaxPacketSize transfer from the Host.

This rule applies to all OUT endpoint types, including Control endpoints.

--
Paul

\
 
 \ /
  Last update: 2014-12-14 01:21    [W:0.820 / U:0.068 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site