]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/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)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Wed, 5 Sep 2018 08:30:45 +0000 (10:30 +0200)
BugLink: http://bugs.launchpad.net/bugs/1790188
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>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
drivers/usb/gadget/udc/renesas_usb3.c

index 409cde4e6a516495da098e6648d70069db3a738d..164dd310b11a059e9ed441437038841b5b737b7d 100644 (file)
@@ -622,6 +622,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);