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
