Merge branch 'icc-sm8250-qup' into icc-next

SM8250 (like SM8150 but unlike all other QUP-equipped SoCs) doesn't
provide a qup-core path. Adjust the bindings and drivers as necessary,
and then describe the icc paths in the device tree. This makes it possible
for interconnect sync_state succeed so long as you don't use UFS.

* icc-sm8250-qup
  dt-bindings: interconnect: qcom,rpmh: Add SM8250 QUP virt
  dt-bindings: interconnect: qcom,sm8250: Add QUP virt
  interconnect: qcom: sm8250: Fix QUP0 nodes

Link: https://lore.kernel.org/r/20230703-topic-8250_qup_icc-v2-0-9ba0a9460be2@linaro.org
Signed-off-by: Georgi Djakov <djakov@kernel.org>
This commit is contained in:
Georgi Djakov 2023-07-18 11:18:53 +03:00
commit 10cb3abb99
4 changed files with 98 additions and 7 deletions

View File

@ -18,9 +18,6 @@ description: |
least one RPMh device child node pertaining to their RSC and each provider least one RPMh device child node pertaining to their RSC and each provider
can map to multiple RPMh resources. can map to multiple RPMh resources.
allOf:
- $ref: qcom,rpmh-common.yaml#
properties: properties:
reg: reg:
maxItems: 1 maxItems: 1
@ -91,6 +88,7 @@ properties:
- qcom,sm8250-mc-virt - qcom,sm8250-mc-virt
- qcom,sm8250-mmss-noc - qcom,sm8250-mmss-noc
- qcom,sm8250-npu-noc - qcom,sm8250-npu-noc
- qcom,sm8250-qup-virt
- qcom,sm8250-system-noc - qcom,sm8250-system-noc
- qcom,sm8350-aggre1-noc - qcom,sm8350-aggre1-noc
- qcom,sm8350-aggre2-noc - qcom,sm8350-aggre2-noc
@ -107,7 +105,19 @@ properties:
required: required:
- compatible - compatible
- reg
allOf:
- $ref: qcom,rpmh-common.yaml#
- if:
not:
properties:
compatible:
enum:
- qcom,sm8250-qup-virt
then:
required:
- reg
unevaluatedProperties: false unevaluatedProperties: false

View File

@ -165,6 +165,54 @@ DEFINE_QNODE(xs_pcie_modem, SM8250_SLAVE_PCIE_2, 1, 8);
DEFINE_QNODE(xs_qdss_stm, SM8250_SLAVE_QDSS_STM, 1, 4); DEFINE_QNODE(xs_qdss_stm, SM8250_SLAVE_QDSS_STM, 1, 4);
DEFINE_QNODE(xs_sys_tcu_cfg, SM8250_SLAVE_TCU, 1, 8); DEFINE_QNODE(xs_sys_tcu_cfg, SM8250_SLAVE_TCU, 1, 8);
static struct qcom_icc_node qup0_core_master = {
.name = "qup0_core_master",
.id = SM8250_MASTER_QUP_CORE_0,
.channels = 1,
.buswidth = 4,
.num_links = 1,
.links = { SM8250_SLAVE_QUP_CORE_0 },
};
static struct qcom_icc_node qup1_core_master = {
.name = "qup1_core_master",
.id = SM8250_MASTER_QUP_CORE_1,
.channels = 1,
.buswidth = 4,
.num_links = 1,
.links = { SM8250_SLAVE_QUP_CORE_1 },
};
static struct qcom_icc_node qup2_core_master = {
.name = "qup2_core_master",
.id = SM8250_MASTER_QUP_CORE_2,
.channels = 1,
.buswidth = 4,
.num_links = 1,
.links = { SM8250_SLAVE_QUP_CORE_2 },
};
static struct qcom_icc_node qup0_core_slave = {
.name = "qup0_core_slave",
.id = SM8250_SLAVE_QUP_CORE_0,
.channels = 1,
.buswidth = 4,
};
static struct qcom_icc_node qup1_core_slave = {
.name = "qup1_core_slave",
.id = SM8250_SLAVE_QUP_CORE_1,
.channels = 1,
.buswidth = 4,
};
static struct qcom_icc_node qup2_core_slave = {
.name = "qup2_core_slave",
.id = SM8250_SLAVE_QUP_CORE_2,
.channels = 1,
.buswidth = 4,
};
DEFINE_QBCM(bcm_acv, "ACV", false, &ebi); DEFINE_QBCM(bcm_acv, "ACV", false, &ebi);
DEFINE_QBCM(bcm_mc0, "MC0", true, &ebi); DEFINE_QBCM(bcm_mc0, "MC0", true, &ebi);
DEFINE_QBCM(bcm_sh0, "SH0", true, &qns_llcc); DEFINE_QBCM(bcm_sh0, "SH0", true, &qns_llcc);
@ -173,7 +221,7 @@ DEFINE_QBCM(bcm_ce0, "CE0", false, &qxm_crypto);
DEFINE_QBCM(bcm_mm1, "MM1", false, &qnm_camnoc_hf, &qxm_mdp0, &qxm_mdp1); DEFINE_QBCM(bcm_mm1, "MM1", false, &qnm_camnoc_hf, &qxm_mdp0, &qxm_mdp1);
DEFINE_QBCM(bcm_sh2, "SH2", false, &alm_gpu_tcu, &alm_sys_tcu); DEFINE_QBCM(bcm_sh2, "SH2", false, &alm_gpu_tcu, &alm_sys_tcu);
DEFINE_QBCM(bcm_mm2, "MM2", false, &qns_mem_noc_sf); DEFINE_QBCM(bcm_mm2, "MM2", false, &qns_mem_noc_sf);
DEFINE_QBCM(bcm_qup0, "QUP0", false, &qhm_qup1, &qhm_qup2, &qhm_qup0); DEFINE_QBCM(bcm_qup0, "QUP0", false, &qup0_core_master, &qup1_core_master, &qup2_core_master);
DEFINE_QBCM(bcm_sh3, "SH3", false, &qnm_cmpnoc); DEFINE_QBCM(bcm_sh3, "SH3", false, &qnm_cmpnoc);
DEFINE_QBCM(bcm_mm3, "MM3", false, &qnm_camnoc_icp, &qnm_camnoc_sf, &qnm_video0, &qnm_video1, &qnm_video_cvp); DEFINE_QBCM(bcm_mm3, "MM3", false, &qnm_camnoc_icp, &qnm_camnoc_sf, &qnm_video0, &qnm_video1, &qnm_video_cvp);
DEFINE_QBCM(bcm_sh4, "SH4", false, &chm_apps); DEFINE_QBCM(bcm_sh4, "SH4", false, &chm_apps);
@ -194,7 +242,6 @@ DEFINE_QBCM(bcm_sn11, "SN11", false, &qnm_gemnoc);
DEFINE_QBCM(bcm_sn12, "SN12", false, &qns_pcie_modem_mem_noc, &qns_pcie_mem_noc); DEFINE_QBCM(bcm_sn12, "SN12", false, &qns_pcie_modem_mem_noc, &qns_pcie_mem_noc);
static struct qcom_icc_bcm * const aggre1_noc_bcms[] = { static struct qcom_icc_bcm * const aggre1_noc_bcms[] = {
&bcm_qup0,
&bcm_sn12, &bcm_sn12,
}; };
@ -223,10 +270,29 @@ static const struct qcom_icc_desc sm8250_aggre1_noc = {
static struct qcom_icc_bcm * const aggre2_noc_bcms[] = { static struct qcom_icc_bcm * const aggre2_noc_bcms[] = {
&bcm_ce0, &bcm_ce0,
&bcm_qup0,
&bcm_sn12, &bcm_sn12,
}; };
static struct qcom_icc_bcm * const qup_virt_bcms[] = {
&bcm_qup0,
};
static struct qcom_icc_node *qup_virt_nodes[] = {
[MASTER_QUP_CORE_0] = &qup0_core_master,
[MASTER_QUP_CORE_1] = &qup1_core_master,
[MASTER_QUP_CORE_2] = &qup2_core_master,
[SLAVE_QUP_CORE_0] = &qup0_core_slave,
[SLAVE_QUP_CORE_1] = &qup1_core_slave,
[SLAVE_QUP_CORE_2] = &qup2_core_slave,
};
static const struct qcom_icc_desc sm8250_qup_virt = {
.nodes = qup_virt_nodes,
.num_nodes = ARRAY_SIZE(qup_virt_nodes),
.bcms = qup_virt_bcms,
.num_bcms = ARRAY_SIZE(qup_virt_bcms),
};
static struct qcom_icc_node * const aggre2_noc_nodes[] = { static struct qcom_icc_node * const aggre2_noc_nodes[] = {
[MASTER_A2NOC_CFG] = &qhm_a2noc_cfg, [MASTER_A2NOC_CFG] = &qhm_a2noc_cfg,
[MASTER_QDSS_BAM] = &qhm_qdss_bam, [MASTER_QDSS_BAM] = &qhm_qdss_bam,
@ -519,6 +585,8 @@ static const struct of_device_id qnoc_of_match[] = {
.data = &sm8250_mmss_noc}, .data = &sm8250_mmss_noc},
{ .compatible = "qcom,sm8250-npu-noc", { .compatible = "qcom,sm8250-npu-noc",
.data = &sm8250_npu_noc}, .data = &sm8250_npu_noc},
{ .compatible = "qcom,sm8250-qup-virt",
.data = &sm8250_qup_virt },
{ .compatible = "qcom,sm8250-system-noc", { .compatible = "qcom,sm8250-system-noc",
.data = &sm8250_system_noc}, .data = &sm8250_system_noc},
{ } { }

View File

@ -158,5 +158,11 @@
#define SM8250_SLAVE_VSENSE_CTRL_CFG 147 #define SM8250_SLAVE_VSENSE_CTRL_CFG 147
#define SM8250_SNOC_CNOC_MAS 148 #define SM8250_SNOC_CNOC_MAS 148
#define SM8250_SNOC_CNOC_SLV 149 #define SM8250_SNOC_CNOC_SLV 149
#define SM8250_MASTER_QUP_CORE_0 150
#define SM8250_MASTER_QUP_CORE_1 151
#define SM8250_MASTER_QUP_CORE_2 152
#define SM8250_SLAVE_QUP_CORE_0 153
#define SM8250_SLAVE_QUP_CORE_1 154
#define SM8250_SLAVE_QUP_CORE_2 155
#endif #endif

View File

@ -166,4 +166,11 @@
#define SLAVE_QDSS_STM 17 #define SLAVE_QDSS_STM 17
#define SLAVE_TCU 18 #define SLAVE_TCU 18
#define MASTER_QUP_CORE_0 0
#define MASTER_QUP_CORE_1 1
#define MASTER_QUP_CORE_2 2
#define SLAVE_QUP_CORE_0 3
#define SLAVE_QUP_CORE_1 4
#define SLAVE_QUP_CORE_2 5
#endif #endif