xref: /linux/drivers/interconnect/qcom/sdm845.c (revision 83bd89291f5cc866f60d32c34e268896c7ba8a3d)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2018-2020, 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/module.h>
10 #include <linux/mod_devicetable.h>
11 #include <linux/platform_device.h>
12 
13 #include <dt-bindings/interconnect/qcom,sdm845.h>
14 
15 #include "bcm-voter.h"
16 #include "icc-rpmh.h"
17 
18 static struct qcom_icc_node qhm_a1noc_cfg;
19 static struct qcom_icc_node qhm_qup1;
20 static struct qcom_icc_node qhm_tsif;
21 static struct qcom_icc_node xm_sdc2;
22 static struct qcom_icc_node xm_sdc4;
23 static struct qcom_icc_node xm_ufs_card;
24 static struct qcom_icc_node xm_ufs_mem;
25 static struct qcom_icc_node xm_pcie_0;
26 static struct qcom_icc_node qhm_a2noc_cfg;
27 static struct qcom_icc_node qhm_qdss_bam;
28 static struct qcom_icc_node qhm_qup2;
29 static struct qcom_icc_node qnm_cnoc;
30 static struct qcom_icc_node qxm_crypto;
31 static struct qcom_icc_node qxm_ipa;
32 static struct qcom_icc_node xm_pcie3_1;
33 static struct qcom_icc_node xm_qdss_etr;
34 static struct qcom_icc_node xm_usb3_0;
35 static struct qcom_icc_node xm_usb3_1;
36 static struct qcom_icc_node qxm_camnoc_hf0_uncomp;
37 static struct qcom_icc_node qxm_camnoc_hf1_uncomp;
38 static struct qcom_icc_node qxm_camnoc_sf_uncomp;
39 static struct qcom_icc_node qhm_spdm;
40 static struct qcom_icc_node qhm_tic;
41 static struct qcom_icc_node qnm_snoc;
42 static struct qcom_icc_node xm_qdss_dap;
43 static struct qcom_icc_node qhm_cnoc;
44 static struct qcom_icc_node acm_l3;
45 static struct qcom_icc_node pm_gnoc_cfg;
46 static struct qcom_icc_node llcc_mc;
47 static struct qcom_icc_node acm_tcu;
48 static struct qcom_icc_node qhm_memnoc_cfg;
49 static struct qcom_icc_node qnm_apps;
50 static struct qcom_icc_node qnm_mnoc_hf;
51 static struct qcom_icc_node qnm_mnoc_sf;
52 static struct qcom_icc_node qnm_snoc_gc;
53 static struct qcom_icc_node qnm_snoc_sf;
54 static struct qcom_icc_node qxm_gpu;
55 static struct qcom_icc_node qhm_mnoc_cfg;
56 static struct qcom_icc_node qxm_camnoc_hf0;
57 static struct qcom_icc_node qxm_camnoc_hf1;
58 static struct qcom_icc_node qxm_camnoc_sf;
59 static struct qcom_icc_node qxm_mdp0;
60 static struct qcom_icc_node qxm_mdp1;
61 static struct qcom_icc_node qxm_rot;
62 static struct qcom_icc_node qxm_venus0;
63 static struct qcom_icc_node qxm_venus1;
64 static struct qcom_icc_node qxm_venus_arm9;
65 static struct qcom_icc_node qhm_snoc_cfg;
66 static struct qcom_icc_node qnm_aggre1_noc;
67 static struct qcom_icc_node qnm_aggre2_noc;
68 static struct qcom_icc_node qnm_gladiator_sodv;
69 static struct qcom_icc_node qnm_memnoc;
70 static struct qcom_icc_node qnm_pcie_anoc;
71 static struct qcom_icc_node qxm_pimem;
72 static struct qcom_icc_node xm_gic;
73 static struct qcom_icc_node qns_a1noc_snoc;
74 static struct qcom_icc_node srvc_aggre1_noc;
75 static struct qcom_icc_node qns_pcie_a1noc_snoc;
76 static struct qcom_icc_node qns_a2noc_snoc;
77 static struct qcom_icc_node qns_pcie_snoc;
78 static struct qcom_icc_node srvc_aggre2_noc;
79 static struct qcom_icc_node qns_camnoc_uncomp;
80 static struct qcom_icc_node qhs_a1_noc_cfg;
81 static struct qcom_icc_node qhs_a2_noc_cfg;
82 static struct qcom_icc_node qhs_aop;
83 static struct qcom_icc_node qhs_aoss;
84 static struct qcom_icc_node qhs_camera_cfg;
85 static struct qcom_icc_node qhs_clk_ctl;
86 static struct qcom_icc_node qhs_compute_dsp_cfg;
87 static struct qcom_icc_node qhs_cpr_cx;
88 static struct qcom_icc_node qhs_crypto0_cfg;
89 static struct qcom_icc_node qhs_dcc_cfg;
90 static struct qcom_icc_node qhs_ddrss_cfg;
91 static struct qcom_icc_node qhs_display_cfg;
92 static struct qcom_icc_node qhs_glm;
93 static struct qcom_icc_node qhs_gpuss_cfg;
94 static struct qcom_icc_node qhs_imem_cfg;
95 static struct qcom_icc_node qhs_ipa;
96 static struct qcom_icc_node qhs_mnoc_cfg;
97 static struct qcom_icc_node qhs_pcie0_cfg;
98 static struct qcom_icc_node qhs_pcie_gen3_cfg;
99 static struct qcom_icc_node qhs_pdm;
100 static struct qcom_icc_node qhs_phy_refgen_south;
101 static struct qcom_icc_node qhs_pimem_cfg;
102 static struct qcom_icc_node qhs_prng;
103 static struct qcom_icc_node qhs_qdss_cfg;
104 static struct qcom_icc_node qhs_qupv3_north;
105 static struct qcom_icc_node qhs_qupv3_south;
106 static struct qcom_icc_node qhs_sdc2;
107 static struct qcom_icc_node qhs_sdc4;
108 static struct qcom_icc_node qhs_snoc_cfg;
109 static struct qcom_icc_node qhs_spdm;
110 static struct qcom_icc_node qhs_spss_cfg;
111 static struct qcom_icc_node qhs_tcsr;
112 static struct qcom_icc_node qhs_tlmm_north;
113 static struct qcom_icc_node qhs_tlmm_south;
114 static struct qcom_icc_node qhs_tsif;
115 static struct qcom_icc_node qhs_ufs_card_cfg;
116 static struct qcom_icc_node qhs_ufs_mem_cfg;
117 static struct qcom_icc_node qhs_usb3_0;
118 static struct qcom_icc_node qhs_usb3_1;
119 static struct qcom_icc_node qhs_venus_cfg;
120 static struct qcom_icc_node qhs_vsense_ctrl_cfg;
121 static struct qcom_icc_node qns_cnoc_a2noc;
122 static struct qcom_icc_node srvc_cnoc;
123 static struct qcom_icc_node qhs_llcc;
124 static struct qcom_icc_node qhs_memnoc;
125 static struct qcom_icc_node qns_gladiator_sodv;
126 static struct qcom_icc_node qns_gnoc_memnoc;
127 static struct qcom_icc_node srvc_gnoc;
128 static struct qcom_icc_node ebi;
129 static struct qcom_icc_node qhs_mdsp_ms_mpu_cfg;
130 static struct qcom_icc_node qns_apps_io;
131 static struct qcom_icc_node qns_llcc;
132 static struct qcom_icc_node qns_memnoc_snoc;
133 static struct qcom_icc_node srvc_memnoc;
134 static struct qcom_icc_node qns2_mem_noc;
135 static struct qcom_icc_node qns_mem_noc_hf;
136 static struct qcom_icc_node srvc_mnoc;
137 static struct qcom_icc_node qhs_apss;
138 static struct qcom_icc_node qns_cnoc;
139 static struct qcom_icc_node qns_memnoc_gc;
140 static struct qcom_icc_node qns_memnoc_sf;
141 static struct qcom_icc_node qxs_imem;
142 static struct qcom_icc_node qxs_pcie;
143 static struct qcom_icc_node qxs_pcie_gen3;
144 static struct qcom_icc_node qxs_pimem;
145 static struct qcom_icc_node srvc_snoc;
146 static struct qcom_icc_node xs_qdss_stm;
147 static struct qcom_icc_node xs_sys_tcu_cfg;
148 
149 static struct qcom_icc_node qhm_a1noc_cfg = {
150 	.name = "qhm_a1noc_cfg",
151 	.channels = 1,
152 	.buswidth = 4,
153 	.num_links = 1,
154 	.link_nodes = { &srvc_aggre1_noc },
155 };
156 
157 static struct qcom_icc_node qhm_qup1 = {
158 	.name = "qhm_qup1",
159 	.channels = 1,
160 	.buswidth = 4,
161 	.num_links = 1,
162 	.link_nodes = { &qns_a1noc_snoc },
163 };
164 
165 static struct qcom_icc_node qhm_tsif = {
166 	.name = "qhm_tsif",
167 	.channels = 1,
168 	.buswidth = 4,
169 	.num_links = 1,
170 	.link_nodes = { &qns_a1noc_snoc },
171 };
172 
173 static struct qcom_icc_node xm_sdc2 = {
174 	.name = "xm_sdc2",
175 	.channels = 1,
176 	.buswidth = 8,
177 	.num_links = 1,
178 	.link_nodes = { &qns_a1noc_snoc },
179 };
180 
181 static struct qcom_icc_node xm_sdc4 = {
182 	.name = "xm_sdc4",
183 	.channels = 1,
184 	.buswidth = 8,
185 	.num_links = 1,
186 	.link_nodes = { &qns_a1noc_snoc },
187 };
188 
189 static struct qcom_icc_node xm_ufs_card = {
190 	.name = "xm_ufs_card",
191 	.channels = 1,
192 	.buswidth = 8,
193 	.num_links = 1,
194 	.link_nodes = { &qns_a1noc_snoc },
195 };
196 
197 static struct qcom_icc_node xm_ufs_mem = {
198 	.name = "xm_ufs_mem",
199 	.channels = 1,
200 	.buswidth = 8,
201 	.num_links = 1,
202 	.link_nodes = { &qns_a1noc_snoc },
203 };
204 
205 static struct qcom_icc_node xm_pcie_0 = {
206 	.name = "xm_pcie_0",
207 	.channels = 1,
208 	.buswidth = 8,
209 	.num_links = 1,
210 	.link_nodes = { &qns_pcie_a1noc_snoc },
211 };
212 
213 static struct qcom_icc_node qhm_a2noc_cfg = {
214 	.name = "qhm_a2noc_cfg",
215 	.channels = 1,
216 	.buswidth = 4,
217 	.num_links = 1,
218 	.link_nodes = { &srvc_aggre2_noc },
219 };
220 
221 static struct qcom_icc_node qhm_qdss_bam = {
222 	.name = "qhm_qdss_bam",
223 	.channels = 1,
224 	.buswidth = 4,
225 	.num_links = 1,
226 	.link_nodes = { &qns_a2noc_snoc },
227 };
228 
229 static struct qcom_icc_node qhm_qup2 = {
230 	.name = "qhm_qup2",
231 	.channels = 1,
232 	.buswidth = 4,
233 	.num_links = 1,
234 	.link_nodes = { &qns_a2noc_snoc },
235 };
236 
237 static struct qcom_icc_node qnm_cnoc = {
238 	.name = "qnm_cnoc",
239 	.channels = 1,
240 	.buswidth = 8,
241 	.num_links = 1,
242 	.link_nodes = { &qns_a2noc_snoc },
243 };
244 
245 static struct qcom_icc_node qxm_crypto = {
246 	.name = "qxm_crypto",
247 	.channels = 1,
248 	.buswidth = 8,
249 	.num_links = 1,
250 	.link_nodes = { &qns_a2noc_snoc },
251 };
252 
253 static struct qcom_icc_node qxm_ipa = {
254 	.name = "qxm_ipa",
255 	.channels = 1,
256 	.buswidth = 8,
257 	.num_links = 1,
258 	.link_nodes = { &qns_a2noc_snoc },
259 };
260 
261 static struct qcom_icc_node xm_pcie3_1 = {
262 	.name = "xm_pcie3_1",
263 	.channels = 1,
264 	.buswidth = 8,
265 	.num_links = 1,
266 	.link_nodes = { &qns_pcie_snoc },
267 };
268 
269 static struct qcom_icc_node xm_qdss_etr = {
270 	.name = "xm_qdss_etr",
271 	.channels = 1,
272 	.buswidth = 8,
273 	.num_links = 1,
274 	.link_nodes = { &qns_a2noc_snoc },
275 };
276 
277 static struct qcom_icc_node xm_usb3_0 = {
278 	.name = "xm_usb3_0",
279 	.channels = 1,
280 	.buswidth = 8,
281 	.num_links = 1,
282 	.link_nodes = { &qns_a2noc_snoc },
283 };
284 
285 static struct qcom_icc_node xm_usb3_1 = {
286 	.name = "xm_usb3_1",
287 	.channels = 1,
288 	.buswidth = 8,
289 	.num_links = 1,
290 	.link_nodes = { &qns_a2noc_snoc },
291 };
292 
293 static struct qcom_icc_node qxm_camnoc_hf0_uncomp = {
294 	.name = "qxm_camnoc_hf0_uncomp",
295 	.channels = 1,
296 	.buswidth = 32,
297 	.num_links = 1,
298 	.link_nodes = { &qns_camnoc_uncomp },
299 };
300 
301 static struct qcom_icc_node qxm_camnoc_hf1_uncomp = {
302 	.name = "qxm_camnoc_hf1_uncomp",
303 	.channels = 1,
304 	.buswidth = 32,
305 	.num_links = 1,
306 	.link_nodes = { &qns_camnoc_uncomp },
307 };
308 
309 static struct qcom_icc_node qxm_camnoc_sf_uncomp = {
310 	.name = "qxm_camnoc_sf_uncomp",
311 	.channels = 1,
312 	.buswidth = 32,
313 	.num_links = 1,
314 	.link_nodes = { &qns_camnoc_uncomp },
315 };
316 
317 static struct qcom_icc_node qhm_spdm = {
318 	.name = "qhm_spdm",
319 	.channels = 1,
320 	.buswidth = 4,
321 	.num_links = 1,
322 	.link_nodes = { &qns_cnoc_a2noc },
323 };
324 
325 static struct qcom_icc_node qhm_tic = {
326 	.name = "qhm_tic",
327 	.channels = 1,
328 	.buswidth = 4,
329 	.num_links = 43,
330 	.link_nodes = { &qhs_a1_noc_cfg,
331 			&qhs_a2_noc_cfg,
332 			&qhs_aop,
333 			&qhs_aoss,
334 			&qhs_camera_cfg,
335 			&qhs_clk_ctl,
336 			&qhs_compute_dsp_cfg,
337 			&qhs_cpr_cx,
338 			&qhs_crypto0_cfg,
339 			&qhs_dcc_cfg,
340 			&qhs_ddrss_cfg,
341 			&qhs_display_cfg,
342 			&qhs_glm,
343 			&qhs_gpuss_cfg,
344 			&qhs_imem_cfg,
345 			&qhs_ipa,
346 			&qhs_mnoc_cfg,
347 			&qhs_pcie0_cfg,
348 			&qhs_pcie_gen3_cfg,
349 			&qhs_pdm,
350 			&qhs_phy_refgen_south,
351 			&qhs_pimem_cfg,
352 			&qhs_prng,
353 			&qhs_qdss_cfg,
354 			&qhs_qupv3_north,
355 			&qhs_qupv3_south,
356 			&qhs_sdc2,
357 			&qhs_sdc4,
358 			&qhs_snoc_cfg,
359 			&qhs_spdm,
360 			&qhs_spss_cfg,
361 			&qhs_tcsr,
362 			&qhs_tlmm_north,
363 			&qhs_tlmm_south,
364 			&qhs_tsif,
365 			&qhs_ufs_card_cfg,
366 			&qhs_ufs_mem_cfg,
367 			&qhs_usb3_0,
368 			&qhs_usb3_1,
369 			&qhs_venus_cfg,
370 			&qhs_vsense_ctrl_cfg,
371 			&qns_cnoc_a2noc,
372 			&srvc_cnoc },
373 };
374 
375 static struct qcom_icc_node qnm_snoc = {
376 	.name = "qnm_snoc",
377 	.channels = 1,
378 	.buswidth = 8,
379 	.num_links = 42,
380 	.link_nodes = { &qhs_a1_noc_cfg,
381 			&qhs_a2_noc_cfg,
382 			&qhs_aop,
383 			&qhs_aoss,
384 			&qhs_camera_cfg,
385 			&qhs_clk_ctl,
386 			&qhs_compute_dsp_cfg,
387 			&qhs_cpr_cx,
388 			&qhs_crypto0_cfg,
389 			&qhs_dcc_cfg,
390 			&qhs_ddrss_cfg,
391 			&qhs_display_cfg,
392 			&qhs_glm,
393 			&qhs_gpuss_cfg,
394 			&qhs_imem_cfg,
395 			&qhs_ipa,
396 			&qhs_mnoc_cfg,
397 			&qhs_pcie0_cfg,
398 			&qhs_pcie_gen3_cfg,
399 			&qhs_pdm,
400 			&qhs_phy_refgen_south,
401 			&qhs_pimem_cfg,
402 			&qhs_prng,
403 			&qhs_qdss_cfg,
404 			&qhs_qupv3_north,
405 			&qhs_qupv3_south,
406 			&qhs_sdc2,
407 			&qhs_sdc4,
408 			&qhs_snoc_cfg,
409 			&qhs_spdm,
410 			&qhs_spss_cfg,
411 			&qhs_tcsr,
412 			&qhs_tlmm_north,
413 			&qhs_tlmm_south,
414 			&qhs_tsif,
415 			&qhs_ufs_card_cfg,
416 			&qhs_ufs_mem_cfg,
417 			&qhs_usb3_0,
418 			&qhs_usb3_1,
419 			&qhs_venus_cfg,
420 			&qhs_vsense_ctrl_cfg,
421 			&srvc_cnoc },
422 };
423 
424 static struct qcom_icc_node xm_qdss_dap = {
425 	.name = "xm_qdss_dap",
426 	.channels = 1,
427 	.buswidth = 8,
428 	.num_links = 43,
429 	.link_nodes = { &qhs_a1_noc_cfg,
430 			&qhs_a2_noc_cfg,
431 			&qhs_aop,
432 			&qhs_aoss,
433 			&qhs_camera_cfg,
434 			&qhs_clk_ctl,
435 			&qhs_compute_dsp_cfg,
436 			&qhs_cpr_cx,
437 			&qhs_crypto0_cfg,
438 			&qhs_dcc_cfg,
439 			&qhs_ddrss_cfg,
440 			&qhs_display_cfg,
441 			&qhs_glm,
442 			&qhs_gpuss_cfg,
443 			&qhs_imem_cfg,
444 			&qhs_ipa,
445 			&qhs_mnoc_cfg,
446 			&qhs_pcie0_cfg,
447 			&qhs_pcie_gen3_cfg,
448 			&qhs_pdm,
449 			&qhs_phy_refgen_south,
450 			&qhs_pimem_cfg,
451 			&qhs_prng,
452 			&qhs_qdss_cfg,
453 			&qhs_qupv3_north,
454 			&qhs_qupv3_south,
455 			&qhs_sdc2,
456 			&qhs_sdc4,
457 			&qhs_snoc_cfg,
458 			&qhs_spdm,
459 			&qhs_spss_cfg,
460 			&qhs_tcsr,
461 			&qhs_tlmm_north,
462 			&qhs_tlmm_south,
463 			&qhs_tsif,
464 			&qhs_ufs_card_cfg,
465 			&qhs_ufs_mem_cfg,
466 			&qhs_usb3_0,
467 			&qhs_usb3_1,
468 			&qhs_venus_cfg,
469 			&qhs_vsense_ctrl_cfg,
470 			&qns_cnoc_a2noc,
471 			&srvc_cnoc },
472 };
473 
474 static struct qcom_icc_node qhm_cnoc = {
475 	.name = "qhm_cnoc",
476 	.channels = 1,
477 	.buswidth = 4,
478 	.num_links = 2,
479 	.link_nodes = { &qhs_llcc,
480 			&qhs_memnoc },
481 };
482 
483 static struct qcom_icc_node acm_l3 = {
484 	.name = "acm_l3",
485 	.channels = 1,
486 	.buswidth = 16,
487 	.num_links = 3,
488 	.link_nodes = { &qns_gladiator_sodv,
489 			&qns_gnoc_memnoc,
490 			&srvc_gnoc },
491 };
492 
493 static struct qcom_icc_node pm_gnoc_cfg = {
494 	.name = "pm_gnoc_cfg",
495 	.channels = 1,
496 	.buswidth = 4,
497 	.num_links = 1,
498 	.link_nodes = { &srvc_gnoc },
499 };
500 
501 static struct qcom_icc_node llcc_mc = {
502 	.name = "llcc_mc",
503 	.channels = 4,
504 	.buswidth = 4,
505 	.num_links = 1,
506 	.link_nodes = { &ebi },
507 };
508 
509 static struct qcom_icc_node acm_tcu = {
510 	.name = "acm_tcu",
511 	.channels = 1,
512 	.buswidth = 8,
513 	.num_links = 3,
514 	.link_nodes = { &qns_apps_io,
515 			&qns_llcc,
516 			&qns_memnoc_snoc },
517 };
518 
519 static struct qcom_icc_node qhm_memnoc_cfg = {
520 	.name = "qhm_memnoc_cfg",
521 	.channels = 1,
522 	.buswidth = 4,
523 	.num_links = 2,
524 	.link_nodes = { &qhs_mdsp_ms_mpu_cfg,
525 			&srvc_memnoc },
526 };
527 
528 static struct qcom_icc_node qnm_apps = {
529 	.name = "qnm_apps",
530 	.channels = 2,
531 	.buswidth = 32,
532 	.num_links = 1,
533 	.link_nodes = { &qns_llcc },
534 };
535 
536 static struct qcom_icc_node qnm_mnoc_hf = {
537 	.name = "qnm_mnoc_hf",
538 	.channels = 2,
539 	.buswidth = 32,
540 	.num_links = 2,
541 	.link_nodes = { &qns_apps_io,
542 			&qns_llcc },
543 };
544 
545 static struct qcom_icc_node qnm_mnoc_sf = {
546 	.name = "qnm_mnoc_sf",
547 	.channels = 1,
548 	.buswidth = 32,
549 	.num_links = 3,
550 	.link_nodes = { &qns_apps_io,
551 			&qns_llcc,
552 			&qns_memnoc_snoc },
553 };
554 
555 static struct qcom_icc_node qnm_snoc_gc = {
556 	.name = "qnm_snoc_gc",
557 	.channels = 1,
558 	.buswidth = 8,
559 	.num_links = 1,
560 	.link_nodes = { &qns_llcc },
561 };
562 
563 static struct qcom_icc_node qnm_snoc_sf = {
564 	.name = "qnm_snoc_sf",
565 	.channels = 1,
566 	.buswidth = 16,
567 	.num_links = 2,
568 	.link_nodes = { &qns_apps_io,
569 			&qns_llcc },
570 };
571 
572 static struct qcom_icc_node qxm_gpu = {
573 	.name = "qxm_gpu",
574 	.channels = 2,
575 	.buswidth = 32,
576 	.num_links = 3,
577 	.link_nodes = { &qns_apps_io,
578 			&qns_llcc,
579 			&qns_memnoc_snoc },
580 };
581 
582 static struct qcom_icc_node qhm_mnoc_cfg = {
583 	.name = "qhm_mnoc_cfg",
584 	.channels = 1,
585 	.buswidth = 4,
586 	.num_links = 1,
587 	.link_nodes = { &srvc_mnoc },
588 };
589 
590 static struct qcom_icc_node qxm_camnoc_hf0 = {
591 	.name = "qxm_camnoc_hf0",
592 	.channels = 1,
593 	.buswidth = 32,
594 	.num_links = 1,
595 	.link_nodes = { &qns_mem_noc_hf },
596 };
597 
598 static struct qcom_icc_node qxm_camnoc_hf1 = {
599 	.name = "qxm_camnoc_hf1",
600 	.channels = 1,
601 	.buswidth = 32,
602 	.num_links = 1,
603 	.link_nodes = { &qns_mem_noc_hf },
604 };
605 
606 static struct qcom_icc_node qxm_camnoc_sf = {
607 	.name = "qxm_camnoc_sf",
608 	.channels = 1,
609 	.buswidth = 32,
610 	.num_links = 1,
611 	.link_nodes = { &qns2_mem_noc },
612 };
613 
614 static struct qcom_icc_node qxm_mdp0 = {
615 	.name = "qxm_mdp0",
616 	.channels = 1,
617 	.buswidth = 32,
618 	.num_links = 1,
619 	.link_nodes = { &qns_mem_noc_hf },
620 };
621 
622 static struct qcom_icc_node qxm_mdp1 = {
623 	.name = "qxm_mdp1",
624 	.channels = 1,
625 	.buswidth = 32,
626 	.num_links = 1,
627 	.link_nodes = { &qns_mem_noc_hf },
628 };
629 
630 static struct qcom_icc_node qxm_rot = {
631 	.name = "qxm_rot",
632 	.channels = 1,
633 	.buswidth = 32,
634 	.num_links = 1,
635 	.link_nodes = { &qns2_mem_noc },
636 };
637 
638 static struct qcom_icc_node qxm_venus0 = {
639 	.name = "qxm_venus0",
640 	.channels = 1,
641 	.buswidth = 32,
642 	.num_links = 1,
643 	.link_nodes = { &qns2_mem_noc },
644 };
645 
646 static struct qcom_icc_node qxm_venus1 = {
647 	.name = "qxm_venus1",
648 	.channels = 1,
649 	.buswidth = 32,
650 	.num_links = 1,
651 	.link_nodes = { &qns2_mem_noc },
652 };
653 
654 static struct qcom_icc_node qxm_venus_arm9 = {
655 	.name = "qxm_venus_arm9",
656 	.channels = 1,
657 	.buswidth = 8,
658 	.num_links = 1,
659 	.link_nodes = { &qns2_mem_noc },
660 };
661 
662 static struct qcom_icc_node qhm_snoc_cfg = {
663 	.name = "qhm_snoc_cfg",
664 	.channels = 1,
665 	.buswidth = 4,
666 	.num_links = 1,
667 	.link_nodes = { &srvc_snoc },
668 };
669 
670 static struct qcom_icc_node qnm_aggre1_noc = {
671 	.name = "qnm_aggre1_noc",
672 	.channels = 1,
673 	.buswidth = 16,
674 	.num_links = 6,
675 	.link_nodes = { &qhs_apss,
676 			&qns_cnoc,
677 			&qns_memnoc_sf,
678 			&qxs_imem,
679 			&qxs_pimem,
680 			&xs_qdss_stm },
681 };
682 
683 static struct qcom_icc_node qnm_aggre2_noc = {
684 	.name = "qnm_aggre2_noc",
685 	.channels = 1,
686 	.buswidth = 16,
687 	.num_links = 9,
688 	.link_nodes = { &qhs_apss,
689 			&qns_cnoc,
690 			&qns_memnoc_sf,
691 			&qxs_imem,
692 			&qxs_pcie,
693 			&qxs_pcie_gen3,
694 			&qxs_pimem,
695 			&xs_qdss_stm,
696 			&xs_sys_tcu_cfg },
697 };
698 
699 static struct qcom_icc_node qnm_gladiator_sodv = {
700 	.name = "qnm_gladiator_sodv",
701 	.channels = 1,
702 	.buswidth = 8,
703 	.num_links = 8,
704 	.link_nodes = { &qhs_apss,
705 			&qns_cnoc,
706 			&qxs_imem,
707 			&qxs_pcie,
708 			&qxs_pcie_gen3,
709 			&qxs_pimem,
710 			&xs_qdss_stm,
711 			&xs_sys_tcu_cfg },
712 };
713 
714 static struct qcom_icc_node qnm_memnoc = {
715 	.name = "qnm_memnoc",
716 	.channels = 1,
717 	.buswidth = 8,
718 	.num_links = 5,
719 	.link_nodes = { &qhs_apss,
720 			&qns_cnoc,
721 			&qxs_imem,
722 			&qxs_pimem,
723 			&xs_qdss_stm },
724 };
725 
726 static struct qcom_icc_node qnm_pcie_anoc = {
727 	.name = "qnm_pcie_anoc",
728 	.channels = 1,
729 	.buswidth = 16,
730 	.num_links = 5,
731 	.link_nodes = { &qhs_apss,
732 			&qns_cnoc,
733 			&qns_memnoc_sf,
734 			&qxs_imem,
735 			&xs_qdss_stm },
736 };
737 
738 static struct qcom_icc_node qxm_pimem = {
739 	.name = "qxm_pimem",
740 	.channels = 1,
741 	.buswidth = 8,
742 	.num_links = 2,
743 	.link_nodes = { &qns_memnoc_gc,
744 			&qxs_imem },
745 };
746 
747 static struct qcom_icc_node xm_gic = {
748 	.name = "xm_gic",
749 	.channels = 1,
750 	.buswidth = 8,
751 	.num_links = 2,
752 	.link_nodes = { &qns_memnoc_gc,
753 			&qxs_imem },
754 };
755 
756 static struct qcom_icc_node qns_a1noc_snoc = {
757 	.name = "qns_a1noc_snoc",
758 	.channels = 1,
759 	.buswidth = 16,
760 	.num_links = 1,
761 	.link_nodes = { &qnm_aggre1_noc },
762 };
763 
764 static struct qcom_icc_node srvc_aggre1_noc = {
765 	.name = "srvc_aggre1_noc",
766 	.channels = 1,
767 	.buswidth = 4,
768 };
769 
770 static struct qcom_icc_node qns_pcie_a1noc_snoc = {
771 	.name = "qns_pcie_a1noc_snoc",
772 	.channels = 1,
773 	.buswidth = 16,
774 	.num_links = 1,
775 	.link_nodes = { &qnm_pcie_anoc },
776 };
777 
778 static struct qcom_icc_node qns_a2noc_snoc = {
779 	.name = "qns_a2noc_snoc",
780 	.channels = 1,
781 	.buswidth = 16,
782 	.num_links = 1,
783 	.link_nodes = { &qnm_aggre2_noc },
784 };
785 
786 static struct qcom_icc_node qns_pcie_snoc = {
787 	.name = "qns_pcie_snoc",
788 	.channels = 1,
789 	.buswidth = 16,
790 	.num_links = 1,
791 	.link_nodes = { &qnm_pcie_anoc },
792 };
793 
794 static struct qcom_icc_node srvc_aggre2_noc = {
795 	.name = "srvc_aggre2_noc",
796 	.channels = 1,
797 	.buswidth = 4,
798 };
799 
800 static struct qcom_icc_node qns_camnoc_uncomp = {
801 	.name = "qns_camnoc_uncomp",
802 	.channels = 1,
803 	.buswidth = 32,
804 };
805 
806 static struct qcom_icc_node qhs_a1_noc_cfg = {
807 	.name = "qhs_a1_noc_cfg",
808 	.channels = 1,
809 	.buswidth = 4,
810 	.num_links = 1,
811 	.link_nodes = { &qhm_a1noc_cfg },
812 };
813 
814 static struct qcom_icc_node qhs_a2_noc_cfg = {
815 	.name = "qhs_a2_noc_cfg",
816 	.channels = 1,
817 	.buswidth = 4,
818 	.num_links = 1,
819 	.link_nodes = { &qhm_a2noc_cfg },
820 };
821 
822 static struct qcom_icc_node qhs_aop = {
823 	.name = "qhs_aop",
824 	.channels = 1,
825 	.buswidth = 4,
826 };
827 
828 static struct qcom_icc_node qhs_aoss = {
829 	.name = "qhs_aoss",
830 	.channels = 1,
831 	.buswidth = 4,
832 };
833 
834 static struct qcom_icc_node qhs_camera_cfg = {
835 	.name = "qhs_camera_cfg",
836 	.channels = 1,
837 	.buswidth = 4,
838 };
839 
840 static struct qcom_icc_node qhs_clk_ctl = {
841 	.name = "qhs_clk_ctl",
842 	.channels = 1,
843 	.buswidth = 4,
844 };
845 
846 static struct qcom_icc_node qhs_compute_dsp_cfg = {
847 	.name = "qhs_compute_dsp_cfg",
848 	.channels = 1,
849 	.buswidth = 4,
850 };
851 
852 static struct qcom_icc_node qhs_cpr_cx = {
853 	.name = "qhs_cpr_cx",
854 	.channels = 1,
855 	.buswidth = 4,
856 };
857 
858 static struct qcom_icc_node qhs_crypto0_cfg = {
859 	.name = "qhs_crypto0_cfg",
860 	.channels = 1,
861 	.buswidth = 4,
862 };
863 
864 static struct qcom_icc_node qhs_dcc_cfg = {
865 	.name = "qhs_dcc_cfg",
866 	.channels = 1,
867 	.buswidth = 4,
868 	.num_links = 1,
869 	.link_nodes = { &qhm_cnoc },
870 };
871 
872 static struct qcom_icc_node qhs_ddrss_cfg = {
873 	.name = "qhs_ddrss_cfg",
874 	.channels = 1,
875 	.buswidth = 4,
876 };
877 
878 static struct qcom_icc_node qhs_display_cfg = {
879 	.name = "qhs_display_cfg",
880 	.channels = 1,
881 	.buswidth = 4,
882 };
883 
884 static struct qcom_icc_node qhs_glm = {
885 	.name = "qhs_glm",
886 	.channels = 1,
887 	.buswidth = 4,
888 };
889 
890 static struct qcom_icc_node qhs_gpuss_cfg = {
891 	.name = "qhs_gpuss_cfg",
892 	.channels = 1,
893 	.buswidth = 8,
894 };
895 
896 static struct qcom_icc_node qhs_imem_cfg = {
897 	.name = "qhs_imem_cfg",
898 	.channels = 1,
899 	.buswidth = 4,
900 };
901 
902 static struct qcom_icc_node qhs_ipa = {
903 	.name = "qhs_ipa",
904 	.channels = 1,
905 	.buswidth = 4,
906 };
907 
908 static struct qcom_icc_node qhs_mnoc_cfg = {
909 	.name = "qhs_mnoc_cfg",
910 	.channels = 1,
911 	.buswidth = 4,
912 	.num_links = 1,
913 	.link_nodes = { &qhm_mnoc_cfg },
914 };
915 
916 static struct qcom_icc_node qhs_pcie0_cfg = {
917 	.name = "qhs_pcie0_cfg",
918 	.channels = 1,
919 	.buswidth = 4,
920 };
921 
922 static struct qcom_icc_node qhs_pcie_gen3_cfg = {
923 	.name = "qhs_pcie_gen3_cfg",
924 	.channels = 1,
925 	.buswidth = 4,
926 };
927 
928 static struct qcom_icc_node qhs_pdm = {
929 	.name = "qhs_pdm",
930 	.channels = 1,
931 	.buswidth = 4,
932 };
933 
934 static struct qcom_icc_node qhs_phy_refgen_south = {
935 	.name = "qhs_phy_refgen_south",
936 	.channels = 1,
937 	.buswidth = 4,
938 };
939 
940 static struct qcom_icc_node qhs_pimem_cfg = {
941 	.name = "qhs_pimem_cfg",
942 	.channels = 1,
943 	.buswidth = 4,
944 };
945 
946 static struct qcom_icc_node qhs_prng = {
947 	.name = "qhs_prng",
948 	.channels = 1,
949 	.buswidth = 4,
950 };
951 
952 static struct qcom_icc_node qhs_qdss_cfg = {
953 	.name = "qhs_qdss_cfg",
954 	.channels = 1,
955 	.buswidth = 4,
956 };
957 
958 static struct qcom_icc_node qhs_qupv3_north = {
959 	.name = "qhs_qupv3_north",
960 	.channels = 1,
961 	.buswidth = 4,
962 };
963 
964 static struct qcom_icc_node qhs_qupv3_south = {
965 	.name = "qhs_qupv3_south",
966 	.channels = 1,
967 	.buswidth = 4,
968 };
969 
970 static struct qcom_icc_node qhs_sdc2 = {
971 	.name = "qhs_sdc2",
972 	.channels = 1,
973 	.buswidth = 4,
974 };
975 
976 static struct qcom_icc_node qhs_sdc4 = {
977 	.name = "qhs_sdc4",
978 	.channels = 1,
979 	.buswidth = 4,
980 };
981 
982 static struct qcom_icc_node qhs_snoc_cfg = {
983 	.name = "qhs_snoc_cfg",
984 	.channels = 1,
985 	.buswidth = 4,
986 	.num_links = 1,
987 	.link_nodes = { &qhm_snoc_cfg },
988 };
989 
990 static struct qcom_icc_node qhs_spdm = {
991 	.name = "qhs_spdm",
992 	.channels = 1,
993 	.buswidth = 4,
994 };
995 
996 static struct qcom_icc_node qhs_spss_cfg = {
997 	.name = "qhs_spss_cfg",
998 	.channels = 1,
999 	.buswidth = 4,
1000 };
1001 
1002 static struct qcom_icc_node qhs_tcsr = {
1003 	.name = "qhs_tcsr",
1004 	.channels = 1,
1005 	.buswidth = 4,
1006 };
1007 
1008 static struct qcom_icc_node qhs_tlmm_north = {
1009 	.name = "qhs_tlmm_north",
1010 	.channels = 1,
1011 	.buswidth = 4,
1012 };
1013 
1014 static struct qcom_icc_node qhs_tlmm_south = {
1015 	.name = "qhs_tlmm_south",
1016 	.channels = 1,
1017 	.buswidth = 4,
1018 };
1019 
1020 static struct qcom_icc_node qhs_tsif = {
1021 	.name = "qhs_tsif",
1022 	.channels = 1,
1023 	.buswidth = 4,
1024 };
1025 
1026 static struct qcom_icc_node qhs_ufs_card_cfg = {
1027 	.name = "qhs_ufs_card_cfg",
1028 	.channels = 1,
1029 	.buswidth = 4,
1030 };
1031 
1032 static struct qcom_icc_node qhs_ufs_mem_cfg = {
1033 	.name = "qhs_ufs_mem_cfg",
1034 	.channels = 1,
1035 	.buswidth = 4,
1036 };
1037 
1038 static struct qcom_icc_node qhs_usb3_0 = {
1039 	.name = "qhs_usb3_0",
1040 	.channels = 1,
1041 	.buswidth = 4,
1042 };
1043 
1044 static struct qcom_icc_node qhs_usb3_1 = {
1045 	.name = "qhs_usb3_1",
1046 	.channels = 1,
1047 	.buswidth = 4,
1048 };
1049 
1050 static struct qcom_icc_node qhs_venus_cfg = {
1051 	.name = "qhs_venus_cfg",
1052 	.channels = 1,
1053 	.buswidth = 4,
1054 };
1055 
1056 static struct qcom_icc_node qhs_vsense_ctrl_cfg = {
1057 	.name = "qhs_vsense_ctrl_cfg",
1058 	.channels = 1,
1059 	.buswidth = 4,
1060 };
1061 
1062 static struct qcom_icc_node qns_cnoc_a2noc = {
1063 	.name = "qns_cnoc_a2noc",
1064 	.channels = 1,
1065 	.buswidth = 8,
1066 	.num_links = 1,
1067 	.link_nodes = { &qnm_cnoc },
1068 };
1069 
1070 static struct qcom_icc_node srvc_cnoc = {
1071 	.name = "srvc_cnoc",
1072 	.channels = 1,
1073 	.buswidth = 4,
1074 };
1075 
1076 static struct qcom_icc_node qhs_llcc = {
1077 	.name = "qhs_llcc",
1078 	.channels = 1,
1079 	.buswidth = 4,
1080 };
1081 
1082 static struct qcom_icc_node qhs_memnoc = {
1083 	.name = "qhs_memnoc",
1084 	.channels = 1,
1085 	.buswidth = 4,
1086 	.num_links = 1,
1087 	.link_nodes = { &qhm_memnoc_cfg },
1088 };
1089 
1090 static struct qcom_icc_node qns_gladiator_sodv = {
1091 	.name = "qns_gladiator_sodv",
1092 	.channels = 1,
1093 	.buswidth = 8,
1094 	.num_links = 1,
1095 	.link_nodes = { &qnm_gladiator_sodv },
1096 };
1097 
1098 static struct qcom_icc_node qns_gnoc_memnoc = {
1099 	.name = "qns_gnoc_memnoc",
1100 	.channels = 2,
1101 	.buswidth = 32,
1102 	.num_links = 1,
1103 	.link_nodes = { &qnm_apps },
1104 };
1105 
1106 static struct qcom_icc_node srvc_gnoc = {
1107 	.name = "srvc_gnoc",
1108 	.channels = 1,
1109 	.buswidth = 4,
1110 };
1111 
1112 static struct qcom_icc_node ebi = {
1113 	.name = "ebi",
1114 	.channels = 4,
1115 	.buswidth = 4,
1116 };
1117 
1118 static struct qcom_icc_node qhs_mdsp_ms_mpu_cfg = {
1119 	.name = "qhs_mdsp_ms_mpu_cfg",
1120 	.channels = 1,
1121 	.buswidth = 4,
1122 };
1123 
1124 static struct qcom_icc_node qns_apps_io = {
1125 	.name = "qns_apps_io",
1126 	.channels = 1,
1127 	.buswidth = 32,
1128 };
1129 
1130 static struct qcom_icc_node qns_llcc = {
1131 	.name = "qns_llcc",
1132 	.channels = 4,
1133 	.buswidth = 16,
1134 	.num_links = 1,
1135 	.link_nodes = { &llcc_mc },
1136 };
1137 
1138 static struct qcom_icc_node qns_memnoc_snoc = {
1139 	.name = "qns_memnoc_snoc",
1140 	.channels = 1,
1141 	.buswidth = 8,
1142 	.num_links = 1,
1143 	.link_nodes = { &qnm_memnoc },
1144 };
1145 
1146 static struct qcom_icc_node srvc_memnoc = {
1147 	.name = "srvc_memnoc",
1148 	.channels = 1,
1149 	.buswidth = 4,
1150 };
1151 
1152 static struct qcom_icc_node qns2_mem_noc = {
1153 	.name = "qns2_mem_noc",
1154 	.channels = 1,
1155 	.buswidth = 32,
1156 	.num_links = 1,
1157 	.link_nodes = { &qnm_mnoc_sf },
1158 };
1159 
1160 static struct qcom_icc_node qns_mem_noc_hf = {
1161 	.name = "qns_mem_noc_hf",
1162 	.channels = 2,
1163 	.buswidth = 32,
1164 	.num_links = 1,
1165 	.link_nodes = { &qnm_mnoc_hf },
1166 };
1167 
1168 static struct qcom_icc_node srvc_mnoc = {
1169 	.name = "srvc_mnoc",
1170 	.channels = 1,
1171 	.buswidth = 4,
1172 };
1173 
1174 static struct qcom_icc_node qhs_apss = {
1175 	.name = "qhs_apss",
1176 	.channels = 1,
1177 	.buswidth = 8,
1178 };
1179 
1180 static struct qcom_icc_node qns_cnoc = {
1181 	.name = "qns_cnoc",
1182 	.channels = 1,
1183 	.buswidth = 8,
1184 	.num_links = 1,
1185 	.link_nodes = { &qnm_snoc },
1186 };
1187 
1188 static struct qcom_icc_node qns_memnoc_gc = {
1189 	.name = "qns_memnoc_gc",
1190 	.channels = 1,
1191 	.buswidth = 8,
1192 	.num_links = 1,
1193 	.link_nodes = { &qnm_snoc_gc },
1194 };
1195 
1196 static struct qcom_icc_node qns_memnoc_sf = {
1197 	.name = "qns_memnoc_sf",
1198 	.channels = 1,
1199 	.buswidth = 16,
1200 	.num_links = 1,
1201 	.link_nodes = { &qnm_snoc_sf },
1202 };
1203 
1204 static struct qcom_icc_node qxs_imem = {
1205 	.name = "qxs_imem",
1206 	.channels = 1,
1207 	.buswidth = 8,
1208 };
1209 
1210 static struct qcom_icc_node qxs_pcie = {
1211 	.name = "qxs_pcie",
1212 	.channels = 1,
1213 	.buswidth = 8,
1214 };
1215 
1216 static struct qcom_icc_node qxs_pcie_gen3 = {
1217 	.name = "qxs_pcie_gen3",
1218 	.channels = 1,
1219 	.buswidth = 8,
1220 };
1221 
1222 static struct qcom_icc_node qxs_pimem = {
1223 	.name = "qxs_pimem",
1224 	.channels = 1,
1225 	.buswidth = 8,
1226 };
1227 
1228 static struct qcom_icc_node srvc_snoc = {
1229 	.name = "srvc_snoc",
1230 	.channels = 1,
1231 	.buswidth = 4,
1232 };
1233 
1234 static struct qcom_icc_node xs_qdss_stm = {
1235 	.name = "xs_qdss_stm",
1236 	.channels = 1,
1237 	.buswidth = 4,
1238 };
1239 
1240 static struct qcom_icc_node xs_sys_tcu_cfg = {
1241 	.name = "xs_sys_tcu_cfg",
1242 	.channels = 1,
1243 	.buswidth = 8,
1244 };
1245 
1246 static struct qcom_icc_bcm bcm_acv = {
1247 	.name = "ACV",
1248 	.enable_mask = BIT(3),
1249 	.keepalive = false,
1250 	.num_nodes = 1,
1251 	.nodes = { &ebi },
1252 };
1253 
1254 static struct qcom_icc_bcm bcm_mc0 = {
1255 	.name = "MC0",
1256 	.keepalive = true,
1257 	.num_nodes = 1,
1258 	.nodes = { &ebi },
1259 };
1260 
1261 static struct qcom_icc_bcm bcm_sh0 = {
1262 	.name = "SH0",
1263 	.keepalive = true,
1264 	.num_nodes = 1,
1265 	.nodes = { &qns_llcc },
1266 };
1267 
1268 static struct qcom_icc_bcm bcm_mm0 = {
1269 	.name = "MM0",
1270 	.keepalive = false,
1271 	.num_nodes = 1,
1272 	.nodes = { &qns_mem_noc_hf },
1273 };
1274 
1275 static struct qcom_icc_bcm bcm_sh1 = {
1276 	.name = "SH1",
1277 	.keepalive = false,
1278 	.num_nodes = 1,
1279 	.nodes = { &qns_apps_io },
1280 };
1281 
1282 static struct qcom_icc_bcm bcm_mm1 = {
1283 	.name = "MM1",
1284 	.keepalive = true,
1285 	.num_nodes = 7,
1286 	.nodes = { &qxm_camnoc_hf0_uncomp,
1287 		   &qxm_camnoc_hf1_uncomp,
1288 		   &qxm_camnoc_sf_uncomp,
1289 		   &qxm_camnoc_hf0,
1290 		   &qxm_camnoc_hf1,
1291 		   &qxm_mdp0,
1292 		   &qxm_mdp1
1293 	},
1294 };
1295 
1296 static struct qcom_icc_bcm bcm_sh2 = {
1297 	.name = "SH2",
1298 	.keepalive = false,
1299 	.num_nodes = 1,
1300 	.nodes = { &qns_memnoc_snoc },
1301 };
1302 
1303 static struct qcom_icc_bcm bcm_mm2 = {
1304 	.name = "MM2",
1305 	.keepalive = false,
1306 	.num_nodes = 1,
1307 	.nodes = { &qns2_mem_noc },
1308 };
1309 
1310 static struct qcom_icc_bcm bcm_sh3 = {
1311 	.name = "SH3",
1312 	.keepalive = false,
1313 	.num_nodes = 1,
1314 	.nodes = { &acm_tcu },
1315 };
1316 
1317 static struct qcom_icc_bcm bcm_mm3 = {
1318 	.name = "MM3",
1319 	.keepalive = false,
1320 	.num_nodes = 5,
1321 	.nodes = { &qxm_camnoc_sf, &qxm_rot, &qxm_venus0, &qxm_venus1, &qxm_venus_arm9 },
1322 };
1323 
1324 static struct qcom_icc_bcm bcm_sh5 = {
1325 	.name = "SH5",
1326 	.keepalive = false,
1327 	.num_nodes = 1,
1328 	.nodes = { &qnm_apps },
1329 };
1330 
1331 static struct qcom_icc_bcm bcm_sn0 = {
1332 	.name = "SN0",
1333 	.keepalive = true,
1334 	.num_nodes = 1,
1335 	.nodes = { &qns_memnoc_sf },
1336 };
1337 
1338 static struct qcom_icc_bcm bcm_ce0 = {
1339 	.name = "CE0",
1340 	.keepalive = false,
1341 	.num_nodes = 1,
1342 	.nodes = { &qxm_crypto },
1343 };
1344 
1345 static struct qcom_icc_bcm bcm_cn0 = {
1346 	.name = "CN0",
1347 	.keepalive = false,
1348 	.num_nodes = 47,
1349 	.nodes = { &qhm_spdm,
1350 		   &qhm_tic,
1351 		   &qnm_snoc,
1352 		   &xm_qdss_dap,
1353 		   &qhs_a1_noc_cfg,
1354 		   &qhs_a2_noc_cfg,
1355 		   &qhs_aop,
1356 		   &qhs_aoss,
1357 		   &qhs_camera_cfg,
1358 		   &qhs_clk_ctl,
1359 		   &qhs_compute_dsp_cfg,
1360 		   &qhs_cpr_cx,
1361 		   &qhs_crypto0_cfg,
1362 		   &qhs_dcc_cfg,
1363 		   &qhs_ddrss_cfg,
1364 		   &qhs_display_cfg,
1365 		   &qhs_glm,
1366 		   &qhs_gpuss_cfg,
1367 		   &qhs_imem_cfg,
1368 		   &qhs_ipa,
1369 		   &qhs_mnoc_cfg,
1370 		   &qhs_pcie0_cfg,
1371 		   &qhs_pcie_gen3_cfg,
1372 		   &qhs_pdm,
1373 		   &qhs_phy_refgen_south,
1374 		   &qhs_pimem_cfg,
1375 		   &qhs_prng,
1376 		   &qhs_qdss_cfg,
1377 		   &qhs_qupv3_north,
1378 		   &qhs_qupv3_south,
1379 		   &qhs_sdc2,
1380 		   &qhs_sdc4,
1381 		   &qhs_snoc_cfg,
1382 		   &qhs_spdm,
1383 		   &qhs_spss_cfg,
1384 		   &qhs_tcsr,
1385 		   &qhs_tlmm_north,
1386 		   &qhs_tlmm_south,
1387 		   &qhs_tsif,
1388 		   &qhs_ufs_card_cfg,
1389 		   &qhs_ufs_mem_cfg,
1390 		   &qhs_usb3_0,
1391 		   &qhs_usb3_1,
1392 		   &qhs_venus_cfg,
1393 		   &qhs_vsense_ctrl_cfg,
1394 		   &qns_cnoc_a2noc,
1395 		   &srvc_cnoc
1396 	},
1397 };
1398 
1399 static struct qcom_icc_bcm bcm_qup0 = {
1400 	.name = "QUP0",
1401 	.keepalive = false,
1402 	.num_nodes = 2,
1403 	.nodes = { &qhm_qup1, &qhm_qup2 },
1404 };
1405 
1406 static struct qcom_icc_bcm bcm_sn1 = {
1407 	.name = "SN1",
1408 	.keepalive = false,
1409 	.num_nodes = 1,
1410 	.nodes = { &qxs_imem },
1411 };
1412 
1413 static struct qcom_icc_bcm bcm_sn2 = {
1414 	.name = "SN2",
1415 	.keepalive = false,
1416 	.num_nodes = 1,
1417 	.nodes = { &qns_memnoc_gc },
1418 };
1419 
1420 static struct qcom_icc_bcm bcm_sn3 = {
1421 	.name = "SN3",
1422 	.keepalive = false,
1423 	.num_nodes = 1,
1424 	.nodes = { &qns_cnoc },
1425 };
1426 
1427 static struct qcom_icc_bcm bcm_sn4 = {
1428 	.name = "SN4",
1429 	.keepalive = false,
1430 	.num_nodes = 1,
1431 	.nodes = { &qxm_pimem },
1432 };
1433 
1434 static struct qcom_icc_bcm bcm_sn5 = {
1435 	.name = "SN5",
1436 	.keepalive = false,
1437 	.num_nodes = 1,
1438 	.nodes = { &xs_qdss_stm },
1439 };
1440 
1441 static struct qcom_icc_bcm bcm_sn6 = {
1442 	.name = "SN6",
1443 	.keepalive = false,
1444 	.num_nodes = 3,
1445 	.nodes = { &qhs_apss, &srvc_snoc, &xs_sys_tcu_cfg },
1446 };
1447 
1448 static struct qcom_icc_bcm bcm_sn7 = {
1449 	.name = "SN7",
1450 	.keepalive = false,
1451 	.num_nodes = 1,
1452 	.nodes = { &qxs_pcie },
1453 };
1454 
1455 static struct qcom_icc_bcm bcm_sn8 = {
1456 	.name = "SN8",
1457 	.keepalive = false,
1458 	.num_nodes = 1,
1459 	.nodes = { &qxs_pcie_gen3 },
1460 };
1461 
1462 static struct qcom_icc_bcm bcm_sn9 = {
1463 	.name = "SN9",
1464 	.keepalive = false,
1465 	.num_nodes = 2,
1466 	.nodes = { &srvc_aggre1_noc, &qnm_aggre1_noc },
1467 };
1468 
1469 static struct qcom_icc_bcm bcm_sn11 = {
1470 	.name = "SN11",
1471 	.keepalive = false,
1472 	.num_nodes = 2,
1473 	.nodes = { &srvc_aggre2_noc, &qnm_aggre2_noc },
1474 };
1475 
1476 static struct qcom_icc_bcm bcm_sn12 = {
1477 	.name = "SN12",
1478 	.keepalive = false,
1479 	.num_nodes = 2,
1480 	.nodes = { &qnm_gladiator_sodv, &xm_gic },
1481 };
1482 
1483 static struct qcom_icc_bcm bcm_sn14 = {
1484 	.name = "SN14",
1485 	.keepalive = false,
1486 	.num_nodes = 1,
1487 	.nodes = { &qnm_pcie_anoc },
1488 };
1489 
1490 static struct qcom_icc_bcm bcm_sn15 = {
1491 	.name = "SN15",
1492 	.keepalive = false,
1493 	.num_nodes = 1,
1494 	.nodes = { &qnm_memnoc },
1495 };
1496 
1497 static struct qcom_icc_bcm * const aggre1_noc_bcms[] = {
1498 	&bcm_sn9,
1499 	&bcm_qup0,
1500 };
1501 
1502 static struct qcom_icc_node * const aggre1_noc_nodes[] = {
1503 	[MASTER_A1NOC_CFG] = &qhm_a1noc_cfg,
1504 	[MASTER_TSIF] = &qhm_tsif,
1505 	[MASTER_SDCC_2] = &xm_sdc2,
1506 	[MASTER_SDCC_4] = &xm_sdc4,
1507 	[MASTER_UFS_CARD] = &xm_ufs_card,
1508 	[MASTER_UFS_MEM] = &xm_ufs_mem,
1509 	[MASTER_PCIE_0] = &xm_pcie_0,
1510 	[SLAVE_A1NOC_SNOC] = &qns_a1noc_snoc,
1511 	[SLAVE_SERVICE_A1NOC] = &srvc_aggre1_noc,
1512 	[SLAVE_ANOC_PCIE_A1NOC_SNOC] = &qns_pcie_a1noc_snoc,
1513 	[MASTER_QUP_1] = &qhm_qup1,
1514 };
1515 
1516 static const struct qcom_icc_desc sdm845_aggre1_noc = {
1517 	.nodes = aggre1_noc_nodes,
1518 	.num_nodes = ARRAY_SIZE(aggre1_noc_nodes),
1519 	.bcms = aggre1_noc_bcms,
1520 	.num_bcms = ARRAY_SIZE(aggre1_noc_bcms),
1521 };
1522 
1523 static struct qcom_icc_bcm * const aggre2_noc_bcms[] = {
1524 	&bcm_ce0,
1525 	&bcm_sn11,
1526 	&bcm_qup0,
1527 };
1528 
1529 static struct qcom_icc_node * const aggre2_noc_nodes[] = {
1530 	[MASTER_A2NOC_CFG] = &qhm_a2noc_cfg,
1531 	[MASTER_QDSS_BAM] = &qhm_qdss_bam,
1532 	[MASTER_CNOC_A2NOC] = &qnm_cnoc,
1533 	[MASTER_CRYPTO] = &qxm_crypto,
1534 	[MASTER_IPA] = &qxm_ipa,
1535 	[MASTER_PCIE_1] = &xm_pcie3_1,
1536 	[MASTER_QDSS_ETR] = &xm_qdss_etr,
1537 	[MASTER_USB3_0] = &xm_usb3_0,
1538 	[MASTER_USB3_1] = &xm_usb3_1,
1539 	[SLAVE_A2NOC_SNOC] = &qns_a2noc_snoc,
1540 	[SLAVE_ANOC_PCIE_SNOC] = &qns_pcie_snoc,
1541 	[SLAVE_SERVICE_A2NOC] = &srvc_aggre2_noc,
1542 	[MASTER_QUP_2] = &qhm_qup2,
1543 };
1544 
1545 static const struct qcom_icc_desc sdm845_aggre2_noc = {
1546 	.nodes = aggre2_noc_nodes,
1547 	.num_nodes = ARRAY_SIZE(aggre2_noc_nodes),
1548 	.bcms = aggre2_noc_bcms,
1549 	.num_bcms = ARRAY_SIZE(aggre2_noc_bcms),
1550 };
1551 
1552 static struct qcom_icc_bcm * const config_noc_bcms[] = {
1553 	&bcm_cn0,
1554 };
1555 
1556 static struct qcom_icc_node * const config_noc_nodes[] = {
1557 	[MASTER_SPDM] = &qhm_spdm,
1558 	[MASTER_TIC] = &qhm_tic,
1559 	[MASTER_SNOC_CNOC] = &qnm_snoc,
1560 	[MASTER_QDSS_DAP] = &xm_qdss_dap,
1561 	[SLAVE_A1NOC_CFG] = &qhs_a1_noc_cfg,
1562 	[SLAVE_A2NOC_CFG] = &qhs_a2_noc_cfg,
1563 	[SLAVE_AOP] = &qhs_aop,
1564 	[SLAVE_AOSS] = &qhs_aoss,
1565 	[SLAVE_CAMERA_CFG] = &qhs_camera_cfg,
1566 	[SLAVE_CLK_CTL] = &qhs_clk_ctl,
1567 	[SLAVE_CDSP_CFG] = &qhs_compute_dsp_cfg,
1568 	[SLAVE_RBCPR_CX_CFG] = &qhs_cpr_cx,
1569 	[SLAVE_CRYPTO_0_CFG] = &qhs_crypto0_cfg,
1570 	[SLAVE_DCC_CFG] = &qhs_dcc_cfg,
1571 	[SLAVE_CNOC_DDRSS] = &qhs_ddrss_cfg,
1572 	[SLAVE_DISPLAY_CFG] = &qhs_display_cfg,
1573 	[SLAVE_GLM] = &qhs_glm,
1574 	[SLAVE_GFX3D_CFG] = &qhs_gpuss_cfg,
1575 	[SLAVE_IMEM_CFG] = &qhs_imem_cfg,
1576 	[SLAVE_IPA_CFG] = &qhs_ipa,
1577 	[SLAVE_CNOC_MNOC_CFG] = &qhs_mnoc_cfg,
1578 	[SLAVE_PCIE_0_CFG] = &qhs_pcie0_cfg,
1579 	[SLAVE_PCIE_1_CFG] = &qhs_pcie_gen3_cfg,
1580 	[SLAVE_PDM] = &qhs_pdm,
1581 	[SLAVE_SOUTH_PHY_CFG] = &qhs_phy_refgen_south,
1582 	[SLAVE_PIMEM_CFG] = &qhs_pimem_cfg,
1583 	[SLAVE_PRNG] = &qhs_prng,
1584 	[SLAVE_QDSS_CFG] = &qhs_qdss_cfg,
1585 	[SLAVE_BLSP_2] = &qhs_qupv3_north,
1586 	[SLAVE_BLSP_1] = &qhs_qupv3_south,
1587 	[SLAVE_SDCC_2] = &qhs_sdc2,
1588 	[SLAVE_SDCC_4] = &qhs_sdc4,
1589 	[SLAVE_SNOC_CFG] = &qhs_snoc_cfg,
1590 	[SLAVE_SPDM_WRAPPER] = &qhs_spdm,
1591 	[SLAVE_SPSS_CFG] = &qhs_spss_cfg,
1592 	[SLAVE_TCSR] = &qhs_tcsr,
1593 	[SLAVE_TLMM_NORTH] = &qhs_tlmm_north,
1594 	[SLAVE_TLMM_SOUTH] = &qhs_tlmm_south,
1595 	[SLAVE_TSIF] = &qhs_tsif,
1596 	[SLAVE_UFS_CARD_CFG] = &qhs_ufs_card_cfg,
1597 	[SLAVE_UFS_MEM_CFG] = &qhs_ufs_mem_cfg,
1598 	[SLAVE_USB3_0] = &qhs_usb3_0,
1599 	[SLAVE_USB3_1] = &qhs_usb3_1,
1600 	[SLAVE_VENUS_CFG] = &qhs_venus_cfg,
1601 	[SLAVE_VSENSE_CTRL_CFG] = &qhs_vsense_ctrl_cfg,
1602 	[SLAVE_CNOC_A2NOC] = &qns_cnoc_a2noc,
1603 	[SLAVE_SERVICE_CNOC] = &srvc_cnoc,
1604 };
1605 
1606 static const struct qcom_icc_desc sdm845_config_noc = {
1607 	.nodes = config_noc_nodes,
1608 	.num_nodes = ARRAY_SIZE(config_noc_nodes),
1609 	.bcms = config_noc_bcms,
1610 	.num_bcms = ARRAY_SIZE(config_noc_bcms),
1611 };
1612 
1613 static struct qcom_icc_bcm * const dc_noc_bcms[] = {
1614 };
1615 
1616 static struct qcom_icc_node * const dc_noc_nodes[] = {
1617 	[MASTER_CNOC_DC_NOC] = &qhm_cnoc,
1618 	[SLAVE_LLCC_CFG] = &qhs_llcc,
1619 	[SLAVE_MEM_NOC_CFG] = &qhs_memnoc,
1620 };
1621 
1622 static const struct qcom_icc_desc sdm845_dc_noc = {
1623 	.nodes = dc_noc_nodes,
1624 	.num_nodes = ARRAY_SIZE(dc_noc_nodes),
1625 	.bcms = dc_noc_bcms,
1626 	.num_bcms = ARRAY_SIZE(dc_noc_bcms),
1627 };
1628 
1629 static struct qcom_icc_bcm * const gladiator_noc_bcms[] = {
1630 };
1631 
1632 static struct qcom_icc_node * const gladiator_noc_nodes[] = {
1633 	[MASTER_APPSS_PROC] = &acm_l3,
1634 	[MASTER_GNOC_CFG] = &pm_gnoc_cfg,
1635 	[SLAVE_GNOC_SNOC] = &qns_gladiator_sodv,
1636 	[SLAVE_GNOC_MEM_NOC] = &qns_gnoc_memnoc,
1637 	[SLAVE_SERVICE_GNOC] = &srvc_gnoc,
1638 };
1639 
1640 static const struct qcom_icc_desc sdm845_gladiator_noc = {
1641 	.nodes = gladiator_noc_nodes,
1642 	.num_nodes = ARRAY_SIZE(gladiator_noc_nodes),
1643 	.bcms = gladiator_noc_bcms,
1644 	.num_bcms = ARRAY_SIZE(gladiator_noc_bcms),
1645 };
1646 
1647 static struct qcom_icc_bcm * const mem_noc_bcms[] = {
1648 	&bcm_mc0,
1649 	&bcm_acv,
1650 	&bcm_sh0,
1651 	&bcm_sh1,
1652 	&bcm_sh2,
1653 	&bcm_sh3,
1654 	&bcm_sh5,
1655 };
1656 
1657 static struct qcom_icc_node * const mem_noc_nodes[] = {
1658 	[MASTER_TCU_0] = &acm_tcu,
1659 	[MASTER_MEM_NOC_CFG] = &qhm_memnoc_cfg,
1660 	[MASTER_GNOC_MEM_NOC] = &qnm_apps,
1661 	[MASTER_MNOC_HF_MEM_NOC] = &qnm_mnoc_hf,
1662 	[MASTER_MNOC_SF_MEM_NOC] = &qnm_mnoc_sf,
1663 	[MASTER_SNOC_GC_MEM_NOC] = &qnm_snoc_gc,
1664 	[MASTER_SNOC_SF_MEM_NOC] = &qnm_snoc_sf,
1665 	[MASTER_GFX3D] = &qxm_gpu,
1666 	[SLAVE_MSS_PROC_MS_MPU_CFG] = &qhs_mdsp_ms_mpu_cfg,
1667 	[SLAVE_MEM_NOC_GNOC] = &qns_apps_io,
1668 	[SLAVE_LLCC] = &qns_llcc,
1669 	[SLAVE_MEM_NOC_SNOC] = &qns_memnoc_snoc,
1670 	[SLAVE_SERVICE_MEM_NOC] = &srvc_memnoc,
1671 	[MASTER_LLCC] = &llcc_mc,
1672 	[SLAVE_EBI1] = &ebi,
1673 };
1674 
1675 static const struct qcom_icc_desc sdm845_mem_noc = {
1676 	.nodes = mem_noc_nodes,
1677 	.num_nodes = ARRAY_SIZE(mem_noc_nodes),
1678 	.bcms = mem_noc_bcms,
1679 	.num_bcms = ARRAY_SIZE(mem_noc_bcms),
1680 };
1681 
1682 static struct qcom_icc_bcm * const mmss_noc_bcms[] = {
1683 	&bcm_mm0,
1684 	&bcm_mm1,
1685 	&bcm_mm2,
1686 	&bcm_mm3,
1687 };
1688 
1689 static struct qcom_icc_node * const mmss_noc_nodes[] = {
1690 	[MASTER_CNOC_MNOC_CFG] = &qhm_mnoc_cfg,
1691 	[MASTER_CAMNOC_HF0] = &qxm_camnoc_hf0,
1692 	[MASTER_CAMNOC_HF1] = &qxm_camnoc_hf1,
1693 	[MASTER_CAMNOC_SF] = &qxm_camnoc_sf,
1694 	[MASTER_MDP0] = &qxm_mdp0,
1695 	[MASTER_MDP1] = &qxm_mdp1,
1696 	[MASTER_ROTATOR] = &qxm_rot,
1697 	[MASTER_VIDEO_P0] = &qxm_venus0,
1698 	[MASTER_VIDEO_P1] = &qxm_venus1,
1699 	[MASTER_VIDEO_PROC] = &qxm_venus_arm9,
1700 	[SLAVE_MNOC_SF_MEM_NOC] = &qns2_mem_noc,
1701 	[SLAVE_MNOC_HF_MEM_NOC] = &qns_mem_noc_hf,
1702 	[SLAVE_SERVICE_MNOC] = &srvc_mnoc,
1703 	[MASTER_CAMNOC_HF0_UNCOMP] = &qxm_camnoc_hf0_uncomp,
1704 	[MASTER_CAMNOC_HF1_UNCOMP] = &qxm_camnoc_hf1_uncomp,
1705 	[MASTER_CAMNOC_SF_UNCOMP] = &qxm_camnoc_sf_uncomp,
1706 	[SLAVE_CAMNOC_UNCOMP] = &qns_camnoc_uncomp,
1707 };
1708 
1709 static const struct qcom_icc_desc sdm845_mmss_noc = {
1710 	.nodes = mmss_noc_nodes,
1711 	.num_nodes = ARRAY_SIZE(mmss_noc_nodes),
1712 	.bcms = mmss_noc_bcms,
1713 	.num_bcms = ARRAY_SIZE(mmss_noc_bcms),
1714 };
1715 
1716 static struct qcom_icc_bcm * const system_noc_bcms[] = {
1717 	&bcm_sn0,
1718 	&bcm_sn1,
1719 	&bcm_sn2,
1720 	&bcm_sn3,
1721 	&bcm_sn4,
1722 	&bcm_sn5,
1723 	&bcm_sn6,
1724 	&bcm_sn7,
1725 	&bcm_sn8,
1726 	&bcm_sn9,
1727 	&bcm_sn11,
1728 	&bcm_sn12,
1729 	&bcm_sn14,
1730 	&bcm_sn15,
1731 };
1732 
1733 static struct qcom_icc_node * const system_noc_nodes[] = {
1734 	[MASTER_SNOC_CFG] = &qhm_snoc_cfg,
1735 	[MASTER_A1NOC_SNOC] = &qnm_aggre1_noc,
1736 	[MASTER_A2NOC_SNOC] = &qnm_aggre2_noc,
1737 	[MASTER_GNOC_SNOC] = &qnm_gladiator_sodv,
1738 	[MASTER_MEM_NOC_SNOC] = &qnm_memnoc,
1739 	[MASTER_ANOC_PCIE_SNOC] = &qnm_pcie_anoc,
1740 	[MASTER_PIMEM] = &qxm_pimem,
1741 	[MASTER_GIC] = &xm_gic,
1742 	[SLAVE_APPSS] = &qhs_apss,
1743 	[SLAVE_SNOC_CNOC] = &qns_cnoc,
1744 	[SLAVE_SNOC_MEM_NOC_GC] = &qns_memnoc_gc,
1745 	[SLAVE_SNOC_MEM_NOC_SF] = &qns_memnoc_sf,
1746 	[SLAVE_IMEM] = &qxs_imem,
1747 	[SLAVE_PCIE_0] = &qxs_pcie,
1748 	[SLAVE_PCIE_1] = &qxs_pcie_gen3,
1749 	[SLAVE_PIMEM] = &qxs_pimem,
1750 	[SLAVE_SERVICE_SNOC] = &srvc_snoc,
1751 	[SLAVE_QDSS_STM] = &xs_qdss_stm,
1752 	[SLAVE_TCU] = &xs_sys_tcu_cfg,
1753 };
1754 
1755 static const struct qcom_icc_desc sdm845_system_noc = {
1756 	.nodes = system_noc_nodes,
1757 	.num_nodes = ARRAY_SIZE(system_noc_nodes),
1758 	.bcms = system_noc_bcms,
1759 	.num_bcms = ARRAY_SIZE(system_noc_bcms),
1760 };
1761 
1762 static const struct of_device_id qnoc_of_match[] = {
1763 	{ .compatible = "qcom,sdm845-aggre1-noc",
1764 	  .data = &sdm845_aggre1_noc},
1765 	{ .compatible = "qcom,sdm845-aggre2-noc",
1766 	  .data = &sdm845_aggre2_noc},
1767 	{ .compatible = "qcom,sdm845-config-noc",
1768 	  .data = &sdm845_config_noc},
1769 	{ .compatible = "qcom,sdm845-dc-noc",
1770 	  .data = &sdm845_dc_noc},
1771 	{ .compatible = "qcom,sdm845-gladiator-noc",
1772 	  .data = &sdm845_gladiator_noc},
1773 	{ .compatible = "qcom,sdm845-mem-noc",
1774 	  .data = &sdm845_mem_noc},
1775 	{ .compatible = "qcom,sdm845-mmss-noc",
1776 	  .data = &sdm845_mmss_noc},
1777 	{ .compatible = "qcom,sdm845-system-noc",
1778 	  .data = &sdm845_system_noc},
1779 	{ }
1780 };
1781 MODULE_DEVICE_TABLE(of, qnoc_of_match);
1782 
1783 static struct platform_driver qnoc_driver = {
1784 	.probe = qcom_icc_rpmh_probe,
1785 	.remove = qcom_icc_rpmh_remove,
1786 	.driver = {
1787 		.name = "qnoc-sdm845",
1788 		.of_match_table = qnoc_of_match,
1789 		.sync_state = icc_sync_state,
1790 	},
1791 };
1792 module_platform_driver(qnoc_driver);
1793 
1794 MODULE_AUTHOR("David Dai <daidavid1@codeaurora.org>");
1795 MODULE_DESCRIPTION("Qualcomm sdm845 NoC driver");
1796 MODULE_LICENSE("GPL v2");
1797