1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
7 #include <linux/device.h>
8 #include <linux/interconnect.h>
9 #include <linux/interconnect-provider.h>
10 #include <linux/module.h>
11 #include <linux/of_platform.h>
12 #include <dt-bindings/interconnect/qcom,qdu1000-rpmh.h>
14 #include "bcm-voter.h"
15 #include "icc-common.h"
19 static struct qcom_icc_node qup0_core_master = {
20 .name = "qup0_core_master",
21 .id = QDU1000_MASTER_QUP_CORE_0,
25 .links = { QDU1000_SLAVE_QUP_CORE_0 },
28 static struct qcom_icc_node qup1_core_master = {
29 .name = "qup1_core_master",
30 .id = QDU1000_MASTER_QUP_CORE_1,
34 .links = { QDU1000_SLAVE_QUP_CORE_1 },
37 static struct qcom_icc_node alm_sys_tcu = {
38 .name = "alm_sys_tcu",
39 .id = QDU1000_MASTER_SYS_TCU,
43 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC },
46 static struct qcom_icc_node chm_apps = {
48 .id = QDU1000_MASTER_APPSS_PROC,
52 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC,
53 QDU1000_SLAVE_GEMNOC_MODEM_CNOC, QDU1000_SLAVE_MEM_NOC_PCIE_SNOC
57 static struct qcom_icc_node qnm_ecpri_dma = {
58 .name = "qnm_ecpri_dma",
59 .id = QDU1000_MASTER_GEMNOC_ECPRI_DMA,
63 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC },
66 static struct qcom_icc_node qnm_fec_2_gemnoc = {
67 .name = "qnm_fec_2_gemnoc",
68 .id = QDU1000_MASTER_FEC_2_GEMNOC,
72 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC },
75 static struct qcom_icc_node qnm_pcie = {
77 .id = QDU1000_MASTER_ANOC_PCIE_GEM_NOC,
81 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC,
82 QDU1000_SLAVE_GEMNOC_MODEM_CNOC
86 static struct qcom_icc_node qnm_snoc_gc = {
87 .name = "qnm_snoc_gc",
88 .id = QDU1000_MASTER_SNOC_GC_MEM_NOC,
92 .links = { QDU1000_SLAVE_LLCC },
95 static struct qcom_icc_node qnm_snoc_sf = {
96 .name = "qnm_snoc_sf",
97 .id = QDU1000_MASTER_SNOC_SF_MEM_NOC,
101 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC,
102 QDU1000_SLAVE_GEMNOC_MODEM_CNOC, QDU1000_SLAVE_MEM_NOC_PCIE_SNOC
106 static struct qcom_icc_node qxm_mdsp = {
108 .id = QDU1000_MASTER_MSS_PROC,
112 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC,
113 QDU1000_SLAVE_MEM_NOC_PCIE_SNOC
117 static struct qcom_icc_node llcc_mc = {
119 .id = QDU1000_MASTER_LLCC,
123 .links = { QDU1000_SLAVE_EBI1 },
126 static struct qcom_icc_node qhm_gic = {
128 .id = QDU1000_MASTER_GIC_AHB,
132 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_SF },
135 static struct qcom_icc_node qhm_qdss_bam = {
136 .name = "qhm_qdss_bam",
137 .id = QDU1000_MASTER_QDSS_BAM,
141 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_SF },
144 static struct qcom_icc_node qhm_qpic = {
146 .id = QDU1000_MASTER_QPIC,
150 .links = { QDU1000_SLAVE_A1NOC_SNOC },
153 static struct qcom_icc_node qhm_qspi = {
155 .id = QDU1000_MASTER_QSPI_0,
159 .links = { QDU1000_SLAVE_A1NOC_SNOC },
162 static struct qcom_icc_node qhm_qup0 = {
164 .id = QDU1000_MASTER_QUP_0,
168 .links = { QDU1000_SLAVE_A1NOC_SNOC },
171 static struct qcom_icc_node qhm_qup1 = {
173 .id = QDU1000_MASTER_QUP_1,
177 .links = { QDU1000_SLAVE_A1NOC_SNOC },
180 static struct qcom_icc_node qhm_system_noc_cfg = {
181 .name = "qhm_system_noc_cfg",
182 .id = QDU1000_MASTER_SNOC_CFG,
186 .links = { QDU1000_SLAVE_SERVICE_SNOC },
189 static struct qcom_icc_node qnm_aggre_noc = {
190 .name = "qnm_aggre_noc",
191 .id = QDU1000_MASTER_ANOC_SNOC,
195 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_SF },
198 static struct qcom_icc_node qnm_aggre_noc_gsi = {
199 .name = "qnm_aggre_noc_gsi",
200 .id = QDU1000_MASTER_ANOC_GSI,
204 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_GC },
207 static struct qcom_icc_node qnm_gemnoc_cnoc = {
208 .name = "qnm_gemnoc_cnoc",
209 .id = QDU1000_MASTER_GEM_NOC_CNOC,
213 .links = { QDU1000_SLAVE_AHB2PHY_SOUTH, QDU1000_SLAVE_AHB2PHY_NORTH,
214 QDU1000_SLAVE_AHB2PHY_EAST, QDU1000_SLAVE_AOSS,
215 QDU1000_SLAVE_CLK_CTL, QDU1000_SLAVE_RBCPR_CX_CFG,
216 QDU1000_SLAVE_RBCPR_MX_CFG, QDU1000_SLAVE_CRYPTO_0_CFG,
217 QDU1000_SLAVE_ECPRI_CFG, QDU1000_SLAVE_IMEM_CFG,
218 QDU1000_SLAVE_IPC_ROUTER_CFG, QDU1000_SLAVE_CNOC_MSS,
219 QDU1000_SLAVE_PCIE_CFG, QDU1000_SLAVE_PDM,
220 QDU1000_SLAVE_PIMEM_CFG, QDU1000_SLAVE_PRNG,
221 QDU1000_SLAVE_QDSS_CFG, QDU1000_SLAVE_QPIC,
222 QDU1000_SLAVE_QSPI_0, QDU1000_SLAVE_QUP_0,
223 QDU1000_SLAVE_QUP_1, QDU1000_SLAVE_SDCC_2,
224 QDU1000_SLAVE_SMBUS_CFG, QDU1000_SLAVE_SNOC_CFG,
225 QDU1000_SLAVE_TCSR, QDU1000_SLAVE_TLMM,
226 QDU1000_SLAVE_TME_CFG, QDU1000_SLAVE_TSC_CFG,
227 QDU1000_SLAVE_USB3_0, QDU1000_SLAVE_VSENSE_CTRL_CFG,
228 QDU1000_SLAVE_DDRSS_CFG, QDU1000_SLAVE_IMEM,
229 QDU1000_SLAVE_PIMEM, QDU1000_SLAVE_ETHERNET_SS,
230 QDU1000_SLAVE_QDSS_STM, QDU1000_SLAVE_TCU
234 static struct qcom_icc_node qnm_gemnoc_modem_slave = {
235 .name = "qnm_gemnoc_modem_slave",
236 .id = QDU1000_MASTER_GEMNOC_MODEM_CNOC,
240 .links = { QDU1000_SLAVE_MODEM_OFFLINE },
243 static struct qcom_icc_node qnm_gemnoc_pcie = {
244 .name = "qnm_gemnoc_pcie",
245 .id = QDU1000_MASTER_GEM_NOC_PCIE_SNOC,
249 .links = { QDU1000_SLAVE_PCIE_0 },
252 static struct qcom_icc_node qxm_crypto = {
253 .name = "qxm_crypto",
254 .id = QDU1000_MASTER_CRYPTO,
258 .links = { QDU1000_SLAVE_A1NOC_SNOC },
261 static struct qcom_icc_node qxm_ecpri_gsi = {
262 .name = "qxm_ecpri_gsi",
263 .id = QDU1000_MASTER_ECPRI_GSI,
267 .links = { QDU1000_SLAVE_ANOC_SNOC_GSI, QDU1000_SLAVE_PCIE_0 },
270 static struct qcom_icc_node qxm_pimem = {
272 .id = QDU1000_MASTER_PIMEM,
276 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_GC },
279 static struct qcom_icc_node xm_ecpri_dma = {
280 .name = "xm_ecpri_dma",
281 .id = QDU1000_MASTER_SNOC_ECPRI_DMA,
285 .links = { QDU1000_SLAVE_ECPRI_GEMNOC, QDU1000_SLAVE_PCIE_0 },
288 static struct qcom_icc_node xm_gic = {
290 .id = QDU1000_MASTER_GIC,
294 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_GC },
297 static struct qcom_icc_node xm_pcie = {
299 .id = QDU1000_MASTER_PCIE,
303 .links = { QDU1000_SLAVE_ANOC_PCIE_GEM_NOC },
306 static struct qcom_icc_node xm_qdss_etr0 = {
307 .name = "xm_qdss_etr0",
308 .id = QDU1000_MASTER_QDSS_ETR,
312 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_SF },
315 static struct qcom_icc_node xm_qdss_etr1 = {
316 .name = "xm_qdss_etr1",
317 .id = QDU1000_MASTER_QDSS_ETR_1,
321 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_SF },
324 static struct qcom_icc_node xm_sdc = {
326 .id = QDU1000_MASTER_SDCC_1,
330 .links = { QDU1000_SLAVE_A1NOC_SNOC },
333 static struct qcom_icc_node xm_usb3 = {
335 .id = QDU1000_MASTER_USB3,
339 .links = { QDU1000_SLAVE_A1NOC_SNOC },
342 static struct qcom_icc_node qup0_core_slave = {
343 .name = "qup0_core_slave",
344 .id = QDU1000_SLAVE_QUP_CORE_0,
350 static struct qcom_icc_node qup1_core_slave = {
351 .name = "qup1_core_slave",
352 .id = QDU1000_SLAVE_QUP_CORE_1,
358 static struct qcom_icc_node qns_gem_noc_cnoc = {
359 .name = "qns_gem_noc_cnoc",
360 .id = QDU1000_SLAVE_GEM_NOC_CNOC,
364 .links = { QDU1000_MASTER_GEM_NOC_CNOC },
367 static struct qcom_icc_node qns_llcc = {
369 .id = QDU1000_SLAVE_LLCC,
373 .links = { QDU1000_MASTER_LLCC },
376 static struct qcom_icc_node qns_modem_slave = {
377 .name = "qns_modem_slave",
378 .id = QDU1000_SLAVE_GEMNOC_MODEM_CNOC,
382 .links = { QDU1000_MASTER_GEMNOC_MODEM_CNOC },
385 static struct qcom_icc_node qns_pcie = {
387 .id = QDU1000_SLAVE_MEM_NOC_PCIE_SNOC,
391 .links = { QDU1000_MASTER_GEM_NOC_PCIE_SNOC },
394 static struct qcom_icc_node ebi = {
396 .id = QDU1000_SLAVE_EBI1,
402 static struct qcom_icc_node qhs_ahb2phy0_south = {
403 .name = "qhs_ahb2phy0_south",
404 .id = QDU1000_SLAVE_AHB2PHY_SOUTH,
410 static struct qcom_icc_node qhs_ahb2phy1_north = {
411 .name = "qhs_ahb2phy1_north",
412 .id = QDU1000_SLAVE_AHB2PHY_NORTH,
418 static struct qcom_icc_node qhs_ahb2phy2_east = {
419 .name = "qhs_ahb2phy2_east",
420 .id = QDU1000_SLAVE_AHB2PHY_EAST,
426 static struct qcom_icc_node qhs_aoss = {
428 .id = QDU1000_SLAVE_AOSS,
434 static struct qcom_icc_node qhs_clk_ctl = {
435 .name = "qhs_clk_ctl",
436 .id = QDU1000_SLAVE_CLK_CTL,
442 static struct qcom_icc_node qhs_cpr_cx = {
443 .name = "qhs_cpr_cx",
444 .id = QDU1000_SLAVE_RBCPR_CX_CFG,
450 static struct qcom_icc_node qhs_cpr_mx = {
451 .name = "qhs_cpr_mx",
452 .id = QDU1000_SLAVE_RBCPR_MX_CFG,
458 static struct qcom_icc_node qhs_crypto_cfg = {
459 .name = "qhs_crypto_cfg",
460 .id = QDU1000_SLAVE_CRYPTO_0_CFG,
466 static struct qcom_icc_node qhs_ecpri_cfg = {
467 .name = "qhs_ecpri_cfg",
468 .id = QDU1000_SLAVE_ECPRI_CFG,
474 static struct qcom_icc_node qhs_imem_cfg = {
475 .name = "qhs_imem_cfg",
476 .id = QDU1000_SLAVE_IMEM_CFG,
482 static struct qcom_icc_node qhs_ipc_router = {
483 .name = "qhs_ipc_router",
484 .id = QDU1000_SLAVE_IPC_ROUTER_CFG,
490 static struct qcom_icc_node qhs_mss_cfg = {
491 .name = "qhs_mss_cfg",
492 .id = QDU1000_SLAVE_CNOC_MSS,
498 static struct qcom_icc_node qhs_pcie_cfg = {
499 .name = "qhs_pcie_cfg",
500 .id = QDU1000_SLAVE_PCIE_CFG,
506 static struct qcom_icc_node qhs_pdm = {
508 .id = QDU1000_SLAVE_PDM,
514 static struct qcom_icc_node qhs_pimem_cfg = {
515 .name = "qhs_pimem_cfg",
516 .id = QDU1000_SLAVE_PIMEM_CFG,
522 static struct qcom_icc_node qhs_prng = {
524 .id = QDU1000_SLAVE_PRNG,
530 static struct qcom_icc_node qhs_qdss_cfg = {
531 .name = "qhs_qdss_cfg",
532 .id = QDU1000_SLAVE_QDSS_CFG,
538 static struct qcom_icc_node qhs_qpic = {
540 .id = QDU1000_SLAVE_QPIC,
546 static struct qcom_icc_node qhs_qspi = {
548 .id = QDU1000_SLAVE_QSPI_0,
554 static struct qcom_icc_node qhs_qup0 = {
556 .id = QDU1000_SLAVE_QUP_0,
562 static struct qcom_icc_node qhs_qup1 = {
564 .id = QDU1000_SLAVE_QUP_1,
570 static struct qcom_icc_node qhs_sdc2 = {
572 .id = QDU1000_SLAVE_SDCC_2,
578 static struct qcom_icc_node qhs_smbus_cfg = {
579 .name = "qhs_smbus_cfg",
580 .id = QDU1000_SLAVE_SMBUS_CFG,
586 static struct qcom_icc_node qhs_system_noc_cfg = {
587 .name = "qhs_system_noc_cfg",
588 .id = QDU1000_SLAVE_SNOC_CFG,
592 .links = { QDU1000_MASTER_SNOC_CFG },
595 static struct qcom_icc_node qhs_tcsr = {
597 .id = QDU1000_SLAVE_TCSR,
603 static struct qcom_icc_node qhs_tlmm = {
605 .id = QDU1000_SLAVE_TLMM,
611 static struct qcom_icc_node qhs_tme_cfg = {
612 .name = "qhs_tme_cfg",
613 .id = QDU1000_SLAVE_TME_CFG,
619 static struct qcom_icc_node qhs_tsc_cfg = {
620 .name = "qhs_tsc_cfg",
621 .id = QDU1000_SLAVE_TSC_CFG,
627 static struct qcom_icc_node qhs_usb3 = {
629 .id = QDU1000_SLAVE_USB3_0,
635 static struct qcom_icc_node qhs_vsense_ctrl_cfg = {
636 .name = "qhs_vsense_ctrl_cfg",
637 .id = QDU1000_SLAVE_VSENSE_CTRL_CFG,
643 static struct qcom_icc_node qns_a1noc_snoc = {
644 .name = "qns_a1noc_snoc",
645 .id = QDU1000_SLAVE_A1NOC_SNOC,
649 .links = { QDU1000_MASTER_ANOC_SNOC },
652 static struct qcom_icc_node qns_anoc_snoc_gsi = {
653 .name = "qns_anoc_snoc_gsi",
654 .id = QDU1000_SLAVE_ANOC_SNOC_GSI,
658 .links = { QDU1000_MASTER_ANOC_GSI },
661 static struct qcom_icc_node qns_ddrss_cfg = {
662 .name = "qns_ddrss_cfg",
663 .id = QDU1000_SLAVE_DDRSS_CFG,
669 static struct qcom_icc_node qns_ecpri_gemnoc = {
670 .name = "qns_ecpri_gemnoc",
671 .id = QDU1000_SLAVE_ECPRI_GEMNOC,
675 .links = { QDU1000_MASTER_GEMNOC_ECPRI_DMA },
678 static struct qcom_icc_node qns_gemnoc_gc = {
679 .name = "qns_gemnoc_gc",
680 .id = QDU1000_SLAVE_SNOC_GEM_NOC_GC,
684 .links = { QDU1000_MASTER_SNOC_GC_MEM_NOC },
687 static struct qcom_icc_node qns_gemnoc_sf = {
688 .name = "qns_gemnoc_sf",
689 .id = QDU1000_SLAVE_SNOC_GEM_NOC_SF,
693 .links = { QDU1000_MASTER_SNOC_SF_MEM_NOC },
696 static struct qcom_icc_node qns_modem = {
698 .id = QDU1000_SLAVE_MODEM_OFFLINE,
704 static struct qcom_icc_node qns_pcie_gemnoc = {
705 .name = "qns_pcie_gemnoc",
706 .id = QDU1000_SLAVE_ANOC_PCIE_GEM_NOC,
710 .links = { QDU1000_MASTER_ANOC_PCIE_GEM_NOC },
713 static struct qcom_icc_node qxs_imem = {
715 .id = QDU1000_SLAVE_IMEM,
721 static struct qcom_icc_node qxs_pimem = {
723 .id = QDU1000_SLAVE_PIMEM,
729 static struct qcom_icc_node srvc_system_noc = {
730 .name = "srvc_system_noc",
731 .id = QDU1000_SLAVE_SERVICE_SNOC,
737 static struct qcom_icc_node xs_ethernet_ss = {
738 .name = "xs_ethernet_ss",
739 .id = QDU1000_SLAVE_ETHERNET_SS,
745 static struct qcom_icc_node xs_pcie = {
747 .id = QDU1000_SLAVE_PCIE_0,
753 static struct qcom_icc_node xs_qdss_stm = {
754 .name = "xs_qdss_stm",
755 .id = QDU1000_SLAVE_QDSS_STM,
761 static struct qcom_icc_node xs_sys_tcu_cfg = {
762 .name = "xs_sys_tcu_cfg",
763 .id = QDU1000_SLAVE_TCU,
769 static struct qcom_icc_bcm bcm_acv = {
775 static struct qcom_icc_bcm bcm_ce0 = {
778 .nodes = { &qxm_crypto },
781 static struct qcom_icc_bcm bcm_cn0 = {
784 .nodes = { &qhm_qpic, &qhm_qspi,
785 &qnm_gemnoc_cnoc, &qnm_gemnoc_modem_slave,
786 &qnm_gemnoc_pcie, &xm_sdc,
787 &xm_usb3, &qhs_ahb2phy0_south,
788 &qhs_ahb2phy1_north, &qhs_ahb2phy2_east,
789 &qhs_aoss, &qhs_clk_ctl,
790 &qhs_cpr_cx, &qhs_cpr_mx,
791 &qhs_crypto_cfg, &qhs_ecpri_cfg,
792 &qhs_imem_cfg, &qhs_ipc_router,
793 &qhs_mss_cfg, &qhs_pcie_cfg,
794 &qhs_pdm, &qhs_pimem_cfg,
795 &qhs_prng, &qhs_qdss_cfg,
796 &qhs_qpic, &qhs_qspi,
797 &qhs_qup0, &qhs_qup1,
798 &qhs_sdc2, &qhs_smbus_cfg,
799 &qhs_system_noc_cfg, &qhs_tcsr,
800 &qhs_tlmm, &qhs_tme_cfg,
801 &qhs_tsc_cfg, &qhs_usb3,
802 &qhs_vsense_ctrl_cfg, &qns_ddrss_cfg,
803 &qns_modem, &qxs_imem,
804 &qxs_pimem, &xs_ethernet_ss,
805 &xs_qdss_stm, &xs_sys_tcu_cfg
809 static struct qcom_icc_bcm bcm_mc0 = {
815 static struct qcom_icc_bcm bcm_qup0 = {
818 .nodes = { &qup0_core_slave, &qup1_core_slave },
821 static struct qcom_icc_bcm bcm_sh0 = {
824 .nodes = { &qns_llcc },
827 static struct qcom_icc_bcm bcm_sh1 = {
830 .nodes = { &alm_sys_tcu, &chm_apps,
831 &qnm_ecpri_dma, &qnm_fec_2_gemnoc,
832 &qnm_pcie, &qnm_snoc_gc,
833 &qnm_snoc_sf, &qxm_mdsp,
834 &qns_gem_noc_cnoc, &qns_modem_slave,
839 static struct qcom_icc_bcm bcm_sn0 = {
842 .nodes = { &qns_gemnoc_sf },
845 static struct qcom_icc_bcm bcm_sn1 = {
848 .nodes = { &qhm_gic, &qxm_pimem,
849 &xm_gic, &xm_qdss_etr0,
850 &xm_qdss_etr1, &qns_gemnoc_gc
854 static struct qcom_icc_bcm bcm_sn2 = {
857 .nodes = { &qnm_aggre_noc, &qxm_ecpri_gsi,
858 &xm_ecpri_dma, &qns_anoc_snoc_gsi,
863 static struct qcom_icc_bcm bcm_sn7 = {
866 .nodes = { &qns_pcie_gemnoc, &xs_pcie },
869 static struct qcom_icc_bcm * const clk_virt_bcms[] = {
873 static struct qcom_icc_node * const clk_virt_nodes[] = {
874 [MASTER_QUP_CORE_0] = &qup0_core_master,
875 [MASTER_QUP_CORE_1] = &qup1_core_master,
876 [SLAVE_QUP_CORE_0] = &qup0_core_slave,
877 [SLAVE_QUP_CORE_1] = &qup1_core_slave,
880 static const struct qcom_icc_desc qdu1000_clk_virt = {
881 .nodes = clk_virt_nodes,
882 .num_nodes = ARRAY_SIZE(clk_virt_nodes),
883 .bcms = clk_virt_bcms,
884 .num_bcms = ARRAY_SIZE(clk_virt_bcms),
887 static struct qcom_icc_bcm * const gem_noc_bcms[] = {
892 static struct qcom_icc_node * const gem_noc_nodes[] = {
893 [MASTER_SYS_TCU] = &alm_sys_tcu,
894 [MASTER_APPSS_PROC] = &chm_apps,
895 [MASTER_GEMNOC_ECPRI_DMA] = &qnm_ecpri_dma,
896 [MASTER_FEC_2_GEMNOC] = &qnm_fec_2_gemnoc,
897 [MASTER_ANOC_PCIE_GEM_NOC] = &qnm_pcie,
898 [MASTER_SNOC_GC_MEM_NOC] = &qnm_snoc_gc,
899 [MASTER_SNOC_SF_MEM_NOC] = &qnm_snoc_sf,
900 [MASTER_MSS_PROC] = &qxm_mdsp,
901 [SLAVE_GEM_NOC_CNOC] = &qns_gem_noc_cnoc,
902 [SLAVE_LLCC] = &qns_llcc,
903 [SLAVE_GEMNOC_MODEM_CNOC] = &qns_modem_slave,
904 [SLAVE_MEM_NOC_PCIE_SNOC] = &qns_pcie,
907 static const struct qcom_icc_desc qdu1000_gem_noc = {
908 .nodes = gem_noc_nodes,
909 .num_nodes = ARRAY_SIZE(gem_noc_nodes),
910 .bcms = gem_noc_bcms,
911 .num_bcms = ARRAY_SIZE(gem_noc_bcms),
914 static struct qcom_icc_bcm * const mc_virt_bcms[] = {
919 static struct qcom_icc_node * const mc_virt_nodes[] = {
920 [MASTER_LLCC] = &llcc_mc,
924 static const struct qcom_icc_desc qdu1000_mc_virt = {
925 .nodes = mc_virt_nodes,
926 .num_nodes = ARRAY_SIZE(mc_virt_nodes),
927 .bcms = mc_virt_bcms,
928 .num_bcms = ARRAY_SIZE(mc_virt_bcms),
931 static struct qcom_icc_bcm * const system_noc_bcms[] = {
940 static struct qcom_icc_node * const system_noc_nodes[] = {
941 [MASTER_GIC_AHB] = &qhm_gic,
942 [MASTER_QDSS_BAM] = &qhm_qdss_bam,
943 [MASTER_QPIC] = &qhm_qpic,
944 [MASTER_QSPI_0] = &qhm_qspi,
945 [MASTER_QUP_0] = &qhm_qup0,
946 [MASTER_QUP_1] = &qhm_qup1,
947 [MASTER_SNOC_CFG] = &qhm_system_noc_cfg,
948 [MASTER_ANOC_SNOC] = &qnm_aggre_noc,
949 [MASTER_ANOC_GSI] = &qnm_aggre_noc_gsi,
950 [MASTER_GEM_NOC_CNOC] = &qnm_gemnoc_cnoc,
951 [MASTER_GEMNOC_MODEM_CNOC] = &qnm_gemnoc_modem_slave,
952 [MASTER_GEM_NOC_PCIE_SNOC] = &qnm_gemnoc_pcie,
953 [MASTER_CRYPTO] = &qxm_crypto,
954 [MASTER_ECPRI_GSI] = &qxm_ecpri_gsi,
955 [MASTER_PIMEM] = &qxm_pimem,
956 [MASTER_SNOC_ECPRI_DMA] = &xm_ecpri_dma,
957 [MASTER_GIC] = &xm_gic,
958 [MASTER_PCIE] = &xm_pcie,
959 [MASTER_QDSS_ETR] = &xm_qdss_etr0,
960 [MASTER_QDSS_ETR_1] = &xm_qdss_etr1,
961 [MASTER_SDCC_1] = &xm_sdc,
962 [MASTER_USB3] = &xm_usb3,
963 [SLAVE_AHB2PHY_SOUTH] = &qhs_ahb2phy0_south,
964 [SLAVE_AHB2PHY_NORTH] = &qhs_ahb2phy1_north,
965 [SLAVE_AHB2PHY_EAST] = &qhs_ahb2phy2_east,
966 [SLAVE_AOSS] = &qhs_aoss,
967 [SLAVE_CLK_CTL] = &qhs_clk_ctl,
968 [SLAVE_RBCPR_CX_CFG] = &qhs_cpr_cx,
969 [SLAVE_RBCPR_MX_CFG] = &qhs_cpr_mx,
970 [SLAVE_CRYPTO_0_CFG] = &qhs_crypto_cfg,
971 [SLAVE_ECPRI_CFG] = &qhs_ecpri_cfg,
972 [SLAVE_IMEM_CFG] = &qhs_imem_cfg,
973 [SLAVE_IPC_ROUTER_CFG] = &qhs_ipc_router,
974 [SLAVE_CNOC_MSS] = &qhs_mss_cfg,
975 [SLAVE_PCIE_CFG] = &qhs_pcie_cfg,
976 [SLAVE_PDM] = &qhs_pdm,
977 [SLAVE_PIMEM_CFG] = &qhs_pimem_cfg,
978 [SLAVE_PRNG] = &qhs_prng,
979 [SLAVE_QDSS_CFG] = &qhs_qdss_cfg,
980 [SLAVE_QPIC] = &qhs_qpic,
981 [SLAVE_QSPI_0] = &qhs_qspi,
982 [SLAVE_QUP_0] = &qhs_qup0,
983 [SLAVE_QUP_1] = &qhs_qup1,
984 [SLAVE_SDCC_2] = &qhs_sdc2,
985 [SLAVE_SMBUS_CFG] = &qhs_smbus_cfg,
986 [SLAVE_SNOC_CFG] = &qhs_system_noc_cfg,
987 [SLAVE_TCSR] = &qhs_tcsr,
988 [SLAVE_TLMM] = &qhs_tlmm,
989 [SLAVE_TME_CFG] = &qhs_tme_cfg,
990 [SLAVE_TSC_CFG] = &qhs_tsc_cfg,
991 [SLAVE_USB3_0] = &qhs_usb3,
992 [SLAVE_VSENSE_CTRL_CFG] = &qhs_vsense_ctrl_cfg,
993 [SLAVE_A1NOC_SNOC] = &qns_a1noc_snoc,
994 [SLAVE_ANOC_SNOC_GSI] = &qns_anoc_snoc_gsi,
995 [SLAVE_DDRSS_CFG] = &qns_ddrss_cfg,
996 [SLAVE_ECPRI_GEMNOC] = &qns_ecpri_gemnoc,
997 [SLAVE_SNOC_GEM_NOC_GC] = &qns_gemnoc_gc,
998 [SLAVE_SNOC_GEM_NOC_SF] = &qns_gemnoc_sf,
999 [SLAVE_MODEM_OFFLINE] = &qns_modem,
1000 [SLAVE_ANOC_PCIE_GEM_NOC] = &qns_pcie_gemnoc,
1001 [SLAVE_IMEM] = &qxs_imem,
1002 [SLAVE_PIMEM] = &qxs_pimem,
1003 [SLAVE_SERVICE_SNOC] = &srvc_system_noc,
1004 [SLAVE_ETHERNET_SS] = &xs_ethernet_ss,
1005 [SLAVE_PCIE_0] = &xs_pcie,
1006 [SLAVE_QDSS_STM] = &xs_qdss_stm,
1007 [SLAVE_TCU] = &xs_sys_tcu_cfg,
1010 static const struct qcom_icc_desc qdu1000_system_noc = {
1011 .nodes = system_noc_nodes,
1012 .num_nodes = ARRAY_SIZE(system_noc_nodes),
1013 .bcms = system_noc_bcms,
1014 .num_bcms = ARRAY_SIZE(system_noc_bcms),
1017 static int qnoc_probe(struct platform_device *pdev)
1021 ret = qcom_icc_rpmh_probe(pdev);
1023 dev_err(&pdev->dev, "failed to register ICC provider\n");
1028 static const struct of_device_id qnoc_of_match[] = {
1029 { .compatible = "qcom,qdu1000-clk-virt",
1030 .data = &qdu1000_clk_virt
1032 { .compatible = "qcom,qdu1000-gem-noc",
1033 .data = &qdu1000_gem_noc
1035 { .compatible = "qcom,qdu1000-mc-virt",
1036 .data = &qdu1000_mc_virt
1038 { .compatible = "qcom,qdu1000-system-noc",
1039 .data = &qdu1000_system_noc
1043 MODULE_DEVICE_TABLE(of, qnoc_of_match);
1045 static struct platform_driver qnoc_driver = {
1046 .probe = qnoc_probe,
1047 .remove = qcom_icc_rpmh_remove,
1049 .name = "qnoc-qdu1000",
1050 .of_match_table = qnoc_of_match,
1054 static int __init qnoc_driver_init(void)
1056 return platform_driver_register(&qnoc_driver);
1058 core_initcall(qnoc_driver_init);
1060 static void __exit qnoc_driver_exit(void)
1062 platform_driver_unregister(&qnoc_driver);
1064 module_exit(qnoc_driver_exit);
1066 MODULE_DESCRIPTION("QDU1000 NoC driver");
1067 MODULE_LICENSE("GPL");