diff options
Diffstat (limited to 'drivers/pci/controller/dwc/pci-imx6.c')
-rw-r--r-- | drivers/pci/controller/dwc/pci-imx6.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c index 64c74334f7d0..f5a16fd15be5 100644 --- a/drivers/pci/controller/dwc/pci-imx6.c +++ b/drivers/pci/controller/dwc/pci-imx6.c | |||
@@ -66,6 +66,7 @@ struct imx6_pcie { | |||
66 | struct clk *pcie_phy; | 66 | struct clk *pcie_phy; |
67 | struct clk *pcie_inbound_axi; | 67 | struct clk *pcie_inbound_axi; |
68 | struct clk *pcie; | 68 | struct clk *pcie; |
69 | struct clk *pcie_aux; | ||
69 | struct regmap *iomuxc_gpr; | 70 | struct regmap *iomuxc_gpr; |
70 | u32 controller_id; | 71 | u32 controller_id; |
71 | struct reset_control *pciephy_reset; | 72 | struct reset_control *pciephy_reset; |
@@ -459,6 +460,12 @@ static int imx6_pcie_enable_ref_clk(struct imx6_pcie *imx6_pcie) | |||
459 | case IMX7D: | 460 | case IMX7D: |
460 | break; | 461 | break; |
461 | case IMX8MQ: | 462 | case IMX8MQ: |
463 | ret = clk_prepare_enable(imx6_pcie->pcie_aux); | ||
464 | if (ret) { | ||
465 | dev_err(dev, "unable to enable pcie_aux clock\n"); | ||
466 | break; | ||
467 | } | ||
468 | |||
462 | offset = imx6_pcie_grp_offset(imx6_pcie); | 469 | offset = imx6_pcie_grp_offset(imx6_pcie); |
463 | /* | 470 | /* |
464 | * Set the over ride low and enabled | 471 | * Set the over ride low and enabled |
@@ -976,6 +983,9 @@ static void imx6_pcie_clk_disable(struct imx6_pcie *imx6_pcie) | |||
976 | IMX7D_GPR12_PCIE_PHY_REFCLK_SEL, | 983 | IMX7D_GPR12_PCIE_PHY_REFCLK_SEL, |
977 | IMX7D_GPR12_PCIE_PHY_REFCLK_SEL); | 984 | IMX7D_GPR12_PCIE_PHY_REFCLK_SEL); |
978 | break; | 985 | break; |
986 | case IMX8MQ: | ||
987 | clk_disable_unprepare(imx6_pcie->pcie_aux); | ||
988 | break; | ||
979 | default: | 989 | default: |
980 | break; | 990 | break; |
981 | } | 991 | } |
@@ -1121,8 +1131,14 @@ static int imx6_pcie_probe(struct platform_device *pdev) | |||
1121 | return PTR_ERR(imx6_pcie->pcie_inbound_axi); | 1131 | return PTR_ERR(imx6_pcie->pcie_inbound_axi); |
1122 | } | 1132 | } |
1123 | break; | 1133 | break; |
1124 | case IMX7D: | ||
1125 | case IMX8MQ: | 1134 | case IMX8MQ: |
1135 | imx6_pcie->pcie_aux = devm_clk_get(dev, "pcie_aux"); | ||
1136 | if (IS_ERR(imx6_pcie->pcie_aux)) { | ||
1137 | dev_err(dev, "pcie_aux clock source missing or invalid\n"); | ||
1138 | return PTR_ERR(imx6_pcie->pcie_aux); | ||
1139 | } | ||
1140 | /* fall through */ | ||
1141 | case IMX7D: | ||
1126 | if (dbi_base->start == IMX8MQ_PCIE2_BASE_ADDR) | 1142 | if (dbi_base->start == IMX8MQ_PCIE2_BASE_ADDR) |
1127 | imx6_pcie->controller_id = 1; | 1143 | imx6_pcie->controller_id = 1; |
1128 | 1144 | ||