usb: dwc2 continuously receiving BNA interrupts on ep0

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

 



Hi Minas and John,

I'm hoping that one of you can help me devise a fix to a system hang issue caused by BNA interrupts on USB Endpoint 0.

Our system is using an Altera Cyclone V SoC FPGA on our board with linux kernel 4.14.44 and enabling the USB gadget for HID (keyboard and mouse) and mass storage (either 1 or 2 interfaces). The USB will always be configured for USB gadget (and never host).

On a specific case when enumerating the USB gadget, dwc2 will continuously trigger a BNA interrupts on DPOEPINT0. As a result, it will hang our system and will trigger a watchdog reset. If the watchdog timer is disabled, the system hangs for about 5 to 7 seconds and will get out of the hang after a USB Reset has occur, which will then fix the USB re-enumeration.

The USB gadget is configured in the following order:
- USB mass storage interface 0
- USB HID keyboard
- USB HID mouse

If the order is USB HID keyboard, USB HID mouse, and USB mass storage interface 0, the issue will not be encountered.

On first USB enumeration of the USB gadget as described above where mass storage interface is enumerated first prior to HID, it will work fine. A copy of a file to a Windows 10 PC will be initiated. The copy will be abruptly interrupted and our system will re-configure the USB gadget to be re-enumerated with only the USB HID available (i.e., no more USB mass storage). On the next USB enumeration where USB mass storage is again enabled, the problem will be encountered.

The problem occurs after the following USB requests:
1. After all the Get Descriptor requests for ep0
2. Get Max LUN request for ep0
3. SCSI Inquiry (Lun 0, Page 0)
4. SCSI Inquiry (Lun 0, Page 0)
5. SCSI Inquiry (Lun 0, Page 128)
6. Set Idle on ep0 interface 0 <-- hangs here due to BNA interrupts on DPOEPINT0

Would you guys know how to clear the BNA interrupt for DPOEPINT0? The dwc2_hsotg_epint() function only handles the BNA interrupt if the transfer is isochronous. Thus, in our case, it will never gets cleared. I could not find how to clear this properly on the Altera Cyclone V Technical Reference Manual. I am hoping that you guys would know.

For now, once this issue happens on ep0, I just disable the BNA interrupt on dwc2_hsotg_epint. It prevents the system hang but it still halts the USB enumeration for a few seconds until the USB reset occurs. I prefer to resolve it without any hang in the USB enumeration.

Thanks in advance,
Maynard


________________________________

Ce message, ainsi que tous les fichiers joints à ce message, peuvent contenir des informations sensibles et/ ou confidentielles ne devant pas être divulguées. Si vous n'êtes pas le destinataire de ce message (ou que vous recevez ce message par erreur), nous vous remercions de le notifier immédiatement à son expéditeur, et de détruire ce message. Toute copie, divulgation, modification, utilisation ou diffusion, non autorisée, directe ou indirecte, de tout ou partie de ce message, est strictement interdite.


This e-mail, and any document attached hereby, may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorized, direct or indirect, copying, disclosure, distribution or other use of the material or parts thereof is strictly forbidden.




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

  Powered by Linux