1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2022, The Linux Foundation. All rights reserved.
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>
14 #include "bcm-voter.h"
18 static struct qcom_icc_node qhm_a1noc_cfg = {
19 .name = "qhm_a1noc_cfg",
20 .id = SDM670_MASTER_A1NOC_CFG,
24 .links = { SDM670_SLAVE_SERVICE_A1NOC },
27 static struct qcom_icc_node qhm_qup1 = {
29 .id = SDM670_MASTER_BLSP_1,
33 .links = { SDM670_SLAVE_A1NOC_SNOC },
36 static struct qcom_icc_node qhm_tsif = {
38 .id = SDM670_MASTER_TSIF,
42 .links = { SDM670_SLAVE_A1NOC_SNOC },
45 static struct qcom_icc_node xm_emmc = {
47 .id = SDM670_MASTER_EMMC,
51 .links = { SDM670_SLAVE_A1NOC_SNOC },
54 static struct qcom_icc_node xm_sdc2 = {
56 .id = SDM670_MASTER_SDCC_2,
60 .links = { SDM670_SLAVE_A1NOC_SNOC },
63 static struct qcom_icc_node xm_sdc4 = {
65 .id = SDM670_MASTER_SDCC_4,
69 .links = { SDM670_SLAVE_A1NOC_SNOC },
72 static struct qcom_icc_node xm_ufs_mem = {
74 .id = SDM670_MASTER_UFS_MEM,
78 .links = { SDM670_SLAVE_A1NOC_SNOC },
81 static struct qcom_icc_node qhm_a2noc_cfg = {
82 .name = "qhm_a2noc_cfg",
83 .id = SDM670_MASTER_A2NOC_CFG,
87 .links = { SDM670_SLAVE_SERVICE_A2NOC },
90 static struct qcom_icc_node qhm_qdss_bam = {
91 .name = "qhm_qdss_bam",
92 .id = SDM670_MASTER_QDSS_BAM,
96 .links = { SDM670_SLAVE_A2NOC_SNOC },
99 static struct qcom_icc_node qhm_qup2 = {
101 .id = SDM670_MASTER_BLSP_2,
105 .links = { SDM670_SLAVE_A2NOC_SNOC },
108 static struct qcom_icc_node qnm_cnoc = {
110 .id = SDM670_MASTER_CNOC_A2NOC,
114 .links = { SDM670_SLAVE_A2NOC_SNOC },
117 static struct qcom_icc_node qxm_crypto = {
118 .name = "qxm_crypto",
119 .id = SDM670_MASTER_CRYPTO_CORE_0,
123 .links = { SDM670_SLAVE_A2NOC_SNOC },
126 static struct qcom_icc_node qxm_ipa = {
128 .id = SDM670_MASTER_IPA,
132 .links = { SDM670_SLAVE_A2NOC_SNOC },
135 static struct qcom_icc_node xm_qdss_etr = {
136 .name = "xm_qdss_etr",
137 .id = SDM670_MASTER_QDSS_ETR,
141 .links = { SDM670_SLAVE_A2NOC_SNOC },
144 static struct qcom_icc_node xm_usb3_0 = {
146 .id = SDM670_MASTER_USB3,
150 .links = { SDM670_SLAVE_A2NOC_SNOC },
153 static struct qcom_icc_node qxm_camnoc_hf0_uncomp = {
154 .name = "qxm_camnoc_hf0_uncomp",
155 .id = SDM670_MASTER_CAMNOC_HF0_UNCOMP,
159 .links = { SDM670_SLAVE_CAMNOC_UNCOMP },
162 static struct qcom_icc_node qxm_camnoc_hf1_uncomp = {
163 .name = "qxm_camnoc_hf1_uncomp",
164 .id = SDM670_MASTER_CAMNOC_HF1_UNCOMP,
168 .links = { SDM670_SLAVE_CAMNOC_UNCOMP },
171 static struct qcom_icc_node qxm_camnoc_sf_uncomp = {
172 .name = "qxm_camnoc_sf_uncomp",
173 .id = SDM670_MASTER_CAMNOC_SF_UNCOMP,
177 .links = { SDM670_SLAVE_CAMNOC_UNCOMP },
180 static struct qcom_icc_node qhm_spdm = {
182 .id = SDM670_MASTER_SPDM,
186 .links = { SDM670_SLAVE_CNOC_A2NOC },
189 static struct qcom_icc_node qnm_snoc = {
191 .id = SDM670_MASTER_SNOC_CNOC,
195 .links = { SDM670_SLAVE_TLMM_SOUTH,
196 SDM670_SLAVE_CAMERA_CFG,
199 SDM670_SLAVE_CNOC_MNOC_CFG,
200 SDM670_SLAVE_UFS_MEM_CFG,
203 SDM670_SLAVE_A2NOC_CFG,
204 SDM670_SLAVE_QDSS_CFG,
205 SDM670_SLAVE_DISPLAY_CFG,
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,
214 SDM670_SLAVE_CDSP_CFG,
217 SDM670_SLAVE_SERVICE_CNOC,
219 SDM670_SLAVE_IPA_CFG,
220 SDM670_SLAVE_RBCPR_CX_CFG,
221 SDM670_SLAVE_A1NOC_CFG,
224 SDM670_SLAVE_VSENSE_CTRL_CFG,
225 SDM670_SLAVE_EMMC_CFG,
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
236 static struct qcom_icc_node qhm_cnoc = {
238 .id = SDM670_MASTER_CNOC_DC_NOC,
242 .links = { SDM670_SLAVE_MEM_NOC_CFG,
243 SDM670_SLAVE_LLCC_CFG
247 static struct qcom_icc_node acm_l3 = {
249 .id = SDM670_MASTER_AMPSS_M0,
253 .links = { SDM670_SLAVE_SERVICE_GNOC,
254 SDM670_SLAVE_GNOC_SNOC,
255 SDM670_SLAVE_GNOC_MEM_NOC
259 static struct qcom_icc_node pm_gnoc_cfg = {
260 .name = "pm_gnoc_cfg",
261 .id = SDM670_MASTER_GNOC_CFG,
265 .links = { SDM670_SLAVE_SERVICE_GNOC },
268 static struct qcom_icc_node llcc_mc = {
270 .id = SDM670_MASTER_LLCC,
274 .links = { SDM670_SLAVE_EBI_CH0 },
277 static struct qcom_icc_node acm_tcu = {
279 .id = SDM670_MASTER_TCU_0,
283 .links = { SDM670_SLAVE_MEM_NOC_GNOC,
285 SDM670_SLAVE_MEM_NOC_SNOC
289 static struct qcom_icc_node qhm_memnoc_cfg = {
290 .name = "qhm_memnoc_cfg",
291 .id = SDM670_MASTER_MEM_NOC_CFG,
295 .links = { SDM670_SLAVE_SERVICE_MEM_NOC,
296 SDM670_SLAVE_MSS_PROC_MS_MPU_CFG
300 static struct qcom_icc_node qnm_apps = {
302 .id = SDM670_MASTER_GNOC_MEM_NOC,
306 .links = { SDM670_SLAVE_LLCC },
309 static struct qcom_icc_node qnm_mnoc_hf = {
310 .name = "qnm_mnoc_hf",
311 .id = SDM670_MASTER_MNOC_HF_MEM_NOC,
315 .links = { SDM670_SLAVE_LLCC },
318 static struct qcom_icc_node qnm_mnoc_sf = {
319 .name = "qnm_mnoc_sf",
320 .id = SDM670_MASTER_MNOC_SF_MEM_NOC,
324 .links = { SDM670_SLAVE_MEM_NOC_GNOC,
326 SDM670_SLAVE_MEM_NOC_SNOC
330 static struct qcom_icc_node qnm_snoc_gc = {
331 .name = "qnm_snoc_gc",
332 .id = SDM670_MASTER_SNOC_GC_MEM_NOC,
336 .links = { SDM670_SLAVE_LLCC },
339 static struct qcom_icc_node qnm_snoc_sf = {
340 .name = "qnm_snoc_sf",
341 .id = SDM670_MASTER_SNOC_SF_MEM_NOC,
345 .links = { SDM670_SLAVE_MEM_NOC_GNOC,
350 static struct qcom_icc_node qxm_gpu = {
352 .id = SDM670_MASTER_GRAPHICS_3D,
356 .links = { SDM670_SLAVE_MEM_NOC_GNOC,
358 SDM670_SLAVE_MEM_NOC_SNOC
362 static struct qcom_icc_node qhm_mnoc_cfg = {
363 .name = "qhm_mnoc_cfg",
364 .id = SDM670_MASTER_CNOC_MNOC_CFG,
368 .links = { SDM670_SLAVE_SERVICE_MNOC },
371 static struct qcom_icc_node qxm_camnoc_hf0 = {
372 .name = "qxm_camnoc_hf0",
373 .id = SDM670_MASTER_CAMNOC_HF0,
377 .links = { SDM670_SLAVE_MNOC_HF_MEM_NOC },
380 static struct qcom_icc_node qxm_camnoc_hf1 = {
381 .name = "qxm_camnoc_hf1",
382 .id = SDM670_MASTER_CAMNOC_HF1,
386 .links = { SDM670_SLAVE_MNOC_HF_MEM_NOC },
389 static struct qcom_icc_node qxm_camnoc_sf = {
390 .name = "qxm_camnoc_sf",
391 .id = SDM670_MASTER_CAMNOC_SF,
395 .links = { SDM670_SLAVE_MNOC_SF_MEM_NOC },
398 static struct qcom_icc_node qxm_mdp0 = {
400 .id = SDM670_MASTER_MDP_PORT0,
404 .links = { SDM670_SLAVE_MNOC_HF_MEM_NOC },
407 static struct qcom_icc_node qxm_mdp1 = {
409 .id = SDM670_MASTER_MDP_PORT1,
413 .links = { SDM670_SLAVE_MNOC_HF_MEM_NOC },
416 static struct qcom_icc_node qxm_rot = {
418 .id = SDM670_MASTER_ROTATOR,
422 .links = { SDM670_SLAVE_MNOC_SF_MEM_NOC },
425 static struct qcom_icc_node qxm_venus0 = {
426 .name = "qxm_venus0",
427 .id = SDM670_MASTER_VIDEO_P0,
431 .links = { SDM670_SLAVE_MNOC_SF_MEM_NOC },
434 static struct qcom_icc_node qxm_venus1 = {
435 .name = "qxm_venus1",
436 .id = SDM670_MASTER_VIDEO_P1,
440 .links = { SDM670_SLAVE_MNOC_SF_MEM_NOC },
443 static struct qcom_icc_node qxm_venus_arm9 = {
444 .name = "qxm_venus_arm9",
445 .id = SDM670_MASTER_VIDEO_PROC,
449 .links = { SDM670_SLAVE_MNOC_SF_MEM_NOC },
452 static struct qcom_icc_node qhm_snoc_cfg = {
453 .name = "qhm_snoc_cfg",
454 .id = SDM670_MASTER_SNOC_CFG,
458 .links = { SDM670_SLAVE_SERVICE_SNOC },
461 static struct qcom_icc_node qnm_aggre1_noc = {
462 .name = "qnm_aggre1_noc",
463 .id = SDM670_MASTER_A1NOC_SNOC,
467 .links = { SDM670_SLAVE_PIMEM,
468 SDM670_SLAVE_SNOC_MEM_NOC_SF,
471 SDM670_SLAVE_SNOC_CNOC,
472 SDM670_SLAVE_QDSS_STM
476 static struct qcom_icc_node qnm_aggre2_noc = {
477 .name = "qnm_aggre2_noc",
478 .id = SDM670_MASTER_A2NOC_SNOC,
482 .links = { SDM670_SLAVE_PIMEM,
483 SDM670_SLAVE_SNOC_MEM_NOC_SF,
486 SDM670_SLAVE_SNOC_CNOC,
488 SDM670_SLAVE_QDSS_STM
492 static struct qcom_icc_node qnm_gladiator_sodv = {
493 .name = "qnm_gladiator_sodv",
494 .id = SDM670_MASTER_GNOC_SNOC,
498 .links = { SDM670_SLAVE_PIMEM,
501 SDM670_SLAVE_SNOC_CNOC,
503 SDM670_SLAVE_QDSS_STM
507 static struct qcom_icc_node qnm_memnoc = {
508 .name = "qnm_memnoc",
509 .id = SDM670_MASTER_MEM_NOC_SNOC,
513 .links = { SDM670_SLAVE_OCIMEM,
516 SDM670_SLAVE_SNOC_CNOC,
517 SDM670_SLAVE_QDSS_STM
521 static struct qcom_icc_node qxm_pimem = {
523 .id = SDM670_MASTER_PIMEM,
527 .links = { SDM670_SLAVE_OCIMEM,
528 SDM670_SLAVE_SNOC_MEM_NOC_GC
532 static struct qcom_icc_node xm_gic = {
534 .id = SDM670_MASTER_GIC,
538 .links = { SDM670_SLAVE_OCIMEM,
539 SDM670_SLAVE_SNOC_MEM_NOC_GC
543 static struct qcom_icc_node qns_a1noc_snoc = {
544 .name = "qns_a1noc_snoc",
545 .id = SDM670_SLAVE_A1NOC_SNOC,
549 .links = { SDM670_MASTER_A1NOC_SNOC },
552 static struct qcom_icc_node srvc_aggre1_noc = {
553 .name = "srvc_aggre1_noc",
554 .id = SDM670_SLAVE_SERVICE_A1NOC,
559 static struct qcom_icc_node qns_a2noc_snoc = {
560 .name = "qns_a2noc_snoc",
561 .id = SDM670_SLAVE_A2NOC_SNOC,
565 .links = { SDM670_MASTER_A2NOC_SNOC },
568 static struct qcom_icc_node srvc_aggre2_noc = {
569 .name = "srvc_aggre2_noc",
570 .id = SDM670_SLAVE_SERVICE_A2NOC,
575 static struct qcom_icc_node qns_camnoc_uncomp = {
576 .name = "qns_camnoc_uncomp",
577 .id = SDM670_SLAVE_CAMNOC_UNCOMP,
582 static struct qcom_icc_node qhs_a1_noc_cfg = {
583 .name = "qhs_a1_noc_cfg",
584 .id = SDM670_SLAVE_A1NOC_CFG,
588 .links = { SDM670_MASTER_A1NOC_CFG },
591 static struct qcom_icc_node qhs_a2_noc_cfg = {
592 .name = "qhs_a2_noc_cfg",
593 .id = SDM670_SLAVE_A2NOC_CFG,
597 .links = { SDM670_MASTER_A2NOC_CFG },
600 static struct qcom_icc_node qhs_aop = {
602 .id = SDM670_SLAVE_AOP,
607 static struct qcom_icc_node qhs_aoss = {
609 .id = SDM670_SLAVE_AOSS,
614 static struct qcom_icc_node qhs_camera_cfg = {
615 .name = "qhs_camera_cfg",
616 .id = SDM670_SLAVE_CAMERA_CFG,
621 static struct qcom_icc_node qhs_clk_ctl = {
622 .name = "qhs_clk_ctl",
623 .id = SDM670_SLAVE_CLK_CTL,
628 static struct qcom_icc_node qhs_compute_dsp_cfg = {
629 .name = "qhs_compute_dsp_cfg",
630 .id = SDM670_SLAVE_CDSP_CFG,
635 static struct qcom_icc_node qhs_cpr_cx = {
636 .name = "qhs_cpr_cx",
637 .id = SDM670_SLAVE_RBCPR_CX_CFG,
642 static struct qcom_icc_node qhs_crypto0_cfg = {
643 .name = "qhs_crypto0_cfg",
644 .id = SDM670_SLAVE_CRYPTO_0_CFG,
649 static struct qcom_icc_node qhs_dcc_cfg = {
650 .name = "qhs_dcc_cfg",
651 .id = SDM670_SLAVE_DCC_CFG,
655 .links = { SDM670_MASTER_CNOC_DC_NOC },
658 static struct qcom_icc_node qhs_ddrss_cfg = {
659 .name = "qhs_ddrss_cfg",
660 .id = SDM670_SLAVE_CNOC_DDRSS,
665 static struct qcom_icc_node qhs_display_cfg = {
666 .name = "qhs_display_cfg",
667 .id = SDM670_SLAVE_DISPLAY_CFG,
672 static struct qcom_icc_node qhs_emmc_cfg = {
673 .name = "qhs_emmc_cfg",
674 .id = SDM670_SLAVE_EMMC_CFG,
679 static struct qcom_icc_node qhs_glm = {
681 .id = SDM670_SLAVE_GLM,
686 static struct qcom_icc_node qhs_gpuss_cfg = {
687 .name = "qhs_gpuss_cfg",
688 .id = SDM670_SLAVE_GRAPHICS_3D_CFG,
693 static struct qcom_icc_node qhs_imem_cfg = {
694 .name = "qhs_imem_cfg",
695 .id = SDM670_SLAVE_IMEM_CFG,
700 static struct qcom_icc_node qhs_ipa = {
702 .id = SDM670_SLAVE_IPA_CFG,
707 static struct qcom_icc_node qhs_mnoc_cfg = {
708 .name = "qhs_mnoc_cfg",
709 .id = SDM670_SLAVE_CNOC_MNOC_CFG,
713 .links = { SDM670_MASTER_CNOC_MNOC_CFG },
716 static struct qcom_icc_node qhs_pdm = {
718 .id = SDM670_SLAVE_PDM,
723 static struct qcom_icc_node qhs_phy_refgen_south = {
724 .name = "qhs_phy_refgen_south",
725 .id = SDM670_SLAVE_SOUTH_PHY_CFG,
730 static struct qcom_icc_node qhs_pimem_cfg = {
731 .name = "qhs_pimem_cfg",
732 .id = SDM670_SLAVE_PIMEM_CFG,
737 static struct qcom_icc_node qhs_prng = {
739 .id = SDM670_SLAVE_PRNG,
744 static struct qcom_icc_node qhs_qdss_cfg = {
745 .name = "qhs_qdss_cfg",
746 .id = SDM670_SLAVE_QDSS_CFG,
751 static struct qcom_icc_node qhs_qupv3_north = {
752 .name = "qhs_qupv3_north",
753 .id = SDM670_SLAVE_BLSP_2,
758 static struct qcom_icc_node qhs_qupv3_south = {
759 .name = "qhs_qupv3_south",
760 .id = SDM670_SLAVE_BLSP_1,
765 static struct qcom_icc_node qhs_sdc2 = {
767 .id = SDM670_SLAVE_SDCC_2,
772 static struct qcom_icc_node qhs_sdc4 = {
774 .id = SDM670_SLAVE_SDCC_4,
779 static struct qcom_icc_node qhs_snoc_cfg = {
780 .name = "qhs_snoc_cfg",
781 .id = SDM670_SLAVE_SNOC_CFG,
785 .links = { SDM670_MASTER_SNOC_CFG },
788 static struct qcom_icc_node qhs_spdm = {
790 .id = SDM670_SLAVE_SPDM_WRAPPER,
795 static struct qcom_icc_node qhs_tcsr = {
797 .id = SDM670_SLAVE_TCSR,
802 static struct qcom_icc_node qhs_tlmm_north = {
803 .name = "qhs_tlmm_north",
804 .id = SDM670_SLAVE_TLMM_NORTH,
809 static struct qcom_icc_node qhs_tlmm_south = {
810 .name = "qhs_tlmm_south",
811 .id = SDM670_SLAVE_TLMM_SOUTH,
816 static struct qcom_icc_node qhs_tsif = {
818 .id = SDM670_SLAVE_TSIF,
823 static struct qcom_icc_node qhs_ufs_mem_cfg = {
824 .name = "qhs_ufs_mem_cfg",
825 .id = SDM670_SLAVE_UFS_MEM_CFG,
830 static struct qcom_icc_node qhs_usb3_0 = {
831 .name = "qhs_usb3_0",
832 .id = SDM670_SLAVE_USB3,
837 static struct qcom_icc_node qhs_venus_cfg = {
838 .name = "qhs_venus_cfg",
839 .id = SDM670_SLAVE_VENUS_CFG,
844 static struct qcom_icc_node qhs_vsense_ctrl_cfg = {
845 .name = "qhs_vsense_ctrl_cfg",
846 .id = SDM670_SLAVE_VSENSE_CTRL_CFG,
851 static struct qcom_icc_node qns_cnoc_a2noc = {
852 .name = "qns_cnoc_a2noc",
853 .id = SDM670_SLAVE_CNOC_A2NOC,
857 .links = { SDM670_MASTER_CNOC_A2NOC },
860 static struct qcom_icc_node srvc_cnoc = {
862 .id = SDM670_SLAVE_SERVICE_CNOC,
867 static struct qcom_icc_node qhs_llcc = {
869 .id = SDM670_SLAVE_LLCC_CFG,
874 static struct qcom_icc_node qhs_memnoc = {
875 .name = "qhs_memnoc",
876 .id = SDM670_SLAVE_MEM_NOC_CFG,
880 .links = { SDM670_MASTER_MEM_NOC_CFG },
883 static struct qcom_icc_node qns_gladiator_sodv = {
884 .name = "qns_gladiator_sodv",
885 .id = SDM670_SLAVE_GNOC_SNOC,
889 .links = { SDM670_MASTER_GNOC_SNOC },
892 static struct qcom_icc_node qns_gnoc_memnoc = {
893 .name = "qns_gnoc_memnoc",
894 .id = SDM670_SLAVE_GNOC_MEM_NOC,
898 .links = { SDM670_MASTER_GNOC_MEM_NOC },
901 static struct qcom_icc_node srvc_gnoc = {
903 .id = SDM670_SLAVE_SERVICE_GNOC,
908 static struct qcom_icc_node ebi = {
910 .id = SDM670_SLAVE_EBI_CH0,
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,
922 static struct qcom_icc_node qns_apps_io = {
923 .name = "qns_apps_io",
924 .id = SDM670_SLAVE_MEM_NOC_GNOC,
929 static struct qcom_icc_node qns_llcc = {
931 .id = SDM670_SLAVE_LLCC,
935 .links = { SDM670_MASTER_LLCC },
938 static struct qcom_icc_node qns_memnoc_snoc = {
939 .name = "qns_memnoc_snoc",
940 .id = SDM670_SLAVE_MEM_NOC_SNOC,
944 .links = { SDM670_MASTER_MEM_NOC_SNOC },
947 static struct qcom_icc_node srvc_memnoc = {
948 .name = "srvc_memnoc",
949 .id = SDM670_SLAVE_SERVICE_MEM_NOC,
954 static struct qcom_icc_node qns2_mem_noc = {
955 .name = "qns2_mem_noc",
956 .id = SDM670_SLAVE_MNOC_SF_MEM_NOC,
960 .links = { SDM670_MASTER_MNOC_SF_MEM_NOC },
963 static struct qcom_icc_node qns_mem_noc_hf = {
964 .name = "qns_mem_noc_hf",
965 .id = SDM670_SLAVE_MNOC_HF_MEM_NOC,
969 .links = { SDM670_MASTER_MNOC_HF_MEM_NOC },
972 static struct qcom_icc_node srvc_mnoc = {
974 .id = SDM670_SLAVE_SERVICE_MNOC,
979 static struct qcom_icc_node qhs_apss = {
981 .id = SDM670_SLAVE_APPSS,
986 static struct qcom_icc_node qns_cnoc = {
988 .id = SDM670_SLAVE_SNOC_CNOC,
992 .links = { SDM670_MASTER_SNOC_CNOC },
995 static struct qcom_icc_node qns_memnoc_gc = {
996 .name = "qns_memnoc_gc",
997 .id = SDM670_SLAVE_SNOC_MEM_NOC_GC,
1001 .links = { SDM670_MASTER_SNOC_GC_MEM_NOC },
1004 static struct qcom_icc_node qns_memnoc_sf = {
1005 .name = "qns_memnoc_sf",
1006 .id = SDM670_SLAVE_SNOC_MEM_NOC_SF,
1010 .links = { SDM670_MASTER_SNOC_SF_MEM_NOC },
1013 static struct qcom_icc_node qxs_imem = {
1015 .id = SDM670_SLAVE_OCIMEM,
1020 static struct qcom_icc_node qxs_pimem = {
1021 .name = "qxs_pimem",
1022 .id = SDM670_SLAVE_PIMEM,
1027 static struct qcom_icc_node srvc_snoc = {
1028 .name = "srvc_snoc",
1029 .id = SDM670_SLAVE_SERVICE_SNOC,
1034 static struct qcom_icc_node xs_qdss_stm = {
1035 .name = "xs_qdss_stm",
1036 .id = SDM670_SLAVE_QDSS_STM,
1041 static struct qcom_icc_node xs_sys_tcu_cfg = {
1042 .name = "xs_sys_tcu_cfg",
1043 .id = SDM670_SLAVE_TCU,
1048 static struct qcom_icc_bcm bcm_acv = {
1050 .enable_mask = BIT(3),
1056 static struct qcom_icc_bcm bcm_mc0 = {
1063 static struct qcom_icc_bcm bcm_sh0 = {
1067 .nodes = { &qns_llcc },
1070 static struct qcom_icc_bcm bcm_mm0 = {
1074 .nodes = { &qns_mem_noc_hf },
1077 static struct qcom_icc_bcm bcm_sh1 = {
1081 .nodes = { &qns_apps_io },
1084 static struct qcom_icc_bcm bcm_mm1 = {
1088 .nodes = { &qxm_camnoc_hf0_uncomp,
1089 &qxm_camnoc_hf1_uncomp,
1090 &qxm_camnoc_sf_uncomp,
1098 static struct qcom_icc_bcm bcm_sh2 = {
1102 .nodes = { &qns_memnoc_snoc },
1105 static struct qcom_icc_bcm bcm_mm2 = {
1109 .nodes = { &qns2_mem_noc },
1112 static struct qcom_icc_bcm bcm_sh3 = {
1116 .nodes = { &acm_tcu },
1119 static struct qcom_icc_bcm bcm_mm3 = {
1123 .nodes = { &qxm_camnoc_sf, &qxm_rot, &qxm_venus0, &qxm_venus1, &qxm_venus_arm9 },
1126 static struct qcom_icc_bcm bcm_sh5 = {
1130 .nodes = { &qnm_apps },
1133 static struct qcom_icc_bcm bcm_sn0 = {
1137 .nodes = { &qns_memnoc_sf },
1140 static struct qcom_icc_bcm bcm_ce0 = {
1144 .nodes = { &qxm_crypto },
1147 static struct qcom_icc_bcm bcm_cn0 = {
1151 .nodes = { &qhm_spdm,
1159 &qhs_compute_dsp_cfg,
1172 &qhs_phy_refgen_south,
1189 &qhs_vsense_ctrl_cfg,
1195 static struct qcom_icc_bcm bcm_qup0 = {
1199 .nodes = { &qhm_qup1, &qhm_qup2 },
1202 static struct qcom_icc_bcm bcm_sn1 = {
1206 .nodes = { &qxs_imem },
1209 static struct qcom_icc_bcm bcm_sn2 = {
1213 .nodes = { &qns_memnoc_gc },
1216 static struct qcom_icc_bcm bcm_sn3 = {
1220 .nodes = { &qns_cnoc },
1223 static struct qcom_icc_bcm bcm_sn4 = {
1227 .nodes = { &qxm_pimem, &qxs_pimem },
1230 static struct qcom_icc_bcm bcm_sn5 = {
1234 .nodes = { &xs_qdss_stm },
1237 static struct qcom_icc_bcm bcm_sn8 = {
1241 .nodes = { &qnm_aggre1_noc, &srvc_aggre1_noc },
1244 static struct qcom_icc_bcm bcm_sn10 = {
1248 .nodes = { &qnm_aggre2_noc, &srvc_aggre2_noc },
1251 static struct qcom_icc_bcm bcm_sn11 = {
1255 .nodes = { &qnm_gladiator_sodv, &xm_gic },
1258 static struct qcom_icc_bcm bcm_sn13 = {
1262 .nodes = { &qnm_memnoc },
1265 static struct qcom_icc_bcm * const aggre1_noc_bcms[] = {
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,
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),
1289 static struct qcom_icc_bcm * const aggre2_noc_bcms[] = {
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,
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),
1315 static struct qcom_icc_bcm * const config_noc_bcms[] = {
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,
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),
1370 static struct qcom_icc_bcm * const dc_noc_bcms[] = {
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,
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),
1386 static struct qcom_icc_bcm * const gladiator_noc_bcms[] = {
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,
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),
1404 static struct qcom_icc_bcm * const mem_noc_bcms[] = {
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,
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),
1439 static struct qcom_icc_bcm * const mmss_noc_bcms[] = {
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,
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),
1469 static struct qcom_icc_bcm * const system_noc_bcms[] = {
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,
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),
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},
1532 MODULE_DEVICE_TABLE(of, qnoc_of_match);
1534 static struct platform_driver qnoc_driver = {
1535 .probe = qcom_icc_rpmh_probe,
1536 .remove = qcom_icc_rpmh_remove,
1538 .name = "qnoc-sdm670",
1539 .of_match_table = qnoc_of_match,
1540 .sync_state = icc_sync_state,
1543 module_platform_driver(qnoc_driver);
1545 MODULE_DESCRIPTION("Qualcomm SDM670 NoC driver");
1546 MODULE_LICENSE("GPL");