diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2019-04-09 12:24:36 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-04-09 12:24:36 +0200 |
commit | 9047e0620b50a26838990fcae83c3d007c7e1d28 (patch) | |
tree | 0acdbf2dac0f9c61e75197398246eb7bf07d7904 /drivers/usb | |
parent | d44e3d642171fa506dcc5a6c1b2babe6b4b813bf (diff) | |
parent | 747be0f2bbedcc3bc397ab8be289885ee24e0dbf (diff) | |
download | barebox-9047e0620b50a26838990fcae83c3d007c7e1d28.tar.gz barebox-9047e0620b50a26838990fcae83c3d007c7e1d28.tar.xz |
Merge branch 'for-next/misc'
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/Kconfig | 13 | ||||
-rw-r--r-- | drivers/usb/dwc3/core.c | 21 |
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); |