Re: usb: gadget: dwc2: not getting audio data

Minas Harutyunyan
2023-05-17T06:05:02Z

Hi Palak,

On 5/17/23 00:43, PALAK SHAH wrote:
> Hi Minas,
> 1. Depend on which uac(uac1 or uac2) you use, increase 2 to 32
>
> I change the #define UAC1_DEF_REQ_NUM 32.
>
> When I do this, what I see is, that when I play audio on the target, I don’t see the ENDPOINT shutdown. HOWEVER, when I try to record the data, I DO NOT RECORD any data.
> The arecord file is empty with only 44 bytes. I saw the same behavior 2 months ago with the older version of kernel.
>

So, to set req num to 32 resolve time gap issue and ISOC OUT transfers
(aplay) going OK. Please keep this 32 setting always.

Arecord. In latest log I see that function driver, besides EP1OUT (which
for aplay and it normally works), queued 32 requests to EP4IN, which I
assume endpoint for ISOC IN for arecord. But transfer on EP4IN never
start. Please provide me log and usb tarce when you doing aplay with
arecord.

> The logs show that the data comes on EP1(OUT) and the buffer queues upto #255 and then wraps around to 0. USB sniffer also shows data coming in.
Wrapping from #255 to #0 is Ok, driver allocate 256 descriptors

Thanks,
Minas

>
> [ 4022.593932] dwc2 ffb40000.usb: dwc2_hsotg_epint: ep1(out) DxEPINT=0x00000001
> [ 4022.593945] dwc2 ffb40000.usb: dwc2_hsotg_epint: XferCompl: DxEPCTL=0x800480c8, DXEPTSIZ=1411f0c0
> [ 4022.593962] dwc2 ffb40000.usb: complete: ep 5a34f664 ep1out, req 071607a0, 0 => 209d0061
> [ 4022.593981] dwc2 ffb40000.usb: ep1out: req 071607a0: 200@f268b719, noi=0, zero=0, snok=0
> [ 4022.594005] dwc2 ffb40000.usb: dwc2_gadget_fill_isoc_desc: Filling ep 1, dir out isoc desc # 255
> [ 4022.594017] dwc2 ffb40000.usb: dwc2_gadget_complete_isoc_request_ddma: compl_desc # 223
>
> [ 4022.594922] dwc2 ffb40000.usb: dwc2_hsotg_epint: ep1(out) DxEPINT=0x00000001
> [ 4022.594935] dwc2 ffb40000.usb: dwc2_hsotg_epint: XferCompl: DxEPCTL=0x800480c8, DXEPTSIZ=1409f060
> [ 4022.594951] dwc2 ffb40000.usb: complete: ep 5a34f664 ep1out, req bba03a8f, 0 => 209d0061
> [ 4022.594971] dwc2 ffb40000.usb: ep1out: req bba03a8f: 200@a96a5d42, noi=0, zero=0, snok=0
> [ 4022.594994] dwc2 ffb40000.usb: dwc2_gadget_fill_isoc_desc: Filling ep 1, dir out isoc desc # 0
> [ 4022.595006] dwc2 ffb40000.usb: dwc2_gadget_complete_isoc_request_ddma: compl_desc # 224
>
> I see this going on indefinitely in logs. But when I do arecord and try to capture, I don’t get anything recorded.
>
> Is there anything more that needs to be enabled, to get this working? The endpoint is not shutting down but the data isn’t getting recorded.
>
> May be this is the going in the right direction but needs something more to be done?
>
> Attached the logs file here, showing no endpoint shutdown, but arecord file showing NO data.
>
> 2. Change descriptor DMA (DDMA) mode to buffer DMA (BDMA) mode
> When I change this, I am seeing a kernel crash. I will investigate this further.
>
> Thanks,
> Palak
>
>
> -----Original Message-----
> From: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>
> Sent: Tuesday, May 16, 2023 3:54 AM
> To: PALAK SHAH <palak.shah@raritan.com>; Maynard CABIENTE <maynard.cabiente@raritan.com>
> Cc: linux-usb@vger.kernel.org
> Subject: Re: usb: gadget: dwc2: not getting audio data
>
> Hi Palak,
>
> On 5/11/23 17:16, PALAK SHAH wrote:
>> Hi Minas,
>>
>> Can you please respond to this? We need USB Audio Gadget working and
>> we cannot proceed without Synopsis support on this.
>>
>> Thanks,
>>
>> Palak
>>
>> *From:* PALAK SHAH
>> *Sent:* Tuesday, May 9, 2023 10:52 AM
>> *To:* Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>; Maynard
>> CABIENTE <maynard.cabiente@raritan.com>
>> *Cc:* linux-usb@vger.kernel.org
>> *Subject:* RE: usb: gadget: dwc2: not getting audio data
>>
>> Hi Minas,
>>
>> I have updated the kernel to 5.10.100. I have done the IP core test
>> and all the tests (esp. t15 and t16 for ISOC) pass on our system.
>>
>> However, I am still seeing the original problem. USB gadget DWC2
>> driver is getting stuck and not getting the transfers completed.
>>
>> When I am running audio on the host, and trying to capture the data on
>> EP1(out) end point -
>>
>> [ 270.855174] dwc2 ffb40000.usb: dwc2_hsotg_irq: gintsts: 042c8028,
>> gintsts & gintmsk: 000c0000, gintmsk: (d08c3c44) retry 8 [
>> 270.855189] dwc2 ffb40000.usb: dwc2_hsotg_irq: daint=00020002 [
>> 270.855205] dwc2 ffb40000.usb: dwc2_hsotg_epint: ep1(out)
>> DxEPINT=0x00000001
>> [ 270.855218] dwc2 ffb40000.usb: dwc2_hsotg_epint: XferCompl:
>> DxEPCTL=0x800480c8, DXEPTSIZ=11e55680
>> [ 270.855238] dwc2 ffb40000.usb: complete: ep 822473bd ep1out, req
>> 76bf77e8, 0 => 778da9a8 [ 270.855260] dwc2 ffb40000.usb: ep1out: req
>> 76bf77e8: 200@1c821d4e, noi=0, zero=0, snok=0 [ 270.855279] dwc2
>> ffb40000.usb: dwc2_gadget_fill_isoc_desc: Filling ep 1, dir out isoc
>> desc # 195 [ 270.855292] dwc2 ffb40000.usb:
>> dwc2_gadget_complete_isoc_request_ddma: compl_desc # 193
>>
>> [ 270.856242] dwc2 ffb40000.usb: dwc2_hsotg_irq: gintsts: 04288028,
>> gintsts & gintmsk: 00080000, gintmsk: (d08c3c44) retry 8 [
>> 270.856255] dwc2 ffb40000.usb: dwc2_hsotg_irq: daint=00020000 [
>> 270.856268] dwc2 ffb40000.usb: dwc2_hsotg_epint: ep1(out)
>> DxEPINT=0x00000001
>> [ 270.856282] dwc2 ffb40000.usb: dwc2_hsotg_epint: XferCompl:
>> DxEPCTL=0x800480c8, DXEPTSIZ=11dd5620
>> [ 270.856311] dwc2 ffb40000.usb: complete: ep 822473bd ep1out, req
>> 5af4a660, 0 => 778da9a8 [ 270.856346] dwc2 ffb40000.usb: ep1out: req
>> 5af4a660: 200@f8820950, noi=0, zero=0, snok=0 [ 270.856371] dwc2
>> ffb40000.usb: dwc2_gadget_fill_isoc_desc: Filling ep 1, dir out isoc
>> desc # 196 [ 270.856398] dwc2 ffb40000.usb:
>> dwc2_gadget_complete_isoc_request_ddma: compl_desc # 194
>>
>> [ 281.700537] dwc2 ffb40000.usb: dwc2_hsotg_irq: daint=00020002 [
>> 281.700552] dwc2 ffb40000.usb: dwc2_hsotg_epint: ep1(out)
>> DxEPINT=0x00000010
>> [ 281.700564] dwc2 ffb40000.usb:
>> dwc2_gadget_handle_out_token_ep_disabled: target_frame = 0x000013d0 [
>> 281.700580] dwc2 ffb40000.usb: dwc2_gadget_fill_isoc_desc: Filling ep
>> 1, dir out isoc desc # 0 [ 281.700594] dwc2 ffb40000.usb:
>> dwc2_gadget_fill_isoc_desc: Filling ep 1, dir out isoc desc # 1
>>
>> At 270 seconds, the request #194 was completed and request #196 was
>> queued. But right after that, there was a 11 second gap and the
>> request
>> #195 was never completed.
>>
>> For some unknown reason, the DWC2 core just stops. There is nothing in
>> our system that causes it to get stuck. The interrupts are not disabled.
>> The USB sniffer data shows that the data is coming in. However, dwc2
>> is not running.
>> After the time gap, everything stop working.
>>
>> I have attached the log file here. Can you please help me fix this
>> dwc2 core issue?
>>
>> Thanks,
>> Palak
>>
>>
>
> As I recommended earlier, please try:
>
> 1. Depend on which uac(uac1 or uac2) you use, increase 2 to 32
>
> 2. Change descriptor DMA (DDMA) mode to buffer DMA (BDMA) mode
>
> Thanks,
> Minas
>
>
> ________________________________
>
> 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.