Re: [PATCH 1/2] USB: musb-gadget: enable autoclear for OUT transfer in both DMA 0 and DMA 1

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

 



2010/8/27 Gadiyar, Anand <gadiyar@xxxxxx>:
> tom.leiming@xxxxxxxxx wrote:
>>
>> From: Ming Lei <tom.leiming@xxxxxxxxx>
>>
>> This patch fixes one bugs of OUT transfer in double buffer case:
>>
>> -the current code only enable autoclear for dma mode 1, and not
>> for dma mode 0
>>
>> Without this patch, test #5 of usbtest can't be passed if we
>> configure musb as g_zero and use fifo mode 3 to enable double
>> buffer mode.
>>
>> With this patch and the following patch(fix dma length),
>> on my beagle B5, test#5(queued bulk out) may go beyond
>> 18Mbyte/s(seems dma mode 0 is quicker in double buffer case)
>> if musb is configured as g_zero and fifo mode 3 is taken, follows
>> the test command:
>>
>>     #./testusb -D DEV_NAME -c 1024 -t 5 -s 32768 -g 8   [1]
>>
>> Also I have tested this patch can't make g_ether broken.
>>
>> [1],
>>     -source of testusb : tools/usb/testusb.c under linux kernel;
>>
>> Signed-off-by: Ming Lei <tom.leiming@xxxxxxxxx>
>> Cc: Anand Gadiyar <gadiyar@xxxxxx>
>> Cc: Mike Frysinger <vapier@xxxxxxxxxx>
>> Cc: Sergei Shtylyov <sshtylyov@xxxxxxxxxxxxx>
>
> I'm not 100% sure why not having autoclear was causing a failure
> with double-buffering enabled. I'd like this patch to be tested
> more on OMAP as well as on Blackfin/Davinci.

We don't clear MUSB_RXCSR_RXPKTRDY explicitly when dma complete,
so if autoclear is not enabled, the dma read for packets from fifo will
not be acked, then any odd things may happen...

I have tested the patch for both single buffer and double buffer case,
test #5 and test #6 are passed, and result of test #5 in double buffer
may go beyond 18M/s(seems much quicker than dma mode 1).

Also, g_ether is OK with the patch.

>
> I'll need time to study MUSB specs again to understand this,
> so I'll skip acking this patch and let Felipe/Sergei/Mike/Ajay
> take a look.

Very good.

>
> Thanks for taking the time to debug this - if this patch series
> makes double buffering work reliably, that's a very good boost
> to throughput.

>
> - Anand
>
>> ---
>>  drivers/usb/musb/musb_gadget.c |    2 +-
>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
>> index e0bd1c1..c0dfec4 100644
>> --- a/drivers/usb/musb/musb_gadget.c
>> +++ b/drivers/usb/musb/musb_gadget.c
>> @@ -645,9 +645,9 @@ static void rxstate(struct musb *musb, struct musb_request *req)
>>        */
>>
>>                               csr |= MUSB_RXCSR_DMAENAB;
>> -#ifdef USE_MODE1
>>                               if (!musb_ep->hb_mult)
>>                                       csr |= MUSB_RXCSR_AUTOCLEAR;
>> +#ifdef USE_MODE1
>>                               /* csr |= MUSB_RXCSR_DMAMODE; */
>>
>>                               /* this special sequence (enabling and then
>> --
>> 1.6.2.5
>>
>>



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