Skip to content

Commit 10cb3ab

Browse files
author
Georgi Djakov
committed
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/[email protected] Signed-off-by: Georgi Djakov <[email protected]>
2 parents c73e60e + cde2f92 commit 10cb3ab

File tree

4 files changed

+98
-7
lines changed

4 files changed

+98
-7
lines changed

Documentation/devicetree/bindings/interconnect/qcom,rpmh.yaml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@ description: |
1818
least one RPMh device child node pertaining to their RSC and each provider
1919
can map to multiple RPMh resources.
2020
21-
allOf:
22-
- $ref: qcom,rpmh-common.yaml#
23-
2421
properties:
2522
reg:
2623
maxItems: 1
@@ -91,6 +88,7 @@ properties:
9188
- qcom,sm8250-mc-virt
9289
- qcom,sm8250-mmss-noc
9390
- qcom,sm8250-npu-noc
91+
- qcom,sm8250-qup-virt
9492
- qcom,sm8250-system-noc
9593
- qcom,sm8350-aggre1-noc
9694
- qcom,sm8350-aggre2-noc
@@ -107,7 +105,19 @@ properties:
107105

108106
required:
109107
- compatible
110-
- reg
108+
109+
allOf:
110+
- $ref: qcom,rpmh-common.yaml#
111+
- if:
112+
not:
113+
properties:
114+
compatible:
115+
enum:
116+
- qcom,sm8250-qup-virt
117+
then:
118+
required:
119+
- reg
120+
111121

112122
unevaluatedProperties: false
113123

drivers/interconnect/qcom/sm8250.c

Lines changed: 71 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,54 @@ DEFINE_QNODE(xs_pcie_modem, SM8250_SLAVE_PCIE_2, 1, 8);
165165
DEFINE_QNODE(xs_qdss_stm, SM8250_SLAVE_QDSS_STM, 1, 4);
166166
DEFINE_QNODE(xs_sys_tcu_cfg, SM8250_SLAVE_TCU, 1, 8);
167167

168+
static struct qcom_icc_node qup0_core_master = {
169+
.name = "qup0_core_master",
170+
.id = SM8250_MASTER_QUP_CORE_0,
171+
.channels = 1,
172+
.buswidth = 4,
173+
.num_links = 1,
174+
.links = { SM8250_SLAVE_QUP_CORE_0 },
175+
};
176+
177+
static struct qcom_icc_node qup1_core_master = {
178+
.name = "qup1_core_master",
179+
.id = SM8250_MASTER_QUP_CORE_1,
180+
.channels = 1,
181+
.buswidth = 4,
182+
.num_links = 1,
183+
.links = { SM8250_SLAVE_QUP_CORE_1 },
184+
};
185+
186+
static struct qcom_icc_node qup2_core_master = {
187+
.name = "qup2_core_master",
188+
.id = SM8250_MASTER_QUP_CORE_2,
189+
.channels = 1,
190+
.buswidth = 4,
191+
.num_links = 1,
192+
.links = { SM8250_SLAVE_QUP_CORE_2 },
193+
};
194+
195+
static struct qcom_icc_node qup0_core_slave = {
196+
.name = "qup0_core_slave",
197+
.id = SM8250_SLAVE_QUP_CORE_0,
198+
.channels = 1,
199+
.buswidth = 4,
200+
};
201+
202+
static struct qcom_icc_node qup1_core_slave = {
203+
.name = "qup1_core_slave",
204+
.id = SM8250_SLAVE_QUP_CORE_1,
205+
.channels = 1,
206+
.buswidth = 4,
207+
};
208+
209+
static struct qcom_icc_node qup2_core_slave = {
210+
.name = "qup2_core_slave",
211+
.id = SM8250_SLAVE_QUP_CORE_2,
212+
.channels = 1,
213+
.buswidth = 4,
214+
};
215+
168216
DEFINE_QBCM(bcm_acv, "ACV", false, &ebi);
169217
DEFINE_QBCM(bcm_mc0, "MC0", true, &ebi);
170218
DEFINE_QBCM(bcm_sh0, "SH0", true, &qns_llcc);
@@ -173,7 +221,7 @@ DEFINE_QBCM(bcm_ce0, "CE0", false, &qxm_crypto);
173221
DEFINE_QBCM(bcm_mm1, "MM1", false, &qnm_camnoc_hf, &qxm_mdp0, &qxm_mdp1);
174222
DEFINE_QBCM(bcm_sh2, "SH2", false, &alm_gpu_tcu, &alm_sys_tcu);
175223
DEFINE_QBCM(bcm_mm2, "MM2", false, &qns_mem_noc_sf);
176-
DEFINE_QBCM(bcm_qup0, "QUP0", false, &qhm_qup1, &qhm_qup2, &qhm_qup0);
224+
DEFINE_QBCM(bcm_qup0, "QUP0", false, &qup0_core_master, &qup1_core_master, &qup2_core_master);
177225
DEFINE_QBCM(bcm_sh3, "SH3", false, &qnm_cmpnoc);
178226
DEFINE_QBCM(bcm_mm3, "MM3", false, &qnm_camnoc_icp, &qnm_camnoc_sf, &qnm_video0, &qnm_video1, &qnm_video_cvp);
179227
DEFINE_QBCM(bcm_sh4, "SH4", false, &chm_apps);
@@ -194,7 +242,6 @@ DEFINE_QBCM(bcm_sn11, "SN11", false, &qnm_gemnoc);
194242
DEFINE_QBCM(bcm_sn12, "SN12", false, &qns_pcie_modem_mem_noc, &qns_pcie_mem_noc);
195243

196244
static struct qcom_icc_bcm * const aggre1_noc_bcms[] = {
197-
&bcm_qup0,
198245
&bcm_sn12,
199246
};
200247

@@ -223,10 +270,29 @@ static const struct qcom_icc_desc sm8250_aggre1_noc = {
223270

224271
static struct qcom_icc_bcm * const aggre2_noc_bcms[] = {
225272
&bcm_ce0,
226-
&bcm_qup0,
227273
&bcm_sn12,
228274
};
229275

276+
static struct qcom_icc_bcm * const qup_virt_bcms[] = {
277+
&bcm_qup0,
278+
};
279+
280+
static struct qcom_icc_node *qup_virt_nodes[] = {
281+
[MASTER_QUP_CORE_0] = &qup0_core_master,
282+
[MASTER_QUP_CORE_1] = &qup1_core_master,
283+
[MASTER_QUP_CORE_2] = &qup2_core_master,
284+
[SLAVE_QUP_CORE_0] = &qup0_core_slave,
285+
[SLAVE_QUP_CORE_1] = &qup1_core_slave,
286+
[SLAVE_QUP_CORE_2] = &qup2_core_slave,
287+
};
288+
289+
static const struct qcom_icc_desc sm8250_qup_virt = {
290+
.nodes = qup_virt_nodes,
291+
.num_nodes = ARRAY_SIZE(qup_virt_nodes),
292+
.bcms = qup_virt_bcms,
293+
.num_bcms = ARRAY_SIZE(qup_virt_bcms),
294+
};
295+
230296
static struct qcom_icc_node * const aggre2_noc_nodes[] = {
231297
[MASTER_A2NOC_CFG] = &qhm_a2noc_cfg,
232298
[MASTER_QDSS_BAM] = &qhm_qdss_bam,
@@ -519,6 +585,8 @@ static const struct of_device_id qnoc_of_match[] = {
519585
.data = &sm8250_mmss_noc},
520586
{ .compatible = "qcom,sm8250-npu-noc",
521587
.data = &sm8250_npu_noc},
588+
{ .compatible = "qcom,sm8250-qup-virt",
589+
.data = &sm8250_qup_virt },
522590
{ .compatible = "qcom,sm8250-system-noc",
523591
.data = &sm8250_system_noc},
524592
{ }

drivers/interconnect/qcom/sm8250.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,5 +158,11 @@
158158
#define SM8250_SLAVE_VSENSE_CTRL_CFG 147
159159
#define SM8250_SNOC_CNOC_MAS 148
160160
#define SM8250_SNOC_CNOC_SLV 149
161+
#define SM8250_MASTER_QUP_CORE_0 150
162+
#define SM8250_MASTER_QUP_CORE_1 151
163+
#define SM8250_MASTER_QUP_CORE_2 152
164+
#define SM8250_SLAVE_QUP_CORE_0 153
165+
#define SM8250_SLAVE_QUP_CORE_1 154
166+
#define SM8250_SLAVE_QUP_CORE_2 155
161167

162168
#endif

include/dt-bindings/interconnect/qcom,sm8250.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,4 +166,11 @@
166166
#define SLAVE_QDSS_STM 17
167167
#define SLAVE_TCU 18
168168

169+
#define MASTER_QUP_CORE_0 0
170+
#define MASTER_QUP_CORE_1 1
171+
#define MASTER_QUP_CORE_2 2
172+
#define SLAVE_QUP_CORE_0 3
173+
#define SLAVE_QUP_CORE_1 4
174+
#define SLAVE_QUP_CORE_2 5
175+
169176
#endif

0 commit comments

Comments
 (0)