From: Ming Lei <[email protected]>
This patch fixes two bugs of OUT transfer in double buffer case:
-USE_MODE1 should be enabled except for ANOMALY_05000456 case, or
else may cause infinite hang and data error bug in double buffer
-DMA length should not go beyond the availabe space of request buffer
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, on my beagle B5, test#5(queued bulk out) may go beyond
14Mbyte/s
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]
[1],
-source of testusb : tools/usb/testusb.c under linux kernel;
Signed-off-by: Ming Lei <[email protected]>
Cc: Anand Gadiyar <[email protected]>
Cc: Mike Frysinger <[email protected]>
Cc: Sergei Shtylyov <[email protected]>
---
drivers/usb/musb/musb_dma.h | 2 ++
drivers/usb/musb/musb_gadget.c | 5 +++--
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/musb/musb_dma.h b/drivers/usb/musb/musb_dma.h
index 916065b..dff91ce 100644
--- a/drivers/usb/musb/musb_dma.h
+++ b/drivers/usb/musb/musb_dma.h
@@ -89,6 +89,8 @@ struct musb_hw_ep;
# if !ANOMALY_05000456
# define USE_MODE1
# endif
+#else
+# define USE_MODE1
#endif
/*
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index e0bd1c1..f1c44b9 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -662,10 +662,11 @@ static void rxstate(struct musb *musb, struct
musb_request *req)
if (request->actual < request->length) {
int transfer_size = 0;
#ifdef USE_MODE1
- transfer_size = min(request->length,
+ transfer_size = min(request->length -
request->actual,
channel->max_len);
#else
- transfer_size = len;
+ transfer_size = min(request->length -
request->actual,
+ len);
#endif
if (transfer_size <= musb_ep->packet_sz)
musb_ep->dma->desired_mode = 0;
--
1.6.2.5
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html