[RFC] [PATCH] usb: gadget: fix dtd dma confusion
Chen Peter-B29397
B29397 at freescale.com
Mon May 14 11:11:10 EST 2012
> > See here:
> > daec765da767e4a6a30e1298862b28f2cae9a73f
> > usb: gadget: mv_udc: fix dtd dma confusion
> >
> > So hereby I'm CC-ing all *udc.c maintainers to point out that this
> > issue maybe affects you too.
> >
> >
> > ---
> > Subject: [PATCH] usb: gadget: fsl_udc: fix dtd dma confusion
> >
> > The controller will hang when doing testings with g_ether and iperf
> > (tool for measuring maximum TCP and UDP bandwidth). This patch adds a
> > delay to wait for controller to release dtd dma before freeing it.
> >
> > Signed-off-by: Christoph Fritz <chf.fritz at googlemail.com>
> > ---
> > drivers/usb/gadget/fsl_udc_core.c | 9 +++++++++
> > 1 files changed, 9 insertions(+), 0 deletions(-)
> >
> > diff --git a/drivers/usb/gadget/fsl_udc_core.c
> b/drivers/usb/gadget/fsl_udc_core.c
> > index 55abfb6..fc86108 100644
> > --- a/drivers/usb/gadget/fsl_udc_core.c
> > +++ b/drivers/usb/gadget/fsl_udc_core.c
> > @@ -1638,6 +1638,15 @@ static int process_ep_req(struct fsl_udc *udc,
> int pipe,
> > status = REQ_UNCOMPLETE;
> > return status;
> > } else if (remaining_length) {
> > + /* wait controller release dtd dma */
> > + while ((curr_qh->curr_dtd_ptr == curr_td->td_dma)) {
> > + if (curr_td->next_td_ptr ==
> > + EP_QUEUE_HEAD_NEXT_TERMINATE) {
> > + udelay(100);
> > + break;
> > + }
> > + udelay(1);
> > + }
> > if (direction) {
> > VDBG("Transmit dTD remaining length not zero");
> > status = -EPROTO;
> > --
> > 1.7.2.5
>
> ping - what about this patch? Will it be applied?
>
Christoph, it is better use errata suggests workaround (postpone free dtd memory),
and you can find related code at:
http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/tree/
drivers/usb/gadget/arcotg_udc.c?h=imx_3.0.15
The code is defined with POSTPONE_FREE_LAST_DTD
> Thanks,
> -- Christoph
>
More information about the Linuxppc-dev
mailing list