Hi Maynard,

On 1/22/2019 11:00 PM, Maynard CABIENTE wrote:
> Hi Minas,
> 
> I have one more issue on the dwc2 gadget driver that I can't figure out the 
> root cause. Hopefully, you have an idea on this problem.
> 
> 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).
> 
> When 2 mass storage interfaces are enabled, at times the data that should be 
> written to the USB endpoint is going to the wrong USB endpoint. As a 
> consequence, USB reset will occur. Unfortunately, the USB reset will not fix 
> the issue. Instead, another incorrect USB endpoint issue will trigger 
> followed by USB reset, etc.
> 
> For example, the following configuration was used.
> Interface 0: ep1in ep1out: usb mass storage
> Interface 1: ep2in ep2out: usb mass storage
> Interface 2: ep3in ep3out: usb HID (keyboard)
> Interface 3: ep4in ep4out: usb HID (mouse)
> Interface 4: ep5in ep5out: usb HID (mouse)
> 
> During usb enumeration, the following usb mass storage requests have been 
> sent by the USB Host Controller:
> - Test Unit Ready: ep2, interface 1 (Time 23.918 523 050 from USB Ellisys 
> Analyzer)
>      + Command Transport (CBW) with dCBWSignature 43425355h and dCBWTag 
> 00000002h
>      + Data Transport with 128 bytes (but this is actually 128 bytes data for 
> Mode Sense ep1)
> - Mode Sense: ep1, interface 0 (Time 23.918 564 900 from USB Ellisys Analyzer)
>      + Command Transport (CBW) with dCBWSignature 43425355h, dCBWTag 
> 00000005h, and dCBWDataTransferLength of 128 bytes
>      + Data Transport with 13 bytes (but this is actually a Status 
> Transport/CSW for Test Unit Ready ep2 with dCSWSignature 53425355h and 
> dCSWTag 00000002h)
> 
> The Test Unit Ready request for usb endpoint 2 should only have CBW followed 
> by CSW (no Data). Mode Sense request for usb endpoint 1 should have CBW, 
> Data, CSW. What happens in this case is that the CSW for Test Unit Ready was 
> sent to ep1 instead of ep2 and the Data for Mode Sense was sent to ep2 
> instead of ep1. After these requests, a USB reset will happen.
> 
> I verified that both usb data were sent to the correct USB endpoints in 
> driver/usb/gadget/function/f_mass_storage.c. I also verified that both usb 
> data were sent to the correct USB endpoints in driver/usb/dwc2/gadget.c.
> 
> Here is a snippet of debugging messages in driver/usb/dwc2/gadget.c and 
> driver/usb/gadget/function/f_mass_storage.c
> 
> [  368.961681] dwc2 ffb40000.usb: dwc2_hsotg_ep_queue: [req ce571940] ep2out: 
> 512@ce064000, noi=0, zero=0, snok=0 (CBW for ep2)
> [  368.962850] dwc2 ffb40000.usb: dwc2_hsotg_ep_queue: [req ce60a380] ep1out: 
> 512@ce188000, noi=0, zero=0, snok=0 (CBW for ep1)
> [  368.964183] configfs-gadget gadget: do_scsi_command: [intf1 ep2] TEST UNIT 
> READY tag 00000002
> [  368.964198] dwc2 ffb40000.usb: dwc2_hsotg_ep_queue: [req ce5719c0] ep2in: 
> 13@ce064000, noi=0, zero=0, snok=0 (CSW for Test Unit Ready ep2)
> [  368.964212] dwc2 ffb40000.usb: dwc2_hsotg_start_req: DxEPCTL=0x01c88200, 
> ep 2, dir in TAG 00000002 (start request to send CSW for Test Unit Ready ep2)
> [  368.964228] dwc2 ffb40000.usb: dwc2_hsotg_ep_queue: [req ce571d00] ep2out: 
> 512@ce518000, noi=0, zero=0, snok=0 (new CBW for ep2)
> [  368.964256] dwc2 ffb40000.usb: dwc2_hsotg_complete_in: ep2in: 
> req->length:13 req->actual:13 req->zero:0 (completed sending CSW for Test 
> Unit Ready ep2)
> [  368.964288] dwc2 ffb40000.usb: dwc2_hsotg_ep_queue: [req ce60a900] ep1in: 
> 128@ce188000, noi=0, zero=0, snok=0 (Data for Mode Sense ep1)
> [  368.964305] dwc2 ffb40000.usb: dwc2_hsotg_ep_queue: [req ce60a640] ep1in: 
> 13@cef30000, noi=0, zero=0, snok=0 (CSW for Mode Sense ep1)
> [  368.964329] dwc2 ffb40000.usb: dwc2_hsotg_complete_in: ep1in: 
> req->length:128 req->actual:128 req->zero:0 (completed sending Data for Mode 
> Sense ep1)
> [  368.964342] dwc2 ffb40000.usb: dwc2_hsotg_start_req: DxEPCTL=0x01c98200, 
> ep 1, dir in TAG 00000005 (start request to send CSW for Mode Sense ep1)
> [  368.964362] dwc2 ffb40000.usb: dwc2_hsotg_complete_in: ep1in: 
> req->length:13 req->actual:13 req->zero:0 (completed sending CSW for Mode 
> Sense ep1)
> [  368.964378] dwc2 ffb40000.usb: dwc2_hsotg_ep_queue: [req ce60a380] ep1out: 
> 512@ce188000, noi=0, zero=0, snok=0 (new CBW for ep1)
> [  368.967886] configfs-gadget gadget: End Point Request ERROR: -108  <-- 
> ERROR DUE TO USB DATA TRANSMITTED TO INCORRECT USB EP
> [  368.977085] dwc2 ffb40000.usb: [req cf7e7400] ep0: 8@cec81ad0, noi=0, 
> zero=0, snok=0     <-- USB RESET OCCURRED
> [  369.019382] dwc2 ffb40000.usb: new device is high-speed
> 

Can you provide USB trace for above fragment.

Thanks,
Minas


> There are cases as well where the HID packets for mouse gets sent to the USB 
> endpoint for mass storage. This will also result in End Point Request ERROR: 
> -108 and will trigger a USB reset.
> 
> It is looking like a Synopsys Designware USB 2.0 Core IP issue and not a 
> driver issue. But, I think you would know better.
> 
> 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