| From f3eec0cf784e0d6c47822ca6b66df3d5812af7e6 Mon Sep 17 00:00:00 2001 |
| From: Andrew Goodbody <andrew.goodbody@cambrionix.com> |
| Date: Tue, 31 May 2016 10:05:26 -0500 |
| Subject: usb: musb: Ensure rx reinit occurs for shared_fifo endpoints |
| |
| From: Andrew Goodbody <andrew.goodbody@cambrionix.com> |
| |
| commit f3eec0cf784e0d6c47822ca6b66df3d5812af7e6 upstream. |
| |
| shared_fifo endpoints would only get a previous tx state cleared |
| out, the rx state was only cleared for non shared_fifo endpoints |
| Change this so that the rx state is cleared for all endpoints. |
| This addresses an issue that resulted in rx packets being dropped |
| silently. |
| |
| Signed-off-by: Andrew Goodbody <andrew.goodbody@cambrionix.com> |
| Signed-off-by: Bin Liu <b-liu@ti.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/musb/musb_host.c | 13 ++++++------- |
| 1 file changed, 6 insertions(+), 7 deletions(-) |
| |
| --- a/drivers/usb/musb/musb_host.c |
| +++ b/drivers/usb/musb/musb_host.c |
| @@ -583,14 +583,13 @@ musb_rx_reinit(struct musb *musb, struct |
| musb_writew(ep->regs, MUSB_TXCSR, 0); |
| |
| /* scrub all previous state, clearing toggle */ |
| - } else { |
| - csr = musb_readw(ep->regs, MUSB_RXCSR); |
| - if (csr & MUSB_RXCSR_RXPKTRDY) |
| - WARNING("rx%d, packet/%d ready?\n", ep->epnum, |
| - musb_readw(ep->regs, MUSB_RXCOUNT)); |
| - |
| - musb_h_flush_rxfifo(ep, MUSB_RXCSR_CLRDATATOG); |
| } |
| + csr = musb_readw(ep->regs, MUSB_RXCSR); |
| + if (csr & MUSB_RXCSR_RXPKTRDY) |
| + WARNING("rx%d, packet/%d ready?\n", ep->epnum, |
| + musb_readw(ep->regs, MUSB_RXCOUNT)); |
| + |
| + musb_h_flush_rxfifo(ep, MUSB_RXCSR_CLRDATATOG); |
| |
| /* target addr and (for multipoint) hub addr/port */ |
| if (musb->is_multipoint) { |