diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-10-18 08:14:10 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-10-18 08:14:10 -0700 |
commit | 6b7ced68f3fbbab6e9625b957f1ea0add22a5ac7 (patch) | |
tree | 40e367c4a0c6fd920faa69b0f948fcb0877f7b40 /drivers/usb/musb/am35x.c | |
parent | 470809741a28c3092279f4e1f3f432e534d46068 (diff) | |
parent | 69da85edbab5cd42909d3ba65b3dad1c1fb40206 (diff) | |
download | linux-stable-6b7ced68f3fbbab6e9625b957f1ea0add22a5ac7.tar.gz linux-stable-6b7ced68f3fbbab6e9625b957f1ea0add22a5ac7.tar.bz2 linux-stable-6b7ced68f3fbbab6e9625b957f1ea0add22a5ac7.zip |
Merge tag 'fixes-for-v3.7-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-linus
usb: fixes for v3.7-rc2
Here's the first set of fixes for v3.7-rc cycle.
DesignWare Core USB3 Driver (dwc3) got two fixes. The first one fixes a long
standing bug which would keep endpoint with BUSY flag set forever if we cancel
a transfer which has already been started by the controller. The second fix
will just switch PHYs back off when DWC3 driver is removed.
MUSB fixed a bug which would cause a Kernel Oops at least on AM3517 when
removing a device. For some reason that particular device can fall into a
situation where you have both Disconnect and Endpoint IRQs happen
simultaneously (have both bits set in IRQ_STATUS register) and, because
Disconnect Interrupt is handled before Endpoint Interrupts, we would try to
transfer data over a disconnected device, thus generating a kernel oops.
Renensas' USB DRD driver got two fixes which are a) fixing an off-by-one bug on
the pipe iterator implementation and b) fixing Interrupt Status Clear procedure
in order to properly clear a single Interrupt event without clearing (and
masking) other events we didn't handle yet.
Diffstat (limited to 'drivers/usb/musb/am35x.c')
-rw-r--r-- | drivers/usb/musb/am35x.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/usb/musb/am35x.c b/drivers/usb/musb/am35x.c index 457f25e62c51..c964d6af178b 100644 --- a/drivers/usb/musb/am35x.c +++ b/drivers/usb/musb/am35x.c @@ -305,6 +305,12 @@ static irqreturn_t am35x_musb_interrupt(int irq, void *hci) ret = IRQ_HANDLED; } + /* Drop spurious RX and TX if device is disconnected */ + if (musb->int_usb & MUSB_INTR_DISCONNECT) { + musb->int_tx = 0; + musb->int_rx = 0; + } + if (musb->int_tx || musb->int_rx || musb->int_usb) ret |= musb_interrupt(musb); |