Re: Linux xHCI driver problems (reset ep)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Sarah,

>> 2. Clear Halt of EP
>
> Also note that the xHCI hardware will only allow the Reset Endpoint to
> complete if the endpoint was actually halted due to a stall, babble,
> transfer error, etc.  It won't reset the endpoint toggles or sequence
> number at arbitrary points, so we can't reset the endpoint after a new
> alternate interface setting is installed.

I checked the xHCI spec and your guess was correct.  I was seeing the
following message from the xHCI driver:
[57322.699369] xhci_hcd 0000:04:00.0: Endpoint 0x1 not halted,
refusing to reset.

However, it is not obvious from the spec whether the OS driver should
gate the reset endpoint command to the hardware or whether the
hardware can still receive it and choose to ignore it.

I ran this particular test with an Intel xHCI host.  I found that my
Macbook (which also uses an Intel host, I believe) seems to send the
clear halt / reset ep command to the hardware as I clearly see the
sequence number reset.

Furthermore, what is interesting is that when we do
IOCTL_USB_CLEAR_HALT over USBDEVFS on Linux, the
ClearFeature(ENDPOINT_HALT) is still sent to the device over EP0 for
the endpoint in question.  However, the xHCI driver does not reset the
toggle bit (for USB2 device) or sequence number (for USB3 device).
This seems a bit incongruent.

Finally, the Linux EHCI driver (perhaps the spec is different) acts
differently in that both the ClearFeature is sent as well as the
toggle bits are reset.

Our device goes through a software-directed firmware reset which
clears the device-side toggle bits (or sequence numbers).  The
endpoint is not halted though.  Therefore, we want a clean way to
reset the toggle bits (or sequence numbers) on the host without having
to reconnect to the device.  For USB2 (EHCI) we have always related on
ClearFeature(ENDPOINT_HALT).  Do you have any suggestions, or for the
sake of interoperability and consistency, do you think it might be a
good idea to just pass the reset ep command down to the hardware and
let it decide what to do?

Thanks,
Yuliya
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux