81 lines
2.8 KiB
Diff
81 lines
2.8 KiB
Diff
|
From 1e868545f2bb06f7dd4a1c97c5b9ed2615929cf0 Mon Sep 17 00:00:00 2001
|
||
|
From: Jules Maselbas <jmaselbas@kalray.eu>
|
||
|
Date: Fri, 5 Apr 2019 15:35:33 +0200
|
||
|
Subject: [PATCH 37/53] usb: dwc2: gadget: Move gadget phy init into core phy
|
||
|
init
|
||
|
|
||
|
Most of the phy initialization is shared between host and gadget,
|
||
|
this adds the turnaround configuration only used by gadgets to
|
||
|
the global phy init.
|
||
|
|
||
|
Acked-by: Minas Harutyunyan <hminas@synopsys.com>
|
||
|
Signed-off-by: Jules Maselbas <jmaselbas@kalray.eu>
|
||
|
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
|
||
|
---
|
||
|
drivers/usb/dwc2/core.c | 9 +++++++++
|
||
|
drivers/usb/dwc2/gadget.c | 25 +++++--------------------
|
||
|
2 files changed, 14 insertions(+), 20 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/usb/dwc2/core.c b/drivers/usb/dwc2/core.c
|
||
|
index 01ac4a064feb..8b499d643461 100644
|
||
|
--- a/drivers/usb/dwc2/core.c
|
||
|
+++ b/drivers/usb/dwc2/core.c
|
||
|
@@ -1152,6 +1152,15 @@ static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
|
||
|
usbcfg &= ~(GUSBCFG_ULPI_UTMI_SEL | GUSBCFG_PHYIF16);
|
||
|
if (hsotg->params.phy_utmi_width == 16)
|
||
|
usbcfg |= GUSBCFG_PHYIF16;
|
||
|
+
|
||
|
+ /* Set turnaround time */
|
||
|
+ if (dwc2_is_device_mode(hsotg)) {
|
||
|
+ usbcfg &= ~GUSBCFG_USBTRDTIM_MASK;
|
||
|
+ if (hsotg->params.phy_utmi_width == 16)
|
||
|
+ usbcfg |= 5 << GUSBCFG_USBTRDTIM_SHIFT;
|
||
|
+ else
|
||
|
+ usbcfg |= 9 << GUSBCFG_USBTRDTIM_SHIFT;
|
||
|
+ }
|
||
|
break;
|
||
|
default:
|
||
|
dev_err(hsotg->dev, "FS PHY selected at HS!\n");
|
||
|
diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
|
||
|
index 614f8c34d759..2e2f9cbf6a3d 100644
|
||
|
--- a/drivers/usb/dwc2/gadget.c
|
||
|
+++ b/drivers/usb/dwc2/gadget.c
|
||
|
@@ -3314,29 +3314,14 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
|
||
|
|
||
|
/* keep other bits untouched (so e.g. forced modes are not lost) */
|
||
|
usbcfg = dwc2_readl(hsotg, GUSBCFG);
|
||
|
- /* remove the HNP/SRP */
|
||
|
- usbcfg &= ~(GUSBCFG_TOUTCAL_MASK | GUSBCFG_PHYIF16 | GUSBCFG_SRPCAP |
|
||
|
- GUSBCFG_HNPCAP);
|
||
|
+ usbcfg &= ~GUSBCFG_TOUTCAL_MASK;
|
||
|
usbcfg |= GUSBCFG_TOUTCAL(7);
|
||
|
|
||
|
- if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS &&
|
||
|
- (hsotg->params.speed == DWC2_SPEED_PARAM_FULL ||
|
||
|
- hsotg->params.speed == DWC2_SPEED_PARAM_LOW)) {
|
||
|
- /* FS/LS Dedicated Transceiver Interface */
|
||
|
- usbcfg |= GUSBCFG_PHYSEL;
|
||
|
- } else if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_UTMI) {
|
||
|
- if (hsotg->params.phy_utmi_width == 16)
|
||
|
- usbcfg |= GUSBCFG_PHYIF16;
|
||
|
-
|
||
|
- /* Set turnaround time */
|
||
|
- usbcfg &= ~GUSBCFG_USBTRDTIM_MASK;
|
||
|
- if (hsotg->params.phy_utmi_width == 16)
|
||
|
- usbcfg |= 5 << GUSBCFG_USBTRDTIM_SHIFT;
|
||
|
- else
|
||
|
- usbcfg |= 9 << GUSBCFG_USBTRDTIM_SHIFT;
|
||
|
- }
|
||
|
+ /* remove the HNP/SRP and set the PHY */
|
||
|
+ usbcfg &= ~(GUSBCFG_SRPCAP | GUSBCFG_HNPCAP);
|
||
|
+ dwc2_writel(hsotg, usbcfg, GUSBCFG);
|
||
|
|
||
|
- dwc2_writel(hsotg, usbcfg, GUSBCFG);
|
||
|
+ dwc2_phy_init(hsotg, true);
|
||
|
|
||
|
dwc2_hsotg_init_fifo(hsotg);
|
||
|
|
||
|
--
|
||
|
2.11.0
|
||
|
|