1 // SPDX-License-Identifier: GPL-2.0-only
3 * Qualcomm MSM8996 Network-on-Chip (NoC) QoS driver
9 #include <linux/device.h>
10 #include <linux/interconnect-provider.h>
12 #include <linux/module.h>
13 #include <linux/of_device.h>
14 #include <linux/of_platform.h>
15 #include <linux/platform_device.h>
16 #include <linux/regmap.h>
18 #include <dt-bindings/interconnect/qcom,msm8996.h>
24 static const char * const bus_mm_clocks[] = {
30 static const char * const bus_a0noc_clocks[] = {
36 static const char * const bus_a2noc_clocks[] = {
43 static const u16 mas_a0noc_common_links[] = {
44 MSM8996_SLAVE_A0NOC_SNOC
47 static struct qcom_icc_node mas_pcie_0 = {
49 .id = MSM8996_MASTER_PCIE_0,
54 .qos.qos_mode = NOC_QOS_MODE_FIXED,
58 .num_links = ARRAY_SIZE(mas_a0noc_common_links),
59 .links = mas_a0noc_common_links
62 static struct qcom_icc_node mas_pcie_1 = {
64 .id = MSM8996_MASTER_PCIE_1,
69 .qos.qos_mode = NOC_QOS_MODE_FIXED,
73 .num_links = ARRAY_SIZE(mas_a0noc_common_links),
74 .links = mas_a0noc_common_links
77 static struct qcom_icc_node mas_pcie_2 = {
79 .id = MSM8996_MASTER_PCIE_2,
84 .qos.qos_mode = NOC_QOS_MODE_FIXED,
88 .num_links = ARRAY_SIZE(mas_a0noc_common_links),
89 .links = mas_a0noc_common_links
92 static const u16 mas_a1noc_common_links[] = {
93 MSM8996_SLAVE_A1NOC_SNOC
96 static struct qcom_icc_node mas_cnoc_a1noc = {
97 .name = "mas_cnoc_a1noc",
98 .id = MSM8996_MASTER_CNOC_A1NOC,
102 .qos.ap_owned = true,
103 .qos.qos_mode = NOC_QOS_MODE_INVALID,
104 .num_links = ARRAY_SIZE(mas_a1noc_common_links),
105 .links = mas_a1noc_common_links
108 static struct qcom_icc_node mas_crypto_c0 = {
109 .name = "mas_crypto_c0",
110 .id = MSM8996_MASTER_CRYPTO_CORE0,
114 .qos.ap_owned = true,
115 .qos.qos_mode = NOC_QOS_MODE_FIXED,
119 .num_links = ARRAY_SIZE(mas_a1noc_common_links),
120 .links = mas_a1noc_common_links
123 static struct qcom_icc_node mas_pnoc_a1noc = {
124 .name = "mas_pnoc_a1noc",
125 .id = MSM8996_MASTER_PNOC_A1NOC,
129 .qos.ap_owned = false,
130 .qos.qos_mode = NOC_QOS_MODE_FIXED,
134 .num_links = ARRAY_SIZE(mas_a1noc_common_links),
135 .links = mas_a1noc_common_links
138 static const u16 mas_a2noc_common_links[] = {
139 MSM8996_SLAVE_A2NOC_SNOC
142 static struct qcom_icc_node mas_usb3 = {
144 .id = MSM8996_MASTER_USB3,
148 .qos.ap_owned = true,
149 .qos.qos_mode = NOC_QOS_MODE_FIXED,
153 .num_links = ARRAY_SIZE(mas_a2noc_common_links),
154 .links = mas_a2noc_common_links
157 static struct qcom_icc_node mas_ipa = {
159 .id = MSM8996_MASTER_IPA,
163 .qos.ap_owned = true,
164 .qos.qos_mode = NOC_QOS_MODE_FIXED,
168 .num_links = ARRAY_SIZE(mas_a2noc_common_links),
169 .links = mas_a2noc_common_links
172 static struct qcom_icc_node mas_ufs = {
174 .id = MSM8996_MASTER_UFS,
178 .qos.ap_owned = true,
179 .qos.qos_mode = NOC_QOS_MODE_FIXED,
183 .num_links = ARRAY_SIZE(mas_a2noc_common_links),
184 .links = mas_a2noc_common_links
187 static const u16 mas_apps_proc_links[] = {
188 MSM8996_SLAVE_BIMC_SNOC_1,
189 MSM8996_SLAVE_EBI_CH0,
190 MSM8996_SLAVE_BIMC_SNOC_0
193 static struct qcom_icc_node mas_apps_proc = {
194 .name = "mas_apps_proc",
195 .id = MSM8996_MASTER_AMPSS_M0,
199 .qos.ap_owned = true,
200 .qos.qos_mode = NOC_QOS_MODE_FIXED,
204 .num_links = ARRAY_SIZE(mas_apps_proc_links),
205 .links = mas_apps_proc_links
208 static const u16 mas_oxili_common_links[] = {
209 MSM8996_SLAVE_BIMC_SNOC_1,
210 MSM8996_SLAVE_HMSS_L3,
211 MSM8996_SLAVE_EBI_CH0,
212 MSM8996_SLAVE_BIMC_SNOC_0
215 static struct qcom_icc_node mas_oxili = {
217 .id = MSM8996_MASTER_GRAPHICS_3D,
221 .qos.ap_owned = true,
222 .qos.qos_mode = NOC_QOS_MODE_BYPASS,
226 .num_links = ARRAY_SIZE(mas_oxili_common_links),
227 .links = mas_oxili_common_links
230 static struct qcom_icc_node mas_mnoc_bimc = {
231 .name = "mas_mnoc_bimc",
232 .id = MSM8996_MASTER_MNOC_BIMC,
236 .qos.ap_owned = true,
237 .qos.qos_mode = NOC_QOS_MODE_BYPASS,
241 .num_links = ARRAY_SIZE(mas_oxili_common_links),
242 .links = mas_oxili_common_links
245 static const u16 mas_snoc_bimc_links[] = {
246 MSM8996_SLAVE_HMSS_L3,
247 MSM8996_SLAVE_EBI_CH0
250 static struct qcom_icc_node mas_snoc_bimc = {
251 .name = "mas_snoc_bimc",
252 .id = MSM8996_MASTER_SNOC_BIMC,
256 .qos.ap_owned = false,
257 .qos.qos_mode = NOC_QOS_MODE_BYPASS,
261 .num_links = ARRAY_SIZE(mas_snoc_bimc_links),
262 .links = mas_snoc_bimc_links
265 static const u16 mas_snoc_cnoc_links[] = {
266 MSM8996_SLAVE_CLK_CTL,
267 MSM8996_SLAVE_RBCPR_CX,
268 MSM8996_SLAVE_A2NOC_SMMU_CFG,
269 MSM8996_SLAVE_A0NOC_MPU_CFG,
270 MSM8996_SLAVE_MESSAGE_RAM,
271 MSM8996_SLAVE_CNOC_MNOC_MMSS_CFG,
272 MSM8996_SLAVE_PCIE_0_CFG,
275 MSM8996_SLAVE_A0NOC_SMMU_CFG,
276 MSM8996_SLAVE_EBI1_PHY_CFG,
277 MSM8996_SLAVE_BIMC_CFG,
278 MSM8996_SLAVE_PIMEM_CFG,
279 MSM8996_SLAVE_RBCPR_MX,
281 MSM8996_SLAVE_PCIE20_AHB2PHY,
282 MSM8996_SLAVE_A2NOC_MPU_CFG,
283 MSM8996_SLAVE_QDSS_CFG,
284 MSM8996_SLAVE_A2NOC_CFG,
285 MSM8996_SLAVE_A0NOC_CFG,
286 MSM8996_SLAVE_UFS_CFG,
287 MSM8996_SLAVE_CRYPTO_0_CFG,
288 MSM8996_SLAVE_PCIE_1_CFG,
289 MSM8996_SLAVE_SNOC_CFG,
290 MSM8996_SLAVE_SNOC_MPU_CFG,
291 MSM8996_SLAVE_A1NOC_MPU_CFG,
292 MSM8996_SLAVE_A1NOC_SMMU_CFG,
293 MSM8996_SLAVE_PCIE_2_CFG,
294 MSM8996_SLAVE_CNOC_MNOC_CFG,
295 MSM8996_SLAVE_QDSS_RBCPR_APU_CFG,
296 MSM8996_SLAVE_PMIC_ARB,
297 MSM8996_SLAVE_IMEM_CFG,
298 MSM8996_SLAVE_A1NOC_CFG,
299 MSM8996_SLAVE_SSC_CFG,
301 MSM8996_SLAVE_LPASS_SMMU_CFG,
302 MSM8996_SLAVE_DCC_CFG
305 static struct qcom_icc_node mas_snoc_cnoc = {
306 .name = "mas_snoc_cnoc",
307 .id = MSM8996_MASTER_SNOC_CNOC,
311 .num_links = ARRAY_SIZE(mas_snoc_cnoc_links),
312 .links = mas_snoc_cnoc_links
315 static const u16 mas_qdss_dap_links[] = {
316 MSM8996_SLAVE_QDSS_RBCPR_APU_CFG,
317 MSM8996_SLAVE_RBCPR_CX,
318 MSM8996_SLAVE_A2NOC_SMMU_CFG,
319 MSM8996_SLAVE_A0NOC_MPU_CFG,
320 MSM8996_SLAVE_MESSAGE_RAM,
321 MSM8996_SLAVE_PCIE_0_CFG,
324 MSM8996_SLAVE_A0NOC_SMMU_CFG,
325 MSM8996_SLAVE_EBI1_PHY_CFG,
326 MSM8996_SLAVE_BIMC_CFG,
327 MSM8996_SLAVE_PIMEM_CFG,
328 MSM8996_SLAVE_RBCPR_MX,
329 MSM8996_SLAVE_CLK_CTL,
331 MSM8996_SLAVE_PCIE20_AHB2PHY,
332 MSM8996_SLAVE_A2NOC_MPU_CFG,
333 MSM8996_SLAVE_QDSS_CFG,
334 MSM8996_SLAVE_A2NOC_CFG,
335 MSM8996_SLAVE_A0NOC_CFG,
336 MSM8996_SLAVE_UFS_CFG,
337 MSM8996_SLAVE_CRYPTO_0_CFG,
338 MSM8996_SLAVE_CNOC_A1NOC,
339 MSM8996_SLAVE_PCIE_1_CFG,
340 MSM8996_SLAVE_SNOC_CFG,
341 MSM8996_SLAVE_SNOC_MPU_CFG,
342 MSM8996_SLAVE_A1NOC_MPU_CFG,
343 MSM8996_SLAVE_A1NOC_SMMU_CFG,
344 MSM8996_SLAVE_PCIE_2_CFG,
345 MSM8996_SLAVE_CNOC_MNOC_CFG,
346 MSM8996_SLAVE_CNOC_MNOC_MMSS_CFG,
347 MSM8996_SLAVE_PMIC_ARB,
348 MSM8996_SLAVE_IMEM_CFG,
349 MSM8996_SLAVE_A1NOC_CFG,
350 MSM8996_SLAVE_SSC_CFG,
352 MSM8996_SLAVE_LPASS_SMMU_CFG,
353 MSM8996_SLAVE_DCC_CFG
356 static struct qcom_icc_node mas_qdss_dap = {
357 .name = "mas_qdss_dap",
358 .id = MSM8996_MASTER_QDSS_DAP,
362 .qos.ap_owned = true,
363 .qos.qos_mode = NOC_QOS_MODE_INVALID,
364 .num_links = ARRAY_SIZE(mas_qdss_dap_links),
365 .links = mas_qdss_dap_links
368 static const u16 mas_cnoc_mnoc_mmss_cfg_links[] = {
369 MSM8996_SLAVE_MMAGIC_CFG,
370 MSM8996_SLAVE_DSA_MPU_CFG,
371 MSM8996_SLAVE_MMSS_CLK_CFG,
372 MSM8996_SLAVE_CAMERA_THROTTLE_CFG,
373 MSM8996_SLAVE_VENUS_CFG,
374 MSM8996_SLAVE_SMMU_VFE_CFG,
375 MSM8996_SLAVE_MISC_CFG,
376 MSM8996_SLAVE_SMMU_CPP_CFG,
377 MSM8996_SLAVE_GRAPHICS_3D_CFG,
378 MSM8996_SLAVE_DISPLAY_THROTTLE_CFG,
379 MSM8996_SLAVE_VENUS_THROTTLE_CFG,
380 MSM8996_SLAVE_CAMERA_CFG,
381 MSM8996_SLAVE_DISPLAY_CFG,
382 MSM8996_SLAVE_CPR_CFG,
383 MSM8996_SLAVE_SMMU_ROTATOR_CFG,
384 MSM8996_SLAVE_DSA_CFG,
385 MSM8996_SLAVE_SMMU_VENUS_CFG,
386 MSM8996_SLAVE_VMEM_CFG,
387 MSM8996_SLAVE_SMMU_JPEG_CFG,
388 MSM8996_SLAVE_SMMU_MDP_CFG,
389 MSM8996_SLAVE_MNOC_MPU_CFG
392 static struct qcom_icc_node mas_cnoc_mnoc_mmss_cfg = {
393 .name = "mas_cnoc_mnoc_mmss_cfg",
394 .id = MSM8996_MASTER_CNOC_MNOC_MMSS_CFG,
398 .qos.ap_owned = true,
399 .qos.qos_mode = NOC_QOS_MODE_INVALID,
400 .num_links = ARRAY_SIZE(mas_cnoc_mnoc_mmss_cfg_links),
401 .links = mas_cnoc_mnoc_mmss_cfg_links
404 static const u16 mas_cnoc_mnoc_cfg_links[] = {
405 MSM8996_SLAVE_SERVICE_MNOC
408 static struct qcom_icc_node mas_cnoc_mnoc_cfg = {
409 .name = "mas_cnoc_mnoc_cfg",
410 .id = MSM8996_MASTER_CNOC_MNOC_CFG,
414 .qos.ap_owned = true,
415 .qos.qos_mode = NOC_QOS_MODE_INVALID,
416 .num_links = ARRAY_SIZE(mas_cnoc_mnoc_cfg_links),
417 .links = mas_cnoc_mnoc_cfg_links
420 static const u16 mas_mnoc_bimc_common_links[] = {
421 MSM8996_SLAVE_MNOC_BIMC
424 static struct qcom_icc_node mas_cpp = {
426 .id = MSM8996_MASTER_CPP,
430 .qos.ap_owned = true,
431 .qos.qos_mode = NOC_QOS_MODE_BYPASS,
435 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
436 .links = mas_mnoc_bimc_common_links
439 static struct qcom_icc_node mas_jpeg = {
441 .id = MSM8996_MASTER_JPEG,
445 .qos.ap_owned = true,
446 .qos.qos_mode = NOC_QOS_MODE_BYPASS,
450 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
451 .links = mas_mnoc_bimc_common_links
454 static struct qcom_icc_node mas_mdp_p0 = {
455 .name = "mas_mdp_p0",
456 .id = MSM8996_MASTER_MDP_PORT0,
460 .qos.ap_owned = true,
461 .qos.qos_mode = NOC_QOS_MODE_BYPASS,
465 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
466 .links = mas_mnoc_bimc_common_links
469 static struct qcom_icc_node mas_mdp_p1 = {
470 .name = "mas_mdp_p1",
471 .id = MSM8996_MASTER_MDP_PORT1,
475 .qos.ap_owned = true,
476 .qos.qos_mode = NOC_QOS_MODE_BYPASS,
480 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
481 .links = mas_mnoc_bimc_common_links
484 static struct qcom_icc_node mas_rotator = {
485 .name = "mas_rotator",
486 .id = MSM8996_MASTER_ROTATOR,
490 .qos.ap_owned = true,
491 .qos.qos_mode = NOC_QOS_MODE_BYPASS,
495 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
496 .links = mas_mnoc_bimc_common_links
499 static struct qcom_icc_node mas_venus = {
501 .id = MSM8996_MASTER_VIDEO_P0,
505 .qos.ap_owned = true,
506 .qos.qos_mode = NOC_QOS_MODE_BYPASS,
510 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
511 .links = mas_mnoc_bimc_common_links
514 static struct qcom_icc_node mas_vfe = {
516 .id = MSM8996_MASTER_VFE,
520 .qos.ap_owned = true,
521 .qos.qos_mode = NOC_QOS_MODE_BYPASS,
525 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
526 .links = mas_mnoc_bimc_common_links
529 static const u16 mas_vmem_common_links[] = {
533 static struct qcom_icc_node mas_snoc_vmem = {
534 .name = "mas_snoc_vmem",
535 .id = MSM8996_MASTER_SNOC_VMEM,
539 .qos.ap_owned = true,
540 .qos.qos_mode = NOC_QOS_MODE_INVALID,
541 .num_links = ARRAY_SIZE(mas_vmem_common_links),
542 .links = mas_vmem_common_links
545 static struct qcom_icc_node mas_venus_vmem = {
546 .name = "mas_venus_vmem",
547 .id = MSM8996_MASTER_VIDEO_P0_OCMEM,
551 .qos.ap_owned = true,
552 .qos.qos_mode = NOC_QOS_MODE_INVALID,
553 .num_links = ARRAY_SIZE(mas_vmem_common_links),
554 .links = mas_vmem_common_links
557 static const u16 mas_snoc_pnoc_links[] = {
558 MSM8996_SLAVE_BLSP_1,
559 MSM8996_SLAVE_BLSP_2,
560 MSM8996_SLAVE_SDCC_1,
561 MSM8996_SLAVE_SDCC_2,
562 MSM8996_SLAVE_SDCC_4,
565 MSM8996_SLAVE_AHB2PHY
568 static struct qcom_icc_node mas_snoc_pnoc = {
569 .name = "mas_snoc_pnoc",
570 .id = MSM8996_MASTER_SNOC_PNOC,
574 .num_links = ARRAY_SIZE(mas_snoc_pnoc_links),
575 .links = mas_snoc_pnoc_links
578 static const u16 mas_pnoc_a1noc_common_links[] = {
579 MSM8996_SLAVE_PNOC_A1NOC
582 static struct qcom_icc_node mas_sdcc_1 = {
583 .name = "mas_sdcc_1",
584 .id = MSM8996_MASTER_SDCC_1,
588 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
589 .links = mas_pnoc_a1noc_common_links
592 static struct qcom_icc_node mas_sdcc_2 = {
593 .name = "mas_sdcc_2",
594 .id = MSM8996_MASTER_SDCC_2,
598 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
599 .links = mas_pnoc_a1noc_common_links
602 static struct qcom_icc_node mas_sdcc_4 = {
603 .name = "mas_sdcc_4",
604 .id = MSM8996_MASTER_SDCC_4,
608 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
609 .links = mas_pnoc_a1noc_common_links
612 static struct qcom_icc_node mas_usb_hs = {
613 .name = "mas_usb_hs",
614 .id = MSM8996_MASTER_USB_HS,
618 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
619 .links = mas_pnoc_a1noc_common_links
622 static struct qcom_icc_node mas_blsp_1 = {
623 .name = "mas_blsp_1",
624 .id = MSM8996_MASTER_BLSP_1,
628 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
629 .links = mas_pnoc_a1noc_common_links
632 static struct qcom_icc_node mas_blsp_2 = {
633 .name = "mas_blsp_2",
634 .id = MSM8996_MASTER_BLSP_2,
638 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
639 .links = mas_pnoc_a1noc_common_links
642 static struct qcom_icc_node mas_tsif = {
644 .id = MSM8996_MASTER_TSIF,
648 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
649 .links = mas_pnoc_a1noc_common_links
652 static const u16 mas_hmss_links[] = {
654 MSM8996_SLAVE_OCIMEM,
655 MSM8996_SLAVE_SNOC_BIMC
658 static struct qcom_icc_node mas_hmss = {
660 .id = MSM8996_MASTER_HMSS,
664 .qos.ap_owned = true,
665 .qos.qos_mode = NOC_QOS_MODE_FIXED,
669 .num_links = ARRAY_SIZE(mas_hmss_links),
670 .links = mas_hmss_links
673 static const u16 mas_qdss_common_links[] = {
676 MSM8996_SLAVE_OCIMEM,
677 MSM8996_SLAVE_SNOC_BIMC,
678 MSM8996_SLAVE_SNOC_PNOC
681 static struct qcom_icc_node mas_qdss_bam = {
682 .name = "mas_qdss_bam",
683 .id = MSM8996_MASTER_QDSS_BAM,
687 .qos.ap_owned = true,
688 .qos.qos_mode = NOC_QOS_MODE_FIXED,
692 .num_links = ARRAY_SIZE(mas_qdss_common_links),
693 .links = mas_qdss_common_links
696 static const u16 mas_snoc_cfg_links[] = {
697 MSM8996_SLAVE_SERVICE_SNOC
700 static struct qcom_icc_node mas_snoc_cfg = {
701 .name = "mas_snoc_cfg",
702 .id = MSM8996_MASTER_SNOC_CFG,
706 .qos.ap_owned = true,
707 .qos.qos_mode = NOC_QOS_MODE_INVALID,
708 .num_links = ARRAY_SIZE(mas_snoc_cfg_links),
709 .links = mas_snoc_cfg_links
712 static const u16 mas_bimc_snoc_0_links[] = {
713 MSM8996_SLAVE_SNOC_VMEM,
718 MSM8996_SLAVE_SNOC_CNOC,
719 MSM8996_SLAVE_SNOC_PNOC,
720 MSM8996_SLAVE_OCIMEM,
721 MSM8996_SLAVE_QDSS_STM
724 static struct qcom_icc_node mas_bimc_snoc_0 = {
725 .name = "mas_bimc_snoc_0",
726 .id = MSM8996_MASTER_BIMC_SNOC_0,
730 .qos.ap_owned = true,
731 .qos.qos_mode = NOC_QOS_MODE_INVALID,
732 .num_links = ARRAY_SIZE(mas_bimc_snoc_0_links),
733 .links = mas_bimc_snoc_0_links
736 static const u16 mas_bimc_snoc_1_links[] = {
737 MSM8996_SLAVE_PCIE_2,
738 MSM8996_SLAVE_PCIE_1,
742 static struct qcom_icc_node mas_bimc_snoc_1 = {
743 .name = "mas_bimc_snoc_1",
744 .id = MSM8996_MASTER_BIMC_SNOC_1,
748 .qos.ap_owned = true,
749 .qos.qos_mode = NOC_QOS_MODE_INVALID,
750 .num_links = ARRAY_SIZE(mas_bimc_snoc_1_links),
751 .links = mas_bimc_snoc_1_links
754 static const u16 mas_a0noc_snoc_links[] = {
755 MSM8996_SLAVE_SNOC_PNOC,
756 MSM8996_SLAVE_OCIMEM,
758 MSM8996_SLAVE_SNOC_BIMC,
762 static struct qcom_icc_node mas_a0noc_snoc = {
763 .name = "mas_a0noc_snoc",
764 .id = MSM8996_MASTER_A0NOC_SNOC,
768 .qos.ap_owned = true,
769 .qos.qos_mode = NOC_QOS_MODE_INVALID,
770 .num_links = ARRAY_SIZE(mas_a0noc_snoc_links),
771 .links = mas_a0noc_snoc_links
774 static const u16 mas_a1noc_snoc_links[] = {
775 MSM8996_SLAVE_SNOC_VMEM,
777 MSM8996_SLAVE_PCIE_0,
779 MSM8996_SLAVE_PCIE_2,
781 MSM8996_SLAVE_PCIE_1,
783 MSM8996_SLAVE_SNOC_BIMC,
784 MSM8996_SLAVE_SNOC_CNOC,
785 MSM8996_SLAVE_SNOC_PNOC,
786 MSM8996_SLAVE_OCIMEM,
787 MSM8996_SLAVE_QDSS_STM
790 static struct qcom_icc_node mas_a1noc_snoc = {
791 .name = "mas_a1noc_snoc",
792 .id = MSM8996_MASTER_A1NOC_SNOC,
796 .num_links = ARRAY_SIZE(mas_a1noc_snoc_links),
797 .links = mas_a1noc_snoc_links
800 static const u16 mas_a2noc_snoc_links[] = {
801 MSM8996_SLAVE_SNOC_VMEM,
803 MSM8996_SLAVE_PCIE_1,
805 MSM8996_SLAVE_PCIE_2,
806 MSM8996_SLAVE_QDSS_STM,
808 MSM8996_SLAVE_SNOC_BIMC,
809 MSM8996_SLAVE_SNOC_CNOC,
810 MSM8996_SLAVE_SNOC_PNOC,
811 MSM8996_SLAVE_OCIMEM,
815 static struct qcom_icc_node mas_a2noc_snoc = {
816 .name = "mas_a2noc_snoc",
817 .id = MSM8996_MASTER_A2NOC_SNOC,
821 .num_links = ARRAY_SIZE(mas_a2noc_snoc_links),
822 .links = mas_a2noc_snoc_links
825 static struct qcom_icc_node mas_qdss_etr = {
826 .name = "mas_qdss_etr",
827 .id = MSM8996_MASTER_QDSS_ETR,
831 .qos.ap_owned = true,
832 .qos.qos_mode = NOC_QOS_MODE_FIXED,
836 .num_links = ARRAY_SIZE(mas_qdss_common_links),
837 .links = mas_qdss_common_links
840 static const u16 slv_a0noc_snoc_links[] = {
841 MSM8996_MASTER_A0NOC_SNOC
844 static struct qcom_icc_node slv_a0noc_snoc = {
845 .name = "slv_a0noc_snoc",
846 .id = MSM8996_SLAVE_A0NOC_SNOC,
850 .qos.ap_owned = true,
851 .qos.qos_mode = NOC_QOS_MODE_INVALID,
852 .num_links = ARRAY_SIZE(slv_a0noc_snoc_links),
853 .links = slv_a0noc_snoc_links
856 static const u16 slv_a1noc_snoc_links[] = {
857 MSM8996_MASTER_A1NOC_SNOC
860 static struct qcom_icc_node slv_a1noc_snoc = {
861 .name = "slv_a1noc_snoc",
862 .id = MSM8996_SLAVE_A1NOC_SNOC,
866 .num_links = ARRAY_SIZE(slv_a1noc_snoc_links),
867 .links = slv_a1noc_snoc_links
870 static const u16 slv_a2noc_snoc_links[] = {
871 MSM8996_MASTER_A2NOC_SNOC
874 static struct qcom_icc_node slv_a2noc_snoc = {
875 .name = "slv_a2noc_snoc",
876 .id = MSM8996_SLAVE_A2NOC_SNOC,
880 .num_links = ARRAY_SIZE(slv_a2noc_snoc_links),
881 .links = slv_a2noc_snoc_links
884 static struct qcom_icc_node slv_ebi = {
886 .id = MSM8996_SLAVE_EBI_CH0,
892 static struct qcom_icc_node slv_hmss_l3 = {
893 .name = "slv_hmss_l3",
894 .id = MSM8996_SLAVE_HMSS_L3,
900 static const u16 slv_bimc_snoc_0_links[] = {
901 MSM8996_MASTER_BIMC_SNOC_0
904 static struct qcom_icc_node slv_bimc_snoc_0 = {
905 .name = "slv_bimc_snoc_0",
906 .id = MSM8996_SLAVE_BIMC_SNOC_0,
910 .qos.ap_owned = true,
911 .qos.qos_mode = NOC_QOS_MODE_INVALID,
912 .num_links = ARRAY_SIZE(slv_bimc_snoc_0_links),
913 .links = slv_bimc_snoc_0_links
916 static const u16 slv_bimc_snoc_1_links[] = {
917 MSM8996_MASTER_BIMC_SNOC_1
920 static struct qcom_icc_node slv_bimc_snoc_1 = {
921 .name = "slv_bimc_snoc_1",
922 .id = MSM8996_SLAVE_BIMC_SNOC_1,
926 .qos.ap_owned = true,
927 .qos.qos_mode = NOC_QOS_MODE_INVALID,
928 .num_links = ARRAY_SIZE(slv_bimc_snoc_1_links),
929 .links = slv_bimc_snoc_1_links
932 static const u16 slv_cnoc_a1noc_links[] = {
933 MSM8996_MASTER_CNOC_A1NOC
936 static struct qcom_icc_node slv_cnoc_a1noc = {
937 .name = "slv_cnoc_a1noc",
938 .id = MSM8996_SLAVE_CNOC_A1NOC,
942 .qos.ap_owned = true,
943 .qos.qos_mode = NOC_QOS_MODE_INVALID,
944 .num_links = ARRAY_SIZE(slv_cnoc_a1noc_links),
945 .links = slv_cnoc_a1noc_links
948 static struct qcom_icc_node slv_clk_ctl = {
949 .name = "slv_clk_ctl",
950 .id = MSM8996_SLAVE_CLK_CTL,
956 static struct qcom_icc_node slv_tcsr = {
958 .id = MSM8996_SLAVE_TCSR,
964 static struct qcom_icc_node slv_tlmm = {
966 .id = MSM8996_SLAVE_TLMM,
972 static struct qcom_icc_node slv_crypto0_cfg = {
973 .name = "slv_crypto0_cfg",
974 .id = MSM8996_SLAVE_CRYPTO_0_CFG,
978 .qos.ap_owned = true,
979 .qos.qos_mode = NOC_QOS_MODE_INVALID
982 static struct qcom_icc_node slv_mpm = {
984 .id = MSM8996_SLAVE_MPM,
988 .qos.ap_owned = true,
989 .qos.qos_mode = NOC_QOS_MODE_INVALID
992 static struct qcom_icc_node slv_pimem_cfg = {
993 .name = "slv_pimem_cfg",
994 .id = MSM8996_SLAVE_PIMEM_CFG,
998 .qos.ap_owned = true,
999 .qos.qos_mode = NOC_QOS_MODE_INVALID
1002 static struct qcom_icc_node slv_imem_cfg = {
1003 .name = "slv_imem_cfg",
1004 .id = MSM8996_SLAVE_IMEM_CFG,
1008 .qos.ap_owned = true,
1009 .qos.qos_mode = NOC_QOS_MODE_INVALID
1012 static struct qcom_icc_node slv_message_ram = {
1013 .name = "slv_message_ram",
1014 .id = MSM8996_SLAVE_MESSAGE_RAM,
1020 static struct qcom_icc_node slv_bimc_cfg = {
1021 .name = "slv_bimc_cfg",
1022 .id = MSM8996_SLAVE_BIMC_CFG,
1026 .qos.ap_owned = true,
1027 .qos.qos_mode = NOC_QOS_MODE_INVALID
1030 static struct qcom_icc_node slv_pmic_arb = {
1031 .name = "slv_pmic_arb",
1032 .id = MSM8996_SLAVE_PMIC_ARB,
1038 static struct qcom_icc_node slv_prng = {
1040 .id = MSM8996_SLAVE_PRNG,
1044 .qos.ap_owned = true,
1045 .qos.qos_mode = NOC_QOS_MODE_INVALID
1048 static struct qcom_icc_node slv_dcc_cfg = {
1049 .name = "slv_dcc_cfg",
1050 .id = MSM8996_SLAVE_DCC_CFG,
1054 .qos.ap_owned = true,
1055 .qos.qos_mode = NOC_QOS_MODE_INVALID
1058 static struct qcom_icc_node slv_rbcpr_mx = {
1059 .name = "slv_rbcpr_mx",
1060 .id = MSM8996_SLAVE_RBCPR_MX,
1064 .qos.ap_owned = true,
1065 .qos.qos_mode = NOC_QOS_MODE_INVALID
1068 static struct qcom_icc_node slv_qdss_cfg = {
1069 .name = "slv_qdss_cfg",
1070 .id = MSM8996_SLAVE_QDSS_CFG,
1074 .qos.ap_owned = true,
1075 .qos.qos_mode = NOC_QOS_MODE_INVALID
1078 static struct qcom_icc_node slv_rbcpr_cx = {
1079 .name = "slv_rbcpr_cx",
1080 .id = MSM8996_SLAVE_RBCPR_CX,
1084 .qos.ap_owned = true,
1085 .qos.qos_mode = NOC_QOS_MODE_INVALID
1088 static struct qcom_icc_node slv_cpu_apu_cfg = {
1089 .name = "slv_cpu_apu_cfg",
1090 .id = MSM8996_SLAVE_QDSS_RBCPR_APU_CFG,
1094 .qos.ap_owned = true,
1095 .qos.qos_mode = NOC_QOS_MODE_INVALID
1098 static const u16 slv_cnoc_mnoc_cfg_links[] = {
1099 MSM8996_MASTER_CNOC_MNOC_CFG
1102 static struct qcom_icc_node slv_cnoc_mnoc_cfg = {
1103 .name = "slv_cnoc_mnoc_cfg",
1104 .id = MSM8996_SLAVE_CNOC_MNOC_CFG,
1108 .qos.ap_owned = true,
1109 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1110 .num_links = ARRAY_SIZE(slv_cnoc_mnoc_cfg_links),
1111 .links = slv_cnoc_mnoc_cfg_links
1114 static struct qcom_icc_node slv_snoc_cfg = {
1115 .name = "slv_snoc_cfg",
1116 .id = MSM8996_SLAVE_SNOC_CFG,
1120 .qos.ap_owned = true,
1121 .qos.qos_mode = NOC_QOS_MODE_INVALID
1124 static struct qcom_icc_node slv_snoc_mpu_cfg = {
1125 .name = "slv_snoc_mpu_cfg",
1126 .id = MSM8996_SLAVE_SNOC_MPU_CFG,
1130 .qos.ap_owned = true,
1131 .qos.qos_mode = NOC_QOS_MODE_INVALID
1134 static struct qcom_icc_node slv_ebi1_phy_cfg = {
1135 .name = "slv_ebi1_phy_cfg",
1136 .id = MSM8996_SLAVE_EBI1_PHY_CFG,
1140 .qos.ap_owned = true,
1141 .qos.qos_mode = NOC_QOS_MODE_INVALID
1144 static struct qcom_icc_node slv_a0noc_cfg = {
1145 .name = "slv_a0noc_cfg",
1146 .id = MSM8996_SLAVE_A0NOC_CFG,
1150 .qos.ap_owned = true,
1151 .qos.qos_mode = NOC_QOS_MODE_INVALID
1154 static struct qcom_icc_node slv_pcie_1_cfg = {
1155 .name = "slv_pcie_1_cfg",
1156 .id = MSM8996_SLAVE_PCIE_1_CFG,
1160 .qos.ap_owned = true,
1161 .qos.qos_mode = NOC_QOS_MODE_INVALID
1164 static struct qcom_icc_node slv_pcie_2_cfg = {
1165 .name = "slv_pcie_2_cfg",
1166 .id = MSM8996_SLAVE_PCIE_2_CFG,
1170 .qos.ap_owned = true,
1171 .qos.qos_mode = NOC_QOS_MODE_INVALID
1174 static struct qcom_icc_node slv_pcie_0_cfg = {
1175 .name = "slv_pcie_0_cfg",
1176 .id = MSM8996_SLAVE_PCIE_0_CFG,
1180 .qos.ap_owned = true,
1181 .qos.qos_mode = NOC_QOS_MODE_INVALID
1184 static struct qcom_icc_node slv_pcie20_ahb2phy = {
1185 .name = "slv_pcie20_ahb2phy",
1186 .id = MSM8996_SLAVE_PCIE20_AHB2PHY,
1190 .qos.ap_owned = true,
1191 .qos.qos_mode = NOC_QOS_MODE_INVALID
1194 static struct qcom_icc_node slv_a0noc_mpu_cfg = {
1195 .name = "slv_a0noc_mpu_cfg",
1196 .id = MSM8996_SLAVE_A0NOC_MPU_CFG,
1200 .qos.ap_owned = true,
1201 .qos.qos_mode = NOC_QOS_MODE_INVALID
1204 static struct qcom_icc_node slv_ufs_cfg = {
1205 .name = "slv_ufs_cfg",
1206 .id = MSM8996_SLAVE_UFS_CFG,
1210 .qos.ap_owned = true,
1211 .qos.qos_mode = NOC_QOS_MODE_INVALID
1214 static struct qcom_icc_node slv_a1noc_cfg = {
1215 .name = "slv_a1noc_cfg",
1216 .id = MSM8996_SLAVE_A1NOC_CFG,
1220 .qos.ap_owned = true,
1221 .qos.qos_mode = NOC_QOS_MODE_INVALID
1224 static struct qcom_icc_node slv_a1noc_mpu_cfg = {
1225 .name = "slv_a1noc_mpu_cfg",
1226 .id = MSM8996_SLAVE_A1NOC_MPU_CFG,
1230 .qos.ap_owned = true,
1231 .qos.qos_mode = NOC_QOS_MODE_INVALID
1234 static struct qcom_icc_node slv_a2noc_cfg = {
1235 .name = "slv_a2noc_cfg",
1236 .id = MSM8996_SLAVE_A2NOC_CFG,
1240 .qos.ap_owned = true,
1241 .qos.qos_mode = NOC_QOS_MODE_INVALID
1244 static struct qcom_icc_node slv_a2noc_mpu_cfg = {
1245 .name = "slv_a2noc_mpu_cfg",
1246 .id = MSM8996_SLAVE_A2NOC_MPU_CFG,
1250 .qos.ap_owned = true,
1251 .qos.qos_mode = NOC_QOS_MODE_INVALID
1254 static struct qcom_icc_node slv_ssc_cfg = {
1255 .name = "slv_ssc_cfg",
1256 .id = MSM8996_SLAVE_SSC_CFG,
1260 .qos.ap_owned = true,
1261 .qos.qos_mode = NOC_QOS_MODE_INVALID
1264 static struct qcom_icc_node slv_a0noc_smmu_cfg = {
1265 .name = "slv_a0noc_smmu_cfg",
1266 .id = MSM8996_SLAVE_A0NOC_SMMU_CFG,
1270 .qos.ap_owned = true,
1271 .qos.qos_mode = NOC_QOS_MODE_INVALID
1274 static struct qcom_icc_node slv_a1noc_smmu_cfg = {
1275 .name = "slv_a1noc_smmu_cfg",
1276 .id = MSM8996_SLAVE_A1NOC_SMMU_CFG,
1280 .qos.ap_owned = true,
1281 .qos.qos_mode = NOC_QOS_MODE_INVALID
1284 static struct qcom_icc_node slv_a2noc_smmu_cfg = {
1285 .name = "slv_a2noc_smmu_cfg",
1286 .id = MSM8996_SLAVE_A2NOC_SMMU_CFG,
1290 .qos.ap_owned = true,
1291 .qos.qos_mode = NOC_QOS_MODE_INVALID
1294 static struct qcom_icc_node slv_lpass_smmu_cfg = {
1295 .name = "slv_lpass_smmu_cfg",
1296 .id = MSM8996_SLAVE_LPASS_SMMU_CFG,
1300 .qos.ap_owned = true,
1301 .qos.qos_mode = NOC_QOS_MODE_INVALID
1304 static const u16 slv_cnoc_mnoc_mmss_cfg_links[] = {
1305 MSM8996_MASTER_CNOC_MNOC_MMSS_CFG
1308 static struct qcom_icc_node slv_cnoc_mnoc_mmss_cfg = {
1309 .name = "slv_cnoc_mnoc_mmss_cfg",
1310 .id = MSM8996_SLAVE_CNOC_MNOC_MMSS_CFG,
1314 .qos.ap_owned = true,
1315 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1316 .num_links = ARRAY_SIZE(slv_cnoc_mnoc_mmss_cfg_links),
1317 .links = slv_cnoc_mnoc_mmss_cfg_links
1320 static struct qcom_icc_node slv_mmagic_cfg = {
1321 .name = "slv_mmagic_cfg",
1322 .id = MSM8996_SLAVE_MMAGIC_CFG,
1326 .qos.ap_owned = true,
1327 .qos.qos_mode = NOC_QOS_MODE_INVALID
1330 static struct qcom_icc_node slv_cpr_cfg = {
1331 .name = "slv_cpr_cfg",
1332 .id = MSM8996_SLAVE_CPR_CFG,
1336 .qos.ap_owned = true,
1337 .qos.qos_mode = NOC_QOS_MODE_INVALID
1340 static struct qcom_icc_node slv_misc_cfg = {
1341 .name = "slv_misc_cfg",
1342 .id = MSM8996_SLAVE_MISC_CFG,
1346 .qos.ap_owned = true,
1347 .qos.qos_mode = NOC_QOS_MODE_INVALID
1350 static struct qcom_icc_node slv_venus_throttle_cfg = {
1351 .name = "slv_venus_throttle_cfg",
1352 .id = MSM8996_SLAVE_VENUS_THROTTLE_CFG,
1356 .qos.ap_owned = true,
1357 .qos.qos_mode = NOC_QOS_MODE_INVALID
1360 static struct qcom_icc_node slv_venus_cfg = {
1361 .name = "slv_venus_cfg",
1362 .id = MSM8996_SLAVE_VENUS_CFG,
1366 .qos.ap_owned = true,
1367 .qos.qos_mode = NOC_QOS_MODE_INVALID
1370 static struct qcom_icc_node slv_vmem_cfg = {
1371 .name = "slv_vmem_cfg",
1372 .id = MSM8996_SLAVE_VMEM_CFG,
1376 .qos.ap_owned = true,
1377 .qos.qos_mode = NOC_QOS_MODE_INVALID
1380 static struct qcom_icc_node slv_dsa_cfg = {
1381 .name = "slv_dsa_cfg",
1382 .id = MSM8996_SLAVE_DSA_CFG,
1386 .qos.ap_owned = true,
1387 .qos.qos_mode = NOC_QOS_MODE_INVALID
1390 static struct qcom_icc_node slv_mnoc_clocks_cfg = {
1391 .name = "slv_mnoc_clocks_cfg",
1392 .id = MSM8996_SLAVE_MMSS_CLK_CFG,
1396 .qos.ap_owned = true,
1397 .qos.qos_mode = NOC_QOS_MODE_INVALID
1400 static struct qcom_icc_node slv_dsa_mpu_cfg = {
1401 .name = "slv_dsa_mpu_cfg",
1402 .id = MSM8996_SLAVE_DSA_MPU_CFG,
1406 .qos.ap_owned = true,
1407 .qos.qos_mode = NOC_QOS_MODE_INVALID
1410 static struct qcom_icc_node slv_mnoc_mpu_cfg = {
1411 .name = "slv_mnoc_mpu_cfg",
1412 .id = MSM8996_SLAVE_MNOC_MPU_CFG,
1416 .qos.ap_owned = true,
1417 .qos.qos_mode = NOC_QOS_MODE_INVALID
1420 static struct qcom_icc_node slv_display_cfg = {
1421 .name = "slv_display_cfg",
1422 .id = MSM8996_SLAVE_DISPLAY_CFG,
1426 .qos.ap_owned = true,
1427 .qos.qos_mode = NOC_QOS_MODE_INVALID
1430 static struct qcom_icc_node slv_display_throttle_cfg = {
1431 .name = "slv_display_throttle_cfg",
1432 .id = MSM8996_SLAVE_DISPLAY_THROTTLE_CFG,
1436 .qos.ap_owned = true,
1437 .qos.qos_mode = NOC_QOS_MODE_INVALID
1440 static struct qcom_icc_node slv_camera_cfg = {
1441 .name = "slv_camera_cfg",
1442 .id = MSM8996_SLAVE_CAMERA_CFG,
1446 .qos.ap_owned = true,
1447 .qos.qos_mode = NOC_QOS_MODE_INVALID
1450 static struct qcom_icc_node slv_camera_throttle_cfg = {
1451 .name = "slv_camera_throttle_cfg",
1452 .id = MSM8996_SLAVE_CAMERA_THROTTLE_CFG,
1456 .qos.ap_owned = true,
1457 .qos.qos_mode = NOC_QOS_MODE_INVALID
1460 static struct qcom_icc_node slv_oxili_cfg = {
1461 .name = "slv_oxili_cfg",
1462 .id = MSM8996_SLAVE_GRAPHICS_3D_CFG,
1466 .qos.ap_owned = true,
1467 .qos.qos_mode = NOC_QOS_MODE_INVALID
1470 static struct qcom_icc_node slv_smmu_mdp_cfg = {
1471 .name = "slv_smmu_mdp_cfg",
1472 .id = MSM8996_SLAVE_SMMU_MDP_CFG,
1476 .qos.ap_owned = true,
1477 .qos.qos_mode = NOC_QOS_MODE_INVALID
1480 static struct qcom_icc_node slv_smmu_rot_cfg = {
1481 .name = "slv_smmu_rot_cfg",
1482 .id = MSM8996_SLAVE_SMMU_ROTATOR_CFG,
1486 .qos.ap_owned = true,
1487 .qos.qos_mode = NOC_QOS_MODE_INVALID
1490 static struct qcom_icc_node slv_smmu_venus_cfg = {
1491 .name = "slv_smmu_venus_cfg",
1492 .id = MSM8996_SLAVE_SMMU_VENUS_CFG,
1496 .qos.ap_owned = true,
1497 .qos.qos_mode = NOC_QOS_MODE_INVALID
1500 static struct qcom_icc_node slv_smmu_cpp_cfg = {
1501 .name = "slv_smmu_cpp_cfg",
1502 .id = MSM8996_SLAVE_SMMU_CPP_CFG,
1506 .qos.ap_owned = true,
1507 .qos.qos_mode = NOC_QOS_MODE_INVALID
1510 static struct qcom_icc_node slv_smmu_jpeg_cfg = {
1511 .name = "slv_smmu_jpeg_cfg",
1512 .id = MSM8996_SLAVE_SMMU_JPEG_CFG,
1516 .qos.ap_owned = true,
1517 .qos.qos_mode = NOC_QOS_MODE_INVALID
1520 static struct qcom_icc_node slv_smmu_vfe_cfg = {
1521 .name = "slv_smmu_vfe_cfg",
1522 .id = MSM8996_SLAVE_SMMU_VFE_CFG,
1526 .qos.ap_owned = true,
1527 .qos.qos_mode = NOC_QOS_MODE_INVALID
1530 static const u16 slv_mnoc_bimc_links[] = {
1531 MSM8996_MASTER_MNOC_BIMC
1534 static struct qcom_icc_node slv_mnoc_bimc = {
1535 .name = "slv_mnoc_bimc",
1536 .id = MSM8996_SLAVE_MNOC_BIMC,
1540 .qos.ap_owned = true,
1541 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1542 .num_links = ARRAY_SIZE(slv_mnoc_bimc_links),
1543 .links = slv_mnoc_bimc_links
1546 static struct qcom_icc_node slv_vmem = {
1548 .id = MSM8996_SLAVE_VMEM,
1552 .qos.ap_owned = true,
1553 .qos.qos_mode = NOC_QOS_MODE_INVALID
1556 static struct qcom_icc_node slv_srvc_mnoc = {
1557 .name = "slv_srvc_mnoc",
1558 .id = MSM8996_SLAVE_SERVICE_MNOC,
1562 .qos.ap_owned = true,
1563 .qos.qos_mode = NOC_QOS_MODE_INVALID
1566 static const u16 slv_pnoc_a1noc_links[] = {
1567 MSM8996_MASTER_PNOC_A1NOC
1570 static struct qcom_icc_node slv_pnoc_a1noc = {
1571 .name = "slv_pnoc_a1noc",
1572 .id = MSM8996_SLAVE_PNOC_A1NOC,
1576 .num_links = ARRAY_SIZE(slv_pnoc_a1noc_links),
1577 .links = slv_pnoc_a1noc_links
1580 static struct qcom_icc_node slv_usb_hs = {
1581 .name = "slv_usb_hs",
1582 .id = MSM8996_SLAVE_USB_HS,
1588 static struct qcom_icc_node slv_sdcc_2 = {
1589 .name = "slv_sdcc_2",
1590 .id = MSM8996_SLAVE_SDCC_2,
1596 static struct qcom_icc_node slv_sdcc_4 = {
1597 .name = "slv_sdcc_4",
1598 .id = MSM8996_SLAVE_SDCC_4,
1604 static struct qcom_icc_node slv_tsif = {
1606 .id = MSM8996_SLAVE_TSIF,
1612 static struct qcom_icc_node slv_blsp_2 = {
1613 .name = "slv_blsp_2",
1614 .id = MSM8996_SLAVE_BLSP_2,
1620 static struct qcom_icc_node slv_sdcc_1 = {
1621 .name = "slv_sdcc_1",
1622 .id = MSM8996_SLAVE_SDCC_1,
1628 static struct qcom_icc_node slv_blsp_1 = {
1629 .name = "slv_blsp_1",
1630 .id = MSM8996_SLAVE_BLSP_1,
1636 static struct qcom_icc_node slv_pdm = {
1638 .id = MSM8996_SLAVE_PDM,
1644 static struct qcom_icc_node slv_ahb2phy = {
1645 .name = "slv_ahb2phy",
1646 .id = MSM8996_SLAVE_AHB2PHY,
1650 .qos.ap_owned = true,
1651 .qos.qos_mode = NOC_QOS_MODE_INVALID
1654 static struct qcom_icc_node slv_hmss = {
1656 .id = MSM8996_SLAVE_APPSS,
1660 .qos.ap_owned = true,
1661 .qos.qos_mode = NOC_QOS_MODE_INVALID
1664 static struct qcom_icc_node slv_lpass = {
1665 .name = "slv_lpass",
1666 .id = MSM8996_SLAVE_LPASS,
1670 .qos.ap_owned = true,
1671 .qos.qos_mode = NOC_QOS_MODE_INVALID
1674 static struct qcom_icc_node slv_usb3 = {
1676 .id = MSM8996_SLAVE_USB3,
1680 .qos.ap_owned = true,
1681 .qos.qos_mode = NOC_QOS_MODE_INVALID
1684 static const u16 slv_snoc_bimc_links[] = {
1685 MSM8996_MASTER_SNOC_BIMC
1688 static struct qcom_icc_node slv_snoc_bimc = {
1689 .name = "slv_snoc_bimc",
1690 .id = MSM8996_SLAVE_SNOC_BIMC,
1694 .num_links = ARRAY_SIZE(slv_snoc_bimc_links),
1695 .links = slv_snoc_bimc_links
1698 static const u16 slv_snoc_cnoc_links[] = {
1699 MSM8996_MASTER_SNOC_CNOC
1702 static struct qcom_icc_node slv_snoc_cnoc = {
1703 .name = "slv_snoc_cnoc",
1704 .id = MSM8996_SLAVE_SNOC_CNOC,
1708 .num_links = ARRAY_SIZE(slv_snoc_cnoc_links),
1709 .links = slv_snoc_cnoc_links
1712 static struct qcom_icc_node slv_imem = {
1714 .id = MSM8996_SLAVE_OCIMEM,
1720 static struct qcom_icc_node slv_pimem = {
1721 .name = "slv_pimem",
1722 .id = MSM8996_SLAVE_PIMEM,
1728 static const u16 slv_snoc_vmem_links[] = {
1729 MSM8996_MASTER_SNOC_VMEM
1732 static struct qcom_icc_node slv_snoc_vmem = {
1733 .name = "slv_snoc_vmem",
1734 .id = MSM8996_SLAVE_SNOC_VMEM,
1738 .qos.ap_owned = true,
1739 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1740 .num_links = ARRAY_SIZE(slv_snoc_vmem_links),
1741 .links = slv_snoc_vmem_links
1744 static const u16 slv_snoc_pnoc_links[] = {
1745 MSM8996_MASTER_SNOC_PNOC
1748 static struct qcom_icc_node slv_snoc_pnoc = {
1749 .name = "slv_snoc_pnoc",
1750 .id = MSM8996_SLAVE_SNOC_PNOC,
1754 .num_links = ARRAY_SIZE(slv_snoc_pnoc_links),
1755 .links = slv_snoc_pnoc_links
1758 static struct qcom_icc_node slv_qdss_stm = {
1759 .name = "slv_qdss_stm",
1760 .id = MSM8996_SLAVE_QDSS_STM,
1766 static struct qcom_icc_node slv_pcie_0 = {
1767 .name = "slv_pcie_0",
1768 .id = MSM8996_SLAVE_PCIE_0,
1772 .qos.ap_owned = true,
1773 .qos.qos_mode = NOC_QOS_MODE_INVALID
1776 static struct qcom_icc_node slv_pcie_1 = {
1777 .name = "slv_pcie_1",
1778 .id = MSM8996_SLAVE_PCIE_1,
1782 .qos.ap_owned = true,
1783 .qos.qos_mode = NOC_QOS_MODE_INVALID
1786 static struct qcom_icc_node slv_pcie_2 = {
1787 .name = "slv_pcie_2",
1788 .id = MSM8996_SLAVE_PCIE_2,
1792 .qos.ap_owned = true,
1793 .qos.qos_mode = NOC_QOS_MODE_INVALID
1796 static struct qcom_icc_node slv_srvc_snoc = {
1797 .name = "slv_srvc_snoc",
1798 .id = MSM8996_SLAVE_SERVICE_SNOC,
1802 .qos.ap_owned = true,
1803 .qos.qos_mode = NOC_QOS_MODE_INVALID
1806 static struct qcom_icc_node * const a0noc_nodes[] = {
1807 [MASTER_PCIE_0] = &mas_pcie_0,
1808 [MASTER_PCIE_1] = &mas_pcie_1,
1809 [MASTER_PCIE_2] = &mas_pcie_2
1812 static const struct regmap_config msm8996_a0noc_regmap_config = {
1816 .max_register = 0x6000,
1820 static const struct qcom_icc_desc msm8996_a0noc = {
1821 .type = QCOM_ICC_NOC,
1822 .nodes = a0noc_nodes,
1823 .num_nodes = ARRAY_SIZE(a0noc_nodes),
1824 .clocks = bus_a0noc_clocks,
1825 .num_clocks = ARRAY_SIZE(bus_a0noc_clocks),
1826 .regmap_cfg = &msm8996_a0noc_regmap_config
1829 static struct qcom_icc_node * const a1noc_nodes[] = {
1830 [MASTER_CNOC_A1NOC] = &mas_cnoc_a1noc,
1831 [MASTER_CRYPTO_CORE0] = &mas_crypto_c0,
1832 [MASTER_PNOC_A1NOC] = &mas_pnoc_a1noc
1835 static const struct regmap_config msm8996_a1noc_regmap_config = {
1839 .max_register = 0x5000,
1843 static const struct qcom_icc_desc msm8996_a1noc = {
1844 .type = QCOM_ICC_NOC,
1845 .nodes = a1noc_nodes,
1846 .num_nodes = ARRAY_SIZE(a1noc_nodes),
1847 .regmap_cfg = &msm8996_a1noc_regmap_config
1850 static struct qcom_icc_node * const a2noc_nodes[] = {
1851 [MASTER_USB3] = &mas_usb3,
1852 [MASTER_IPA] = &mas_ipa,
1853 [MASTER_UFS] = &mas_ufs
1856 static const struct regmap_config msm8996_a2noc_regmap_config = {
1860 .max_register = 0x7000,
1864 static const struct qcom_icc_desc msm8996_a2noc = {
1865 .type = QCOM_ICC_NOC,
1866 .nodes = a2noc_nodes,
1867 .num_nodes = ARRAY_SIZE(a2noc_nodes),
1868 .clocks = bus_a2noc_clocks,
1869 .num_clocks = ARRAY_SIZE(bus_a2noc_clocks),
1870 .regmap_cfg = &msm8996_a2noc_regmap_config
1873 static struct qcom_icc_node * const bimc_nodes[] = {
1874 [MASTER_AMPSS_M0] = &mas_apps_proc,
1875 [MASTER_GRAPHICS_3D] = &mas_oxili,
1876 [MASTER_MNOC_BIMC] = &mas_mnoc_bimc,
1877 [MASTER_SNOC_BIMC] = &mas_snoc_bimc,
1878 [SLAVE_EBI_CH0] = &slv_ebi,
1879 [SLAVE_HMSS_L3] = &slv_hmss_l3,
1880 [SLAVE_BIMC_SNOC_0] = &slv_bimc_snoc_0,
1881 [SLAVE_BIMC_SNOC_1] = &slv_bimc_snoc_1
1884 static const struct regmap_config msm8996_bimc_regmap_config = {
1888 .max_register = 0x5a000,
1892 static const struct qcom_icc_desc msm8996_bimc = {
1893 .type = QCOM_ICC_BIMC,
1894 .nodes = bimc_nodes,
1895 .num_nodes = ARRAY_SIZE(bimc_nodes),
1896 .regmap_cfg = &msm8996_bimc_regmap_config
1899 static struct qcom_icc_node * const cnoc_nodes[] = {
1900 [MASTER_SNOC_CNOC] = &mas_snoc_cnoc,
1901 [MASTER_QDSS_DAP] = &mas_qdss_dap,
1902 [SLAVE_CNOC_A1NOC] = &slv_cnoc_a1noc,
1903 [SLAVE_CLK_CTL] = &slv_clk_ctl,
1904 [SLAVE_TCSR] = &slv_tcsr,
1905 [SLAVE_TLMM] = &slv_tlmm,
1906 [SLAVE_CRYPTO_0_CFG] = &slv_crypto0_cfg,
1907 [SLAVE_MPM] = &slv_mpm,
1908 [SLAVE_PIMEM_CFG] = &slv_pimem_cfg,
1909 [SLAVE_IMEM_CFG] = &slv_imem_cfg,
1910 [SLAVE_MESSAGE_RAM] = &slv_message_ram,
1911 [SLAVE_BIMC_CFG] = &slv_bimc_cfg,
1912 [SLAVE_PMIC_ARB] = &slv_pmic_arb,
1913 [SLAVE_PRNG] = &slv_prng,
1914 [SLAVE_DCC_CFG] = &slv_dcc_cfg,
1915 [SLAVE_RBCPR_MX] = &slv_rbcpr_mx,
1916 [SLAVE_QDSS_CFG] = &slv_qdss_cfg,
1917 [SLAVE_RBCPR_CX] = &slv_rbcpr_cx,
1918 [SLAVE_QDSS_RBCPR_APU] = &slv_cpu_apu_cfg,
1919 [SLAVE_CNOC_MNOC_CFG] = &slv_cnoc_mnoc_cfg,
1920 [SLAVE_SNOC_CFG] = &slv_snoc_cfg,
1921 [SLAVE_SNOC_MPU_CFG] = &slv_snoc_mpu_cfg,
1922 [SLAVE_EBI1_PHY_CFG] = &slv_ebi1_phy_cfg,
1923 [SLAVE_A0NOC_CFG] = &slv_a0noc_cfg,
1924 [SLAVE_PCIE_1_CFG] = &slv_pcie_1_cfg,
1925 [SLAVE_PCIE_2_CFG] = &slv_pcie_2_cfg,
1926 [SLAVE_PCIE_0_CFG] = &slv_pcie_0_cfg,
1927 [SLAVE_PCIE20_AHB2PHY] = &slv_pcie20_ahb2phy,
1928 [SLAVE_A0NOC_MPU_CFG] = &slv_a0noc_mpu_cfg,
1929 [SLAVE_UFS_CFG] = &slv_ufs_cfg,
1930 [SLAVE_A1NOC_CFG] = &slv_a1noc_cfg,
1931 [SLAVE_A1NOC_MPU_CFG] = &slv_a1noc_mpu_cfg,
1932 [SLAVE_A2NOC_CFG] = &slv_a2noc_cfg,
1933 [SLAVE_A2NOC_MPU_CFG] = &slv_a2noc_mpu_cfg,
1934 [SLAVE_SSC_CFG] = &slv_ssc_cfg,
1935 [SLAVE_A0NOC_SMMU_CFG] = &slv_a0noc_smmu_cfg,
1936 [SLAVE_A1NOC_SMMU_CFG] = &slv_a1noc_smmu_cfg,
1937 [SLAVE_A2NOC_SMMU_CFG] = &slv_a2noc_smmu_cfg,
1938 [SLAVE_LPASS_SMMU_CFG] = &slv_lpass_smmu_cfg,
1939 [SLAVE_CNOC_MNOC_MMSS_CFG] = &slv_cnoc_mnoc_mmss_cfg
1942 static const struct regmap_config msm8996_cnoc_regmap_config = {
1946 .max_register = 0x1000,
1950 static const struct qcom_icc_desc msm8996_cnoc = {
1951 .type = QCOM_ICC_NOC,
1952 .nodes = cnoc_nodes,
1953 .num_nodes = ARRAY_SIZE(cnoc_nodes),
1954 .regmap_cfg = &msm8996_cnoc_regmap_config
1957 static struct qcom_icc_node * const mnoc_nodes[] = {
1958 [MASTER_CNOC_MNOC_CFG] = &mas_cnoc_mnoc_cfg,
1959 [MASTER_CPP] = &mas_cpp,
1960 [MASTER_JPEG] = &mas_jpeg,
1961 [MASTER_MDP_PORT0] = &mas_mdp_p0,
1962 [MASTER_MDP_PORT1] = &mas_mdp_p1,
1963 [MASTER_ROTATOR] = &mas_rotator,
1964 [MASTER_VIDEO_P0] = &mas_venus,
1965 [MASTER_VFE] = &mas_vfe,
1966 [MASTER_SNOC_VMEM] = &mas_snoc_vmem,
1967 [MASTER_VIDEO_P0_OCMEM] = &mas_venus_vmem,
1968 [MASTER_CNOC_MNOC_MMSS_CFG] = &mas_cnoc_mnoc_mmss_cfg,
1969 [SLAVE_MNOC_BIMC] = &slv_mnoc_bimc,
1970 [SLAVE_VMEM] = &slv_vmem,
1971 [SLAVE_SERVICE_MNOC] = &slv_srvc_mnoc,
1972 [SLAVE_MMAGIC_CFG] = &slv_mmagic_cfg,
1973 [SLAVE_CPR_CFG] = &slv_cpr_cfg,
1974 [SLAVE_MISC_CFG] = &slv_misc_cfg,
1975 [SLAVE_VENUS_THROTTLE_CFG] = &slv_venus_throttle_cfg,
1976 [SLAVE_VENUS_CFG] = &slv_venus_cfg,
1977 [SLAVE_VMEM_CFG] = &slv_vmem_cfg,
1978 [SLAVE_DSA_CFG] = &slv_dsa_cfg,
1979 [SLAVE_MMSS_CLK_CFG] = &slv_mnoc_clocks_cfg,
1980 [SLAVE_DSA_MPU_CFG] = &slv_dsa_mpu_cfg,
1981 [SLAVE_MNOC_MPU_CFG] = &slv_mnoc_mpu_cfg,
1982 [SLAVE_DISPLAY_CFG] = &slv_display_cfg,
1983 [SLAVE_DISPLAY_THROTTLE_CFG] = &slv_display_throttle_cfg,
1984 [SLAVE_CAMERA_CFG] = &slv_camera_cfg,
1985 [SLAVE_CAMERA_THROTTLE_CFG] = &slv_camera_throttle_cfg,
1986 [SLAVE_GRAPHICS_3D_CFG] = &slv_oxili_cfg,
1987 [SLAVE_SMMU_MDP_CFG] = &slv_smmu_mdp_cfg,
1988 [SLAVE_SMMU_ROT_CFG] = &slv_smmu_rot_cfg,
1989 [SLAVE_SMMU_VENUS_CFG] = &slv_smmu_venus_cfg,
1990 [SLAVE_SMMU_CPP_CFG] = &slv_smmu_cpp_cfg,
1991 [SLAVE_SMMU_JPEG_CFG] = &slv_smmu_jpeg_cfg,
1992 [SLAVE_SMMU_VFE_CFG] = &slv_smmu_vfe_cfg
1995 static const struct regmap_config msm8996_mnoc_regmap_config = {
1999 .max_register = 0x1c000,
2003 static const struct qcom_icc_desc msm8996_mnoc = {
2004 .type = QCOM_ICC_NOC,
2005 .nodes = mnoc_nodes,
2006 .num_nodes = ARRAY_SIZE(mnoc_nodes),
2007 .clocks = bus_mm_clocks,
2008 .num_clocks = ARRAY_SIZE(bus_mm_clocks),
2009 .regmap_cfg = &msm8996_mnoc_regmap_config
2012 static struct qcom_icc_node * const pnoc_nodes[] = {
2013 [MASTER_SNOC_PNOC] = &mas_snoc_pnoc,
2014 [MASTER_SDCC_1] = &mas_sdcc_1,
2015 [MASTER_SDCC_2] = &mas_sdcc_2,
2016 [MASTER_SDCC_4] = &mas_sdcc_4,
2017 [MASTER_USB_HS] = &mas_usb_hs,
2018 [MASTER_BLSP_1] = &mas_blsp_1,
2019 [MASTER_BLSP_2] = &mas_blsp_2,
2020 [MASTER_TSIF] = &mas_tsif,
2021 [SLAVE_PNOC_A1NOC] = &slv_pnoc_a1noc,
2022 [SLAVE_USB_HS] = &slv_usb_hs,
2023 [SLAVE_SDCC_2] = &slv_sdcc_2,
2024 [SLAVE_SDCC_4] = &slv_sdcc_4,
2025 [SLAVE_TSIF] = &slv_tsif,
2026 [SLAVE_BLSP_2] = &slv_blsp_2,
2027 [SLAVE_SDCC_1] = &slv_sdcc_1,
2028 [SLAVE_BLSP_1] = &slv_blsp_1,
2029 [SLAVE_PDM] = &slv_pdm,
2030 [SLAVE_AHB2PHY] = &slv_ahb2phy
2033 static const struct regmap_config msm8996_pnoc_regmap_config = {
2037 .max_register = 0x3000,
2041 static const struct qcom_icc_desc msm8996_pnoc = {
2042 .type = QCOM_ICC_NOC,
2043 .nodes = pnoc_nodes,
2044 .num_nodes = ARRAY_SIZE(pnoc_nodes),
2045 .regmap_cfg = &msm8996_pnoc_regmap_config
2048 static struct qcom_icc_node * const snoc_nodes[] = {
2049 [MASTER_HMSS] = &mas_hmss,
2050 [MASTER_QDSS_BAM] = &mas_qdss_bam,
2051 [MASTER_SNOC_CFG] = &mas_snoc_cfg,
2052 [MASTER_BIMC_SNOC_0] = &mas_bimc_snoc_0,
2053 [MASTER_BIMC_SNOC_1] = &mas_bimc_snoc_1,
2054 [MASTER_A0NOC_SNOC] = &mas_a0noc_snoc,
2055 [MASTER_A1NOC_SNOC] = &mas_a1noc_snoc,
2056 [MASTER_A2NOC_SNOC] = &mas_a2noc_snoc,
2057 [MASTER_QDSS_ETR] = &mas_qdss_etr,
2058 [SLAVE_A0NOC_SNOC] = &slv_a0noc_snoc,
2059 [SLAVE_A1NOC_SNOC] = &slv_a1noc_snoc,
2060 [SLAVE_A2NOC_SNOC] = &slv_a2noc_snoc,
2061 [SLAVE_HMSS] = &slv_hmss,
2062 [SLAVE_LPASS] = &slv_lpass,
2063 [SLAVE_USB3] = &slv_usb3,
2064 [SLAVE_SNOC_BIMC] = &slv_snoc_bimc,
2065 [SLAVE_SNOC_CNOC] = &slv_snoc_cnoc,
2066 [SLAVE_IMEM] = &slv_imem,
2067 [SLAVE_PIMEM] = &slv_pimem,
2068 [SLAVE_SNOC_VMEM] = &slv_snoc_vmem,
2069 [SLAVE_SNOC_PNOC] = &slv_snoc_pnoc,
2070 [SLAVE_QDSS_STM] = &slv_qdss_stm,
2071 [SLAVE_PCIE_0] = &slv_pcie_0,
2072 [SLAVE_PCIE_1] = &slv_pcie_1,
2073 [SLAVE_PCIE_2] = &slv_pcie_2,
2074 [SLAVE_SERVICE_SNOC] = &slv_srvc_snoc
2077 static const struct regmap_config msm8996_snoc_regmap_config = {
2081 .max_register = 0x20000,
2085 static const struct qcom_icc_desc msm8996_snoc = {
2086 .type = QCOM_ICC_NOC,
2087 .nodes = snoc_nodes,
2088 .num_nodes = ARRAY_SIZE(snoc_nodes),
2089 .regmap_cfg = &msm8996_snoc_regmap_config
2092 static const struct of_device_id qnoc_of_match[] = {
2093 { .compatible = "qcom,msm8996-a0noc", .data = &msm8996_a0noc},
2094 { .compatible = "qcom,msm8996-a1noc", .data = &msm8996_a1noc},
2095 { .compatible = "qcom,msm8996-a2noc", .data = &msm8996_a2noc},
2096 { .compatible = "qcom,msm8996-bimc", .data = &msm8996_bimc},
2097 { .compatible = "qcom,msm8996-cnoc", .data = &msm8996_cnoc},
2098 { .compatible = "qcom,msm8996-mnoc", .data = &msm8996_mnoc},
2099 { .compatible = "qcom,msm8996-pnoc", .data = &msm8996_pnoc},
2100 { .compatible = "qcom,msm8996-snoc", .data = &msm8996_snoc},
2103 MODULE_DEVICE_TABLE(of, qnoc_of_match);
2105 static struct platform_driver qnoc_driver = {
2106 .probe = qnoc_probe,
2107 .remove = qnoc_remove,
2109 .name = "qnoc-msm8996",
2110 .of_match_table = qnoc_of_match,
2111 .sync_state = icc_sync_state,
2114 module_platform_driver(qnoc_driver);
2117 MODULE_DESCRIPTION("Qualcomm MSM8996 NoC driver");
2118 MODULE_LICENSE("GPL v2");