diff options
author | Andrew Goodbody <andrew.goodbody@cambrionix.com> | 2016-05-31 11:05:26 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-06-01 17:58:59 -0400 |
commit | f3eec0cf784e0d6c47822ca6b66df3d5812af7e6 (patch) | |
tree | 429eaa598a46f5f36270142726f2471cfde32077 | |
parent | 04471eb8c3158c0ad9df4b24da845a63b2e8f23a (diff) |
usb: musb: Ensure rx reinit occurs for shared_fifo endpoints
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>
Cc: stable@vger.kernel.org
Signed-off-by: Bin Liu <b-liu@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/usb/musb/musb_host.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c index f0931c418f83..327f39c8c174 100644 --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c | |||
@@ -600,14 +600,13 @@ musb_rx_reinit(struct musb *musb, struct musb_qh *qh, u8 epnum) | |||
600 | musb_writew(ep->regs, MUSB_TXCSR, 0); | 600 | musb_writew(ep->regs, MUSB_TXCSR, 0); |
601 | 601 | ||
602 | /* scrub all previous state, clearing toggle */ | 602 | /* scrub all previous state, clearing toggle */ |
603 | } else { | ||
604 | csr = musb_readw(ep->regs, MUSB_RXCSR); | ||
605 | if (csr & MUSB_RXCSR_RXPKTRDY) | ||
606 | WARNING("rx%d, packet/%d ready?\n", ep->epnum, | ||
607 | musb_readw(ep->regs, MUSB_RXCOUNT)); | ||
608 | |||
609 | musb_h_flush_rxfifo(ep, MUSB_RXCSR_CLRDATATOG); | ||
610 | } | 603 | } |
604 | csr = musb_readw(ep->regs, MUSB_RXCSR); | ||
605 | if (csr & MUSB_RXCSR_RXPKTRDY) | ||
606 | WARNING("rx%d, packet/%d ready?\n", ep->epnum, | ||
607 | musb_readw(ep->regs, MUSB_RXCOUNT)); | ||
608 | |||
609 | musb_h_flush_rxfifo(ep, MUSB_RXCSR_CLRDATATOG); | ||
611 | 610 | ||
612 | /* target addr and (for multipoint) hub addr/port */ | 611 | /* target addr and (for multipoint) hub addr/port */ |
613 | if (musb->is_multipoint) { | 612 | if (musb->is_multipoint) { |