OSDN Git Service

usb: bdc: Halt controller on suspend
authorDanesh Petigara <danesh.petigara@broadcom.com>
Wed, 22 Jul 2020 17:07:45 +0000 (13:07 -0400)
committerFelipe Balbi <balbi@kernel.org>
Fri, 24 Jul 2020 13:45:15 +0000 (16:45 +0300)
GISB bus error kernel panics have been observed during S2 transition
tests on the 7271t platform. The errors are a result of the BDC
interrupt handler trying to access BDC register space after the
system's suspend callbacks have completed.

Adding a suspend hook to the BDC driver that halts the controller before
S2 entry thus preventing unwanted access to the BDC register space during
this transition.

Signed-off-by: Danesh Petigara <danesh.petigara@broadcom.com>
Signed-off-by: Al Cooper <alcooperx@gmail.com>
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
drivers/usb/gadget/udc/bdc/bdc_core.c

index d4ec1e3..0f1617e 100644 (file)
@@ -603,9 +603,14 @@ static int bdc_remove(struct platform_device *pdev)
 static int bdc_suspend(struct device *dev)
 {
        struct bdc *bdc = dev_get_drvdata(dev);
+       int ret;
 
-       clk_disable_unprepare(bdc->clk);
-       return 0;
+       /* Halt the controller */
+       ret = bdc_stop(bdc);
+       if (!ret)
+               clk_disable_unprepare(bdc->clk);
+
+       return ret;
 }
 
 static int bdc_resume(struct device *dev)