Re: [PATCH V3] usb: dwc3: Handle pending control data out correctly

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

 



On Fri, May 04, 2012 at 04:28:34PM +0530, Pratyush Anand wrote:
> On 5/4/2012 4:11 PM, Felipe Balbi wrote:
> >On Fri, May 04, 2012 at 04:06:22PM +0530, Pratyush Anand wrote:
> >>On 5/4/2012 3:15 PM, Felipe Balbi wrote:
> >>>On Thu, May 03, 2012 at 07:05:05PM +0530, Pratyush Anand wrote:
> >>>>If transfer not ready is received before ep_queue is called for control
> >>>>out transfer then pending flag is set. Handling of this case was not
> >>>>correct.
> >>>>TRB size must be multiple of maxpacket for all control out transfer.
> >>>>dma sync function should also be called before start transfer.
> >>>>
> >>>>A routine to delegate transfer for control data has been extracted out
> >>>>from dwc3_ep0_do_control_data. Same routine has been called from
> >>>>ep_queue too in case of pending flag is set.
> >>>>
> >>>>Signed-off-by: Pratyush Anand<pratyush.anand@xxxxxx>
> >>>>Signed-off-by: Felipe Balbi<balbi@xxxxxx>
> >>>>---
> >>>>  drivers/usb/dwc3/ep0.c |   90 +++++++++++++++++++++++++----------------------
> >>>>  1 files changed, 48 insertions(+), 42 deletions(-)
> >>>>
> >>>>diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
> >>>>index 1f917d9..f0c5f85 100644
> >>>>--- a/drivers/usb/dwc3/ep0.c
> >>>>+++ b/drivers/usb/dwc3/ep0.c
> >>>>@@ -119,6 +119,49 @@ static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma,
> >>>>  	return 0;
> >>>>  }
> >>>>
> >>>>+static int dwc3_ep0_start_data_trans(struct dwc3 *dwc,
> >>>>+		struct dwc3_request *req)
> >>>>+{
> >>>>+	u32 transfer_size = req->request.length;
> >>>>+	struct dwc3_ep *dep = dwc->eps[0];
> >>>
> >>>you can't hardcode this to ep0. Physical endpoint 0 is *ONLY* for OUT
> >>>direction. physical endpoint 1 is *ONLY* for in direction.
> >>
> >>But , If I see original dwc3_ep0_do_control_data, then it does hard
> >>code to ep0.
> >
> >no, it does not. It starts the transfer with event->endpoint_number,
> >which contains the physical number. dep is hardcoded to ep0, but solely
> >because we only queue request on ep0 list.
> >
> >BTW, assuming req->direction contains the endpoint number isn't the best
> >way to go. It will work for ep0/1, of course, but only as long as we
> >don't change that flag to anything else. It's best to use
> >event->endpoint_number or dep->number, as I did on the version I just
> >sent.
> >
> 
> thanks, I will use your version.

I think it's a bit too late to send that this merge window, so I will
delay it to v3.6, that way we can make sure to hash out all possible
details and make sure it works on multiple platforms. Sounds good to
you ?

-- 
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