@@ -161,7 +161,7 @@ struct qcom_pcie_resources_2_3_3 {
161161
162162/* 6 clocks typically, 7 for sm8250 */
163163struct qcom_pcie_resources_2_7_0 {
164- struct clk_bulk_data clks [7 ];
164+ struct clk_bulk_data clks [9 ];
165165 int num_clks ;
166166 struct regulator_bulk_data supplies [2 ];
167167 struct reset_control * pci_reset ;
@@ -195,7 +195,10 @@ struct qcom_pcie_ops {
195195struct qcom_pcie_cfg {
196196 const struct qcom_pcie_ops * ops ;
197197 unsigned int pipe_clk_need_muxing :1 ;
198+ unsigned int has_tbu_clk :1 ;
198199 unsigned int has_ddrss_sf_tbu_clk :1 ;
200+ unsigned int has_aggre0_clk :1 ;
201+ unsigned int has_aggre1_clk :1 ;
199202};
200203
201204struct qcom_pcie {
@@ -1146,6 +1149,7 @@ static int qcom_pcie_get_resources_2_7_0(struct qcom_pcie *pcie)
11461149 struct qcom_pcie_resources_2_7_0 * res = & pcie -> res .v2_7_0 ;
11471150 struct dw_pcie * pci = pcie -> pci ;
11481151 struct device * dev = pci -> dev ;
1152+ unsigned int idx ;
11491153 int ret ;
11501154
11511155 res -> pci_reset = devm_reset_control_get_exclusive (dev , "pci" );
@@ -1159,18 +1163,22 @@ static int qcom_pcie_get_resources_2_7_0(struct qcom_pcie *pcie)
11591163 if (ret )
11601164 return ret ;
11611165
1162- res -> clks [0 ].id = "aux" ;
1163- res -> clks [1 ].id = "cfg" ;
1164- res -> clks [2 ].id = "bus_master" ;
1165- res -> clks [3 ].id = "bus_slave" ;
1166- res -> clks [4 ].id = "slave_q2a" ;
1167- res -> clks [5 ].id = "tbu" ;
1168- if (pcie -> cfg -> has_ddrss_sf_tbu_clk ) {
1169- res -> clks [6 ].id = "ddrss_sf_tbu" ;
1170- res -> num_clks = 7 ;
1171- } else {
1172- res -> num_clks = 6 ;
1173- }
1166+ idx = 0 ;
1167+ res -> clks [idx ++ ].id = "aux" ;
1168+ res -> clks [idx ++ ].id = "cfg" ;
1169+ res -> clks [idx ++ ].id = "bus_master" ;
1170+ res -> clks [idx ++ ].id = "bus_slave" ;
1171+ res -> clks [idx ++ ].id = "slave_q2a" ;
1172+ if (pcie -> cfg -> has_tbu_clk )
1173+ res -> clks [idx ++ ].id = "tbu" ;
1174+ if (pcie -> cfg -> has_ddrss_sf_tbu_clk )
1175+ res -> clks [idx ++ ].id = "ddrss_sf_tbu" ;
1176+ if (pcie -> cfg -> has_aggre0_clk )
1177+ res -> clks [idx ++ ].id = "aggre0" ;
1178+ if (pcie -> cfg -> has_aggre1_clk )
1179+ res -> clks [idx ++ ].id = "aggre1" ;
1180+
1181+ res -> num_clks = idx ;
11741182
11751183 ret = devm_clk_bulk_get (dev , res -> num_clks , res -> clks );
11761184 if (ret < 0 )
@@ -1236,6 +1244,9 @@ static int qcom_pcie_init_2_7_0(struct qcom_pcie *pcie)
12361244 goto err_disable_clocks ;
12371245 }
12381246
1247+ /* Wait for reset to complete, required on SM8450 */
1248+ usleep_range (1000 , 1500 );
1249+
12391250 /* configure PCIe to RC mode */
12401251 writel (DEVICE_TYPE_RC , pcie -> parf + PCIE20_PARF_DEVICE_TYPE );
12411252
@@ -1509,15 +1520,33 @@ static const struct qcom_pcie_cfg ipq4019_cfg = {
15091520
15101521static const struct qcom_pcie_cfg sdm845_cfg = {
15111522 .ops = & ops_2_7_0 ,
1523+ .has_tbu_clk = true,
15121524};
15131525
15141526static const struct qcom_pcie_cfg sm8250_cfg = {
1527+ .ops = & ops_1_9_0 ,
1528+ .has_tbu_clk = true,
1529+ .has_ddrss_sf_tbu_clk = true,
1530+ };
1531+
1532+ static const struct qcom_pcie_cfg sm8450_pcie0_cfg = {
15151533 .ops = & ops_1_9_0 ,
15161534 .has_ddrss_sf_tbu_clk = true,
1535+ .pipe_clk_need_muxing = true,
1536+ .has_aggre0_clk = true,
1537+ .has_aggre1_clk = true,
1538+ };
1539+
1540+ static const struct qcom_pcie_cfg sm8450_pcie1_cfg = {
1541+ .ops = & ops_1_9_0 ,
1542+ .has_ddrss_sf_tbu_clk = true,
1543+ .pipe_clk_need_muxing = true,
1544+ .has_aggre1_clk = true,
15171545};
15181546
15191547static const struct qcom_pcie_cfg sc7280_cfg = {
15201548 .ops = & ops_1_9_0 ,
1549+ .has_tbu_clk = true,
15211550 .pipe_clk_need_muxing = true,
15221551};
15231552
@@ -1628,6 +1657,8 @@ static const struct of_device_id qcom_pcie_match[] = {
16281657 { .compatible = "qcom,pcie-sdm845" , .data = & sdm845_cfg },
16291658 { .compatible = "qcom,pcie-sm8250" , .data = & sm8250_cfg },
16301659 { .compatible = "qcom,pcie-sc8180x" , .data = & sm8250_cfg },
1660+ { .compatible = "qcom,pcie-sm8450-pcie0" , .data = & sm8450_pcie0_cfg },
1661+ { .compatible = "qcom,pcie-sm8450-pcie1" , .data = & sm8450_pcie1_cfg },
16311662 { .compatible = "qcom,pcie-sc7280" , .data = & sc7280_cfg },
16321663 { }
16331664};
0 commit comments