Re: [PATCH 2/4] usb: chipidea: udc: set endpoint to undefined maxpacket size on start

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

 



Hi,

On Thu, Aug 23, 2012 at 07:30:45PM +0200, Marc Kleine-Budde wrote:
> From: Michael Grzeschik <m.grzeschik@xxxxxxxxxxxxxx>
> 
> Non control endpoints have an undefined maxpacket size on udc start. Some
> gadget drivers check for the maxpacket size before they enable the endpoint,
> which leads to a wrong state.
> 
> Signed-off-by: Michael Grzeschik <m.grzeschik@xxxxxxxxxxxxxx>
> Signed-off-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>

which gadget drivers ? This doesn't look right to me. On dwc3 we
initialize endpoints as early as module probe (before gadget->start() is
even close to being called) and we have no issues at all setting ep0's
maxpacket to 512. Or were you setting maxpacket for all endpoints ??

If that was the case, then this is a fix which should even go to stable
;-)

>  drivers/usb/chipidea/udc.c |    8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
> index e4db7af..75a96ec 100644
> --- a/drivers/usb/chipidea/udc.c
> +++ b/drivers/usb/chipidea/udc.c
> @@ -1455,7 +1455,12 @@ static int init_eps(struct ci13xxx *ci)
>  
>  			mEp->ep.name      = mEp->name;
>  			mEp->ep.ops       = &usb_ep_ops;
> -			mEp->ep.maxpacket = CTRL_PAYLOAD_MAX;
> +			/*
> +			 * for ep0: maxP defined in desc, for other
> +			 * eps, maxP is set by epautoconfig() called
> +			 * by gadget layer
> +			 */
> +			mEp->ep.maxpacket = (unsigned short)~0;
>  
>  			INIT_LIST_HEAD(&mEp->qh.queue);
>  			mEp->qh.ptr = dma_pool_alloc(ci->qh_pool, GFP_KERNEL,
> @@ -1475,6 +1480,7 @@ static int init_eps(struct ci13xxx *ci)
>  				else
>  					ci->ep0in = mEp;
>  
> +				mEp->ep.maxpacket = CTRL_PAYLOAD_MAX;
>  				continue;
>  			}
>  
> -- 
> 1.7.10.4
> 

-- 
balbi

Attachment: signature.asc
Description: Digital signature


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

  Powered by Linux