Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

interconnect: qcom: sc8180x: Fix QUP0 nodes

The QUP0 BCM relates to some internal property of the QUPs, and should
be configured independently of the path to the QUP. In line with other
platforms expose QUP_CORE endpoints in order allow this configuration.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Link: https://lore.kernel.org/r/20220503211925.1022169-4-bjorn.andersson@linaro.org
Signed-off-by: Georgi Djakov <djakov@kernel.org>

authored by

Bjorn Andersson and committed by
Georgi Djakov
42c4e3f6 a3e45cf8

+41 -3
+27 -3
drivers/interconnect/qcom/sc8180x.c
··· 76 76 DEFINE_QNODE(mas_qnm_gemnoc, SC8180X_MASTER_GEM_NOC_SNOC, 1, 8, SC8180X_SLAVE_PIMEM, SC8180X_SLAVE_OCIMEM, SC8180X_SLAVE_APPSS, SC8180X_SNOC_CNOC_SLV, SC8180X_SLAVE_TCU, SC8180X_SLAVE_QDSS_STM); 77 77 DEFINE_QNODE(mas_qxm_pimem, SC8180X_MASTER_PIMEM, 1, 8, SC8180X_SLAVE_SNOC_GEM_NOC_GC, SC8180X_SLAVE_OCIMEM); 78 78 DEFINE_QNODE(mas_xm_gic, SC8180X_MASTER_GIC, 1, 8, SC8180X_SLAVE_SNOC_GEM_NOC_GC, SC8180X_SLAVE_OCIMEM); 79 + DEFINE_QNODE(mas_qup_core_0, SC8180X_MASTER_QUP_CORE_0, 1, 4, SC8180X_SLAVE_QUP_CORE_0); 80 + DEFINE_QNODE(mas_qup_core_1, SC8180X_MASTER_QUP_CORE_1, 1, 4, SC8180X_SLAVE_QUP_CORE_1); 81 + DEFINE_QNODE(mas_qup_core_2, SC8180X_MASTER_QUP_CORE_2, 1, 4, SC8180X_SLAVE_QUP_CORE_2); 79 82 DEFINE_QNODE(slv_qns_a1noc_snoc, SC8180X_A1NOC_SNOC_SLV, 1, 32, SC8180X_A1NOC_SNOC_MAS); 80 83 DEFINE_QNODE(slv_srvc_aggre1_noc, SC8180X_SLAVE_SERVICE_A1NOC, 1, 4); 81 84 DEFINE_QNODE(slv_qns_a2noc_snoc, SC8180X_A2NOC_SNOC_SLV, 1, 16, SC8180X_A2NOC_SNOC_MAS); ··· 168 165 DEFINE_QNODE(slv_xs_pcie_3, SC8180X_SLAVE_PCIE_3, 1, 8); 169 166 DEFINE_QNODE(slv_xs_qdss_stm, SC8180X_SLAVE_QDSS_STM, 1, 4); 170 167 DEFINE_QNODE(slv_xs_sys_tcu_cfg, SC8180X_SLAVE_TCU, 1, 8); 168 + DEFINE_QNODE(slv_qup_core_0, SC8180X_SLAVE_QUP_CORE_0, 1, 4); 169 + DEFINE_QNODE(slv_qup_core_1, SC8180X_SLAVE_QUP_CORE_1, 1, 4); 170 + DEFINE_QNODE(slv_qup_core_2, SC8180X_SLAVE_QUP_CORE_2, 1, 4); 171 171 172 172 DEFINE_QBCM(bcm_acv, "ACV", false, &slv_ebi); 173 173 DEFINE_QBCM(bcm_mc0, "MC0", false, &slv_ebi); ··· 180 174 DEFINE_QBCM(bcm_ce0, "CE0", false, &mas_qxm_crypto); 181 175 DEFINE_QBCM(bcm_cn0, "CN0", false, &mas_qnm_snoc, &slv_qhs_a1_noc_cfg, &slv_qhs_a2_noc_cfg, &slv_qhs_ahb2phy_refgen_center, &slv_qhs_ahb2phy_refgen_east, &slv_qhs_ahb2phy_refgen_west, &slv_qhs_ahb2phy_south, &slv_qhs_aop, &slv_qhs_aoss, &slv_qhs_camera_cfg, &slv_qhs_clk_ctl, &slv_qhs_compute_dsp, &slv_qhs_cpr_cx, &slv_qhs_cpr_mmcx, &slv_qhs_cpr_mx, &slv_qhs_crypto0_cfg, &slv_qhs_ddrss_cfg, &slv_qhs_display_cfg, &slv_qhs_emac_cfg, &slv_qhs_glm, &slv_qhs_gpuss_cfg, &slv_qhs_imem_cfg, &slv_qhs_ipa, &slv_qhs_mnoc_cfg, &slv_qhs_npu_cfg, &slv_qhs_pcie0_cfg, &slv_qhs_pcie1_cfg, &slv_qhs_pcie2_cfg, &slv_qhs_pcie3_cfg, &slv_qhs_pdm, &slv_qhs_pimem_cfg, &slv_qhs_prng, &slv_qhs_qdss_cfg, &slv_qhs_qspi_0, &slv_qhs_qspi_1, &slv_qhs_qupv3_east0, &slv_qhs_qupv3_east1, &slv_qhs_qupv3_west, &slv_qhs_sdc2, &slv_qhs_sdc4, &slv_qhs_security, &slv_qhs_snoc_cfg, &slv_qhs_spss_cfg, &slv_qhs_tcsr, &slv_qhs_tlmm_east, &slv_qhs_tlmm_south, &slv_qhs_tlmm_west, &slv_qhs_tsif, &slv_qhs_ufs_card_cfg, &slv_qhs_ufs_mem0_cfg, &slv_qhs_ufs_mem1_cfg, &slv_qhs_usb3_0, &slv_qhs_usb3_1, &slv_qhs_usb3_2, &slv_qhs_venus_cfg, &slv_qhs_vsense_ctrl_cfg, &slv_srvc_cnoc); 182 176 DEFINE_QBCM(bcm_mm1, "MM1", false, &mas_qxm_camnoc_hf0_uncomp, &mas_qxm_camnoc_hf1_uncomp, &mas_qxm_camnoc_sf_uncomp, &mas_qxm_camnoc_hf0, &mas_qxm_camnoc_hf1, &mas_qxm_mdp0, &mas_qxm_mdp1); 183 - DEFINE_QBCM(bcm_qup0, "QUP0", false, &mas_qhm_qup0, &mas_qhm_qup1, &mas_qhm_qup2); 177 + DEFINE_QBCM(bcm_qup0, "QUP0", false, &mas_qup_core_0, &mas_qup_core_1, &mas_qup_core_2); 184 178 DEFINE_QBCM(bcm_sh2, "SH2", false, &slv_qns_gem_noc_snoc); 185 179 DEFINE_QBCM(bcm_mm2, "MM2", false, &mas_qxm_camnoc_sf, &mas_qxm_rot, &mas_qxm_venus0, &mas_qxm_venus1, &mas_qxm_venus_arm9, &slv_qns2_mem_noc); 186 180 DEFINE_QBCM(bcm_sh3, "SH3", false, &mas_acm_apps); ··· 200 194 static struct qcom_icc_bcm * const aggre1_noc_bcms[] = { 201 195 &bcm_sn3, 202 196 &bcm_ce0, 203 - &bcm_qup0, 204 197 }; 205 198 206 199 static struct qcom_icc_bcm * const aggre2_noc_bcms[] = { 207 200 &bcm_sn14, 208 201 &bcm_ce0, 209 - &bcm_qup0, 210 202 }; 211 203 212 204 static struct qcom_icc_bcm * const camnoc_virt_bcms[] = { ··· 507 503 .num_bcms = ARRAY_SIZE(system_noc_bcms), 508 504 }; 509 505 506 + static struct qcom_icc_bcm * const qup_virt_bcms[] = { 507 + &bcm_qup0, 508 + }; 509 + 510 + static struct qcom_icc_node *qup_virt_nodes[] = { 511 + [MASTER_QUP_CORE_0] = &mas_qup_core_0, 512 + [MASTER_QUP_CORE_1] = &mas_qup_core_1, 513 + [MASTER_QUP_CORE_2] = &mas_qup_core_2, 514 + [SLAVE_QUP_CORE_0] = &slv_qup_core_0, 515 + [SLAVE_QUP_CORE_1] = &slv_qup_core_1, 516 + [SLAVE_QUP_CORE_2] = &slv_qup_core_2, 517 + }; 518 + 519 + static const struct qcom_icc_desc sc8180x_qup_virt = { 520 + .nodes = qup_virt_nodes, 521 + .num_nodes = ARRAY_SIZE(qup_virt_nodes), 522 + .bcms = qup_virt_bcms, 523 + .num_bcms = ARRAY_SIZE(qup_virt_bcms), 524 + }; 510 525 511 526 static const struct of_device_id qnoc_of_match[] = { 512 527 { .compatible = "qcom,sc8180x-aggre1-noc", .data = &sc8180x_aggre1_noc }, ··· 538 515 { .compatible = "qcom,sc8180x-ipa-virt", .data = &sc8180x_ipa_virt }, 539 516 { .compatible = "qcom,sc8180x-mc-virt", .data = &sc8180x_mc_virt }, 540 517 { .compatible = "qcom,sc8180x-mmss-noc", .data = &sc8180x_mmss_noc }, 518 + { .compatible = "qcom,sc8180x-qup-virt", .data = &sc8180x_qup_virt }, 541 519 { .compatible = "qcom,sc8180x-system-noc", .data = &sc8180x_system_noc }, 542 520 { } 543 521 };
+7
drivers/interconnect/qcom/sc8180x.h
··· 171 171 #define SC8180X_MASTER_OSM_L3_APPS 161 172 172 #define SC8180X_SLAVE_OSM_L3 162 173 173 174 + #define SC8180X_MASTER_QUP_CORE_0 163 175 + #define SC8180X_MASTER_QUP_CORE_1 164 176 + #define SC8180X_MASTER_QUP_CORE_2 165 177 + #define SC8180X_SLAVE_QUP_CORE_0 166 178 + #define SC8180X_SLAVE_QUP_CORE_1 167 179 + #define SC8180X_SLAVE_QUP_CORE_2 168 180 + 174 181 #endif
+7
include/dt-bindings/interconnect/qcom,sc8180x.h
··· 182 182 #define SLAVE_MNOC_SF_MEM_NOC_DISPLAY 3 183 183 #define SLAVE_MNOC_HF_MEM_NOC_DISPLAY 4 184 184 185 + #define MASTER_QUP_CORE_0 0 186 + #define MASTER_QUP_CORE_1 1 187 + #define MASTER_QUP_CORE_2 2 188 + #define SLAVE_QUP_CORE_0 3 189 + #define SLAVE_QUP_CORE_1 4 190 + #define SLAVE_QUP_CORE_2 5 191 + 185 192 #endif