[U-Boot] [PATCH] usb: xhci: Limit transfer length in a single TD

Marek Vasut marex at denx.de
Mon Nov 28 13:43:07 CET 2016


On 11/28/2016 07:15 AM, Dongwoo Lee wrote:
> On 11/26/2016 03:25 AM, Marek Vasut wrote:
>> On 11/22/2016 03:42 AM, Dongwoo Lee wrote:
>>> On 2016년 11월 18일 23:01, Marek Vasut wrote:
>>>> On 11/18/2016 08:24 AM, Jaehoon Chung wrote:
>>>>> Hi,
>>>>>
>>>>> Added Marek as USB maintainer.
>>>>>
>>>>> On 11/17/2016 01:21 PM, Dongwoo Lee wrote:
>>>>>> The transfer request exceeding 4032KB (the maximum number of TRBs per
>>>>>> TD * the maximum size of transfer buffer on TRB) fails on xhci host
>>>>>> with timed out error or babble error state. This failure occurs when
>>>>>> accessing large files on USB mass-storage. Currently with xhci as well
>>>>>> as ehci host, the driver requests maximum 30MB (65536 blks * 512 byte)
>>>>>> to storage at once. However, xhci cannot handle this request because
>>>>>> of the reason mentioned above, even though ehci can handle this. Thus,
>>>>>> transfer request larger than this size should be splitted in order to
>>>>>> limit the length of data in a single TD.
>>>>>>
>>>>>> Even though the single request is splitted into multiple requests,
>>>>>> the transfer speed has affected insignificantly in comparison with
>>>>>> ehci host: 22.6 MB/s on ehci and 22.3 MB/s on xhci for 100MB tranfer.
>>>>>
>>>>> I don't have USB knowledge..So i wonder that this is correct way.
>>>>> Have other guys ever seen the similar issue?
>>>>
>>>> Is this a controller limitation ?
>>>>
>>>> btw can you fix your mailer to NOT send HTML email to the list?
>>>>
>>>
>>> If my understanding for xhci spec.(rev. 1.1) 4.9.2 is right, the controller 
>>> has no limitation for transfer size because it can support a very large TRB 
>>> ring with multiple Ring Segments. 
>>>
>>> However, the xhci driver seems not to be implemented for supporting it; 
>>> the TRB ring is comprised of only a single segment. As a result, it cannot 
>>> handle the request exceeding 4032KB (TRB_MAX_BUFF_SIZE(64KB) * 
>>> (TRBS_PER_SEGMENT(64) - link TRB(1)), thus the request should be divided.  
>>
>> Can we update the driver ?
>>
> 
> Yes, I agree. 
> I think also updating driver is more reasonable.
> 
> Though I think it takes some time since I just started xhci, I will
> prepare a patch for enabling multiple ring segments for the driver.

Great, thanks!


-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list