From: Maurice Petallo <[email protected]>

Due to power saving purpose, BIOS disabled ulpi phy refclk by default.
Hence, the refclk will only be enabled during device/driver probing.
and disabled during driver removal.

Signed-off-by: Maurice Petallo <[email protected]>
Signed-off-by: Chew, Chiau Ee <[email protected]>
---
 drivers/usb/dwc3/dwc3-pci.c |   23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
index 2357c4e..4ebe49a 100644
--- a/drivers/usb/dwc3/dwc3-pci.c
+++ b/drivers/usb/dwc3/dwc3-pci.c
@@ -51,6 +51,10 @@
 #define PCI_DEVICE_ID_INTEL_BYT                0x0f37
 #define PCI_DEVICE_ID_INTEL_MRFLD      0x119e
 
+#define DWC3_PCI_GEN_REGRW1                    0xa0
+#define DWC3_PCI_GEN_REGRW1_REFCLK_EN(n)       (n & 0xfffdffff)
+#define DWC3_PCI_GEN_REGRW1_REFCLK_DIS(n)      (n | 0x020000)
+
 struct dwc3_pci {
        struct device           *dev;
        struct platform_device  *dwc3;
@@ -112,6 +116,19 @@ err1:
        return ret;
 }
 
+static void dwc3_pci_ulpiphy_refclk(struct pci_dev *pci, int enable)
+{
+       u32 val;
+
+       pci_read_config_dword(pci, DWC3_PCI_GEN_REGRW1, &val);
+       if (enable)
+               val = DWC3_PCI_GEN_REGRW1_REFCLK_EN(val);
+       else
+               val = DWC3_PCI_GEN_REGRW1_REFCLK_DIS(val);
+
+       pci_write_config_dword(pci, DWC3_PCI_GEN_REGRW1, val);
+}
+
 static int dwc3_pci_probe(struct pci_dev *pci,
                const struct pci_device_id *id)
 {
@@ -183,6 +200,9 @@ static int dwc3_pci_probe(struct pci_dev *pci,
                goto err3;
        }
 
+       /* enable ulpi phy refclk */
+       dwc3_pci_ulpiphy_refclk(pci, 1);
+
        return 0;
 
 err3:
@@ -198,6 +218,9 @@ static void dwc3_pci_remove(struct pci_dev *pci)
 {
        struct dwc3_pci *glue = pci_get_drvdata(pci);
 
+       /* disable ulpi phy refclk */
+       dwc3_pci_ulpiphy_refclk(pci, 0);
+
        platform_device_unregister(glue->dwc3);
        platform_device_unregister(glue->usb2_phy);
        platform_device_unregister(glue->usb3_phy);
-- 
1.7.10.4

-- 
_______________________________________________
linux-yocto mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to