Patch "usb: gadget: f_ncm: fix ncm_bitrate for SuperSpeed and above." has been added to the 5.4-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    usb: gadget: f_ncm: fix ncm_bitrate for SuperSpeed and above.

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     usb-gadget-f_ncm-fix-ncm_bitrate-for-superspeed-and-.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e93a5c57171ebf1644631bf7256d9d80328c3367
Author: Lorenzo Colitti <lorenzo@xxxxxxxxxx>
Date:   Tue Aug 25 14:55:03 2020 +0900

    usb: gadget: f_ncm: fix ncm_bitrate for SuperSpeed and above.
    
    [ Upstream commit 986499b1569af980a819817f17238015b27793f6 ]
    
    Currently, SuperSpeed NCM gadgets report a speed of 851 Mbps
    in USB_CDC_NOTIFY_SPEED_CHANGE. But the calculation appears to
    assume 16 packets per microframe, and USB 3 and above no longer
    use microframes.
    
    Maximum speed is actually much higher. On a direct connection,
    theoretical throughput is at most 3.86 Gbps for gen1x1 and
    9.36 Gbps for gen2x1, and I have seen gadget->host iperf
    throughput of >2 Gbps for gen1x1 and >4 Gbps for gen2x1.
    
    Unfortunately the ConnectionSpeedChange defined in the CDC spec
    only uses 32-bit values, so we can't report accurate numbers for
    10Gbps and above. So, report 3.75Gbps for SuperSpeed (which is
    roughly maximum theoretical performance) and 4.25Gbps for
    SuperSpeed Plus (which is close to the maximum that we can report
    in a 32-bit unsigned integer).
    
    This results in:
    
    [50879.191272] cdc_ncm 2-2:1.0 enx228b127e050c: renamed from usb0
    [50879.234778] cdc_ncm 2-2:1.0 enx228b127e050c: 3750 mbit/s downlink 3750 mbit/s uplink
    
    on SuperSpeed and:
    
    [50798.434527] cdc_ncm 8-2:1.0 enx228b127e050c: renamed from usb0
    [50798.524278] cdc_ncm 8-2:1.0 enx228b127e050c: 4250 mbit/s downlink 4250 mbit/s uplink
    
    on SuperSpeed Plus.
    
    Fixes: 1650113888fe ("usb: gadget: f_ncm: add SuperSpeed descriptors for CDC NCM")
    Reviewed-by: Maciej Żenczykowski <maze@xxxxxxxxxx>
    Signed-off-by: Lorenzo Colitti <lorenzo@xxxxxxxxxx>
    Signed-off-by: Felipe Balbi <balbi@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/usb/gadget/function/f_ncm.c b/drivers/usb/gadget/function/f_ncm.c
index 1f638759a9533..7672fa25085b0 100644
--- a/drivers/usb/gadget/function/f_ncm.c
+++ b/drivers/usb/gadget/function/f_ncm.c
@@ -85,8 +85,10 @@ static inline struct f_ncm *func_to_ncm(struct usb_function *f)
 /* peak (theoretical) bulk transfer rate in bits-per-second */
 static inline unsigned ncm_bitrate(struct usb_gadget *g)
 {
-	if (gadget_is_superspeed(g) && g->speed == USB_SPEED_SUPER)
-		return 13 * 1024 * 8 * 1000 * 8;
+	if (gadget_is_superspeed(g) && g->speed >= USB_SPEED_SUPER_PLUS)
+		return 4250000000U;
+	else if (gadget_is_superspeed(g) && g->speed == USB_SPEED_SUPER)
+		return 3750000000U;
 	else if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)
 		return 13 * 512 * 8 * 1000 * 8;
 	else



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux