diff options
-rw-r--r-- | drivers/pci/controller/dwc/pcie-qcom.c | 53 |
1 files changed, 16 insertions, 37 deletions
diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c index 0ed235d560e3..23dc01212508 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c | |||
@@ -112,10 +112,10 @@ struct qcom_pcie_resources_2_3_2 { | |||
112 | struct regulator_bulk_data supplies[QCOM_PCIE_2_3_2_MAX_SUPPLY]; | 112 | struct regulator_bulk_data supplies[QCOM_PCIE_2_3_2_MAX_SUPPLY]; |
113 | }; | 113 | }; |
114 | 114 | ||
115 | #define QCOM_PCIE_2_4_0_MAX_CLOCKS 3 | ||
115 | struct qcom_pcie_resources_2_4_0 { | 116 | struct qcom_pcie_resources_2_4_0 { |
116 | struct clk *aux_clk; | 117 | struct clk_bulk_data clks[QCOM_PCIE_2_4_0_MAX_CLOCKS]; |
117 | struct clk *master_clk; | 118 | int num_clks; |
118 | struct clk *slave_clk; | ||
119 | struct reset_control *axi_m_reset; | 119 | struct reset_control *axi_m_reset; |
120 | struct reset_control *axi_s_reset; | 120 | struct reset_control *axi_s_reset; |
121 | struct reset_control *pipe_reset; | 121 | struct reset_control *pipe_reset; |
@@ -638,18 +638,17 @@ static int qcom_pcie_get_resources_2_4_0(struct qcom_pcie *pcie) | |||
638 | struct qcom_pcie_resources_2_4_0 *res = &pcie->res.v2_4_0; | 638 | struct qcom_pcie_resources_2_4_0 *res = &pcie->res.v2_4_0; |
639 | struct dw_pcie *pci = pcie->pci; | 639 | struct dw_pcie *pci = pcie->pci; |
640 | struct device *dev = pci->dev; | 640 | struct device *dev = pci->dev; |
641 | int ret; | ||
641 | 642 | ||
642 | res->aux_clk = devm_clk_get(dev, "aux"); | 643 | res->clks[0].id = "aux"; |
643 | if (IS_ERR(res->aux_clk)) | 644 | res->clks[1].id = "master_bus"; |
644 | return PTR_ERR(res->aux_clk); | 645 | res->clks[2].id = "slave_bus"; |
645 | 646 | ||
646 | res->master_clk = devm_clk_get(dev, "master_bus"); | 647 | res->num_clks = 3; |
647 | if (IS_ERR(res->master_clk)) | ||
648 | return PTR_ERR(res->master_clk); | ||
649 | 648 | ||
650 | res->slave_clk = devm_clk_get(dev, "slave_bus"); | 649 | ret = devm_clk_bulk_get(dev, res->num_clks, res->clks); |
651 | if (IS_ERR(res->slave_clk)) | 650 | if (ret < 0) |
652 | return PTR_ERR(res->slave_clk); | 651 | return ret; |
653 | 652 | ||
654 | res->axi_m_reset = devm_reset_control_get_exclusive(dev, "axi_m"); | 653 | res->axi_m_reset = devm_reset_control_get_exclusive(dev, "axi_m"); |
655 | if (IS_ERR(res->axi_m_reset)) | 654 | if (IS_ERR(res->axi_m_reset)) |
@@ -719,9 +718,7 @@ static void qcom_pcie_deinit_2_4_0(struct qcom_pcie *pcie) | |||
719 | reset_control_assert(res->axi_m_sticky_reset); | 718 | reset_control_assert(res->axi_m_sticky_reset); |
720 | reset_control_assert(res->pwr_reset); | 719 | reset_control_assert(res->pwr_reset); |
721 | reset_control_assert(res->ahb_reset); | 720 | reset_control_assert(res->ahb_reset); |
722 | clk_disable_unprepare(res->aux_clk); | 721 | clk_bulk_disable_unprepare(res->num_clks, res->clks); |
723 | clk_disable_unprepare(res->master_clk); | ||
724 | clk_disable_unprepare(res->slave_clk); | ||
725 | } | 722 | } |
726 | 723 | ||
727 | static int qcom_pcie_init_2_4_0(struct qcom_pcie *pcie) | 724 | static int qcom_pcie_init_2_4_0(struct qcom_pcie *pcie) |
@@ -850,23 +847,9 @@ static int qcom_pcie_init_2_4_0(struct qcom_pcie *pcie) | |||
850 | 847 | ||
851 | usleep_range(10000, 12000); | 848 | usleep_range(10000, 12000); |
852 | 849 | ||
853 | ret = clk_prepare_enable(res->aux_clk); | 850 | ret = clk_bulk_prepare_enable(res->num_clks, res->clks); |
854 | if (ret) { | 851 | if (ret) |
855 | dev_err(dev, "cannot prepare/enable iface clock\n"); | 852 | goto err_clks; |
856 | goto err_clk_aux; | ||
857 | } | ||
858 | |||
859 | ret = clk_prepare_enable(res->master_clk); | ||
860 | if (ret) { | ||
861 | dev_err(dev, "cannot prepare/enable core clock\n"); | ||
862 | goto err_clk_axi_m; | ||
863 | } | ||
864 | |||
865 | ret = clk_prepare_enable(res->slave_clk); | ||
866 | if (ret) { | ||
867 | dev_err(dev, "cannot prepare/enable phy clock\n"); | ||
868 | goto err_clk_axi_s; | ||
869 | } | ||
870 | 853 | ||
871 | /* enable PCIe clocks and resets */ | 854 | /* enable PCIe clocks and resets */ |
872 | val = readl(pcie->parf + PCIE20_PARF_PHY_CTRL); | 855 | val = readl(pcie->parf + PCIE20_PARF_PHY_CTRL); |
@@ -891,11 +874,7 @@ static int qcom_pcie_init_2_4_0(struct qcom_pcie *pcie) | |||
891 | 874 | ||
892 | return 0; | 875 | return 0; |
893 | 876 | ||
894 | err_clk_axi_s: | 877 | err_clks: |
895 | clk_disable_unprepare(res->master_clk); | ||
896 | err_clk_axi_m: | ||
897 | clk_disable_unprepare(res->aux_clk); | ||
898 | err_clk_aux: | ||
899 | reset_control_assert(res->ahb_reset); | 878 | reset_control_assert(res->ahb_reset); |
900 | err_rst_ahb: | 879 | err_rst_ahb: |
901 | reset_control_assert(res->pwr_reset); | 880 | reset_control_assert(res->pwr_reset); |