[v2] usb: gadget: zero: Fix SuperSpeed enumeration for alternate setting 1

Message ID 1395852398-7578-1-git-send-email-rogerq@ti.com
State Accepted
Commit 9c1b70361e0b38e4acb8e62b54da66538cb77ff2
Headers show

Commit Message

Roger Quadros March 26, 2014, 4:46 p.m.
It was impossible to enumerate on a SuperSpeed (XHCI) host
with alternate setting = 1 due to the wrongly set 'bMaxBurst'
field in the SuperSpeed Endpoint Companion descriptor.

Testcase:
<host> modprobe -r usbtest; modprobe usbtest alt=1
<device> modprobe g_zero
plug device to SuperSpeed port on the host.

Without this patch the host always complains like so
"usb 12-2: Not enough bandwidth for new device state.
 usb 12-2: Not enough bandwidth for altsetting 1"

Bug was introduced by commit cf9a08ae in v3.9

Fixes: cf9a08ae5aec (usb: gadget: convert source sink and loopback to
new function interface)

Cc: 3.9+ <stable@vger.kernel.org> # 3.9+
Reviewed-by: Felipe Balbi <balbi@ti.com>
Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
 drivers/usb/gadget/zero.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Roger Quadros April 22, 2014, 12:28 p.m. | #1
Hi Felipe,

On 03/26/2014 06:46 PM, Roger Quadros wrote:
> It was impossible to enumerate on a SuperSpeed (XHCI) host
> with alternate setting = 1 due to the wrongly set 'bMaxBurst'
> field in the SuperSpeed Endpoint Companion descriptor.
> 
> Testcase:
> <host> modprobe -r usbtest; modprobe usbtest alt=1
> <device> modprobe g_zero
> plug device to SuperSpeed port on the host.
> 
> Without this patch the host always complains like so
> "usb 12-2: Not enough bandwidth for new device state.
>  usb 12-2: Not enough bandwidth for altsetting 1"
> 
> Bug was introduced by commit cf9a08ae in v3.9
> 
> Fixes: cf9a08ae5aec (usb: gadget: convert source sink and loopback to
> new function interface)
> 
> Cc: 3.9+ <stable@vger.kernel.org> # 3.9+
> Reviewed-by: Felipe Balbi <balbi@ti.com>
> Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> Signed-off-by: Roger Quadros <rogerq@ti.com>

Can you please queue this for -rc fixes? Thanks.

cheers,
-roger

> ---
>  drivers/usb/gadget/zero.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/gadget/zero.c b/drivers/usb/gadget/zero.c
> index 9f170c5..134f354 100644
> --- a/drivers/usb/gadget/zero.c
> +++ b/drivers/usb/gadget/zero.c
> @@ -300,7 +300,7 @@ static int __init zero_bind(struct usb_composite_dev *cdev)
>  	ss_opts->isoc_interval = gzero_options.isoc_interval;
>  	ss_opts->isoc_maxpacket = gzero_options.isoc_maxpacket;
>  	ss_opts->isoc_mult = gzero_options.isoc_mult;
> -	ss_opts->isoc_maxburst = gzero_options.isoc_maxpacket;
> +	ss_opts->isoc_maxburst = gzero_options.isoc_maxburst;
>  	ss_opts->bulk_buflen = gzero_options.bulk_buflen;
>  
>  	func_ss = usb_get_function(func_inst_ss);
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Roger Quadros April 22, 2014, 12:35 p.m. | #2
Felipe,

Sorry for the noise. I see that they have been applied already.

cheers,
-roger

On 04/22/2014 03:28 PM, Roger Quadros wrote:
> Hi Felipe,
> 
> On 03/26/2014 06:46 PM, Roger Quadros wrote:
>> It was impossible to enumerate on a SuperSpeed (XHCI) host
>> with alternate setting = 1 due to the wrongly set 'bMaxBurst'
>> field in the SuperSpeed Endpoint Companion descriptor.
>>
>> Testcase:
>> <host> modprobe -r usbtest; modprobe usbtest alt=1
>> <device> modprobe g_zero
>> plug device to SuperSpeed port on the host.
>>
>> Without this patch the host always complains like so
>> "usb 12-2: Not enough bandwidth for new device state.
>>  usb 12-2: Not enough bandwidth for altsetting 1"
>>
>> Bug was introduced by commit cf9a08ae in v3.9
>>
>> Fixes: cf9a08ae5aec (usb: gadget: convert source sink and loopback to
>> new function interface)
>>
>> Cc: 3.9+ <stable@vger.kernel.org> # 3.9+
>> Reviewed-by: Felipe Balbi <balbi@ti.com>
>> Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>> Signed-off-by: Roger Quadros <rogerq@ti.com>
> 
> Can you please queue this for -rc fixes? Thanks.
> 
> cheers,
> -roger
> 
>> ---
>>  drivers/usb/gadget/zero.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/usb/gadget/zero.c b/drivers/usb/gadget/zero.c
>> index 9f170c5..134f354 100644
>> --- a/drivers/usb/gadget/zero.c
>> +++ b/drivers/usb/gadget/zero.c
>> @@ -300,7 +300,7 @@ static int __init zero_bind(struct usb_composite_dev *cdev)
>>  	ss_opts->isoc_interval = gzero_options.isoc_interval;
>>  	ss_opts->isoc_maxpacket = gzero_options.isoc_maxpacket;
>>  	ss_opts->isoc_mult = gzero_options.isoc_mult;
>> -	ss_opts->isoc_maxburst = gzero_options.isoc_maxpacket;
>> +	ss_opts->isoc_maxburst = gzero_options.isoc_maxburst;
>>  	ss_opts->bulk_buflen = gzero_options.bulk_buflen;
>>  
>>  	func_ss = usb_get_function(func_inst_ss);
>>
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/usb/gadget/zero.c b/drivers/usb/gadget/zero.c
index 9f170c5..134f354 100644
--- a/drivers/usb/gadget/zero.c
+++ b/drivers/usb/gadget/zero.c
@@ -300,7 +300,7 @@  static int __init zero_bind(struct usb_composite_dev *cdev)
 	ss_opts->isoc_interval = gzero_options.isoc_interval;
 	ss_opts->isoc_maxpacket = gzero_options.isoc_maxpacket;
 	ss_opts->isoc_mult = gzero_options.isoc_mult;
-	ss_opts->isoc_maxburst = gzero_options.isoc_maxpacket;
+	ss_opts->isoc_maxburst = gzero_options.isoc_maxburst;
 	ss_opts->bulk_buflen = gzero_options.bulk_buflen;
 
 	func_ss = usb_get_function(func_inst_ss);