On Wed, Aug 09, 2023 at 10:44:31AM +0800, Xu Yang wrote: > Some NXP processor using chipidea IP has a bug when frame babble is > detected. > > As per 4.15.1.1.1 Serial Bus Babble: > A babble condition also exists if IN transaction is in progress at > High-speed SOF2 point. This is called frame babble. The host controller > must disable the port to which the frame babble is detected. > > The USB controller has disabled the port (PE cleared) and has asserted > USBERRINT when frame babble is detected, but PEC is not asserted. > Therefore, the SW isn't aware that port has been disabled. Then the > SW keeps sending packets to this port, but all of the transfers will > fail. > > This workaround will firstly assert PCD by SW when USBERRINT is detected > and then judge whether port change has really occurred or not by polling > roothub status. Because the PEC doesn't get asserted in our case, this > patch will also assert it by SW when specific conditions are satisfied. > > Signed-off-by: Xu Yang <xu.yang_2@xxxxxxx> > > --- > Changes in v2: > - fix typo in commit message > - Adjust the judgement logic in echi_irq() as suggested from Alan > --- Reviewed-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>