1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2022, The Linux Foundation. All rights reserved.
4  */
5 
6 #include <linux/device.h>
7 #include <linux/interconnect.h>
8 #include <linux/interconnect-provider.h>
9 #include <linux/mod_devicetable.h>
10 #include <linux/module.h>
11 #include <linux/platform_device.h>
12 #include <dt-bindings/interconnect/qcom,sdm670-rpmh.h>
13 
14 #include "bcm-voter.h"
15 #include "icc-rpmh.h"
16 #include "sdm670.h"
17 
18 static struct qcom_icc_node qhm_a1noc_cfg = {
19 	.name = "qhm_a1noc_cfg",
20 	.id = SDM670_MASTER_A1NOC_CFG,
21 	.channels = 1,
22 	.buswidth = 4,
23 	.num_links = 1,
24 	.links = { SDM670_SLAVE_SERVICE_A1NOC },
25 };
26 
27 static struct qcom_icc_node qhm_qup1 = {
28 	.name = "qhm_qup1",
29 	.id = SDM670_MASTER_BLSP_1,
30 	.channels = 1,
31 	.buswidth = 4,
32 	.num_links = 1,
33 	.links = { SDM670_SLAVE_A1NOC_SNOC },
34 };
35 
36 static struct qcom_icc_node qhm_tsif = {
37 	.name = "qhm_tsif",
38 	.id = SDM670_MASTER_TSIF,
39 	.channels = 1,
40 	.buswidth = 4,
41 	.num_links = 1,
42 	.links = { SDM670_SLAVE_A1NOC_SNOC },
43 };
44 
45 static struct qcom_icc_node xm_emmc = {
46 	.name = "xm_emmc",
47 	.id = SDM670_MASTER_EMMC,
48 	.channels = 1,
49 	.buswidth = 8,
50 	.num_links = 1,
51 	.links = { SDM670_SLAVE_A1NOC_SNOC },
52 };
53 
54 static struct qcom_icc_node xm_sdc2 = {
55 	.name = "xm_sdc2",
56 	.id = SDM670_MASTER_SDCC_2,
57 	.channels = 1,
58 	.buswidth = 8,
59 	.num_links = 1,
60 	.links = { SDM670_SLAVE_A1NOC_SNOC },
61 };
62 
63 static struct qcom_icc_node xm_sdc4 = {
64 	.name = "xm_sdc4",
65 	.id = SDM670_MASTER_SDCC_4,
66 	.channels = 1,
67 	.buswidth = 8,
68 	.num_links = 1,
69 	.links = { SDM670_SLAVE_A1NOC_SNOC },
70 };
71 
72 static struct qcom_icc_node xm_ufs_mem = {
73 	.name = "xm_ufs_mem",
74 	.id = SDM670_MASTER_UFS_MEM,
75 	.channels = 1,
76 	.buswidth = 8,
77 	.num_links = 1,
78 	.links = { SDM670_SLAVE_A1NOC_SNOC },
79 };
80 
81 static struct qcom_icc_node qhm_a2noc_cfg = {
82 	.name = "qhm_a2noc_cfg",
83 	.id = SDM670_MASTER_A2NOC_CFG,
84 	.channels = 1,
85 	.buswidth = 4,
86 	.num_links = 1,
87 	.links = { SDM670_SLAVE_SERVICE_A2NOC },
88 };
89 
90 static struct qcom_icc_node qhm_qdss_bam = {
91 	.name = "qhm_qdss_bam",
92 	.id = SDM670_MASTER_QDSS_BAM,
93 	.channels = 1,
94 	.buswidth = 4,
95 	.num_links = 1,
96 	.links = { SDM670_SLAVE_A2NOC_SNOC },
97 };
98 
99 static struct qcom_icc_node qhm_qup2 = {
100 	.name = "qhm_qup2",
101 	.id = SDM670_MASTER_BLSP_2,
102 	.channels = 1,
103 	.buswidth = 4,
104 	.num_links = 1,
105 	.links = { SDM670_SLAVE_A2NOC_SNOC },
106 };
107 
108 static struct qcom_icc_node qnm_cnoc = {
109 	.name = "qnm_cnoc",
110 	.id = SDM670_MASTER_CNOC_A2NOC,
111 	.channels = 1,
112 	.buswidth = 8,
113 	.num_links = 1,
114 	.links = { SDM670_SLAVE_A2NOC_SNOC },
115 };
116 
117 static struct qcom_icc_node qxm_crypto = {
118 	.name = "qxm_crypto",
119 	.id = SDM670_MASTER_CRYPTO_CORE_0,
120 	.channels = 1,
121 	.buswidth = 8,
122 	.num_links = 1,
123 	.links = { SDM670_SLAVE_A2NOC_SNOC },
124 };
125 
126 static struct qcom_icc_node qxm_ipa = {
127 	.name = "qxm_ipa",
128 	.id = SDM670_MASTER_IPA,
129 	.channels = 1,
130 	.buswidth = 8,
131 	.num_links = 1,
132 	.links = { SDM670_SLAVE_A2NOC_SNOC },
133 };
134 
135 static struct qcom_icc_node xm_qdss_etr = {
136 	.name = "xm_qdss_etr",
137 	.id = SDM670_MASTER_QDSS_ETR,
138 	.channels = 1,
139 	.buswidth = 8,
140 	.num_links = 1,
141 	.links = { SDM670_SLAVE_A2NOC_SNOC },
142 };
143 
144 static struct qcom_icc_node xm_usb3_0 = {
145 	.name = "xm_usb3_0",
146 	.id = SDM670_MASTER_USB3,
147 	.channels = 1,
148 	.buswidth = 8,
149 	.num_links = 1,
150 	.links = { SDM670_SLAVE_A2NOC_SNOC },
151 };
152 
153 static struct qcom_icc_node qxm_camnoc_hf0_uncomp = {
154 	.name = "qxm_camnoc_hf0_uncomp",
155 	.id = SDM670_MASTER_CAMNOC_HF0_UNCOMP,
156 	.channels = 1,
157 	.buswidth = 32,
158 	.num_links = 1,
159 	.links = { SDM670_SLAVE_CAMNOC_UNCOMP },
160 };
161 
162 static struct qcom_icc_node qxm_camnoc_hf1_uncomp = {
163 	.name = "qxm_camnoc_hf1_uncomp",
164 	.id = SDM670_MASTER_CAMNOC_HF1_UNCOMP,
165 	.channels = 1,
166 	.buswidth = 32,
167 	.num_links = 1,
168 	.links = { SDM670_SLAVE_CAMNOC_UNCOMP },
169 };
170 
171 static struct qcom_icc_node qxm_camnoc_sf_uncomp = {
172 	.name = "qxm_camnoc_sf_uncomp",
173 	.id = SDM670_MASTER_CAMNOC_SF_UNCOMP,
174 	.channels = 1,
175 	.buswidth = 32,
176 	.num_links = 1,
177 	.links = { SDM670_SLAVE_CAMNOC_UNCOMP },
178 };
179 
180 static struct qcom_icc_node qhm_spdm = {
181 	.name = "qhm_spdm",
182 	.id = SDM670_MASTER_SPDM,
183 	.channels = 1,
184 	.buswidth = 4,
185 	.num_links = 1,
186 	.links = { SDM670_SLAVE_CNOC_A2NOC },
187 };
188 
189 static struct qcom_icc_node qnm_snoc = {
190 	.name = "qnm_snoc",
191 	.id = SDM670_MASTER_SNOC_CNOC,
192 	.channels = 1,
193 	.buswidth = 8,
194 	.num_links = 38,
195 	.links = { SDM670_SLAVE_TLMM_SOUTH,
196 		   SDM670_SLAVE_CAMERA_CFG,
197 		   SDM670_SLAVE_SDCC_4,
198 		   SDM670_SLAVE_SDCC_2,
199 		   SDM670_SLAVE_CNOC_MNOC_CFG,
200 		   SDM670_SLAVE_UFS_MEM_CFG,
201 		   SDM670_SLAVE_GLM,
202 		   SDM670_SLAVE_PDM,
203 		   SDM670_SLAVE_A2NOC_CFG,
204 		   SDM670_SLAVE_QDSS_CFG,
205 		   SDM670_SLAVE_DISPLAY_CFG,
206 		   SDM670_SLAVE_TCSR,
207 		   SDM670_SLAVE_DCC_CFG,
208 		   SDM670_SLAVE_CNOC_DDRSS,
209 		   SDM670_SLAVE_SNOC_CFG,
210 		   SDM670_SLAVE_SOUTH_PHY_CFG,
211 		   SDM670_SLAVE_GRAPHICS_3D_CFG,
212 		   SDM670_SLAVE_VENUS_CFG,
213 		   SDM670_SLAVE_TSIF,
214 		   SDM670_SLAVE_CDSP_CFG,
215 		   SDM670_SLAVE_AOP,
216 		   SDM670_SLAVE_BLSP_2,
217 		   SDM670_SLAVE_SERVICE_CNOC,
218 		   SDM670_SLAVE_USB3,
219 		   SDM670_SLAVE_IPA_CFG,
220 		   SDM670_SLAVE_RBCPR_CX_CFG,
221 		   SDM670_SLAVE_A1NOC_CFG,
222 		   SDM670_SLAVE_AOSS,
223 		   SDM670_SLAVE_PRNG,
224 		   SDM670_SLAVE_VSENSE_CTRL_CFG,
225 		   SDM670_SLAVE_EMMC_CFG,
226 		   SDM670_SLAVE_BLSP_1,
227 		   SDM670_SLAVE_SPDM_WRAPPER,
228 		   SDM670_SLAVE_CRYPTO_0_CFG,
229 		   SDM670_SLAVE_PIMEM_CFG,
230 		   SDM670_SLAVE_TLMM_NORTH,
231 		   SDM670_SLAVE_CLK_CTL,
232 		   SDM670_SLAVE_IMEM_CFG
233 	},
234 };
235 
236 static struct qcom_icc_node qhm_cnoc = {
237 	.name = "qhm_cnoc",
238 	.id = SDM670_MASTER_CNOC_DC_NOC,
239 	.channels = 1,
240 	.buswidth = 4,
241 	.num_links = 2,
242 	.links = { SDM670_SLAVE_MEM_NOC_CFG,
243 		   SDM670_SLAVE_LLCC_CFG
244 	},
245 };
246 
247 static struct qcom_icc_node acm_l3 = {
248 	.name = "acm_l3",
249 	.id = SDM670_MASTER_AMPSS_M0,
250 	.channels = 1,
251 	.buswidth = 16,
252 	.num_links = 3,
253 	.links = { SDM670_SLAVE_SERVICE_GNOC,
254 		   SDM670_SLAVE_GNOC_SNOC,
255 		   SDM670_SLAVE_GNOC_MEM_NOC
256 	},
257 };
258 
259 static struct qcom_icc_node pm_gnoc_cfg = {
260 	.name = "pm_gnoc_cfg",
261 	.id = SDM670_MASTER_GNOC_CFG,
262 	.channels = 1,
263 	.buswidth = 4,
264 	.num_links = 1,
265 	.links = { SDM670_SLAVE_SERVICE_GNOC },
266 };
267 
268 static struct qcom_icc_node llcc_mc = {
269 	.name = "llcc_mc",
270 	.id = SDM670_MASTER_LLCC,
271 	.channels = 2,
272 	.buswidth = 4,
273 	.num_links = 1,
274 	.links = { SDM670_SLAVE_EBI_CH0 },
275 };
276 
277 static struct qcom_icc_node acm_tcu = {
278 	.name = "acm_tcu",
279 	.id = SDM670_MASTER_TCU_0,
280 	.channels = 1,
281 	.buswidth = 8,
282 	.num_links = 3,
283 	.links = { SDM670_SLAVE_MEM_NOC_GNOC,
284 		   SDM670_SLAVE_LLCC,
285 		   SDM670_SLAVE_MEM_NOC_SNOC
286 	},
287 };
288 
289 static struct qcom_icc_node qhm_memnoc_cfg = {
290 	.name = "qhm_memnoc_cfg",
291 	.id = SDM670_MASTER_MEM_NOC_CFG,
292 	.channels = 1,
293 	.buswidth = 4,
294 	.num_links = 2,
295 	.links = { SDM670_SLAVE_SERVICE_MEM_NOC,
296 		   SDM670_SLAVE_MSS_PROC_MS_MPU_CFG
297 	},
298 };
299 
300 static struct qcom_icc_node qnm_apps = {
301 	.name = "qnm_apps",
302 	.id = SDM670_MASTER_GNOC_MEM_NOC,
303 	.channels = 2,
304 	.buswidth = 32,
305 	.num_links = 1,
306 	.links = { SDM670_SLAVE_LLCC },
307 };
308 
309 static struct qcom_icc_node qnm_mnoc_hf = {
310 	.name = "qnm_mnoc_hf",
311 	.id = SDM670_MASTER_MNOC_HF_MEM_NOC,
312 	.channels = 2,
313 	.buswidth = 32,
314 	.num_links = 1,
315 	.links = { SDM670_SLAVE_LLCC },
316 };
317 
318 static struct qcom_icc_node qnm_mnoc_sf = {
319 	.name = "qnm_mnoc_sf",
320 	.id = SDM670_MASTER_MNOC_SF_MEM_NOC,
321 	.channels = 1,
322 	.buswidth = 32,
323 	.num_links = 3,
324 	.links = { SDM670_SLAVE_MEM_NOC_GNOC,
325 		   SDM670_SLAVE_LLCC,
326 		   SDM670_SLAVE_MEM_NOC_SNOC
327 	},
328 };
329 
330 static struct qcom_icc_node qnm_snoc_gc = {
331 	.name = "qnm_snoc_gc",
332 	.id = SDM670_MASTER_SNOC_GC_MEM_NOC,
333 	.channels = 1,
334 	.buswidth = 8,
335 	.num_links = 1,
336 	.links = { SDM670_SLAVE_LLCC },
337 };
338 
339 static struct qcom_icc_node qnm_snoc_sf = {
340 	.name = "qnm_snoc_sf",
341 	.id = SDM670_MASTER_SNOC_SF_MEM_NOC,
342 	.channels = 1,
343 	.buswidth = 16,
344 	.num_links = 2,
345 	.links = { SDM670_SLAVE_MEM_NOC_GNOC,
346 		   SDM670_SLAVE_LLCC
347 	},
348 };
349 
350 static struct qcom_icc_node qxm_gpu = {
351 	.name = "qxm_gpu",
352 	.id = SDM670_MASTER_GRAPHICS_3D,
353 	.channels = 2,
354 	.buswidth = 32,
355 	.num_links = 3,
356 	.links = { SDM670_SLAVE_MEM_NOC_GNOC,
357 		   SDM670_SLAVE_LLCC,
358 		   SDM670_SLAVE_MEM_NOC_SNOC
359 	},
360 };
361 
362 static struct qcom_icc_node qhm_mnoc_cfg = {
363 	.name = "qhm_mnoc_cfg",
364 	.id = SDM670_MASTER_CNOC_MNOC_CFG,
365 	.channels = 1,
366 	.buswidth = 4,
367 	.num_links = 1,
368 	.links = { SDM670_SLAVE_SERVICE_MNOC },
369 };
370 
371 static struct qcom_icc_node qxm_camnoc_hf0 = {
372 	.name = "qxm_camnoc_hf0",
373 	.id = SDM670_MASTER_CAMNOC_HF0,
374 	.channels = 1,
375 	.buswidth = 32,
376 	.num_links = 1,
377 	.links = { SDM670_SLAVE_MNOC_HF_MEM_NOC },
378 };
379 
380 static struct qcom_icc_node qxm_camnoc_hf1 = {
381 	.name = "qxm_camnoc_hf1",
382 	.id = SDM670_MASTER_CAMNOC_HF1,
383 	.channels = 1,
384 	.buswidth = 32,
385 	.num_links = 1,
386 	.links = { SDM670_SLAVE_MNOC_HF_MEM_NOC },
387 };
388 
389 static struct qcom_icc_node qxm_camnoc_sf = {
390 	.name = "qxm_camnoc_sf",
391 	.id = SDM670_MASTER_CAMNOC_SF,
392 	.channels = 1,
393 	.buswidth = 32,
394 	.num_links = 1,
395 	.links = { SDM670_SLAVE_MNOC_SF_MEM_NOC },
396 };
397 
398 static struct qcom_icc_node qxm_mdp0 = {
399 	.name = "qxm_mdp0",
400 	.id = SDM670_MASTER_MDP_PORT0,
401 	.channels = 1,
402 	.buswidth = 32,
403 	.num_links = 1,
404 	.links = { SDM670_SLAVE_MNOC_HF_MEM_NOC },
405 };
406 
407 static struct qcom_icc_node qxm_mdp1 = {
408 	.name = "qxm_mdp1",
409 	.id = SDM670_MASTER_MDP_PORT1,
410 	.channels = 1,
411 	.buswidth = 32,
412 	.num_links = 1,
413 	.links = { SDM670_SLAVE_MNOC_HF_MEM_NOC },
414 };
415 
416 static struct qcom_icc_node qxm_rot = {
417 	.name = "qxm_rot",
418 	.id = SDM670_MASTER_ROTATOR,
419 	.channels = 1,
420 	.buswidth = 32,
421 	.num_links = 1,
422 	.links = { SDM670_SLAVE_MNOC_SF_MEM_NOC },
423 };
424 
425 static struct qcom_icc_node qxm_venus0 = {
426 	.name = "qxm_venus0",
427 	.id = SDM670_MASTER_VIDEO_P0,
428 	.channels = 1,
429 	.buswidth = 32,
430 	.num_links = 1,
431 	.links = { SDM670_SLAVE_MNOC_SF_MEM_NOC },
432 };
433 
434 static struct qcom_icc_node qxm_venus1 = {
435 	.name = "qxm_venus1",
436 	.id = SDM670_MASTER_VIDEO_P1,
437 	.channels = 1,
438 	.buswidth = 32,
439 	.num_links = 1,
440 	.links = { SDM670_SLAVE_MNOC_SF_MEM_NOC },
441 };
442 
443 static struct qcom_icc_node qxm_venus_arm9 = {
444 	.name = "qxm_venus_arm9",
445 	.id = SDM670_MASTER_VIDEO_PROC,
446 	.channels = 1,
447 	.buswidth = 8,
448 	.num_links = 1,
449 	.links = { SDM670_SLAVE_MNOC_SF_MEM_NOC },
450 };
451 
452 static struct qcom_icc_node qhm_snoc_cfg = {
453 	.name = "qhm_snoc_cfg",
454 	.id = SDM670_MASTER_SNOC_CFG,
455 	.channels = 1,
456 	.buswidth = 4,
457 	.num_links = 1,
458 	.links = { SDM670_SLAVE_SERVICE_SNOC },
459 };
460 
461 static struct qcom_icc_node qnm_aggre1_noc = {
462 	.name = "qnm_aggre1_noc",
463 	.id = SDM670_MASTER_A1NOC_SNOC,
464 	.channels = 1,
465 	.buswidth = 16,
466 	.num_links = 6,
467 	.links = { SDM670_SLAVE_PIMEM,
468 		   SDM670_SLAVE_SNOC_MEM_NOC_SF,
469 		   SDM670_SLAVE_OCIMEM,
470 		   SDM670_SLAVE_APPSS,
471 		   SDM670_SLAVE_SNOC_CNOC,
472 		   SDM670_SLAVE_QDSS_STM
473 	},
474 };
475 
476 static struct qcom_icc_node qnm_aggre2_noc = {
477 	.name = "qnm_aggre2_noc",
478 	.id = SDM670_MASTER_A2NOC_SNOC,
479 	.channels = 1,
480 	.buswidth = 16,
481 	.num_links = 7,
482 	.links = { SDM670_SLAVE_PIMEM,
483 		   SDM670_SLAVE_SNOC_MEM_NOC_SF,
484 		   SDM670_SLAVE_OCIMEM,
485 		   SDM670_SLAVE_APPSS,
486 		   SDM670_SLAVE_SNOC_CNOC,
487 		   SDM670_SLAVE_TCU,
488 		   SDM670_SLAVE_QDSS_STM
489 	},
490 };
491 
492 static struct qcom_icc_node qnm_gladiator_sodv = {
493 	.name = "qnm_gladiator_sodv",
494 	.id = SDM670_MASTER_GNOC_SNOC,
495 	.channels = 1,
496 	.buswidth = 8,
497 	.num_links = 6,
498 	.links = { SDM670_SLAVE_PIMEM,
499 		   SDM670_SLAVE_OCIMEM,
500 		   SDM670_SLAVE_APPSS,
501 		   SDM670_SLAVE_SNOC_CNOC,
502 		   SDM670_SLAVE_TCU,
503 		   SDM670_SLAVE_QDSS_STM
504 	},
505 };
506 
507 static struct qcom_icc_node qnm_memnoc = {
508 	.name = "qnm_memnoc",
509 	.id = SDM670_MASTER_MEM_NOC_SNOC,
510 	.channels = 1,
511 	.buswidth = 8,
512 	.num_links = 5,
513 	.links = { SDM670_SLAVE_OCIMEM,
514 		   SDM670_SLAVE_APPSS,
515 		   SDM670_SLAVE_PIMEM,
516 		   SDM670_SLAVE_SNOC_CNOC,
517 		   SDM670_SLAVE_QDSS_STM
518 	},
519 };
520 
521 static struct qcom_icc_node qxm_pimem = {
522 	.name = "qxm_pimem",
523 	.id = SDM670_MASTER_PIMEM,
524 	.channels = 1,
525 	.buswidth = 8,
526 	.num_links = 2,
527 	.links = { SDM670_SLAVE_OCIMEM,
528 		   SDM670_SLAVE_SNOC_MEM_NOC_GC
529 	},
530 };
531 
532 static struct qcom_icc_node xm_gic = {
533 	.name = "xm_gic",
534 	.id = SDM670_MASTER_GIC,
535 	.channels = 1,
536 	.buswidth = 8,
537 	.num_links = 2,
538 	.links = { SDM670_SLAVE_OCIMEM,
539 		   SDM670_SLAVE_SNOC_MEM_NOC_GC
540 	},
541 };
542 
543 static struct qcom_icc_node qns_a1noc_snoc = {
544 	.name = "qns_a1noc_snoc",
545 	.id = SDM670_SLAVE_A1NOC_SNOC,
546 	.channels = 1,
547 	.buswidth = 16,
548 	.num_links = 1,
549 	.links = { SDM670_MASTER_A1NOC_SNOC },
550 };
551 
552 static struct qcom_icc_node srvc_aggre1_noc = {
553 	.name = "srvc_aggre1_noc",
554 	.id = SDM670_SLAVE_SERVICE_A1NOC,
555 	.channels = 1,
556 	.buswidth = 4,
557 };
558 
559 static struct qcom_icc_node qns_a2noc_snoc = {
560 	.name = "qns_a2noc_snoc",
561 	.id = SDM670_SLAVE_A2NOC_SNOC,
562 	.channels = 1,
563 	.buswidth = 16,
564 	.num_links = 1,
565 	.links = { SDM670_MASTER_A2NOC_SNOC },
566 };
567 
568 static struct qcom_icc_node srvc_aggre2_noc = {
569 	.name = "srvc_aggre2_noc",
570 	.id = SDM670_SLAVE_SERVICE_A2NOC,
571 	.channels = 1,
572 	.buswidth = 4,
573 };
574 
575 static struct qcom_icc_node qns_camnoc_uncomp = {
576 	.name = "qns_camnoc_uncomp",
577 	.id = SDM670_SLAVE_CAMNOC_UNCOMP,
578 	.channels = 1,
579 	.buswidth = 32,
580 };
581 
582 static struct qcom_icc_node qhs_a1_noc_cfg = {
583 	.name = "qhs_a1_noc_cfg",
584 	.id = SDM670_SLAVE_A1NOC_CFG,
585 	.channels = 1,
586 	.buswidth = 4,
587 	.num_links = 1,
588 	.links = { SDM670_MASTER_A1NOC_CFG },
589 };
590 
591 static struct qcom_icc_node qhs_a2_noc_cfg = {
592 	.name = "qhs_a2_noc_cfg",
593 	.id = SDM670_SLAVE_A2NOC_CFG,
594 	.channels = 1,
595 	.buswidth = 4,
596 	.num_links = 1,
597 	.links = { SDM670_MASTER_A2NOC_CFG },
598 };
599 
600 static struct qcom_icc_node qhs_aop = {
601 	.name = "qhs_aop",
602 	.id = SDM670_SLAVE_AOP,
603 	.channels = 1,
604 	.buswidth = 4,
605 };
606 
607 static struct qcom_icc_node qhs_aoss = {
608 	.name = "qhs_aoss",
609 	.id = SDM670_SLAVE_AOSS,
610 	.channels = 1,
611 	.buswidth = 4,
612 };
613 
614 static struct qcom_icc_node qhs_camera_cfg = {
615 	.name = "qhs_camera_cfg",
616 	.id = SDM670_SLAVE_CAMERA_CFG,
617 	.channels = 1,
618 	.buswidth = 4,
619 };
620 
621 static struct qcom_icc_node qhs_clk_ctl = {
622 	.name = "qhs_clk_ctl",
623 	.id = SDM670_SLAVE_CLK_CTL,
624 	.channels = 1,
625 	.buswidth = 4,
626 };
627 
628 static struct qcom_icc_node qhs_compute_dsp_cfg = {
629 	.name = "qhs_compute_dsp_cfg",
630 	.id = SDM670_SLAVE_CDSP_CFG,
631 	.channels = 1,
632 	.buswidth = 4,
633 };
634 
635 static struct qcom_icc_node qhs_cpr_cx = {
636 	.name = "qhs_cpr_cx",
637 	.id = SDM670_SLAVE_RBCPR_CX_CFG,
638 	.channels = 1,
639 	.buswidth = 4,
640 };
641 
642 static struct qcom_icc_node qhs_crypto0_cfg = {
643 	.name = "qhs_crypto0_cfg",
644 	.id = SDM670_SLAVE_CRYPTO_0_CFG,
645 	.channels = 1,
646 	.buswidth = 4,
647 };
648 
649 static struct qcom_icc_node qhs_dcc_cfg = {
650 	.name = "qhs_dcc_cfg",
651 	.id = SDM670_SLAVE_DCC_CFG,
652 	.channels = 1,
653 	.buswidth = 4,
654 	.num_links = 1,
655 	.links = { SDM670_MASTER_CNOC_DC_NOC },
656 };
657 
658 static struct qcom_icc_node qhs_ddrss_cfg = {
659 	.name = "qhs_ddrss_cfg",
660 	.id = SDM670_SLAVE_CNOC_DDRSS,
661 	.channels = 1,
662 	.buswidth = 4,
663 };
664 
665 static struct qcom_icc_node qhs_display_cfg = {
666 	.name = "qhs_display_cfg",
667 	.id = SDM670_SLAVE_DISPLAY_CFG,
668 	.channels = 1,
669 	.buswidth = 4,
670 };
671 
672 static struct qcom_icc_node qhs_emmc_cfg = {
673 	.name = "qhs_emmc_cfg",
674 	.id = SDM670_SLAVE_EMMC_CFG,
675 	.channels = 1,
676 	.buswidth = 4,
677 };
678 
679 static struct qcom_icc_node qhs_glm = {
680 	.name = "qhs_glm",
681 	.id = SDM670_SLAVE_GLM,
682 	.channels = 1,
683 	.buswidth = 4,
684 };
685 
686 static struct qcom_icc_node qhs_gpuss_cfg = {
687 	.name = "qhs_gpuss_cfg",
688 	.id = SDM670_SLAVE_GRAPHICS_3D_CFG,
689 	.channels = 1,
690 	.buswidth = 8,
691 };
692 
693 static struct qcom_icc_node qhs_imem_cfg = {
694 	.name = "qhs_imem_cfg",
695 	.id = SDM670_SLAVE_IMEM_CFG,
696 	.channels = 1,
697 	.buswidth = 4,
698 };
699 
700 static struct qcom_icc_node qhs_ipa = {
701 	.name = "qhs_ipa",
702 	.id = SDM670_SLAVE_IPA_CFG,
703 	.channels = 1,
704 	.buswidth = 4,
705 };
706 
707 static struct qcom_icc_node qhs_mnoc_cfg = {
708 	.name = "qhs_mnoc_cfg",
709 	.id = SDM670_SLAVE_CNOC_MNOC_CFG,
710 	.channels = 1,
711 	.buswidth = 4,
712 	.num_links = 1,
713 	.links = { SDM670_MASTER_CNOC_MNOC_CFG },
714 };
715 
716 static struct qcom_icc_node qhs_pdm = {
717 	.name = "qhs_pdm",
718 	.id = SDM670_SLAVE_PDM,
719 	.channels = 1,
720 	.buswidth = 4,
721 };
722 
723 static struct qcom_icc_node qhs_phy_refgen_south = {
724 	.name = "qhs_phy_refgen_south",
725 	.id = SDM670_SLAVE_SOUTH_PHY_CFG,
726 	.channels = 1,
727 	.buswidth = 4,
728 };
729 
730 static struct qcom_icc_node qhs_pimem_cfg = {
731 	.name = "qhs_pimem_cfg",
732 	.id = SDM670_SLAVE_PIMEM_CFG,
733 	.channels = 1,
734 	.buswidth = 4,
735 };
736 
737 static struct qcom_icc_node qhs_prng = {
738 	.name = "qhs_prng",
739 	.id = SDM670_SLAVE_PRNG,
740 	.channels = 1,
741 	.buswidth = 4,
742 };
743 
744 static struct qcom_icc_node qhs_qdss_cfg = {
745 	.name = "qhs_qdss_cfg",
746 	.id = SDM670_SLAVE_QDSS_CFG,
747 	.channels = 1,
748 	.buswidth = 4,
749 };
750 
751 static struct qcom_icc_node qhs_qupv3_north = {
752 	.name = "qhs_qupv3_north",
753 	.id = SDM670_SLAVE_BLSP_2,
754 	.channels = 1,
755 	.buswidth = 4,
756 };
757 
758 static struct qcom_icc_node qhs_qupv3_south = {
759 	.name = "qhs_qupv3_south",
760 	.id = SDM670_SLAVE_BLSP_1,
761 	.channels = 1,
762 	.buswidth = 4,
763 };
764 
765 static struct qcom_icc_node qhs_sdc2 = {
766 	.name = "qhs_sdc2",
767 	.id = SDM670_SLAVE_SDCC_2,
768 	.channels = 1,
769 	.buswidth = 4,
770 };
771 
772 static struct qcom_icc_node qhs_sdc4 = {
773 	.name = "qhs_sdc4",
774 	.id = SDM670_SLAVE_SDCC_4,
775 	.channels = 1,
776 	.buswidth = 4,
777 };
778 
779 static struct qcom_icc_node qhs_snoc_cfg = {
780 	.name = "qhs_snoc_cfg",
781 	.id = SDM670_SLAVE_SNOC_CFG,
782 	.channels = 1,
783 	.buswidth = 4,
784 	.num_links = 1,
785 	.links = { SDM670_MASTER_SNOC_CFG },
786 };
787 
788 static struct qcom_icc_node qhs_spdm = {
789 	.name = "qhs_spdm",
790 	.id = SDM670_SLAVE_SPDM_WRAPPER,
791 	.channels = 1,
792 	.buswidth = 4,
793 };
794 
795 static struct qcom_icc_node qhs_tcsr = {
796 	.name = "qhs_tcsr",
797 	.id = SDM670_SLAVE_TCSR,
798 	.channels = 1,
799 	.buswidth = 4,
800 };
801 
802 static struct qcom_icc_node qhs_tlmm_north = {
803 	.name = "qhs_tlmm_north",
804 	.id = SDM670_SLAVE_TLMM_NORTH,
805 	.channels = 1,
806 	.buswidth = 4,
807 };
808 
809 static struct qcom_icc_node qhs_tlmm_south = {
810 	.name = "qhs_tlmm_south",
811 	.id = SDM670_SLAVE_TLMM_SOUTH,
812 	.channels = 1,
813 	.buswidth = 4,
814 };
815 
816 static struct qcom_icc_node qhs_tsif = {
817 	.name = "qhs_tsif",
818 	.id = SDM670_SLAVE_TSIF,
819 	.channels = 1,
820 	.buswidth = 4,
821 };
822 
823 static struct qcom_icc_node qhs_ufs_mem_cfg = {
824 	.name = "qhs_ufs_mem_cfg",
825 	.id = SDM670_SLAVE_UFS_MEM_CFG,
826 	.channels = 1,
827 	.buswidth = 4,
828 };
829 
830 static struct qcom_icc_node qhs_usb3_0 = {
831 	.name = "qhs_usb3_0",
832 	.id = SDM670_SLAVE_USB3,
833 	.channels = 1,
834 	.buswidth = 4,
835 };
836 
837 static struct qcom_icc_node qhs_venus_cfg = {
838 	.name = "qhs_venus_cfg",
839 	.id = SDM670_SLAVE_VENUS_CFG,
840 	.channels = 1,
841 	.buswidth = 4,
842 };
843 
844 static struct qcom_icc_node qhs_vsense_ctrl_cfg = {
845 	.name = "qhs_vsense_ctrl_cfg",
846 	.id = SDM670_SLAVE_VSENSE_CTRL_CFG,
847 	.channels = 1,
848 	.buswidth = 4,
849 };
850 
851 static struct qcom_icc_node qns_cnoc_a2noc = {
852 	.name = "qns_cnoc_a2noc",
853 	.id = SDM670_SLAVE_CNOC_A2NOC,
854 	.channels = 1,
855 	.buswidth = 8,
856 	.num_links = 1,
857 	.links = { SDM670_MASTER_CNOC_A2NOC },
858 };
859 
860 static struct qcom_icc_node srvc_cnoc = {
861 	.name = "srvc_cnoc",
862 	.id = SDM670_SLAVE_SERVICE_CNOC,
863 	.channels = 1,
864 	.buswidth = 4,
865 };
866 
867 static struct qcom_icc_node qhs_llcc = {
868 	.name = "qhs_llcc",
869 	.id = SDM670_SLAVE_LLCC_CFG,
870 	.channels = 1,
871 	.buswidth = 4,
872 };
873 
874 static struct qcom_icc_node qhs_memnoc = {
875 	.name = "qhs_memnoc",
876 	.id = SDM670_SLAVE_MEM_NOC_CFG,
877 	.channels = 1,
878 	.buswidth = 4,
879 	.num_links = 1,
880 	.links = { SDM670_MASTER_MEM_NOC_CFG },
881 };
882 
883 static struct qcom_icc_node qns_gladiator_sodv = {
884 	.name = "qns_gladiator_sodv",
885 	.id = SDM670_SLAVE_GNOC_SNOC,
886 	.channels = 1,
887 	.buswidth = 8,
888 	.num_links = 1,
889 	.links = { SDM670_MASTER_GNOC_SNOC },
890 };
891 
892 static struct qcom_icc_node qns_gnoc_memnoc = {
893 	.name = "qns_gnoc_memnoc",
894 	.id = SDM670_SLAVE_GNOC_MEM_NOC,
895 	.channels = 2,
896 	.buswidth = 32,
897 	.num_links = 1,
898 	.links = { SDM670_MASTER_GNOC_MEM_NOC },
899 };
900 
901 static struct qcom_icc_node srvc_gnoc = {
902 	.name = "srvc_gnoc",
903 	.id = SDM670_SLAVE_SERVICE_GNOC,
904 	.channels = 1,
905 	.buswidth = 4,
906 };
907 
908 static struct qcom_icc_node ebi = {
909 	.name = "ebi",
910 	.id = SDM670_SLAVE_EBI_CH0,
911 	.channels = 2,
912 	.buswidth = 4,
913 };
914 
915 static struct qcom_icc_node qhs_mdsp_ms_mpu_cfg = {
916 	.name = "qhs_mdsp_ms_mpu_cfg",
917 	.id = SDM670_SLAVE_MSS_PROC_MS_MPU_CFG,
918 	.channels = 1,
919 	.buswidth = 4,
920 };
921 
922 static struct qcom_icc_node qns_apps_io = {
923 	.name = "qns_apps_io",
924 	.id = SDM670_SLAVE_MEM_NOC_GNOC,
925 	.channels = 1,
926 	.buswidth = 32,
927 };
928 
929 static struct qcom_icc_node qns_llcc = {
930 	.name = "qns_llcc",
931 	.id = SDM670_SLAVE_LLCC,
932 	.channels = 2,
933 	.buswidth = 16,
934 	.num_links = 1,
935 	.links = { SDM670_MASTER_LLCC },
936 };
937 
938 static struct qcom_icc_node qns_memnoc_snoc = {
939 	.name = "qns_memnoc_snoc",
940 	.id = SDM670_SLAVE_MEM_NOC_SNOC,
941 	.channels = 1,
942 	.buswidth = 8,
943 	.num_links = 1,
944 	.links = { SDM670_MASTER_MEM_NOC_SNOC },
945 };
946 
947 static struct qcom_icc_node srvc_memnoc = {
948 	.name = "srvc_memnoc",
949 	.id = SDM670_SLAVE_SERVICE_MEM_NOC,
950 	.channels = 1,
951 	.buswidth = 4,
952 };
953 
954 static struct qcom_icc_node qns2_mem_noc = {
955 	.name = "qns2_mem_noc",
956 	.id = SDM670_SLAVE_MNOC_SF_MEM_NOC,
957 	.channels = 1,
958 	.buswidth = 32,
959 	.num_links = 1,
960 	.links = { SDM670_MASTER_MNOC_SF_MEM_NOC },
961 };
962 
963 static struct qcom_icc_node qns_mem_noc_hf = {
964 	.name = "qns_mem_noc_hf",
965 	.id = SDM670_SLAVE_MNOC_HF_MEM_NOC,
966 	.channels = 2,
967 	.buswidth = 32,
968 	.num_links = 1,
969 	.links = { SDM670_MASTER_MNOC_HF_MEM_NOC },
970 };
971 
972 static struct qcom_icc_node srvc_mnoc = {
973 	.name = "srvc_mnoc",
974 	.id = SDM670_SLAVE_SERVICE_MNOC,
975 	.channels = 1,
976 	.buswidth = 4,
977 };
978 
979 static struct qcom_icc_node qhs_apss = {
980 	.name = "qhs_apss",
981 	.id = SDM670_SLAVE_APPSS,
982 	.channels = 1,
983 	.buswidth = 8,
984 };
985 
986 static struct qcom_icc_node qns_cnoc = {
987 	.name = "qns_cnoc",
988 	.id = SDM670_SLAVE_SNOC_CNOC,
989 	.channels = 1,
990 	.buswidth = 8,
991 	.num_links = 1,
992 	.links = { SDM670_MASTER_SNOC_CNOC },
993 };
994 
995 static struct qcom_icc_node qns_memnoc_gc = {
996 	.name = "qns_memnoc_gc",
997 	.id = SDM670_SLAVE_SNOC_MEM_NOC_GC,
998 	.channels = 1,
999 	.buswidth = 8,
1000 	.num_links = 1,
1001 	.links = { SDM670_MASTER_SNOC_GC_MEM_NOC },
1002 };
1003 
1004 static struct qcom_icc_node qns_memnoc_sf = {
1005 	.name = "qns_memnoc_sf",
1006 	.id = SDM670_SLAVE_SNOC_MEM_NOC_SF,
1007 	.channels = 1,
1008 	.buswidth = 16,
1009 	.num_links = 1,
1010 	.links = { SDM670_MASTER_SNOC_SF_MEM_NOC },
1011 };
1012 
1013 static struct qcom_icc_node qxs_imem = {
1014 	.name = "qxs_imem",
1015 	.id = SDM670_SLAVE_OCIMEM,
1016 	.channels = 1,
1017 	.buswidth = 8,
1018 };
1019 
1020 static struct qcom_icc_node qxs_pimem = {
1021 	.name = "qxs_pimem",
1022 	.id = SDM670_SLAVE_PIMEM,
1023 	.channels = 1,
1024 	.buswidth = 8,
1025 };
1026 
1027 static struct qcom_icc_node srvc_snoc = {
1028 	.name = "srvc_snoc",
1029 	.id = SDM670_SLAVE_SERVICE_SNOC,
1030 	.channels = 1,
1031 	.buswidth = 4,
1032 };
1033 
1034 static struct qcom_icc_node xs_qdss_stm = {
1035 	.name = "xs_qdss_stm",
1036 	.id = SDM670_SLAVE_QDSS_STM,
1037 	.channels = 1,
1038 	.buswidth = 4,
1039 };
1040 
1041 static struct qcom_icc_node xs_sys_tcu_cfg = {
1042 	.name = "xs_sys_tcu_cfg",
1043 	.id = SDM670_SLAVE_TCU,
1044 	.channels = 1,
1045 	.buswidth = 8,
1046 };
1047 
1048 static struct qcom_icc_bcm bcm_acv = {
1049 	.name = "ACV",
1050 	.enable_mask = BIT(3),
1051 	.keepalive = false,
1052 	.num_nodes = 1,
1053 	.nodes = { &ebi },
1054 };
1055 
1056 static struct qcom_icc_bcm bcm_mc0 = {
1057 	.name = "MC0",
1058 	.keepalive = true,
1059 	.num_nodes = 1,
1060 	.nodes = { &ebi },
1061 };
1062 
1063 static struct qcom_icc_bcm bcm_sh0 = {
1064 	.name = "SH0",
1065 	.keepalive = true,
1066 	.num_nodes = 1,
1067 	.nodes = { &qns_llcc },
1068 };
1069 
1070 static struct qcom_icc_bcm bcm_mm0 = {
1071 	.name = "MM0",
1072 	.keepalive = true,
1073 	.num_nodes = 1,
1074 	.nodes = { &qns_mem_noc_hf },
1075 };
1076 
1077 static struct qcom_icc_bcm bcm_sh1 = {
1078 	.name = "SH1",
1079 	.keepalive = false,
1080 	.num_nodes = 1,
1081 	.nodes = { &qns_apps_io },
1082 };
1083 
1084 static struct qcom_icc_bcm bcm_mm1 = {
1085 	.name = "MM1",
1086 	.keepalive = true,
1087 	.num_nodes = 7,
1088 	.nodes = { &qxm_camnoc_hf0_uncomp,
1089 		   &qxm_camnoc_hf1_uncomp,
1090 		   &qxm_camnoc_sf_uncomp,
1091 		   &qxm_camnoc_hf0,
1092 		   &qxm_camnoc_hf1,
1093 		   &qxm_mdp0,
1094 		   &qxm_mdp1
1095 	},
1096 };
1097 
1098 static struct qcom_icc_bcm bcm_sh2 = {
1099 	.name = "SH2",
1100 	.keepalive = false,
1101 	.num_nodes = 1,
1102 	.nodes = { &qns_memnoc_snoc },
1103 };
1104 
1105 static struct qcom_icc_bcm bcm_mm2 = {
1106 	.name = "MM2",
1107 	.keepalive = false,
1108 	.num_nodes = 1,
1109 	.nodes = { &qns2_mem_noc },
1110 };
1111 
1112 static struct qcom_icc_bcm bcm_sh3 = {
1113 	.name = "SH3",
1114 	.keepalive = false,
1115 	.num_nodes = 1,
1116 	.nodes = { &acm_tcu },
1117 };
1118 
1119 static struct qcom_icc_bcm bcm_mm3 = {
1120 	.name = "MM3",
1121 	.keepalive = false,
1122 	.num_nodes = 5,
1123 	.nodes = { &qxm_camnoc_sf, &qxm_rot, &qxm_venus0, &qxm_venus1, &qxm_venus_arm9 },
1124 };
1125 
1126 static struct qcom_icc_bcm bcm_sh5 = {
1127 	.name = "SH5",
1128 	.keepalive = false,
1129 	.num_nodes = 1,
1130 	.nodes = { &qnm_apps },
1131 };
1132 
1133 static struct qcom_icc_bcm bcm_sn0 = {
1134 	.name = "SN0",
1135 	.keepalive = true,
1136 	.num_nodes = 1,
1137 	.nodes = { &qns_memnoc_sf },
1138 };
1139 
1140 static struct qcom_icc_bcm bcm_ce0 = {
1141 	.name = "CE0",
1142 	.keepalive = false,
1143 	.num_nodes = 1,
1144 	.nodes = { &qxm_crypto },
1145 };
1146 
1147 static struct qcom_icc_bcm bcm_cn0 = {
1148 	.name = "CN0",
1149 	.keepalive = true,
1150 	.num_nodes = 41,
1151 	.nodes = { &qhm_spdm,
1152 		   &qnm_snoc,
1153 		   &qhs_a1_noc_cfg,
1154 		   &qhs_a2_noc_cfg,
1155 		   &qhs_aop,
1156 		   &qhs_aoss,
1157 		   &qhs_camera_cfg,
1158 		   &qhs_clk_ctl,
1159 		   &qhs_compute_dsp_cfg,
1160 		   &qhs_cpr_cx,
1161 		   &qhs_crypto0_cfg,
1162 		   &qhs_dcc_cfg,
1163 		   &qhs_ddrss_cfg,
1164 		   &qhs_display_cfg,
1165 		   &qhs_emmc_cfg,
1166 		   &qhs_glm,
1167 		   &qhs_gpuss_cfg,
1168 		   &qhs_imem_cfg,
1169 		   &qhs_ipa,
1170 		   &qhs_mnoc_cfg,
1171 		   &qhs_pdm,
1172 		   &qhs_phy_refgen_south,
1173 		   &qhs_pimem_cfg,
1174 		   &qhs_prng,
1175 		   &qhs_qdss_cfg,
1176 		   &qhs_qupv3_north,
1177 		   &qhs_qupv3_south,
1178 		   &qhs_sdc2,
1179 		   &qhs_sdc4,
1180 		   &qhs_snoc_cfg,
1181 		   &qhs_spdm,
1182 		   &qhs_tcsr,
1183 		   &qhs_tlmm_north,
1184 		   &qhs_tlmm_south,
1185 		   &qhs_tsif,
1186 		   &qhs_ufs_mem_cfg,
1187 		   &qhs_usb3_0,
1188 		   &qhs_venus_cfg,
1189 		   &qhs_vsense_ctrl_cfg,
1190 		   &qns_cnoc_a2noc,
1191 		   &srvc_cnoc
1192 	},
1193 };
1194 
1195 static struct qcom_icc_bcm bcm_qup0 = {
1196 	.name = "QUP0",
1197 	.keepalive = false,
1198 	.num_nodes = 2,
1199 	.nodes = { &qhm_qup1, &qhm_qup2 },
1200 };
1201 
1202 static struct qcom_icc_bcm bcm_sn1 = {
1203 	.name = "SN1",
1204 	.keepalive = false,
1205 	.num_nodes = 1,
1206 	.nodes = { &qxs_imem },
1207 };
1208 
1209 static struct qcom_icc_bcm bcm_sn2 = {
1210 	.name = "SN2",
1211 	.keepalive = false,
1212 	.num_nodes = 1,
1213 	.nodes = { &qns_memnoc_gc },
1214 };
1215 
1216 static struct qcom_icc_bcm bcm_sn3 = {
1217 	.name = "SN3",
1218 	.keepalive = false,
1219 	.num_nodes = 1,
1220 	.nodes = { &qns_cnoc },
1221 };
1222 
1223 static struct qcom_icc_bcm bcm_sn4 = {
1224 	.name = "SN4",
1225 	.keepalive = false,
1226 	.num_nodes = 2,
1227 	.nodes = { &qxm_pimem, &qxs_pimem },
1228 };
1229 
1230 static struct qcom_icc_bcm bcm_sn5 = {
1231 	.name = "SN5",
1232 	.keepalive = false,
1233 	.num_nodes = 1,
1234 	.nodes = { &xs_qdss_stm },
1235 };
1236 
1237 static struct qcom_icc_bcm bcm_sn8 = {
1238 	.name = "SN8",
1239 	.keepalive = false,
1240 	.num_nodes = 2,
1241 	.nodes = { &qnm_aggre1_noc, &srvc_aggre1_noc },
1242 };
1243 
1244 static struct qcom_icc_bcm bcm_sn10 = {
1245 	.name = "SN10",
1246 	.keepalive = false,
1247 	.num_nodes = 2,
1248 	.nodes = { &qnm_aggre2_noc, &srvc_aggre2_noc },
1249 };
1250 
1251 static struct qcom_icc_bcm bcm_sn11 = {
1252 	.name = "SN11",
1253 	.keepalive = false,
1254 	.num_nodes = 2,
1255 	.nodes = { &qnm_gladiator_sodv, &xm_gic },
1256 };
1257 
1258 static struct qcom_icc_bcm bcm_sn13 = {
1259 	.name = "SN13",
1260 	.keepalive = false,
1261 	.num_nodes = 1,
1262 	.nodes = { &qnm_memnoc },
1263 };
1264 
1265 static struct qcom_icc_bcm * const aggre1_noc_bcms[] = {
1266 	&bcm_qup0,
1267 	&bcm_sn8,
1268 };
1269 
1270 static struct qcom_icc_node * const aggre1_noc_nodes[] = {
1271 	[MASTER_A1NOC_CFG] = &qhm_a1noc_cfg,
1272 	[MASTER_BLSP_1] = &qhm_qup1,
1273 	[MASTER_TSIF] = &qhm_tsif,
1274 	[MASTER_EMMC] = &xm_emmc,
1275 	[MASTER_SDCC_2] = &xm_sdc2,
1276 	[MASTER_SDCC_4] = &xm_sdc4,
1277 	[MASTER_UFS_MEM] = &xm_ufs_mem,
1278 	[SLAVE_A1NOC_SNOC] = &qns_a1noc_snoc,
1279 	[SLAVE_SERVICE_A1NOC] = &srvc_aggre1_noc,
1280 };
1281 
1282 static const struct qcom_icc_desc sdm670_aggre1_noc = {
1283 	.nodes = aggre1_noc_nodes,
1284 	.num_nodes = ARRAY_SIZE(aggre1_noc_nodes),
1285 	.bcms = aggre1_noc_bcms,
1286 	.num_bcms = ARRAY_SIZE(aggre1_noc_bcms),
1287 };
1288 
1289 static struct qcom_icc_bcm * const aggre2_noc_bcms[] = {
1290 	&bcm_ce0,
1291 	&bcm_qup0,
1292 	&bcm_sn10,
1293 };
1294 
1295 static struct qcom_icc_node * const aggre2_noc_nodes[] = {
1296 	[MASTER_A2NOC_CFG] = &qhm_a2noc_cfg,
1297 	[MASTER_QDSS_BAM] = &qhm_qdss_bam,
1298 	[MASTER_BLSP_2] = &qhm_qup2,
1299 	[MASTER_CNOC_A2NOC] = &qnm_cnoc,
1300 	[MASTER_CRYPTO_CORE_0] = &qxm_crypto,
1301 	[MASTER_IPA] = &qxm_ipa,
1302 	[MASTER_QDSS_ETR] = &xm_qdss_etr,
1303 	[MASTER_USB3] = &xm_usb3_0,
1304 	[SLAVE_A2NOC_SNOC] = &qns_a2noc_snoc,
1305 	[SLAVE_SERVICE_A2NOC] = &srvc_aggre2_noc,
1306 };
1307 
1308 static const struct qcom_icc_desc sdm670_aggre2_noc = {
1309 	.nodes = aggre2_noc_nodes,
1310 	.num_nodes = ARRAY_SIZE(aggre2_noc_nodes),
1311 	.bcms = aggre2_noc_bcms,
1312 	.num_bcms = ARRAY_SIZE(aggre2_noc_bcms),
1313 };
1314 
1315 static struct qcom_icc_bcm * const config_noc_bcms[] = {
1316 	&bcm_cn0,
1317 };
1318 
1319 static struct qcom_icc_node * const config_noc_nodes[] = {
1320 	[MASTER_SPDM] = &qhm_spdm,
1321 	[MASTER_SNOC_CNOC] = &qnm_snoc,
1322 	[SLAVE_A1NOC_CFG] = &qhs_a1_noc_cfg,
1323 	[SLAVE_A2NOC_CFG] = &qhs_a2_noc_cfg,
1324 	[SLAVE_AOP] = &qhs_aop,
1325 	[SLAVE_AOSS] = &qhs_aoss,
1326 	[SLAVE_CAMERA_CFG] = &qhs_camera_cfg,
1327 	[SLAVE_CLK_CTL] = &qhs_clk_ctl,
1328 	[SLAVE_CDSP_CFG] = &qhs_compute_dsp_cfg,
1329 	[SLAVE_RBCPR_CX_CFG] = &qhs_cpr_cx,
1330 	[SLAVE_CRYPTO_0_CFG] = &qhs_crypto0_cfg,
1331 	[SLAVE_DCC_CFG] = &qhs_dcc_cfg,
1332 	[SLAVE_CNOC_DDRSS] = &qhs_ddrss_cfg,
1333 	[SLAVE_DISPLAY_CFG] = &qhs_display_cfg,
1334 	[SLAVE_EMMC_CFG] = &qhs_emmc_cfg,
1335 	[SLAVE_GLM] = &qhs_glm,
1336 	[SLAVE_GRAPHICS_3D_CFG] = &qhs_gpuss_cfg,
1337 	[SLAVE_IMEM_CFG] = &qhs_imem_cfg,
1338 	[SLAVE_IPA_CFG] = &qhs_ipa,
1339 	[SLAVE_CNOC_MNOC_CFG] = &qhs_mnoc_cfg,
1340 	[SLAVE_PDM] = &qhs_pdm,
1341 	[SLAVE_SOUTH_PHY_CFG] = &qhs_phy_refgen_south,
1342 	[SLAVE_PIMEM_CFG] = &qhs_pimem_cfg,
1343 	[SLAVE_PRNG] = &qhs_prng,
1344 	[SLAVE_QDSS_CFG] = &qhs_qdss_cfg,
1345 	[SLAVE_BLSP_2] = &qhs_qupv3_north,
1346 	[SLAVE_BLSP_1] = &qhs_qupv3_south,
1347 	[SLAVE_SDCC_2] = &qhs_sdc2,
1348 	[SLAVE_SDCC_4] = &qhs_sdc4,
1349 	[SLAVE_SNOC_CFG] = &qhs_snoc_cfg,
1350 	[SLAVE_SPDM_WRAPPER] = &qhs_spdm,
1351 	[SLAVE_TCSR] = &qhs_tcsr,
1352 	[SLAVE_TLMM_NORTH] = &qhs_tlmm_north,
1353 	[SLAVE_TLMM_SOUTH] = &qhs_tlmm_south,
1354 	[SLAVE_TSIF] = &qhs_tsif,
1355 	[SLAVE_UFS_MEM_CFG] = &qhs_ufs_mem_cfg,
1356 	[SLAVE_USB3] = &qhs_usb3_0,
1357 	[SLAVE_VENUS_CFG] = &qhs_venus_cfg,
1358 	[SLAVE_VSENSE_CTRL_CFG] = &qhs_vsense_ctrl_cfg,
1359 	[SLAVE_CNOC_A2NOC] = &qns_cnoc_a2noc,
1360 	[SLAVE_SERVICE_CNOC] = &srvc_cnoc,
1361 };
1362 
1363 static const struct qcom_icc_desc sdm670_config_noc = {
1364 	.nodes = config_noc_nodes,
1365 	.num_nodes = ARRAY_SIZE(config_noc_nodes),
1366 	.bcms = config_noc_bcms,
1367 	.num_bcms = ARRAY_SIZE(config_noc_bcms),
1368 };
1369 
1370 static struct qcom_icc_bcm * const dc_noc_bcms[] = {
1371 };
1372 
1373 static struct qcom_icc_node * const dc_noc_nodes[] = {
1374 	[MASTER_CNOC_DC_NOC] = &qhm_cnoc,
1375 	[SLAVE_LLCC_CFG] = &qhs_llcc,
1376 	[SLAVE_MEM_NOC_CFG] = &qhs_memnoc,
1377 };
1378 
1379 static const struct qcom_icc_desc sdm670_dc_noc = {
1380 	.nodes = dc_noc_nodes,
1381 	.num_nodes = ARRAY_SIZE(dc_noc_nodes),
1382 	.bcms = dc_noc_bcms,
1383 	.num_bcms = ARRAY_SIZE(dc_noc_bcms),
1384 };
1385 
1386 static struct qcom_icc_bcm * const gladiator_noc_bcms[] = {
1387 };
1388 
1389 static struct qcom_icc_node * const gladiator_noc_nodes[] = {
1390 	[MASTER_AMPSS_M0] = &acm_l3,
1391 	[MASTER_GNOC_CFG] = &pm_gnoc_cfg,
1392 	[SLAVE_GNOC_SNOC] = &qns_gladiator_sodv,
1393 	[SLAVE_GNOC_MEM_NOC] = &qns_gnoc_memnoc,
1394 	[SLAVE_SERVICE_GNOC] = &srvc_gnoc,
1395 };
1396 
1397 static const struct qcom_icc_desc sdm670_gladiator_noc = {
1398 	.nodes = gladiator_noc_nodes,
1399 	.num_nodes = ARRAY_SIZE(gladiator_noc_nodes),
1400 	.bcms = gladiator_noc_bcms,
1401 	.num_bcms = ARRAY_SIZE(gladiator_noc_bcms),
1402 };
1403 
1404 static struct qcom_icc_bcm * const mem_noc_bcms[] = {
1405 	&bcm_acv,
1406 	&bcm_mc0,
1407 	&bcm_sh0,
1408 	&bcm_sh1,
1409 	&bcm_sh2,
1410 	&bcm_sh3,
1411 	&bcm_sh5,
1412 };
1413 
1414 static struct qcom_icc_node * const mem_noc_nodes[] = {
1415 	[MASTER_TCU_0] = &acm_tcu,
1416 	[MASTER_MEM_NOC_CFG] = &qhm_memnoc_cfg,
1417 	[MASTER_GNOC_MEM_NOC] = &qnm_apps,
1418 	[MASTER_MNOC_HF_MEM_NOC] = &qnm_mnoc_hf,
1419 	[MASTER_MNOC_SF_MEM_NOC] = &qnm_mnoc_sf,
1420 	[MASTER_SNOC_GC_MEM_NOC] = &qnm_snoc_gc,
1421 	[MASTER_SNOC_SF_MEM_NOC] = &qnm_snoc_sf,
1422 	[MASTER_GRAPHICS_3D] = &qxm_gpu,
1423 	[SLAVE_MSS_PROC_MS_MPU_CFG] = &qhs_mdsp_ms_mpu_cfg,
1424 	[SLAVE_MEM_NOC_GNOC] = &qns_apps_io,
1425 	[SLAVE_LLCC] = &qns_llcc,
1426 	[SLAVE_MEM_NOC_SNOC] = &qns_memnoc_snoc,
1427 	[SLAVE_SERVICE_MEM_NOC] = &srvc_memnoc,
1428 	[MASTER_LLCC] = &llcc_mc,
1429 	[SLAVE_EBI_CH0] = &ebi,
1430 };
1431 
1432 static const struct qcom_icc_desc sdm670_mem_noc = {
1433 	.nodes = mem_noc_nodes,
1434 	.num_nodes = ARRAY_SIZE(mem_noc_nodes),
1435 	.bcms = mem_noc_bcms,
1436 	.num_bcms = ARRAY_SIZE(mem_noc_bcms),
1437 };
1438 
1439 static struct qcom_icc_bcm * const mmss_noc_bcms[] = {
1440 	&bcm_mm0,
1441 	&bcm_mm1,
1442 	&bcm_mm2,
1443 	&bcm_mm3,
1444 };
1445 
1446 static struct qcom_icc_node * const mmss_noc_nodes[] = {
1447 	[MASTER_CNOC_MNOC_CFG] = &qhm_mnoc_cfg,
1448 	[MASTER_CAMNOC_HF0] = &qxm_camnoc_hf0,
1449 	[MASTER_CAMNOC_HF1] = &qxm_camnoc_hf1,
1450 	[MASTER_CAMNOC_SF] = &qxm_camnoc_sf,
1451 	[MASTER_MDP_PORT0] = &qxm_mdp0,
1452 	[MASTER_MDP_PORT1] = &qxm_mdp1,
1453 	[MASTER_ROTATOR] = &qxm_rot,
1454 	[MASTER_VIDEO_P0] = &qxm_venus0,
1455 	[MASTER_VIDEO_P1] = &qxm_venus1,
1456 	[MASTER_VIDEO_PROC] = &qxm_venus_arm9,
1457 	[SLAVE_MNOC_SF_MEM_NOC] = &qns2_mem_noc,
1458 	[SLAVE_MNOC_HF_MEM_NOC] = &qns_mem_noc_hf,
1459 	[SLAVE_SERVICE_MNOC] = &srvc_mnoc,
1460 };
1461 
1462 static const struct qcom_icc_desc sdm670_mmss_noc = {
1463 	.nodes = mmss_noc_nodes,
1464 	.num_nodes = ARRAY_SIZE(mmss_noc_nodes),
1465 	.bcms = mmss_noc_bcms,
1466 	.num_bcms = ARRAY_SIZE(mmss_noc_bcms),
1467 };
1468 
1469 static struct qcom_icc_bcm * const system_noc_bcms[] = {
1470 	&bcm_mm1,
1471 	&bcm_sn0,
1472 	&bcm_sn1,
1473 	&bcm_sn10,
1474 	&bcm_sn11,
1475 	&bcm_sn13,
1476 	&bcm_sn2,
1477 	&bcm_sn3,
1478 	&bcm_sn4,
1479 	&bcm_sn5,
1480 	&bcm_sn8,
1481 };
1482 
1483 static struct qcom_icc_node * const system_noc_nodes[] = {
1484 	[MASTER_SNOC_CFG] = &qhm_snoc_cfg,
1485 	[MASTER_A1NOC_SNOC] = &qnm_aggre1_noc,
1486 	[MASTER_A2NOC_SNOC] = &qnm_aggre2_noc,
1487 	[MASTER_GNOC_SNOC] = &qnm_gladiator_sodv,
1488 	[MASTER_MEM_NOC_SNOC] = &qnm_memnoc,
1489 	[MASTER_PIMEM] = &qxm_pimem,
1490 	[MASTER_GIC] = &xm_gic,
1491 	[SLAVE_APPSS] = &qhs_apss,
1492 	[SLAVE_SNOC_CNOC] = &qns_cnoc,
1493 	[SLAVE_SNOC_MEM_NOC_GC] = &qns_memnoc_gc,
1494 	[SLAVE_SNOC_MEM_NOC_SF] = &qns_memnoc_sf,
1495 	[SLAVE_OCIMEM] = &qxs_imem,
1496 	[SLAVE_PIMEM] = &qxs_pimem,
1497 	[SLAVE_SERVICE_SNOC] = &srvc_snoc,
1498 	[SLAVE_QDSS_STM] = &xs_qdss_stm,
1499 	[SLAVE_TCU] = &xs_sys_tcu_cfg,
1500 	[MASTER_CAMNOC_HF0_UNCOMP] = &qxm_camnoc_hf0_uncomp,
1501 	[MASTER_CAMNOC_HF1_UNCOMP] = &qxm_camnoc_hf1_uncomp,
1502 	[MASTER_CAMNOC_SF_UNCOMP] = &qxm_camnoc_sf_uncomp,
1503 	[SLAVE_CAMNOC_UNCOMP] = &qns_camnoc_uncomp,
1504 };
1505 
1506 static const struct qcom_icc_desc sdm670_system_noc = {
1507 	.nodes = system_noc_nodes,
1508 	.num_nodes = ARRAY_SIZE(system_noc_nodes),
1509 	.bcms = system_noc_bcms,
1510 	.num_bcms = ARRAY_SIZE(system_noc_bcms),
1511 };
1512 
1513 static const struct of_device_id qnoc_of_match[] = {
1514 	{ .compatible = "qcom,sdm670-aggre1-noc",
1515 	  .data = &sdm670_aggre1_noc},
1516 	{ .compatible = "qcom,sdm670-aggre2-noc",
1517 	  .data = &sdm670_aggre2_noc},
1518 	{ .compatible = "qcom,sdm670-config-noc",
1519 	  .data = &sdm670_config_noc},
1520 	{ .compatible = "qcom,sdm670-dc-noc",
1521 	  .data = &sdm670_dc_noc},
1522 	{ .compatible = "qcom,sdm670-gladiator-noc",
1523 	  .data = &sdm670_gladiator_noc},
1524 	{ .compatible = "qcom,sdm670-mem-noc",
1525 	  .data = &sdm670_mem_noc},
1526 	{ .compatible = "qcom,sdm670-mmss-noc",
1527 	  .data = &sdm670_mmss_noc},
1528 	{ .compatible = "qcom,sdm670-system-noc",
1529 	  .data = &sdm670_system_noc},
1530 	{ }
1531 };
1532 MODULE_DEVICE_TABLE(of, qnoc_of_match);
1533 
1534 static struct platform_driver qnoc_driver = {
1535 	.probe = qcom_icc_rpmh_probe,
1536 	.remove = qcom_icc_rpmh_remove,
1537 	.driver = {
1538 		.name = "qnoc-sdm670",
1539 		.of_match_table = qnoc_of_match,
1540 		.sync_state = icc_sync_state,
1541 	},
1542 };
1543 module_platform_driver(qnoc_driver);
1544 
1545 MODULE_DESCRIPTION("Qualcomm SDM670 NoC driver");
1546 MODULE_LICENSE("GPL");
1547