* [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver @ 2021-05-14 3:20 Chow, Watson 2021-05-14 7:16 ` Felipe Balbi 0 siblings, 1 reply; 10+ messages in thread From: Chow, Watson @ 2021-05-14 3:20 UTC (permalink / raw) To: linux-usb@vger.kernel.org Hi, I'm using the SoC (Xilinx MPSoC) with DWC3 USB controller. I need to emulate my hardware to work like a USB camera and so make use of the USB UVC gadget driver - g_webcam. [My problem] Refer to this link and the driver source code, I find 3 parameters to configure the ISOC transfer bandwidth. https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/transfer-data-to-isochronous-endpoints#isochronous-transfer-example They are: streaming_maxpacket : range [1 - 3072] streaming_maxburst : range [0 - 15] streaming_interval : [1 - 16] So, I load the driver in this way # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=9 streaming_interval=2 Create my own app base on https://github.com/wlhe/uvc-gadget Test result In my evaluation, I can set the combination of parameters up to this. The streaming is ok. # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=9 streaming_interval=2 This should be around 900Mbit/sec. Far less than 5Gbps bandwidth of USB3.0 When I increase the parameter combination to: # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=10 streaming_interval=2 I get the below error message and everything stop. [ 1089.751559] g_webcam gadget: uvc: VS request completed with status -18. 1. This error is somehow related to the underflow of the transfer queue. Is my understanding correct? If so, how to solve? 2. My goal is to utilize the full bandwidth of USB3.0. How can I achive? [Some background information and my test setup] I started from the Xilinx TRD here. https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/541786361/Zynq+UltraScale+MPSoC+VCU+TRD+2020.1+-+Xilinx+Low+Latency+PS+DDR+NV12+HDMI+Audio+Video+Capture+and+Display With kernel version v5.4: https://github.com/Xilinx/linux-xlnx/tree/xlnx_rebase_v5.4_2020.2 Enabled the UVC gadget and made my own test code to evaluate the transfer throughput on the USB3.0 port. Test platform: . Xilinx ZCU106 evaluation board connected to PC through USB3.0 cable . Xilinx ZCU106 evaluation board would emulate a webcam through USB UVC gadget My test app: . Capture 3840x2160@60 video and scale to 1920x1080@60 . Queue the frames to UVC gadget driver Host PC side: . X86 PC with Ubuntu 18.04LTS OS . Use ffplay to capture and display frame from ZCU106 # ffplay /dev/video2 -video_size 1920x1080 -framerate 30 Best regards, Watson Chow Design Manager Avnet Technology Hong Kong Limited ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver 2021-05-14 3:20 [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver Chow, Watson @ 2021-05-14 7:16 ` Felipe Balbi 2021-05-14 8:59 ` Chow, Watson 0 siblings, 1 reply; 10+ messages in thread From: Felipe Balbi @ 2021-05-14 7:16 UTC (permalink / raw) To: Chow, Watson, linux-usb@vger.kernel.org [-- Attachment #1: Type: text/plain, Size: 2714 bytes --] Hi Watson, (please teach your mailer to break lines at 80 columns) "Chow, Watson" <Watson.Chow@Avnet.com> writes: > Hi, > > I'm using the SoC (Xilinx MPSoC) with DWC3 USB controller. I need to > emulate my hardware to work like a USB camera and so make use of the > USB UVC gadget driver - g_webcam. which Kernel version are you running? > Refer to this link and the driver source code, I find 3 parameters to > configure the ISOC transfer bandwidth. > > https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/transfer-data-to-isochronous-endpoints#isochronous-transfer-example > > They are: > > streaming_maxpacket : range [1 - 3072] > streaming_maxburst : range [0 - 15] > streaming_interval : [1 - 16] > > So, I load the driver in this way > > # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=9 streaming_interval=2 > > Create my own app base on > https://github.com/wlhe/uvc-gadget > > Test result > > In my evaluation, I can set the combination of parameters up to > this. The streaming is ok. > > # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=9 streaming_interval=2 streaming_maxburst=15 should work here too. > This should be around 900Mbit/sec. Far less than 5Gbps bandwidth of > USB3.0 IIRC Isoc endpoints can't take the full bus bandwidth, I don't remember the exact limit but I think it's 80% of full bandwidth. Still, that should be around 4Gbit/sec > When I increase the parameter combination to: > # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=10 streaming_interval=2 > > I get the below error message and everything stop. > > [ 1089.751559] g_webcam gadget: uvc: VS request completed with status -18. > 1. This error is somehow related to the underflow of the transfer > queue. Is my understanding correct? that means the controller lost an isoc interval. There is still discussion going on regarding isoc intervals in dwc3. It turns out the HW doesn't make scheduling super easy for SW :-) > If so, how to solve? > 2. My goal is to utilize the full bandwidth of USB3.0. How can I achive? > > [Some background information and my test setup] > > I started from the Xilinx TRD here. > > https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/541786361/Zynq+UltraScale+MPSoC+VCU+TRD+2020.1+-+Xilinx+Low+Latency+PS+DDR+NV12+HDMI+Audio+Video+Capture+and+Display > > With kernel version v5.4: > https://github.com/Xilinx/linux-xlnx/tree/xlnx_rebase_v5.4_2020.2 v5.4 is super old, please test with v5.12 or the latest v5.13-rc. Also, when reporting dwc3 bugs, make sure to include regdump and trace events as described in dwc3 documentation -- balbi [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 511 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver 2021-05-14 7:16 ` Felipe Balbi @ 2021-05-14 8:59 ` Chow, Watson 2021-05-14 10:31 ` Felipe Balbi 0 siblings, 1 reply; 10+ messages in thread From: Chow, Watson @ 2021-05-14 8:59 UTC (permalink / raw) To: Felipe Balbi, linux-usb@vger.kernel.org Balbi, Thanks for your quick reply. Some questions 1. You mentioned that the max bandwidth in isoc mode (USB3.0) should be around 4Gbps. I have the below calcuation on bandwidth: In USB3.0, 1 micro frame would take 125us and can transfer max 45000 bytes So, in 1 sec, we will have 8000 micro frames Max bandwidth = 8000 x 4500 x 8 = 2.88Gbps Is my understanding correct? 2. To achieve the max throughput, I need to configure the uvc gadget driver with below parameters. Am I right? # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=15 streaming_interval=1 3. You suggest me to try on kernel v5.12 or the latest v5.13-rc. It looks not easy in my side to upgrade the kernel version. It would affect those other device drivers I'm currently using. So, do you think there's any short cut to fix this problem under my current kernel version - v5.4? 4. I read through the procedures to capture debug info by debugfs. However, in my test with "streaming_maxburst" set to 10 or above, my system would crash and I can't pick the log from that point. Any suggestion? best regards, Watson -----Original Message----- From: Felipe Balbi <balbi@kernel.org> Sent: Friday, May 14, 2021 3:16 PM To: Chow, Watson <Watson.Chow@Avnet.com>; linux-usb@vger.kernel.org Subject: Re: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver Hi Watson, (please teach your mailer to break lines at 80 columns) "Chow, Watson" <Watson.Chow@Avnet.com> writes: > Hi, > > I'm using the SoC (Xilinx MPSoC) with DWC3 USB controller. I need to > emulate my hardware to work like a USB camera and so make use of the > USB UVC gadget driver - g_webcam. which Kernel version are you running? > Refer to this link and the driver source code, I find 3 parameters to > configure the ISOC transfer bandwidth. > > https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/trans > fer-data-to-isochronous-endpoints#isochronous-transfer-example > > They are: > > streaming_maxpacket : range [1 - 3072] streaming_maxburst : range [0 - > 15] streaming_interval : [1 - 16] > > So, I load the driver in this way > > # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=9 > streaming_interval=2 > > Create my own app base on > https://github.com/wlhe/uvc-gadget > > Test result > > In my evaluation, I can set the combination of parameters up to this. > The streaming is ok. > > # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=9 > streaming_interval=2 streaming_maxburst=15 should work here too. > This should be around 900Mbit/sec. Far less than 5Gbps bandwidth of > USB3.0 IIRC Isoc endpoints can't take the full bus bandwidth, I don't remember the exact limit but I think it's 80% of full bandwidth. Still, that should be around 4Gbit/sec > When I increase the parameter combination to: > # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=10 > streaming_interval=2 > > I get the below error message and everything stop. > > [ 1089.751559] g_webcam gadget: uvc: VS request completed with status -18. > 1. This error is somehow related to the underflow of the transfer > queue. Is my understanding correct? that means the controller lost an isoc interval. There is still discussion going on regarding isoc intervals in dwc3. It turns out the HW doesn't make scheduling super easy for SW :-) > If so, how to solve? > 2. My goal is to utilize the full bandwidth of USB3.0. How can I achive? > > [Some background information and my test setup] > > I started from the Xilinx TRD here. > > https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/541786361/Zynq+U > ltraScale+MPSoC+VCU+TRD+2020.1+-+Xilinx+Low+Latency+PS+DDR+NV12+HDMI+A > udio+Video+Capture+and+Display > > With kernel version v5.4: > https://github.com/Xilinx/linux-xlnx/tree/xlnx_rebase_v5.4_2020.2 v5.4 is super old, please test with v5.12 or the latest v5.13-rc. Also, when reporting dwc3 bugs, make sure to include regdump and trace events as described in dwc3 documentation -- balbi ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver 2021-05-14 8:59 ` Chow, Watson @ 2021-05-14 10:31 ` Felipe Balbi 2021-05-17 3:58 ` Chow, Watson 0 siblings, 1 reply; 10+ messages in thread From: Felipe Balbi @ 2021-05-14 10:31 UTC (permalink / raw) To: Chow, Watson, linux-usb@vger.kernel.org [-- Attachment #1: Type: text/plain, Size: 1624 bytes --] Hi, (please don't top-post :-) "Chow, Watson" <Watson.Chow@Avnet.com> writes: > Balbi, > > Thanks for your quick reply. > > Some questions > > 1. You mentioned that the max bandwidth in isoc mode (USB3.0) should be > around 4Gbps. > > I have the below calcuation on bandwidth: > In USB3.0, 1 micro frame would take 125us and can transfer max 45000 bytes > So, in 1 sec, we will have 8000 micro frames > > Max bandwidth = 8000 x 4500 x 8 = 2.88Gbps > > Is my understanding correct? probably, It's been a while since I've dug through the spec, to be frank > 2. To achieve the max throughput, I need to configure the uvc gadget driver > with below parameters. Am I right? > > # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=15 > streaming_interval=1 right, but there's an assumption here that the gadget will be able to feed data in a timely manner. > 3. You suggest me to try on kernel v5.12 or the latest v5.13-rc. It looks not > easy in my side to upgrade the kernel version. It would affect those other > device drivers I'm currently using. So, do you think there's any short cut > to fix this problem under my current kernel version - v5.4? In that case, you need to ask for support from whoever forces you to stay with such an old kernel. I believe that would be Xilinx. > 4. I read through the procedures to capture debug info by debugfs. However, > in my test with "streaming_maxburst" set to 10 or above, my system would > crash and I can't pick the log from that point. Any suggestion? have a look at ftrace_dump_on_oops. -- balbi [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 511 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver 2021-05-14 10:31 ` Felipe Balbi @ 2021-05-17 3:58 ` Chow, Watson 2021-05-17 5:32 ` Felipe Balbi 0 siblings, 1 reply; 10+ messages in thread From: Chow, Watson @ 2021-05-17 3:58 UTC (permalink / raw) To: Felipe Balbi, linux-usb@vger.kernel.org Hi, >Hi, > >(please don't top-post :-) I have tried my best to meet the format requirement > >"Chow, Watson" <Watson.Chow@Avnet.com> writes: >> Balbi, >> >> Thanks for your quick reply. >> >> Some questions >> >> 1. You mentioned that the max bandwidth in isoc mode (USB3.0) should be >> around 4Gbps. >> >> I have the below calcuation on bandwidth: >> In USB3.0, 1 micro frame would take 125us and can transfer max 45000 bytes >> So, in 1 sec, we will have 8000 micro frames >> >> Max bandwidth = 8000 x 4500 x 8 = 2.88Gbps >> >> Is my understanding correct? > >probably, It's been a while since I've dug through the spec, to be frank > >> 2. To achieve the max throughput, I need to configure the uvc gadget driver >> with below parameters. Am I right? >> >> # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=15 >> streaming_interval=1 > >right, but there's an assumption here that the gadget will be able to >feed data in a timely manner. How does the DWC3 driver or the gadget driver handle the case with intermittent drop of the input video streaming? Any recover mechanism? > >> 3. You suggest me to try on kernel v5.12 or the latest v5.13-rc. It looks not >> easy in my side to upgrade the kernel version. It would affect those other >> device drivers I'm currently using. So, do you think there's any short cut >> to fix this problem under my current kernel version - v5.4? > >In that case, you need to ask for support from whoever forces you to >stay with such an old kernel. I believe that would be Xilinx. I have a thought to back port those changes around the dwc3 and gadget driver from the latest kernel version to my kernel (v5.4). Do you think this is feasible? > >> 4. I read through the procedures to capture debug info by debugfs. However, >> in my test with "streaming_maxburst" set to 10 or above, my system would >> crash and I can't pick the log from that point. Any suggestion? > >have a look at ftrace_dump_on_oops. I will explore how to enable this > Btw, do you know which SoC platform can run the UVC gadget in max throughput. Raspberry Pi/TI Beaglebone/i.MX ??? best regards, Watson -----Original Message----- From: Felipe Balbi <balbi@kernel.org> Sent: Friday, May 14, 2021 6:32 PM To: Chow, Watson <Watson.Chow@Avnet.com>; linux-usb@vger.kernel.org Subject: RE: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver Hi, (please don't top-post :-) "Chow, Watson" <Watson.Chow@Avnet.com> writes: > Balbi, > > Thanks for your quick reply. > > Some questions > > 1. You mentioned that the max bandwidth in isoc mode (USB3.0) should be > around 4Gbps. > > I have the below calcuation on bandwidth: > In USB3.0, 1 micro frame would take 125us and can transfer max 45000 bytes > So, in 1 sec, we will have 8000 micro frames > > Max bandwidth = 8000 x 4500 x 8 = 2.88Gbps > > Is my understanding correct? probably, It's been a while since I've dug through the spec, to be frank > 2. To achieve the max throughput, I need to configure the uvc gadget driver > with below parameters. Am I right? > > # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=15 > streaming_interval=1 right, but there's an assumption here that the gadget will be able to feed data in a timely manner. > 3. You suggest me to try on kernel v5.12 or the latest v5.13-rc. It looks not > easy in my side to upgrade the kernel version. It would affect those other > device drivers I'm currently using. So, do you think there's any short cut > to fix this problem under my current kernel version - v5.4? In that case, you need to ask for support from whoever forces you to stay with such an old kernel. I believe that would be Xilinx. > 4. I read through the procedures to capture debug info by debugfs. However, > in my test with "streaming_maxburst" set to 10 or above, my system would > crash and I can't pick the log from that point. Any suggestion? have a look at ftrace_dump_on_oops. -- balbi ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver 2021-05-17 3:58 ` Chow, Watson @ 2021-05-17 5:32 ` Felipe Balbi 2021-06-04 2:53 ` Chow, Watson 0 siblings, 1 reply; 10+ messages in thread From: Felipe Balbi @ 2021-05-17 5:32 UTC (permalink / raw) To: Chow, Watson, linux-usb@vger.kernel.org [-- Attachment #1: Type: text/plain, Size: 2649 bytes --] Hi, "Chow, Watson" <Watson.Chow@Avnet.com> writes: > Hi, > >>Hi, >> >>(please don't top-post :-) > I have tried my best to meet the format requirement Thanks >>"Chow, Watson" <Watson.Chow@Avnet.com> writes: >>> Balbi, >>> >>> Thanks for your quick reply. >>> >>> Some questions >>> >>> 1. You mentioned that the max bandwidth in isoc mode (USB3.0) should be >>> around 4Gbps. >>> >>> I have the below calcuation on bandwidth: >>> In USB3.0, 1 micro frame would take 125us and can transfer max 45000 bytes >>> So, in 1 sec, we will have 8000 micro frames >>> >>> Max bandwidth = 8000 x 4500 x 8 = 2.88Gbps >>> >>> Is my understanding correct? >> >>probably, It's been a while since I've dug through the spec, to be frank >> >>> 2. To achieve the max throughput, I need to configure the uvc gadget driver >>> with below parameters. Am I right? >>> >>> # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=15 >>> streaming_interval=1 >> >>right, but there's an assumption here that the gadget will be able to >>feed data in a timely manner. > > How does the DWC3 driver or the gadget driver handle the case with intermittent > drop of the input video streaming? > > Any recover mechanism? yeah, the missed ISOC is reported to the gadget driver and that has to queue new requests. >>> 3. You suggest me to try on kernel v5.12 or the latest v5.13-rc. It looks not >>> easy in my side to upgrade the kernel version. It would affect those other >>> device drivers I'm currently using. So, do you think there's any short cut >>> to fix this problem under my current kernel version - v5.4? >> >>In that case, you need to ask for support from whoever forces you to >>stay with such an old kernel. I believe that would be Xilinx. > > I have a thought to back port those changes around the dwc3 and gadget driver > from the latest kernel version to my kernel (v5.4). Do you think this is > feasible? should be, but it's likely quite a bit of work: $ git rev-list --count v5.4..linus/master -- drivers/usb/dwc3/ 257 >>> 4. I read through the procedures to capture debug info by debugfs. However, >>> in my test with "streaming_maxburst" set to 10 or above, my system would >>> crash and I can't pick the log from that point. Any suggestion? >> >>have a look at ftrace_dump_on_oops. > > I will explore how to enable this > >> > > Btw, do you know which SoC platform can run the UVC gadget in max throughput. > Raspberry Pi/TI Beaglebone/i.MX ??? Raspberry Pi uses dwc2 Beaglebone uses musb i.MX, I think some of them use dwc3 at least. -- balbi [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 511 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver 2021-05-17 5:32 ` Felipe Balbi @ 2021-06-04 2:53 ` Chow, Watson 2021-06-04 5:15 ` Felipe Balbi 2021-06-07 6:11 ` Peter Chen 0 siblings, 2 replies; 10+ messages in thread From: Chow, Watson @ 2021-06-04 2:53 UTC (permalink / raw) To: Felipe Balbi, linux-usb@vger.kernel.org Balbi, >Hi, > >"Chow, Watson" <Watson.Chow@Avnet.com> writes: >> Hi, >> >>>Hi, >>> >>>(please don't top-post :-) >> I have tried my best to meet the format requirement > >Thanks > >>>"Chow, Watson" <Watson.Chow@Avnet.com> writes: >>>> Balbi, >>>> >>>> Thanks for your quick reply. >>>> >>>> Some questions >>>> >>>> 1. You mentioned that the max bandwidth in isoc mode (USB3.0) should be >>>> around 4Gbps. >>>> >>>> I have the below calcuation on bandwidth: >>>> In USB3.0, 1 micro frame would take 125us and can transfer max 45000 bytes >>>> So, in 1 sec, we will have 8000 micro frames >>>> >>>> Max bandwidth = 8000 x 4500 x 8 = 2.88Gbps >>>> >>>> Is my understanding correct? >>> >>>probably, It's been a while since I've dug through the spec, to be frank >>> >>>> 2. To achieve the max throughput, I need to configure the uvc gadget driver >>>> with below parameters. Am I right? >>>> >>>> # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=15 >>>> streaming_interval=1 >>> >>>right, but there's an assumption here that the gadget will be able to >>>feed data in a timely manner. >> >> How does the DWC3 driver or the gadget driver handle the case with intermittent >> drop of the input video streaming? >> >> Any recover mechanism? > >yeah, the missed ISOC is reported to the gadget driver and that has to >queue new requests. > >>>> 3. You suggest me to try on kernel v5.12 or the latest v5.13-rc. It looks not >>>> easy in my side to upgrade the kernel version. It would affect those other >>>> device drivers I'm currently using. So, do you think there's any short cut >>>> to fix this problem under my current kernel version - v5.4? >>> >>>In that case, you need to ask for support from whoever forces you to >>>stay with such an old kernel. I believe that would be Xilinx. >> >> I have a thought to back port those changes around the dwc3 and gadget driver >> from the latest kernel version to my kernel (v5.4). Do you think this is >> feasible? > >should be, but it's likely quite a bit of work: > >$ git rev-list --count v5.4..linus/master -- drivers/usb/dwc3/ >257 > Upgraded the kernel version to 5.9, I can set the g_webcam module pararmeters as follow (for max bandwidth): streaming_maxpacket=3072 streaming_maxburst=15 streaming_interval=1 Data transfer with above setting is working now - tested with dummy data generator in the uvc-gadget app. This concludes that kernel 5.4 is too old for DWC3 and UVC gadget driver in high bandwidth usage >>>> 4. I read through the procedures to capture debug info by debugfs. However, >>>> in my test with "streaming_maxburst" set to 10 or above, my system would >>>> crash and I can't pick the log from that point. Any suggestion? >>> >>>have a look at ftrace_dump_on_oops. >> >> I will explore how to enable this >> >>> >> >> Btw, do you know which SoC platform can run the UVC gadget in max throughput. >> Raspberry Pi/TI Beaglebone/i.MX ??? > >Raspberry Pi uses dwc2 >Beaglebone uses musb >i.MX, I think some of them use dwc3 at least. > Watson -----Original Message----- From: Felipe Balbi <balbi@kernel.org> Sent: Monday, May 17, 2021 1:32 PM To: Chow, Watson <Watson.Chow@Avnet.com>; linux-usb@vger.kernel.org Subject: RE: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver Hi, "Chow, Watson" <Watson.Chow@Avnet.com> writes: > Hi, > >>Hi, >> >>(please don't top-post :-) > I have tried my best to meet the format requirement Thanks >>"Chow, Watson" <Watson.Chow@Avnet.com> writes: >>> Balbi, >>> >>> Thanks for your quick reply. >>> >>> Some questions >>> >>> 1. You mentioned that the max bandwidth in isoc mode (USB3.0) should be >>> around 4Gbps. >>> >>> I have the below calcuation on bandwidth: >>> In USB3.0, 1 micro frame would take 125us and can transfer max 45000 bytes >>> So, in 1 sec, we will have 8000 micro frames >>> >>> Max bandwidth = 8000 x 4500 x 8 = 2.88Gbps >>> >>> Is my understanding correct? >> >>probably, It's been a while since I've dug through the spec, to be frank >> >>> 2. To achieve the max throughput, I need to configure the uvc gadget driver >>> with below parameters. Am I right? >>> >>> # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=15 >>> streaming_interval=1 >> >>right, but there's an assumption here that the gadget will be able to >>feed data in a timely manner. > > How does the DWC3 driver or the gadget driver handle the case with intermittent > drop of the input video streaming? > > Any recover mechanism? yeah, the missed ISOC is reported to the gadget driver and that has to queue new requests. >>> 3. You suggest me to try on kernel v5.12 or the latest v5.13-rc. It looks not >>> easy in my side to upgrade the kernel version. It would affect those other >>> device drivers I'm currently using. So, do you think there's any short cut >>> to fix this problem under my current kernel version - v5.4? >> >>In that case, you need to ask for support from whoever forces you to >>stay with such an old kernel. I believe that would be Xilinx. > > I have a thought to back port those changes around the dwc3 and gadget driver > from the latest kernel version to my kernel (v5.4). Do you think this is > feasible? should be, but it's likely quite a bit of work: $ git rev-list --count v5.4..linus/master -- drivers/usb/dwc3/ 257 >>> 4. I read through the procedures to capture debug info by debugfs. However, >>> in my test with "streaming_maxburst" set to 10 or above, my system would >>> crash and I can't pick the log from that point. Any suggestion? >> >>have a look at ftrace_dump_on_oops. > > I will explore how to enable this > >> > > Btw, do you know which SoC platform can run the UVC gadget in max throughput. > Raspberry Pi/TI Beaglebone/i.MX ??? Raspberry Pi uses dwc2 Beaglebone uses musb i.MX, I think some of them use dwc3 at least. -- balbi ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver 2021-06-04 2:53 ` Chow, Watson @ 2021-06-04 5:15 ` Felipe Balbi 2021-06-07 6:11 ` Peter Chen 1 sibling, 0 replies; 10+ messages in thread From: Felipe Balbi @ 2021-06-04 5:15 UTC (permalink / raw) To: Chow, Watson, linux-usb@vger.kernel.org [-- Attachment #1: Type: text/plain, Size: 1313 bytes --] Hi, "Chow, Watson" <Watson.Chow@Avnet.com> writes: >>>>> 3. You suggest me to try on kernel v5.12 or the latest v5.13-rc. It looks not >>>>> easy in my side to upgrade the kernel version. It would affect those other >>>>> device drivers I'm currently using. So, do you think there's any short cut >>>>> to fix this problem under my current kernel version - v5.4? >>>> >>>>In that case, you need to ask for support from whoever forces you to >>>>stay with such an old kernel. I believe that would be Xilinx. >>> >>> I have a thought to back port those changes around the dwc3 and gadget driver >>> from the latest kernel version to my kernel (v5.4). Do you think this is >>> feasible? >> >>should be, but it's likely quite a bit of work: >> >>$ git rev-list --count v5.4..linus/master -- drivers/usb/dwc3/ >>257 >> > > Upgraded the kernel version to 5.9, I can set the g_webcam module pararmeters > as follow (for max bandwidth): > > streaming_maxpacket=3072 > streaming_maxburst=15 > streaming_interval=1 > > Data transfer with above setting is working now - tested with dummy data > generator in the uvc-gadget app. > > This concludes that kernel 5.4 is too old for DWC3 and UVC gadget driver > in high bandwidth usage Cool, thanks for letting me know :-) -- balbi [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 511 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver 2021-06-04 2:53 ` Chow, Watson 2021-06-04 5:15 ` Felipe Balbi @ 2021-06-07 6:11 ` Peter Chen 2021-06-07 11:26 ` Chow, Watson 1 sibling, 1 reply; 10+ messages in thread From: Peter Chen @ 2021-06-07 6:11 UTC (permalink / raw) To: Chow, Watson; +Cc: Felipe Balbi, linux-usb@vger.kernel.org On 21-06-04 02:53:19, Chow, Watson wrote: > > Upgraded the kernel version to 5.9, I can set the g_webcam module pararmeters > as follow (for max bandwidth): > > streaming_maxpacket=3072 > streaming_maxburst=15 > streaming_interval=1 According the spec: Maximum number of packet within one SoF: (bMaxBurst + 1) * (Mult + 1) = (15 + 1) * (2 + 1)= 48 Maximum bandwidth = 48 * 1024 * 8 (B/bit) * 8 (125us/1ms) = 3.072Gbps USB 3.0 is 8/10b coding, the theory maximum bandwidth is 5 * 0.8 = 4.096Gbps So, your setting tells host that your have the capabilities to get the maximum bandwidth,but you may can't get it due to the FIFO depth for endpoint and system bus latency. Peter > > Data transfer with above setting is working now - tested with dummy data > generator in the uvc-gadget app. > > This concludes that kernel 5.4 is too old for DWC3 and UVC gadget driver > in high bandwidth usage > > > >>>> 4. I read through the procedures to capture debug info by debugfs. However, > >>>> in my test with "streaming_maxburst" set to 10 or above, my system would > >>>> crash and I can't pick the log from that point. Any suggestion? > >>> > >>>have a look at ftrace_dump_on_oops. > >> > >> I will explore how to enable this > >> > >>> > >> > >> Btw, do you know which SoC platform can run the UVC gadget in max throughput. > >> Raspberry Pi/TI Beaglebone/i.MX ??? > > > >Raspberry Pi uses dwc2 > >Beaglebone uses musb > >i.MX, I think some of them use dwc3 at least. > > > > Watson > > -----Original Message----- > From: Felipe Balbi <balbi@kernel.org> > Sent: Monday, May 17, 2021 1:32 PM > To: Chow, Watson <Watson.Chow@Avnet.com>; linux-usb@vger.kernel.org > Subject: RE: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver > > > Hi, > > "Chow, Watson" <Watson.Chow@Avnet.com> writes: > > Hi, > > > >>Hi, > >> > >>(please don't top-post :-) > > I have tried my best to meet the format requirement > > Thanks > > >>"Chow, Watson" <Watson.Chow@Avnet.com> writes: > >>> Balbi, > >>> > >>> Thanks for your quick reply. > >>> > >>> Some questions > >>> > >>> 1. You mentioned that the max bandwidth in isoc mode (USB3.0) should be > >>> around 4Gbps. > >>> > >>> I have the below calcuation on bandwidth: > >>> In USB3.0, 1 micro frame would take 125us and can transfer max 45000 bytes > >>> So, in 1 sec, we will have 8000 micro frames > >>> > >>> Max bandwidth = 8000 x 4500 x 8 = 2.88Gbps > >>> > >>> Is my understanding correct? > >> > >>probably, It's been a while since I've dug through the spec, to be frank > >> > >>> 2. To achieve the max throughput, I need to configure the uvc gadget driver > >>> with below parameters. Am I right? > >>> > >>> # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=15 > >>> streaming_interval=1 > >> > >>right, but there's an assumption here that the gadget will be able to > >>feed data in a timely manner. > > > > How does the DWC3 driver or the gadget driver handle the case with intermittent > > drop of the input video streaming? > > > > Any recover mechanism? > > yeah, the missed ISOC is reported to the gadget driver and that has to > queue new requests. > > >>> 3. You suggest me to try on kernel v5.12 or the latest v5.13-rc. It looks not > >>> easy in my side to upgrade the kernel version. It would affect those other > >>> device drivers I'm currently using. So, do you think there's any short cut > >>> to fix this problem under my current kernel version - v5.4? > >> > >>In that case, you need to ask for support from whoever forces you to > >>stay with such an old kernel. I believe that would be Xilinx. > > > > I have a thought to back port those changes around the dwc3 and gadget driver > > from the latest kernel version to my kernel (v5.4). Do you think this is > > feasible? > > should be, but it's likely quite a bit of work: > > $ git rev-list --count v5.4..linus/master -- drivers/usb/dwc3/ > 257 > > >>> 4. I read through the procedures to capture debug info by debugfs. However, > >>> in my test with "streaming_maxburst" set to 10 or above, my system would > >>> crash and I can't pick the log from that point. Any suggestion? > >> > >>have a look at ftrace_dump_on_oops. > > > > I will explore how to enable this > > > >> > > > > Btw, do you know which SoC platform can run the UVC gadget in max throughput. > > Raspberry Pi/TI Beaglebone/i.MX ??? > > Raspberry Pi uses dwc2 > Beaglebone uses musb > i.MX, I think some of them use dwc3 at least. > > -- > balbi -- Thanks, Peter Chen ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver 2021-06-07 6:11 ` Peter Chen @ 2021-06-07 11:26 ` Chow, Watson 0 siblings, 0 replies; 10+ messages in thread From: Chow, Watson @ 2021-06-07 11:26 UTC (permalink / raw) To: Peter Chen; +Cc: Felipe Balbi, linux-usb@vger.kernel.org Peter, >On 21-06-04 02:53:19, Chow, Watson wrote: >> >> Upgraded the kernel version to 5.9, I can set the g_webcam module pararmeters >> as follow (for max bandwidth): >> >> streaming_maxpacket=3072 >> streaming_maxburst=15 >> streaming_interval=1 > >According the spec: >Maximum number of packet within one SoF: >(bMaxBurst + 1) * (Mult + 1) = (15 + 1) * (2 + 1)= 48 >Maximum bandwidth = 48 * 1024 * 8 (B/bit) * 8 (125us/1ms) = 3.072Gbps >USB 3.0 is 8/10b coding, the theory maximum bandwidth is 5 * 0.8 = 4.096Gbps >So, your setting tells host that your have the capabilities to get the >maximum bandwidth,but you may can't get it due to the FIFO depth for endpoint >and system bus latency. This aligns with my thought. Thx! > >Peter > >> >> Data transfer with above setting is working now - tested with dummy data >> generator in the uvc-gadget app. >> >> This concludes that kernel 5.4 is too old for DWC3 and UVC gadget driver >> in high bandwidth usage >> >> >> >>>> 4. I read through the procedures to capture debug info by debugfs. However, >> >>>> in my test with "streaming_maxburst" set to 10 or above, my system would >> >>>> crash and I can't pick the log from that point. Any suggestion? >> >>> >> >>>have a look at ftrace_dump_on_oops. >> >> >> >> I will explore how to enable this >> >> >> >>> >> >> >> >> Btw, do you know which SoC platform can run the UVC gadget in max throughput. >> >> Raspberry Pi/TI Beaglebone/i.MX ??? >> > >> >Raspberry Pi uses dwc2 >> >Beaglebone uses musb >> >i.MX, I think some of them use dwc3 at least. >> > >> >> Watson >> >> -----Original Message----- >> From: Felipe Balbi <balbi@kernel.org> >> Sent: Monday, May 17, 2021 1:32 PM >> To: Chow, Watson <Watson.Chow@Avnet.com>; linux-usb@vger.kernel.org >> Subject: RE: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver >> >> >> Hi, >> >> "Chow, Watson" <Watson.Chow@Avnet.com> writes: >> > Hi, >> > >> >>Hi, >> >> >> >>(please don't top-post :-) >> > I have tried my best to meet the format requirement >> >> Thanks >> >> >>"Chow, Watson" <Watson.Chow@Avnet.com> writes: >> >>> Balbi, >> >>> >> >>> Thanks for your quick reply. >> >>> >> >>> Some questions >> >>> >> >>> 1. You mentioned that the max bandwidth in isoc mode (USB3.0) should be >> >>> around 4Gbps. >> >>> >> >>> I have the below calcuation on bandwidth: >> >>> In USB3.0, 1 micro frame would take 125us and can transfer max 45000 bytes >> >>> So, in 1 sec, we will have 8000 micro frames >> >>> >> >>> Max bandwidth = 8000 x 4500 x 8 = 2.88Gbps >> >>> >> >>> Is my understanding correct? >> >> >> >>probably, It's been a while since I've dug through the spec, to be frank >> >> >> >>> 2. To achieve the max throughput, I need to configure the uvc gadget driver >> >>> with below parameters. Am I right? >> >>> >> >>> # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=15 >> >>> streaming_interval=1 >> >> >> >>right, but there's an assumption here that the gadget will be able to >> >>feed data in a timely manner. >> > >> > How does the DWC3 driver or the gadget driver handle the case with intermittent >> > drop of the input video streaming? >> > >> > Any recover mechanism? >> >> yeah, the missed ISOC is reported to the gadget driver and that has to >> queue new requests. >> >> >>> 3. You suggest me to try on kernel v5.12 or the latest v5.13-rc. It looks not >> >>> easy in my side to upgrade the kernel version. It would affect those other >> >>> device drivers I'm currently using. So, do you think there's any short cut >> >>> to fix this problem under my current kernel version - v5.4? >> >> >> >>In that case, you need to ask for support from whoever forces you to >> >>stay with such an old kernel. I believe that would be Xilinx. >> > >> > I have a thought to back port those changes around the dwc3 and gadget driver >> > from the latest kernel version to my kernel (v5.4). Do you think this is >> > feasible? >> >> should be, but it's likely quite a bit of work: >> >> $ git rev-list --count v5.4..linus/master -- drivers/usb/dwc3/ >> 257 >> >> >>> 4. I read through the procedures to capture debug info by debugfs. However, >> >>> in my test with "streaming_maxburst" set to 10 or above, my system would >> >>> crash and I can't pick the log from that point. Any suggestion? >> >> >> >>have a look at ftrace_dump_on_oops. >> > >> > I will explore how to enable this >> > >> >> >> > >> > Btw, do you know which SoC platform can run the UVC gadget in max throughput. >> > Raspberry Pi/TI Beaglebone/i.MX ??? >> >> Raspberry Pi uses dwc2 >> Beaglebone uses musb >> i.MX, I think some of them use dwc3 at least. >> >> -- >> balbi > >-- > >Thanks, >Peter Chen > Watson Chow -----Original Message----- From: Peter Chen <peter.chen@kernel.org> Sent: Monday, June 7, 2021 2:11 PM To: Chow, Watson <Watson.Chow@Avnet.com> Cc: Felipe Balbi <balbi@kernel.org>; linux-usb@vger.kernel.org Subject: Re: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver On 21-06-04 02:53:19, Chow, Watson wrote: > > Upgraded the kernel version to 5.9, I can set the g_webcam module pararmeters > as follow (for max bandwidth): > > streaming_maxpacket=3072 > streaming_maxburst=15 > streaming_interval=1 According the spec: Maximum number of packet within one SoF: (bMaxBurst + 1) * (Mult + 1) = (15 + 1) * (2 + 1)= 48 Maximum bandwidth = 48 * 1024 * 8 (B/bit) * 8 (125us/1ms) = 3.072Gbps USB 3.0 is 8/10b coding, the theory maximum bandwidth is 5 * 0.8 = 4.096Gbps So, your setting tells host that your have the capabilities to get the maximum bandwidth,but you may can't get it due to the FIFO depth for endpoint and system bus latency. Peter > > Data transfer with above setting is working now - tested with dummy data > generator in the uvc-gadget app. > > This concludes that kernel 5.4 is too old for DWC3 and UVC gadget driver > in high bandwidth usage > > > >>>> 4. I read through the procedures to capture debug info by debugfs. However, > >>>> in my test with "streaming_maxburst" set to 10 or above, my system would > >>>> crash and I can't pick the log from that point. Any suggestion? > >>> > >>>have a look at ftrace_dump_on_oops. > >> > >> I will explore how to enable this > >> > >>> > >> > >> Btw, do you know which SoC platform can run the UVC gadget in max throughput. > >> Raspberry Pi/TI Beaglebone/i.MX ??? > > > >Raspberry Pi uses dwc2 > >Beaglebone uses musb > >i.MX, I think some of them use dwc3 at least. > > > > Watson > > -----Original Message----- > From: Felipe Balbi <balbi@kernel.org> > Sent: Monday, May 17, 2021 1:32 PM > To: Chow, Watson <Watson.Chow@Avnet.com>; linux-usb@vger.kernel.org > Subject: RE: [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver > > > Hi, > > "Chow, Watson" <Watson.Chow@Avnet.com> writes: > > Hi, > > > >>Hi, > >> > >>(please don't top-post :-) > > I have tried my best to meet the format requirement > > Thanks > > >>"Chow, Watson" <Watson.Chow@Avnet.com> writes: > >>> Balbi, > >>> > >>> Thanks for your quick reply. > >>> > >>> Some questions > >>> > >>> 1. You mentioned that the max bandwidth in isoc mode (USB3.0) should be > >>> around 4Gbps. > >>> > >>> I have the below calcuation on bandwidth: > >>> In USB3.0, 1 micro frame would take 125us and can transfer max 45000 bytes > >>> So, in 1 sec, we will have 8000 micro frames > >>> > >>> Max bandwidth = 8000 x 4500 x 8 = 2.88Gbps > >>> > >>> Is my understanding correct? > >> > >>probably, It's been a while since I've dug through the spec, to be frank > >> > >>> 2. To achieve the max throughput, I need to configure the uvc gadget driver > >>> with below parameters. Am I right? > >>> > >>> # modprobe g_webcam streaming_maxpacket=3072 streaming_maxburst=15 > >>> streaming_interval=1 > >> > >>right, but there's an assumption here that the gadget will be able to > >>feed data in a timely manner. > > > > How does the DWC3 driver or the gadget driver handle the case with intermittent > > drop of the input video streaming? > > > > Any recover mechanism? > > yeah, the missed ISOC is reported to the gadget driver and that has to > queue new requests. > > >>> 3. You suggest me to try on kernel v5.12 or the latest v5.13-rc. It looks not > >>> easy in my side to upgrade the kernel version. It would affect those other > >>> device drivers I'm currently using. So, do you think there's any short cut > >>> to fix this problem under my current kernel version - v5.4? > >> > >>In that case, you need to ask for support from whoever forces you to > >>stay with such an old kernel. I believe that would be Xilinx. > > > > I have a thought to back port those changes around the dwc3 and gadget driver > > from the latest kernel version to my kernel (v5.4). Do you think this is > > feasible? > > should be, but it's likely quite a bit of work: > > $ git rev-list --count v5.4..linus/master -- drivers/usb/dwc3/ > 257 > > >>> 4. I read through the procedures to capture debug info by debugfs. However, > >>> in my test with "streaming_maxburst" set to 10 or above, my system would > >>> crash and I can't pick the log from that point. Any suggestion? > >> > >>have a look at ftrace_dump_on_oops. > > > > I will explore how to enable this > > > >> > > > > Btw, do you know which SoC platform can run the UVC gadget in max throughput. > > Raspberry Pi/TI Beaglebone/i.MX ??? > > Raspberry Pi uses dwc2 > Beaglebone uses musb > i.MX, I think some of them use dwc3 at least. > > -- > balbi -- Thanks, Peter Chen ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2021-06-07 11:26 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-05-14 3:20 [BUG REPORT] usb: dwc3: Bug while setting the USB transfer bandwidth on UVC gadget driver Chow, Watson 2021-05-14 7:16 ` Felipe Balbi 2021-05-14 8:59 ` Chow, Watson 2021-05-14 10:31 ` Felipe Balbi 2021-05-17 3:58 ` Chow, Watson 2021-05-17 5:32 ` Felipe Balbi 2021-06-04 2:53 ` Chow, Watson 2021-06-04 5:15 ` Felipe Balbi 2021-06-07 6:11 ` Peter Chen 2021-06-07 11:26 ` Chow, Watson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).