Hi Balbi and other USB developers.

I am developing camera devices based on Xilinx ZynqMP, using the gadget 
framework and the build-in dwc3 core of the ZynqMP as USB3 controller and the 
build-in Cirrus SERDES as phy.
Testing with a number of hosts and Windows 7, has shown sporadic reconnects 
when leaving U2/U1, caused by failing link training, where the host resets the 
bus. Sometime it also means it reconnect via USB2.

So to overcome this, I will like to have the option for disabling U1/U2 on the 
core when working with those hosts.

Currently I have made a hack in ep0.c  where I return EINVAL in 
dwc3_ep0_handle_u1 and dwc3_ep0_handle_u2 together with not setting 
DWC3_DCTL_ACCEPTU1ENA and DWC3_DCTL_ACCEPTU2ENA in dwc3_ep0_set_config
Will though prefer a solution possible to upstream, so was thinking about 
adding two devicetree bindings.

* snps,u1_disable_as_gadget: When set the core will not enable U1 if requested 
from host, nor initiate U1.
* snps,u2_disable_as_gadget: When set the core will not enable U2 if requested 
from host, nor initiate U2.

If you think this might be something which can be upstreamed I will prepare the 
code and send a patch for discussion.
On the other hand, if you think that disabling U1/U2 via device tree as 
suggested should not be a feature no need for me to try making it a feature.

Kind regards / Med venlig hilsen 

Claus Stovgaard 
Firmware Design Engineer 
Phase One

Reply via email to