]> git.hungrycats.org Git - linux/commitdiff
usb: gadget: udc: renesas_usb3: disable the controller's irqs for reconnecting
authorYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Tue, 10 Apr 2018 05:38:54 +0000 (14:38 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 16 Jun 2018 07:52:33 +0000 (09:52 +0200)
commit bd6bce004d78b867ba0c6d3712f1c5b50398af9a upstream.

This patch fixes an issue that reconnection is possible to fail
because unexpected state handling happens by the irqs. To fix the issue,
the driver disables the controller's irqs when disconnected.

Fixes: 746bfe63bba3 ("usb: gadget: renesas_usb3: add support for Renesas USB3.0 peripheral controller")
Cc: <stable@vger.kernel.org> # v4.5+
Reviewed-by: Simon Horman <horms+renesas@verge.net.au>
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/gadget/udc/renesas_usb3.c

index 2197a50ed2ab814967df57acc73af438f760dda9..b1ae944c83a939a380e9785db4666924056c5bbd 100644 (file)
@@ -521,6 +521,13 @@ static void usb3_disconnect(struct renesas_usb3 *usb3)
        usb3_usb2_pullup(usb3, 0);
        usb3_clear_bit(usb3, USB30_CON_B3_CONNECT, USB3_USB30_CON);
        usb3_reset_epc(usb3);
+       usb3_disable_irq_1(usb3, USB_INT_1_B2_RSUM | USB_INT_1_B3_PLLWKUP |
+                          USB_INT_1_B3_LUPSUCS | USB_INT_1_B3_DISABLE |
+                          USB_INT_1_SPEED | USB_INT_1_B3_WRMRST |
+                          USB_INT_1_B3_HOTRST | USB_INT_1_B2_SPND |
+                          USB_INT_1_B2_L1SPND | USB_INT_1_B2_USBRST);
+       usb3_clear_bit(usb3, USB_COM_CON_SPD_MODE, USB3_USB_COM_CON);
+       usb3_init_epc_registers(usb3);
 
        if (usb3->driver)
                usb3->driver->disconnect(&usb3->gadget);