RE: USB Ethernet/RNDIS Gadget issue

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

 



Hi,

>>>> I finally bisect the kernel (I didn't known that command, thanks for the 
>>>> tip)
>>>> and found that it doesn't work anymore from this commit :
>>>>
>>>> b0bac2581c1918cc4ab0aca01977ad69f0bc127a is the first bad commit
>>>> commit b0bac2581c1918cc4ab0aca01977ad69f0bc127a
>>>> Author: Robert Baldyga <r.baldyga@xxxxxxxxxxx>
>>>> Date:   Wed Sep 16 12:10:42 2015 +0200
>>>>
>>>>     usb: gadget: introduce 'enabled' flag in struct usb_ep
>>>>
>>>>     This patch introduces 'enabled' flag in struct usb_ep, and modifies
>>>>     usb_ep_enable() and usb_ep_disable() functions to encapsulate endpoint
>>>>     enabled/disabled state. It helps to avoid enabling endpoints which are
>>>>     already enabled, and disabling endpoints which are already disables.
>>>>
>>>>     From now USB functions don't have to remember current endpoint
>>>>     enable/disable state, as this state is now handled automatically which
>>>>     makes this API less bug-prone.
>>>>
>>>>     Signed-off-by: Robert Baldyga <r.baldyga@xxxxxxxxxxx>
>>>>     Signed-off-by: Felipe Balbi <balbi@xxxxxx>
>>>>
>>>>
>>>> If I comment the test in function usb_ep_enable and usb_ep_disable to avoid
>>>> enabling or disabling endpoints that already are, it works.
>>>> But I guess the real issue is that this function is called more than once
>>>> at some point?
>>> 
>>> This is the second bug report involving Robert's series, we really need
>>> to give some deeper attention to this. Robert, care to comment ?
>>> 
>>> So, this means that if you let endpoints be enabled or disabled more
>>> than once, then it works ? Sounds like a bug in the UDC controller to
>>> me. Robert's patch just helped trigger the problem. Which controller
>>> were you using again ? Was it Atmel UDC ?
>>
>> Yes that's it, and issue occurs when I unplug/plug the cable... On first 
>> connection it works.
>> And yes I am using using atmel_usba_udc.c module.
>
>I wonder if there's a bug on atmel (or rndis function) where on cable
>disconnect, endpoint is left enabled. Can you check ?

Ok you are right, and indeed it seems related to Atmel udc driver.
Call to the function usba_ep_disable in atmel_usba_udc.c fail because 
of this code :

	if (!ep->ep.desc) {
		spin_unlock_irqrestore(&udc->lock, flags);
		/* REVISIT because this driver disables endpoints in
		 * reset_all_endpoints() before calling disconnect(),
		 * most gadget drivers would trigger this non-error ...
		 */
		if (udc->gadget.speed != USB_SPEED_UNKNOWN)
			DBG(DBG_ERR, "ep_disable: %s not enabled\n",
					ep->ep.name);
		return -EINVAL;
	}

That means that the function usb_ep_disable will not reset the enabled
flag so we think that endpoint is still enabled.
To confirm I just test without this part of code and it seems to work
but I don't know how it should be fixed, I am not very familiar with this...

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



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux