diff mbox series

[v2,1/5] USB: gadget: f_rndis: fix bitrate for SuperSpeed and above

Message ID 20201127140559.381351-2-gregkh@linuxfoundation.org
State Accepted
Commit b00f444f9add39b64d1943fa75538a1ebd54a290
Headers show
Series [v2,1/5] USB: gadget: f_rndis: fix bitrate for SuperSpeed and above | expand

Commit Message

Greg KH Nov. 27, 2020, 2:05 p.m. UTC
From: Will McVicker <willmcvicker@google.com>

Align the SuperSpeed Plus bitrate for f_rndis to match f_ncm's ncm_bitrate
defined by commit 1650113888fe ("usb: gadget: f_ncm: add SuperSpeed descriptors
for CDC NCM").

Cc: Felipe Balbi <balbi@kernel.org>
Cc: EJ Hsu <ejh@nvidia.com>
Cc: Peter Chen <peter.chen@nxp.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Will McVicker <willmcvicker@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/usb/gadget/function/f_rndis.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Peter Chen Nov. 30, 2020, 6:24 a.m. UTC | #1
On 20-11-27 15:05:55, Greg Kroah-Hartman wrote:
> From: Will McVicker <willmcvicker@google.com>

> 

> Align the SuperSpeed Plus bitrate for f_rndis to match f_ncm's ncm_bitrate

> defined by commit 1650113888fe ("usb: gadget: f_ncm: add SuperSpeed descriptors

> for CDC NCM").

> 

> Cc: Felipe Balbi <balbi@kernel.org>

> Cc: EJ Hsu <ejh@nvidia.com>

> Cc: Peter Chen <peter.chen@nxp.com>

> Cc: stable <stable@vger.kernel.org>

> Signed-off-by: Will McVicker <willmcvicker@google.com>

> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

> ---

>  drivers/usb/gadget/function/f_rndis.c | 4 +++-

>  1 file changed, 3 insertions(+), 1 deletion(-)

> 

> diff --git a/drivers/usb/gadget/function/f_rndis.c b/drivers/usb/gadget/function/f_rndis.c

> index 9534c8ab62a8..0739b05a0ef7 100644

> --- a/drivers/usb/gadget/function/f_rndis.c

> +++ b/drivers/usb/gadget/function/f_rndis.c

> @@ -87,8 +87,10 @@ static inline struct f_rndis *func_to_rndis(struct usb_function *f)

>  /* peak (theoretical) bulk transfer rate in bits-per-second */

>  static unsigned int bitrate(struct usb_gadget *g)

>  {

> +	if (gadget_is_superspeed(g) && g->speed >= USB_SPEED_SUPER_PLUS)

> +		return 4250000000U;


Is tested value or spec defined value?

>  	if (gadget_is_superspeed(g) && g->speed == USB_SPEED_SUPER)

> -		return 13 * 1024 * 8 * 1000 * 8;

> +		return 3750000000U;


13 * 1024 * 8 * 1000 * 8 = 851,968,000, how 3750000000U is calculated?

>  	else if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)

>  		return 13 * 512 * 8 * 1000 * 8;

>  	else

> -- 

> 2.29.2

> 


-- 

Thanks,
Peter Chen
William McVicker Nov. 30, 2020, 6:33 p.m. UTC | #2
On Mon, Nov 30, 2020 at 06:24:40AM +0000, Peter Chen wrote:
> On 20-11-27 15:05:55, Greg Kroah-Hartman wrote:

> > From: Will McVicker <willmcvicker@google.com>

> > 

> > Align the SuperSpeed Plus bitrate for f_rndis to match f_ncm's ncm_bitrate

> > defined by commit 1650113888fe ("usb: gadget: f_ncm: add SuperSpeed descriptors

> > for CDC NCM").

> > 

> > Cc: Felipe Balbi <balbi@kernel.org>

> > Cc: EJ Hsu <ejh@nvidia.com>

> > Cc: Peter Chen <peter.chen@nxp.com>

> > Cc: stable <stable@vger.kernel.org>

> > Signed-off-by: Will McVicker <willmcvicker@google.com>

> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

> > ---

> >  drivers/usb/gadget/function/f_rndis.c | 4 +++-

> >  1 file changed, 3 insertions(+), 1 deletion(-)

> > 

> > diff --git a/drivers/usb/gadget/function/f_rndis.c b/drivers/usb/gadget/function/f_rndis.c

> > index 9534c8ab62a8..0739b05a0ef7 100644

> > --- a/drivers/usb/gadget/function/f_rndis.c

> > +++ b/drivers/usb/gadget/function/f_rndis.c

> > @@ -87,8 +87,10 @@ static inline struct f_rndis *func_to_rndis(struct usb_function *f)

> >  /* peak (theoretical) bulk transfer rate in bits-per-second */

> >  static unsigned int bitrate(struct usb_gadget *g)

> >  {

> > +	if (gadget_is_superspeed(g) && g->speed >= USB_SPEED_SUPER_PLUS)

> > +		return 4250000000U;

> 

> Is tested value or spec defined value?

> 

> >  	if (gadget_is_superspeed(g) && g->speed == USB_SPEED_SUPER)

> > -		return 13 * 1024 * 8 * 1000 * 8;

> > +		return 3750000000U;

> 

> 13 * 1024 * 8 * 1000 * 8 = 851,968,000, how 3750000000U is calculated?

> 

> >  	else if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)

> >  		return 13 * 512 * 8 * 1000 * 8;

> >  	else

> > -- 

> > 2.29.2

> > 

> 

> -- 

> 

> Thanks,

> Peter Chen


Hi Peter,

Thanks for the reviews! Regarding the updated transfer rates, please refer to
the f_ncm commit email thread by Lorenzo that explains the reasoning behind
these speeds:

https://patchwork.kernel.org/project/linux-usb/patch/20200818165848.4117493-1-lorenzo@google.com/

Thanks,
Will
Peter Chen Dec. 1, 2020, 8:48 a.m. UTC | #3
>
> From: Will McVicker <willmcvicker@google.com>
>

Reviewed-by: Peter Chen <peter.chen@nxp.com>

Peter
> Align the SuperSpeed Plus bitrate for f_rndis to match f_ncm's ncm_bitrate
> defined by commit 1650113888fe ("usb: gadget: f_ncm: add SuperSpeed descriptors
> for CDC NCM").
>
> Cc: Felipe Balbi <balbi@kernel.org>
> Cc: EJ Hsu <ejh@nvidia.com>
> Cc: Peter Chen <peter.chen@nxp.com>
> Cc: stable <stable@vger.kernel.org>
> Signed-off-by: Will McVicker <willmcvicker@google.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
>  drivers/usb/gadget/function/f_rndis.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/gadget/function/f_rndis.c b/drivers/usb/gadget/function/f_rndis.c
> index 9534c8ab62a8..0739b05a0ef7 100644
> --- a/drivers/usb/gadget/function/f_rndis.c
> +++ b/drivers/usb/gadget/function/f_rndis.c
> @@ -87,8 +87,10 @@ static inline struct f_rndis *func_to_rndis(struct usb_function *f)
>  /* peak (theoretical) bulk transfer rate in bits-per-second */
>  static unsigned int bitrate(struct usb_gadget *g)
>  {
> +       if (gadget_is_superspeed(g) && g->speed >= USB_SPEED_SUPER_PLUS)
> +               return 4250000000U;
>         if (gadget_is_superspeed(g) && g->speed == USB_SPEED_SUPER)
> -               return 13 * 1024 * 8 * 1000 * 8;
> +               return 3750000000U;
>         else if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)
>                 return 13 * 512 * 8 * 1000 * 8;
>         else
> --
> 2.29.2
>
diff mbox series

Patch

diff --git a/drivers/usb/gadget/function/f_rndis.c b/drivers/usb/gadget/function/f_rndis.c
index 9534c8ab62a8..0739b05a0ef7 100644
--- a/drivers/usb/gadget/function/f_rndis.c
+++ b/drivers/usb/gadget/function/f_rndis.c
@@ -87,8 +87,10 @@  static inline struct f_rndis *func_to_rndis(struct usb_function *f)
 /* peak (theoretical) bulk transfer rate in bits-per-second */
 static unsigned int bitrate(struct usb_gadget *g)
 {
+	if (gadget_is_superspeed(g) && g->speed >= USB_SPEED_SUPER_PLUS)
+		return 4250000000U;
 	if (gadget_is_superspeed(g) && g->speed == USB_SPEED_SUPER)
-		return 13 * 1024 * 8 * 1000 * 8;
+		return 3750000000U;
 	else if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)
 		return 13 * 512 * 8 * 1000 * 8;
 	else