[Bug?] Control Transfers in xHCI

Kohji Okuno okuno.kohji at jp.panasonic.com
Mon Feb 2 01:06:29 UTC 2015


From: Hans Petter Selasky <hps at selasky.org>
Subject: Re: [Bug?] Control Transfers in xHCI
Date: Thu, 29 Jan 2015 21:00:04 +0100
> On 01/29/15 20:57, Chagin Dmitry wrote:
>> On Thu, Jan 29, 2015 at 04:04:03PM +0100, Hans Petter Selasky wrote:
>>> On 01/29/15 13:25, Kohji Okuno wrote:
>>>> Hi HPS,
>>>>
>>>> I found a bug in xHCI device driver.
>>>>
>>>> Acording to extensible-host-controler-interface-usb-xhci.pdf:"3.2.9
>>>> Control Transfers"...
>>>>
>>>> A Data Stage TD consists of a Data Stage TRB followed by zero or more
>>>> Normal TRBs. If the data is not physically contiguous, Normal TRBs may
>>>> be chained to the Data Stage TRB.
>>>>
>>>>
>>>> But, in the current imprementation, when two or more TRBs are needed,
>>>> the device driver set XHCI_TRB_TYPE_DATA_STAGE to all TRBs.
>>>> This is the violation of the spec.
>>>>
>>>> In my minor xHCI, I encountered strange bubble error in a control
>>>> transfer. After I changed as the following, I succeeded its control
>>>> transfer.
>>>>
>>>> Would you check the following (****)?
>>>>
>>>
>>> Hi Kohji,
>>>
>>> You are correct there is a bug, but your patch is not correct.
>>>
>>> In FreeBSD we allow SETUP and DATA stages to be done as separate jobs.
>>> That means at the entry of creating a new DATA chain, we need to check
>>> if it is there first DATA packet or not.
>>>
>>> Can you test the attached patch and see if it works for you?
>>>
>> patch is lost somewhere, Hans.
>>
> 
> Trying again.
> 
> I think Kohji got it.

Hi HPS,

usbd_control_transfer_did_data() has a bug, I think.
I got the following error. And, the kernel failed to detect a device.

usbd_setup_device_desc: getting device descriptor at addr 1 failed, USB_ERR_TIM\
EOUT

In this time, the values for judgement were
`xfer->flags_int.control_rem = 0' and `UGETW(req.wLength) = 18'

Best regards,
 Kohji Okuno


More information about the freebsd-usb mailing list