Hello.
Anand Gadiyar wrote:
MUSB: Fix aborted RX-DMA path
In the MUSB rxstate function, if channel_program() returns an
error, then we use PIO mode to carry out that RX transfer.
For this to work correctly, we need to de-assert DMAENAB in
RXCSR.
Signed-off-by: Anand Gadiyar <gadiyar@xxxxxx>
Cc: Felipe Balbi <felipe.balbi@xxxxxxxxx>
Cc: David Brownell <dbrownell@xxxxxxxxxxxxxxxxxxxxx>
Cc: Ajay Kumar Gupta <ajay.gupta@xxxxxx>
---
(Resending with updated $SUBJECT. Sorry for the noise)
In current code, this bug is purely academic, since channel_program()
always returns success. However, if it ever failed, then the
fix is needed. We spent some time to debug this when we deliberately
made channel_program fail (to test the PIO path), so I think this
fix is worth having.
It's probably not required for the stable trees.
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index 8b3c4e2..cfac24d 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -688,8 +688,15 @@ static void rxstate(struct musb *musb, struct musb_request *req)
transfer_size);
}
- if (use_dma)
+ if (use_dma) {
Unneeded change -- you don't need braces around a single *return*.
return;
+ } else {
+ /* Need to clear DMAENAB for the
+ * backup PIO mode transfer to work
+ */
+ csr &= ~MUSB_RXCSR_DMAENAB;
+ musb_writew(epio, MUSB_RXCSR, csr);
+ }
}
#endif /* Mentor's DMA */
WBR, Sergei
--
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