PCIe IP block has additional clock, "pcie_aux", that needs to be
controlled by the driver. Add code to support that.

Signed-off-by: Andrey Smirnov <[email protected]>
Cc: Bjorn Helgaas <[email protected]>
Cc: Fabio Estevam <[email protected]>
Cc: Chris Healy <[email protected]>
Cc: Lucas Stach <[email protected]>
Cc: Leonard Crestez <[email protected]>
Cc: "A.s. Dong" <[email protected]>
Cc: Richard Zhu <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: Rob Herring <[email protected]>
Cc: [email protected]
---
 drivers/pci/controller/dwc/pci-imx6.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/pci/controller/dwc/pci-imx6.c 
b/drivers/pci/controller/dwc/pci-imx6.c
index 7cdf8f9ab244..1a7031782846 100644
--- a/drivers/pci/controller/dwc/pci-imx6.c
+++ b/drivers/pci/controller/dwc/pci-imx6.c
@@ -65,6 +65,7 @@ struct imx6_pcie {
        struct clk              *pcie_phy;
        struct clk              *pcie_inbound_axi;
        struct clk              *pcie;
+       struct clk              *pcie_aux;
        struct regmap           *iomuxc_gpr;
        u32                     controller_id;
        struct reset_control    *pciephy_reset;
@@ -421,6 +422,12 @@ static int imx6_pcie_enable_ref_clk(struct imx6_pcie 
*imx6_pcie)
        case IMX7D:
                break;
        case IMX8MQ:
+               ret = clk_prepare_enable(imx6_pcie->pcie_aux);
+               if (ret) {
+                       dev_err(dev, "unable to enable pcie_aux clock\n");
+                       break;
+               }
+
                offset = imx6_pcie_grp_offset(imx6_pcie);
                /*
                 * Set the over ride low and enabled
@@ -904,6 +911,9 @@ static void imx6_pcie_clk_disable(struct imx6_pcie 
*imx6_pcie)
                                   IMX7D_GPR12_PCIE_PHY_REFCLK_SEL,
                                   IMX7D_GPR12_PCIE_PHY_REFCLK_SEL);
                break;
+       case IMX8MQ:
+               clk_disable_unprepare(imx6_pcie->pcie_aux);
+               break;
        default:
                break;
        }
@@ -1049,6 +1059,12 @@ static int imx6_pcie_probe(struct platform_device *pdev)
                        dev_err(dev, "Failed to get PCIE APPS reset control\n");
                        return PTR_ERR(imx6_pcie->apps_reset);
                }
+
+               imx6_pcie->pcie_aux = devm_clk_get(dev, "pcie_aux");
+               if (IS_ERR(imx6_pcie->pcie_aux)) {
+                       dev_err(dev, "pcie_aux clock source missing or 
invalid\n");
+                       return PTR_ERR(imx6_pcie->pcie_aux);
+               }
                break;
        default:
                break;
-- 
2.20.1

Reply via email to