Hi John,

Sorry re-sending as it was detected as spam before (due to HTML subpart).

I’m not certain if you are the correct person that maintains the 
drivers/usb/dwc2 for Linux kernel 4.14. I noticed that 4.20 is a different 
person.

We are 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 (2 interfaces). The USB will always be configured for USB gadget (and 
never host). At times, we are encountering the kernel warning as seen below. It 
can happen a few times and it may cause our board to reboot. This mostly 
happens when a USB reset occurs and the (HID and mass storage) gadget is in a 
connected state.

Here is my understanding of the issue.

When in connected state and a USB reset has occurred, the irq handler 
dwc2_hstog_irq() will report the disconnection to the individual gadget 
functions (e.g. hid and mass storage). Each hid gadget function (keyboard and 
mouse) will call hidg_disable() and will in turn disable the USB endpoints and 
clear the respective bits in the FIFO map. Each mass storage function will also 
call fsg_disable() and will in turn disable the USB endpoints and clear the 
bits in the FIFO map. The function dwc2_hsotg_core_init_disconnected() will be 
called afterwards and it assumes that all the USB endpoints have been disabled 
already and FIFO map is zeroed out.

What I notice here is that there is a race condition that can happen where the 
mass storage gadget function can be delayed in disabling the USB endpoints 
prior to the call to dwc2_hsotg_core_init_disconnected(), which results to the 
kernel warning message:

[  135.400063] WARNING: CPU: 0 PID: 0 at ../drivers/usb/dwc2/gadget.c:300 
dwc2_hsotg_init_fifo+0x34/0x1b4
[  135.409327] Modules linked in: usb_f_mass_storage usb_f_hid libcomposite
[  135.416020] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.14.44-kx4+ #8
[  135.422433] Hardware name: Altera SOCFPGA
[  135.426450] [<c011107c>] (unwind_backtrace) from [<c010d20c>] 
(show_stack+0x20/0x24)
[  135.434170] [<c010d20c>] (show_stack) from [<c06e7ae8>] 
(dump_stack+0xa4/0xd8)
[  135.441375] [<c06e7ae8>] (dump_stack) from [<c0120910>] (__warn+0xe0/0x110)
[  135.448318] [<c0120910>] (__warn) from [<c0120a10>] 
(warn_slowpath_null+0x30/0x38)
[  135.455866] [<c0120a10>] (warn_slowpath_null) from [<c047a938>] 
(dwc2_hsotg_init_fifo+0x34/0x1b4)
[  135.464714] [<c047a938>] (dwc2_hsotg_init_fifo) from [<c047eafc>] 
(dwc2_hsotg_core_init_disconnected+0xb8/0x4ac)
[  135.474856] [<c047eafc>] (dwc2_hsotg_core_init_disconnected) from 
[<c047eff0>] (dwc2_hsotg_irq.part.4+0x100/0x9a4)
[  135.485168] [<c047eff0>] (dwc2_hsotg_irq.part.4) from [<c047f8c4>] 
(dwc2_hsotg_irq+0x30/0x3c)
[  135.493671] [<c047f8c4>] (dwc2_hsotg_irq) from [<c016f8ec>] 
(__handle_irq_event_percpu+0xb0/0x2bc)
[  135.502602] [<c016f8ec>] (__handle_irq_event_percpu) from [<c016fb24>] 
(handle_irq_event_percpu+0x2c/0x68)
[  135.512223] [<c016fb24>] (handle_irq_event_percpu) from [<c016fbcc>] 
(handle_irq_event+0x6c/0x90)
[  135.521066] [<c016fbcc>] (handle_irq_event) from [<c0173e40>] 
(handle_fasteoi_irq+0xb4/0x158)
[  135.529562] [<c0173e40>] (handle_fasteoi_irq) from [<c016ea6c>] 
(generic_handle_irq+0x28/0x38)
[  135.538145] [<c016ea6c>] (generic_handle_irq) from [<c016f128>] 
(__handle_domain_irq+0x9c/0xc4)
[  135.546815] [<c016f128>] (__handle_domain_irq) from [<c01014fc>] 
(gic_handle_irq+0x5c/0x88)
[  135.555140] [<c01014fc>] (gic_handle_irq) from [<c0703570>] 
(__irq_svc+0x70/0x98)
[  135.562591] Exception stack(0xc0c01f00 to 0xc0c01f48)

I am hoping that you will be able to help me determine a possible solution to 
this kernel warning. I tried to put a delay to the call to 
dwc2_hsotg_core_init_disconnected() in dwc2_hstog_irq() by using a workqueue 
but there are other issues that popped up. I appreciate any help I can get to 
resolve this issue.

Regards,
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.

Reply via email to