| From 19773a35580a7e709d1c65f0907b0745cd6f9c05 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 22 Jul 2020 13:07:45 -0400 |
| Subject: usb: bdc: Halt controller on suspend |
| |
| From: Danesh Petigara <danesh.petigara@broadcom.com> |
| |
| [ Upstream commit 5fc453d7de3d0c345812453823a3a56783c5f82c ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/usb/gadget/udc/bdc/bdc_core.c | 9 +++++++-- |
| 1 file changed, 7 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/usb/gadget/udc/bdc/bdc_core.c b/drivers/usb/gadget/udc/bdc/bdc_core.c |
| index 5fde5a8b065c1..2dca11f0a7444 100644 |
| --- a/drivers/usb/gadget/udc/bdc/bdc_core.c |
| +++ b/drivers/usb/gadget/udc/bdc/bdc_core.c |
| @@ -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) |
| -- |
| 2.25.1 |
| |