summaryrefslogtreecommitdiff
path: root/drivers/pci/controller/dwc/pci-imx6.c
diff options
context:
space:
mode:
authorStefan Agner <stefan.agner@toradex.com>2018-01-17 11:23:53 +0100
committerOleksandr Suvorov <oleksandr.suvorov@toradex.com>2021-01-27 20:36:21 +0200
commitca391e52a4507b1d9667a0fe6d2012295fc59a2b (patch)
tree27872b93ec80c4496eb515eda414a1925b64ba75 /drivers/pci/controller/dwc/pci-imx6.c
parentfb88ecbca936b79682db1ce102ba48811b08f5fd (diff)
PCI: imx6: add external clock support for i.MX8QM
Add external reference clock via clock tree. This allows to model the shared reference clock provided via PCIE_SATA_REFCLK100M_P/N properly. Signed-off-by: Stefan Agner <stefan.agner@toradex.com> (cherry picked from commit db22e75903386929c76188978f28b3bf355322a0) Conflicts: drivers/pci/host/pci-imx6.c Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> (cherry picked from commit 57364eca822fb2803b6aa93257e93e0d4242282d) (cherry picked from commit f32040d9607bf3e7de57cf05733ae0b5d27b5640) (cherry picked from commit 1c51d5cc8d041a5dfe3a1793bb3767450cab3c1a) (cherry picked from commit f178e6c2afcc37dc5c4771b5bad64286836b2120) Conflicts: drivers/pci/dwc/pci-imx6.c Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
Diffstat (limited to 'drivers/pci/controller/dwc/pci-imx6.c')
-rw-r--r--drivers/pci/controller/dwc/pci-imx6.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c
index 3bcea6297488..c2e6f6752044 100644
--- a/drivers/pci/controller/dwc/pci-imx6.c
+++ b/drivers/pci/controller/dwc/pci-imx6.c
@@ -123,6 +123,7 @@ struct imx6_pcie {
struct clk *pciex2_per;
struct clk *pcie_inbound_axi;
struct clk *pcie;
+ struct clk *pcie_ext;
struct clk *pcie_aux;
struct clk *phy_per;
struct clk *misc_per;
@@ -1182,6 +1183,12 @@ static void imx6_pcie_deassert_core_reset(struct imx6_pcie *imx6_pcie)
}
}
+ ret = clk_prepare_enable(imx6_pcie->pcie_ext);
+ if (ret) {
+ dev_err(dev, "unable to enable pcie_ext clock\n");
+ return;
+ }
+
switch (imx6_pcie->drvdata->variant) {
case IMX8QXP:
case IMX8QXP_EP:
@@ -2483,6 +2490,13 @@ static int imx6_pcie_probe(struct platform_device *pdev)
return PTR_ERR(imx6_pcie->pcie);
}
+ imx6_pcie->pcie_ext = devm_clk_get_optional(&pdev->dev, "pcie_ext");
+ if (IS_ERR(imx6_pcie->pcie_ext)) {
+ dev_err(&pdev->dev,
+ "pcie_ext clock source missing or invalid\n");
+ return PTR_ERR(imx6_pcie->pcie_ext);
+ }
+
switch (imx6_pcie->drvdata->variant) {
case IMX6SX:
case IMX6SX_EP: