usb: dwc2: Fix shutdown callback in platform
authorMinas Harutyunyan <Minas.Harutyunyan@synopsys.com>
Sat, 30 May 2020 07:41:50 +0000 (11:41 +0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Jul 2020 07:10:52 +0000 (09:10 +0200)
commit 4fdf228cdf6925af45a2066d403821e0977bfddb upstream.

To avoid lot of interrupts from dwc2 core, which can be asserted in
specific conditions need to disable interrupts on HW level instead of
disable IRQs on Kernel level, because of IRQ can be shared between
drivers.

Cc: stable@vger.kernel.org
Fixes: a40a00318c7fc ("usb: dwc2: add shutdown callback to platform variant")
Tested-by: Frank Mori Hess <fmh6jj@gmail.com>
Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
Reviewed-by: Doug Anderson <dianders@chromium.org>
Reviewed-by: Frank Mori Hess <fmh6jj@gmail.com>
Signed-off-by: Minas Harutyunyan <hminas@synopsys.com>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/dwc2/platform.c

index 63178ed7f6507ca7c5849a04fb57240e1a715f9d..38926495c751d6363ac1ba0837a30a158bdebc0c 100644 (file)
@@ -507,7 +507,8 @@ static void dwc2_driver_shutdown(struct platform_device *dev)
 {
        struct dwc2_hsotg *hsotg = platform_get_drvdata(dev);
 
-       disable_irq(hsotg->irq);
+       dwc2_disable_global_interrupts(hsotg);
+       synchronize_irq(hsotg->irq);
 }
 
 static const struct of_device_id dwc2_of_match_table[] = {