diff options
Diffstat (limited to 'target/linux/lantiq/patches-4.19/0002-usb-dwc2-use-a-longer-AHB-idle-timeout-in-dwc2_core_.patch')
-rw-r--r-- | target/linux/lantiq/patches-4.19/0002-usb-dwc2-use-a-longer-AHB-idle-timeout-in-dwc2_core_.patch | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/target/linux/lantiq/patches-4.19/0002-usb-dwc2-use-a-longer-AHB-idle-timeout-in-dwc2_core_.patch b/target/linux/lantiq/patches-4.19/0002-usb-dwc2-use-a-longer-AHB-idle-timeout-in-dwc2_core_.patch new file mode 100644 index 0000000000..c004e44e4a --- /dev/null +++ b/target/linux/lantiq/patches-4.19/0002-usb-dwc2-use-a-longer-AHB-idle-timeout-in-dwc2_core_.patch @@ -0,0 +1,35 @@ +From bfe92b01cafebb10f0d7f38dceb37433687b7887 Mon Sep 17 00:00:00 2001 +From: Martin Blumenstingl <martin.blumenstingl@googlemail.com> +Date: Thu, 20 Jun 2019 19:50:22 +0200 +Subject: [PATCH] usb: dwc2: use a longer AHB idle timeout in dwc2_core_reset() + +Use a 10000us AHB idle timeout in dwc2_core_reset() and make it +consistent with the other "wait for AHB master IDLE state" ocurrences. + +This fixes a problem for me where dwc2 would not want to initialize when +updating to 4.19 on a MIPS Lantiq VRX200 SoC. dwc2 worked fine with +4.14. +Testing on my board shows that it takes 180us until AHB master IDLE +state is signalled. The very old vendor driver for this SoC (ifxhcd) +used a 1 second timeout. +Use the same timeout that is used everywhere when polling for +GRSTCTL_AHBIDLE instead of using a timeout that "works for one board" +(180us in my case) to have consistent behavior across the dwc2 driver. + +Cc: linux-stable <stable@vger.kernel.org> # 4.19+ +Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> +--- + drivers/usb/dwc2/core.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/dwc2/core.c ++++ b/drivers/usb/dwc2/core.c +@@ -531,7 +531,7 @@ int dwc2_core_reset(struct dwc2_hsotg *h + } + + /* Wait for AHB master IDLE state */ +- if (dwc2_hsotg_wait_bit_set(hsotg, GRSTCTL, GRSTCTL_AHBIDLE, 50)) { ++ if (dwc2_hsotg_wait_bit_set(hsotg, GRSTCTL, GRSTCTL_AHBIDLE, 10000)) { + dev_warn(hsotg->dev, "%s: HANG! AHB Idle timeout GRSTCTL GRSTCTL_AHBIDLE\n", + __func__); + return -EBUSY; |