summaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2019-04-09 12:24:36 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2019-04-09 12:24:36 +0200
commit9047e0620b50a26838990fcae83c3d007c7e1d28 (patch)
tree0acdbf2dac0f9c61e75197398246eb7bf07d7904 /drivers/usb
parentd44e3d642171fa506dcc5a6c1b2babe6b4b813bf (diff)
parent747be0f2bbedcc3bc397ab8be289885ee24e0dbf (diff)
downloadbarebox-9047e0620b50a26838990fcae83c3d007c7e1d28.tar.gz
barebox-9047e0620b50a26838990fcae83c3d007c7e1d28.tar.xz
Merge branch 'for-next/misc'
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/Kconfig13
-rw-r--r--drivers/usb/dwc3/core.c21
2 files changed, 27 insertions, 7 deletions
diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig
index 8ff3d18d4a..99eff1c8d2 100644
--- a/drivers/usb/Kconfig
+++ b/drivers/usb/Kconfig
@@ -7,21 +7,20 @@ menuconfig USB_HOST
if USB_HOST
-source drivers/usb/imx/Kconfig
+source "drivers/usb/imx/Kconfig"
source "drivers/usb/dwc3/Kconfig"
-source drivers/usb/host/Kconfig
+source "drivers/usb/host/Kconfig"
-source drivers/usb/otg/Kconfig
+source "drivers/usb/otg/Kconfig"
-source drivers/usb/storage/Kconfig
+source "drivers/usb/storage/Kconfig"
source "drivers/usb/misc/Kconfig"
endif
-source drivers/usb/gadget/Kconfig
-
-source drivers/usb/musb/Kconfig
+source "drivers/usb/gadget/Kconfig"
+source "drivers/usb/musb/Kconfig"
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 2e7031a348..60fd6318db 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -663,6 +663,25 @@ static void dwc3_check_params(struct dwc3 *dwc)
}
}
+static void dwc3_coresoft_reset(struct dwc3 *dwc)
+{
+ u32 reg;
+
+ reg = dwc3_readl(dwc->regs, DWC3_GCTL);
+ reg |= DWC3_GCTL_CORESOFTRESET;
+ dwc3_writel(dwc->regs, DWC3_GCTL, reg);
+
+ /*
+ * Similar reset sequence in U-Boot has a 100ms delay here. In
+ * practice reset sequence seem to work as expected even
+ * without a delay.
+ */
+
+ reg = dwc3_readl(dwc->regs, DWC3_GCTL);
+ reg &= ~DWC3_GCTL_CORESOFTRESET;
+ dwc3_writel(dwc->regs, DWC3_GCTL, reg);
+}
+
static int dwc3_probe(struct device_d *dev)
{
struct dwc3 *dwc;
@@ -695,6 +714,8 @@ static int dwc3_probe(struct device_d *dev)
if (ret)
return ret;
+ dwc3_coresoft_reset(dwc);
+
dwc3_cache_hwparams(dwc);
ret = dwc3_core_init(dwc);