You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.5 KiB
Diff
36 lines
1.5 KiB
Diff
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;
|