1 // SPDX-License-Identifier: GPL-2.0
3 * Qualcomm QCM2290 Network-on-Chip (NoC) QoS driver
5 * Copyright (c) 2021, Linaro Ltd.
9 #include <dt-bindings/interconnect/qcom,qcm2290.h>
10 #include <linux/clk.h>
11 #include <linux/device.h>
12 #include <linux/interconnect-provider.h>
14 #include <linux/module.h>
15 #include <linux/of_device.h>
16 #include <linux/of_platform.h>
17 #include <linux/platform_device.h>
18 #include <linux/regmap.h>
19 #include <linux/slab.h>
25 QCM2290_MASTER_APPSS_PROC = 1,
26 QCM2290_MASTER_SNOC_BIMC_RT,
27 QCM2290_MASTER_SNOC_BIMC_NRT,
28 QCM2290_MASTER_SNOC_BIMC,
31 QCM2290_MASTER_SNOC_CNOC,
32 QCM2290_MASTER_QDSS_DAP,
33 QCM2290_MASTER_CRYPTO_CORE0,
34 QCM2290_MASTER_SNOC_CFG,
36 QCM2290_MASTER_ANOC_SNOC,
37 QCM2290_MASTER_BIMC_SNOC,
39 QCM2290_MASTER_QDSS_BAM,
42 QCM2290_MASTER_QDSS_ETR,
43 QCM2290_MASTER_SDCC_1,
44 QCM2290_MASTER_SDCC_2,
46 QCM2290_MASTER_USB3_0,
47 QCM2290_MASTER_QUP_CORE_0,
48 QCM2290_MASTER_CAMNOC_SF,
49 QCM2290_MASTER_VIDEO_P0,
50 QCM2290_MASTER_VIDEO_PROC,
51 QCM2290_MASTER_CAMNOC_HF,
55 QCM2290_SLAVE_BIMC_SNOC,
56 QCM2290_SLAVE_BIMC_CFG,
57 QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG,
58 QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG,
59 QCM2290_SLAVE_CAMERA_CFG,
60 QCM2290_SLAVE_CLK_CTL,
61 QCM2290_SLAVE_CRYPTO_0_CFG,
62 QCM2290_SLAVE_DISPLAY_CFG,
63 QCM2290_SLAVE_DISPLAY_THROTTLE_CFG,
64 QCM2290_SLAVE_GPU_CFG,
66 QCM2290_SLAVE_IMEM_CFG,
67 QCM2290_SLAVE_IPA_CFG,
69 QCM2290_SLAVE_MESSAGE_RAM,
71 QCM2290_SLAVE_PIMEM_CFG,
72 QCM2290_SLAVE_PKA_WRAPPER,
73 QCM2290_SLAVE_PMIC_ARB,
75 QCM2290_SLAVE_QDSS_CFG,
77 QCM2290_SLAVE_QM_MPU_CFG,
82 QCM2290_SLAVE_SNOC_CFG,
85 QCM2290_SLAVE_VENUS_CFG,
86 QCM2290_SLAVE_VENUS_THROTTLE_CFG,
87 QCM2290_SLAVE_VSENSE_CTRL_CFG,
88 QCM2290_SLAVE_SERVICE_CNOC,
90 QCM2290_SLAVE_SNOC_CNOC,
93 QCM2290_SLAVE_SNOC_BIMC,
94 QCM2290_SLAVE_SERVICE_SNOC,
95 QCM2290_SLAVE_QDSS_STM,
97 QCM2290_SLAVE_ANOC_SNOC,
98 QCM2290_SLAVE_QUP_CORE_0,
99 QCM2290_SLAVE_SNOC_BIMC_NRT,
100 QCM2290_SLAVE_SNOC_BIMC_RT,
104 static const u16 mas_appss_proc_links[] = {
106 QCM2290_SLAVE_BIMC_SNOC,
109 static struct qcom_icc_node mas_appss_proc = {
110 .id = QCM2290_MASTER_APPSS_PROC,
111 .name = "mas_apps_proc",
113 .qos.ap_owned = true,
115 .qos.qos_mode = NOC_QOS_MODE_FIXED,
120 .num_links = ARRAY_SIZE(mas_appss_proc_links),
121 .links = mas_appss_proc_links,
124 static const u16 mas_snoc_bimc_rt_links[] = {
128 static struct qcom_icc_node mas_snoc_bimc_rt = {
129 .id = QCM2290_MASTER_SNOC_BIMC_RT,
130 .name = "mas_snoc_bimc_rt",
132 .qos.ap_owned = true,
134 .qos.qos_mode = NOC_QOS_MODE_BYPASS,
137 .num_links = ARRAY_SIZE(mas_snoc_bimc_rt_links),
138 .links = mas_snoc_bimc_rt_links,
141 static const u16 mas_snoc_bimc_nrt_links[] = {
145 static struct qcom_icc_node mas_snoc_bimc_nrt = {
146 .id = QCM2290_MASTER_SNOC_BIMC_NRT,
147 .name = "mas_snoc_bimc_nrt",
149 .qos.ap_owned = true,
151 .qos.qos_mode = NOC_QOS_MODE_BYPASS,
154 .num_links = ARRAY_SIZE(mas_snoc_bimc_nrt_links),
155 .links = mas_snoc_bimc_nrt_links,
158 static const u16 mas_snoc_bimc_links[] = {
162 static struct qcom_icc_node mas_snoc_bimc = {
163 .id = QCM2290_MASTER_SNOC_BIMC,
164 .name = "mas_snoc_bimc",
166 .qos.ap_owned = true,
168 .qos.qos_mode = NOC_QOS_MODE_BYPASS,
171 .num_links = ARRAY_SIZE(mas_snoc_bimc_links),
172 .links = mas_snoc_bimc_links,
175 static const u16 mas_tcu_0_links[] = {
177 QCM2290_SLAVE_BIMC_SNOC,
180 static struct qcom_icc_node mas_tcu_0 = {
181 .id = QCM2290_MASTER_TCU_0,
184 .qos.ap_owned = true,
186 .qos.qos_mode = NOC_QOS_MODE_FIXED,
191 .num_links = ARRAY_SIZE(mas_tcu_0_links),
192 .links = mas_tcu_0_links,
195 static const u16 mas_snoc_cnoc_links[] = {
196 QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG,
197 QCM2290_SLAVE_SDCC_2,
198 QCM2290_SLAVE_SDCC_1,
199 QCM2290_SLAVE_QM_CFG,
200 QCM2290_SLAVE_BIMC_CFG,
202 QCM2290_SLAVE_QM_MPU_CFG,
203 QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG,
204 QCM2290_SLAVE_QDSS_CFG,
206 QCM2290_SLAVE_IPA_CFG,
207 QCM2290_SLAVE_DISPLAY_THROTTLE_CFG,
209 QCM2290_SLAVE_MESSAGE_RAM,
210 QCM2290_SLAVE_PMIC_ARB,
212 QCM2290_SLAVE_DISPLAY_CFG,
213 QCM2290_SLAVE_VENUS_CFG,
214 QCM2290_SLAVE_GPU_CFG,
215 QCM2290_SLAVE_IMEM_CFG,
216 QCM2290_SLAVE_SNOC_CFG,
217 QCM2290_SLAVE_SERVICE_CNOC,
218 QCM2290_SLAVE_VENUS_THROTTLE_CFG,
219 QCM2290_SLAVE_PKA_WRAPPER,
222 QCM2290_SLAVE_VSENSE_CTRL_CFG,
223 QCM2290_SLAVE_CRYPTO_0_CFG,
224 QCM2290_SLAVE_PIMEM_CFG,
226 QCM2290_SLAVE_CAMERA_CFG,
227 QCM2290_SLAVE_CLK_CTL,
231 static struct qcom_icc_node mas_snoc_cnoc = {
232 .id = QCM2290_MASTER_SNOC_CNOC,
233 .name = "mas_snoc_cnoc",
235 .qos.ap_owned = true,
236 .qos.qos_mode = NOC_QOS_MODE_INVALID,
239 .num_links = ARRAY_SIZE(mas_snoc_cnoc_links),
240 .links = mas_snoc_cnoc_links,
243 static const u16 mas_qdss_dap_links[] = {
244 QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG,
245 QCM2290_SLAVE_SDCC_2,
246 QCM2290_SLAVE_SDCC_1,
247 QCM2290_SLAVE_QM_CFG,
248 QCM2290_SLAVE_BIMC_CFG,
250 QCM2290_SLAVE_QM_MPU_CFG,
251 QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG,
252 QCM2290_SLAVE_QDSS_CFG,
254 QCM2290_SLAVE_IPA_CFG,
255 QCM2290_SLAVE_DISPLAY_THROTTLE_CFG,
257 QCM2290_SLAVE_MESSAGE_RAM,
258 QCM2290_SLAVE_PMIC_ARB,
260 QCM2290_SLAVE_DISPLAY_CFG,
261 QCM2290_SLAVE_VENUS_CFG,
262 QCM2290_SLAVE_GPU_CFG,
263 QCM2290_SLAVE_IMEM_CFG,
264 QCM2290_SLAVE_SNOC_CFG,
265 QCM2290_SLAVE_SERVICE_CNOC,
266 QCM2290_SLAVE_VENUS_THROTTLE_CFG,
267 QCM2290_SLAVE_PKA_WRAPPER,
270 QCM2290_SLAVE_VSENSE_CTRL_CFG,
271 QCM2290_SLAVE_CRYPTO_0_CFG,
272 QCM2290_SLAVE_PIMEM_CFG,
274 QCM2290_SLAVE_CAMERA_CFG,
275 QCM2290_SLAVE_CLK_CTL,
279 static struct qcom_icc_node mas_qdss_dap = {
280 .id = QCM2290_MASTER_QDSS_DAP,
281 .name = "mas_qdss_dap",
283 .qos.ap_owned = true,
284 .qos.qos_mode = NOC_QOS_MODE_INVALID,
287 .num_links = ARRAY_SIZE(mas_qdss_dap_links),
288 .links = mas_qdss_dap_links,
291 static const u16 mas_crypto_core0_links[] = {
292 QCM2290_SLAVE_ANOC_SNOC
295 static struct qcom_icc_node mas_crypto_core0 = {
296 .id = QCM2290_MASTER_CRYPTO_CORE0,
297 .name = "mas_crypto_core0",
299 .qos.ap_owned = true,
301 .qos.qos_mode = NOC_QOS_MODE_FIXED,
305 .num_links = ARRAY_SIZE(mas_crypto_core0_links),
306 .links = mas_crypto_core0_links,
309 static const u16 mas_qup_core_0_links[] = {
310 QCM2290_SLAVE_QUP_CORE_0,
313 static struct qcom_icc_node mas_qup_core_0 = {
314 .id = QCM2290_MASTER_QUP_CORE_0,
315 .name = "mas_qup_core_0",
319 .num_links = ARRAY_SIZE(mas_qup_core_0_links),
320 .links = mas_qup_core_0_links,
323 static const u16 mas_camnoc_sf_links[] = {
324 QCM2290_SLAVE_SNOC_BIMC_NRT,
327 static struct qcom_icc_node mas_camnoc_sf = {
328 .id = QCM2290_MASTER_CAMNOC_SF,
329 .name = "mas_camnoc_sf",
331 .qos.ap_owned = true,
333 .qos.qos_mode = NOC_QOS_MODE_FIXED,
337 .num_links = ARRAY_SIZE(mas_camnoc_sf_links),
338 .links = mas_camnoc_sf_links,
341 static const u16 mas_camnoc_hf_links[] = {
342 QCM2290_SLAVE_SNOC_BIMC_RT,
345 static struct qcom_icc_node mas_camnoc_hf = {
346 .id = QCM2290_MASTER_CAMNOC_HF,
347 .name = "mas_camnoc_hf",
349 .qos.ap_owned = true,
351 .qos.qos_mode = NOC_QOS_MODE_FIXED,
353 .qos.urg_fwd_en = true,
356 .num_links = ARRAY_SIZE(mas_camnoc_hf_links),
357 .links = mas_camnoc_hf_links,
360 static const u16 mas_mdp0_links[] = {
361 QCM2290_SLAVE_SNOC_BIMC_RT,
364 static struct qcom_icc_node mas_mdp0 = {
365 .id = QCM2290_MASTER_MDP0,
368 .qos.ap_owned = true,
370 .qos.qos_mode = NOC_QOS_MODE_FIXED,
372 .qos.urg_fwd_en = true,
375 .num_links = ARRAY_SIZE(mas_mdp0_links),
376 .links = mas_mdp0_links,
379 static const u16 mas_video_p0_links[] = {
380 QCM2290_SLAVE_SNOC_BIMC_NRT,
383 static struct qcom_icc_node mas_video_p0 = {
384 .id = QCM2290_MASTER_VIDEO_P0,
385 .name = "mas_video_p0",
387 .qos.ap_owned = true,
389 .qos.qos_mode = NOC_QOS_MODE_FIXED,
391 .qos.urg_fwd_en = true,
394 .num_links = ARRAY_SIZE(mas_video_p0_links),
395 .links = mas_video_p0_links,
398 static const u16 mas_video_proc_links[] = {
399 QCM2290_SLAVE_SNOC_BIMC_NRT,
402 static struct qcom_icc_node mas_video_proc = {
403 .id = QCM2290_MASTER_VIDEO_PROC,
404 .name = "mas_video_proc",
406 .qos.ap_owned = true,
408 .qos.qos_mode = NOC_QOS_MODE_FIXED,
412 .num_links = ARRAY_SIZE(mas_video_proc_links),
413 .links = mas_video_proc_links,
416 static const u16 mas_snoc_cfg_links[] = {
417 QCM2290_SLAVE_SERVICE_SNOC,
420 static struct qcom_icc_node mas_snoc_cfg = {
421 .id = QCM2290_MASTER_SNOC_CFG,
422 .name = "mas_snoc_cfg",
424 .qos.ap_owned = true,
425 .qos.qos_mode = NOC_QOS_MODE_INVALID,
428 .num_links = ARRAY_SIZE(mas_snoc_cfg_links),
429 .links = mas_snoc_cfg_links,
432 static const u16 mas_tic_links[] = {
436 QCM2290_SLAVE_SNOC_BIMC,
437 QCM2290_SLAVE_SNOC_CNOC,
439 QCM2290_SLAVE_QDSS_STM,
442 static struct qcom_icc_node mas_tic = {
443 .id = QCM2290_MASTER_TIC,
446 .qos.ap_owned = true,
448 .qos.qos_mode = NOC_QOS_MODE_FIXED,
452 .num_links = ARRAY_SIZE(mas_tic_links),
453 .links = mas_tic_links,
456 static const u16 mas_anoc_snoc_links[] = {
460 QCM2290_SLAVE_SNOC_BIMC,
461 QCM2290_SLAVE_SNOC_CNOC,
463 QCM2290_SLAVE_QDSS_STM,
466 static struct qcom_icc_node mas_anoc_snoc = {
467 .id = QCM2290_MASTER_ANOC_SNOC,
468 .name = "mas_anoc_snoc",
472 .num_links = ARRAY_SIZE(mas_anoc_snoc_links),
473 .links = mas_anoc_snoc_links,
476 static const u16 mas_bimc_snoc_links[] = {
480 QCM2290_SLAVE_SNOC_CNOC,
482 QCM2290_SLAVE_QDSS_STM,
485 static struct qcom_icc_node mas_bimc_snoc = {
486 .id = QCM2290_MASTER_BIMC_SNOC,
487 .name = "mas_bimc_snoc",
491 .num_links = ARRAY_SIZE(mas_bimc_snoc_links),
492 .links = mas_bimc_snoc_links,
495 static const u16 mas_pimem_links[] = {
497 QCM2290_SLAVE_SNOC_BIMC,
500 static struct qcom_icc_node mas_pimem = {
501 .id = QCM2290_MASTER_PIMEM,
504 .qos.ap_owned = true,
506 .qos.qos_mode = NOC_QOS_MODE_FIXED,
510 .num_links = ARRAY_SIZE(mas_pimem_links),
511 .links = mas_pimem_links,
514 static const u16 mas_qdss_bam_links[] = {
515 QCM2290_SLAVE_ANOC_SNOC,
518 static struct qcom_icc_node mas_qdss_bam = {
519 .id = QCM2290_MASTER_QDSS_BAM,
520 .name = "mas_qdss_bam",
522 .qos.ap_owned = true,
524 .qos.qos_mode = NOC_QOS_MODE_FIXED,
528 .num_links = ARRAY_SIZE(mas_qdss_bam_links),
529 .links = mas_qdss_bam_links,
532 static const u16 mas_qup_0_links[] = {
533 QCM2290_SLAVE_ANOC_SNOC,
536 static struct qcom_icc_node mas_qup_0 = {
537 .id = QCM2290_MASTER_QUP_0,
540 .qos.ap_owned = true,
542 .qos.qos_mode = NOC_QOS_MODE_FIXED,
546 .num_links = ARRAY_SIZE(mas_qup_0_links),
547 .links = mas_qup_0_links,
550 static const u16 mas_ipa_links[] = {
551 QCM2290_SLAVE_ANOC_SNOC,
554 static struct qcom_icc_node mas_ipa = {
555 .id = QCM2290_MASTER_IPA,
558 .qos.ap_owned = true,
560 .qos.qos_mode = NOC_QOS_MODE_FIXED,
564 .num_links = ARRAY_SIZE(mas_ipa_links),
565 .links = mas_ipa_links,
568 static const u16 mas_qdss_etr_links[] = {
569 QCM2290_SLAVE_ANOC_SNOC,
572 static struct qcom_icc_node mas_qdss_etr = {
573 .id = QCM2290_MASTER_QDSS_ETR,
574 .name = "mas_qdss_etr",
576 .qos.ap_owned = true,
578 .qos.qos_mode = NOC_QOS_MODE_FIXED,
582 .num_links = ARRAY_SIZE(mas_qdss_etr_links),
583 .links = mas_qdss_etr_links,
586 static const u16 mas_sdcc_1_links[] = {
587 QCM2290_SLAVE_ANOC_SNOC,
590 static struct qcom_icc_node mas_sdcc_1 = {
591 .id = QCM2290_MASTER_SDCC_1,
592 .name = "mas_sdcc_1",
594 .qos.ap_owned = true,
596 .qos.qos_mode = NOC_QOS_MODE_FIXED,
600 .num_links = ARRAY_SIZE(mas_sdcc_1_links),
601 .links = mas_sdcc_1_links,
604 static const u16 mas_sdcc_2_links[] = {
605 QCM2290_SLAVE_ANOC_SNOC,
608 static struct qcom_icc_node mas_sdcc_2 = {
609 .id = QCM2290_MASTER_SDCC_2,
610 .name = "mas_sdcc_2",
612 .qos.ap_owned = true,
614 .qos.qos_mode = NOC_QOS_MODE_FIXED,
618 .num_links = ARRAY_SIZE(mas_sdcc_2_links),
619 .links = mas_sdcc_2_links,
622 static const u16 mas_qpic_links[] = {
623 QCM2290_SLAVE_ANOC_SNOC,
626 static struct qcom_icc_node mas_qpic = {
627 .id = QCM2290_MASTER_QPIC,
630 .qos.ap_owned = true,
632 .qos.qos_mode = NOC_QOS_MODE_FIXED,
636 .num_links = ARRAY_SIZE(mas_qpic_links),
637 .links = mas_qpic_links,
640 static const u16 mas_usb3_0_links[] = {
641 QCM2290_SLAVE_ANOC_SNOC,
644 static struct qcom_icc_node mas_usb3_0 = {
645 .id = QCM2290_MASTER_USB3_0,
646 .name = "mas_usb3_0",
648 .qos.ap_owned = true,
650 .qos.qos_mode = NOC_QOS_MODE_FIXED,
654 .num_links = ARRAY_SIZE(mas_usb3_0_links),
655 .links = mas_usb3_0_links,
658 static const u16 mas_gfx3d_links[] = {
662 static struct qcom_icc_node mas_gfx3d = {
663 .id = QCM2290_MASTER_GFX3D,
666 .qos.ap_owned = true,
668 .qos.qos_mode = NOC_QOS_MODE_FIXED,
673 .num_links = ARRAY_SIZE(mas_gfx3d_links),
674 .links = mas_gfx3d_links,
678 static struct qcom_icc_node slv_ebi1 = {
680 .id = QCM2290_SLAVE_EBI1,
686 static const u16 slv_bimc_snoc_links[] = {
687 QCM2290_MASTER_BIMC_SNOC,
690 static struct qcom_icc_node slv_bimc_snoc = {
691 .name = "slv_bimc_snoc",
692 .id = QCM2290_SLAVE_BIMC_SNOC,
696 .num_links = ARRAY_SIZE(slv_bimc_snoc_links),
697 .links = slv_bimc_snoc_links,
700 static struct qcom_icc_node slv_bimc_cfg = {
701 .name = "slv_bimc_cfg",
702 .id = QCM2290_SLAVE_BIMC_CFG,
704 .qos.ap_owned = true,
705 .qos.qos_mode = NOC_QOS_MODE_INVALID,
710 static struct qcom_icc_node slv_camera_nrt_throttle_cfg = {
711 .name = "slv_camera_nrt_throttle_cfg",
712 .id = QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG,
714 .qos.ap_owned = true,
715 .qos.qos_mode = NOC_QOS_MODE_INVALID,
720 static struct qcom_icc_node slv_camera_rt_throttle_cfg = {
721 .name = "slv_camera_rt_throttle_cfg",
722 .id = QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG,
724 .qos.ap_owned = true,
725 .qos.qos_mode = NOC_QOS_MODE_INVALID,
730 static struct qcom_icc_node slv_camera_cfg = {
731 .name = "slv_camera_cfg",
732 .id = QCM2290_SLAVE_CAMERA_CFG,
734 .qos.ap_owned = true,
735 .qos.qos_mode = NOC_QOS_MODE_INVALID,
740 static struct qcom_icc_node slv_clk_ctl = {
741 .name = "slv_clk_ctl",
742 .id = QCM2290_SLAVE_CLK_CTL,
744 .qos.ap_owned = true,
745 .qos.qos_mode = NOC_QOS_MODE_INVALID,
750 static struct qcom_icc_node slv_crypto_0_cfg = {
751 .name = "slv_crypto_0_cfg",
752 .id = QCM2290_SLAVE_CRYPTO_0_CFG,
754 .qos.ap_owned = true,
755 .qos.qos_mode = NOC_QOS_MODE_INVALID,
760 static struct qcom_icc_node slv_display_cfg = {
761 .name = "slv_display_cfg",
762 .id = QCM2290_SLAVE_DISPLAY_CFG,
764 .qos.ap_owned = true,
765 .qos.qos_mode = NOC_QOS_MODE_INVALID,
770 static struct qcom_icc_node slv_display_throttle_cfg = {
771 .name = "slv_display_throttle_cfg",
772 .id = QCM2290_SLAVE_DISPLAY_THROTTLE_CFG,
774 .qos.ap_owned = true,
775 .qos.qos_mode = NOC_QOS_MODE_INVALID,
780 static struct qcom_icc_node slv_gpu_cfg = {
781 .name = "slv_gpu_cfg",
782 .id = QCM2290_SLAVE_GPU_CFG,
784 .qos.ap_owned = true,
785 .qos.qos_mode = NOC_QOS_MODE_INVALID,
790 static struct qcom_icc_node slv_hwkm = {
792 .id = QCM2290_SLAVE_HWKM,
794 .qos.ap_owned = true,
795 .qos.qos_mode = NOC_QOS_MODE_INVALID,
800 static struct qcom_icc_node slv_imem_cfg = {
801 .name = "slv_imem_cfg",
802 .id = QCM2290_SLAVE_IMEM_CFG,
804 .qos.ap_owned = true,
805 .qos.qos_mode = NOC_QOS_MODE_INVALID,
810 static struct qcom_icc_node slv_ipa_cfg = {
811 .name = "slv_ipa_cfg",
812 .id = QCM2290_SLAVE_IPA_CFG,
814 .qos.ap_owned = true,
815 .qos.qos_mode = NOC_QOS_MODE_INVALID,
820 static struct qcom_icc_node slv_lpass = {
822 .id = QCM2290_SLAVE_LPASS,
824 .qos.ap_owned = true,
825 .qos.qos_mode = NOC_QOS_MODE_INVALID,
830 static struct qcom_icc_node slv_message_ram = {
831 .name = "slv_message_ram",
832 .id = QCM2290_SLAVE_MESSAGE_RAM,
834 .qos.ap_owned = true,
835 .qos.qos_mode = NOC_QOS_MODE_INVALID,
840 static struct qcom_icc_node slv_pdm = {
842 .id = QCM2290_SLAVE_PDM,
844 .qos.ap_owned = true,
845 .qos.qos_mode = NOC_QOS_MODE_INVALID,
850 static struct qcom_icc_node slv_pimem_cfg = {
851 .name = "slv_pimem_cfg",
852 .id = QCM2290_SLAVE_PIMEM_CFG,
854 .qos.ap_owned = true,
855 .qos.qos_mode = NOC_QOS_MODE_INVALID,
860 static struct qcom_icc_node slv_pka_wrapper = {
861 .name = "slv_pka_wrapper",
862 .id = QCM2290_SLAVE_PKA_WRAPPER,
864 .qos.ap_owned = true,
865 .qos.qos_mode = NOC_QOS_MODE_INVALID,
870 static struct qcom_icc_node slv_pmic_arb = {
871 .name = "slv_pmic_arb",
872 .id = QCM2290_SLAVE_PMIC_ARB,
874 .qos.ap_owned = true,
875 .qos.qos_mode = NOC_QOS_MODE_INVALID,
880 static struct qcom_icc_node slv_prng = {
882 .id = QCM2290_SLAVE_PRNG,
884 .qos.ap_owned = true,
885 .qos.qos_mode = NOC_QOS_MODE_INVALID,
890 static struct qcom_icc_node slv_qdss_cfg = {
891 .name = "slv_qdss_cfg",
892 .id = QCM2290_SLAVE_QDSS_CFG,
894 .qos.ap_owned = true,
895 .qos.qos_mode = NOC_QOS_MODE_INVALID,
900 static struct qcom_icc_node slv_qm_cfg = {
901 .name = "slv_qm_cfg",
902 .id = QCM2290_SLAVE_QM_CFG,
904 .qos.ap_owned = true,
905 .qos.qos_mode = NOC_QOS_MODE_INVALID,
910 static struct qcom_icc_node slv_qm_mpu_cfg = {
911 .name = "slv_qm_mpu_cfg",
912 .id = QCM2290_SLAVE_QM_MPU_CFG,
914 .qos.ap_owned = true,
915 .qos.qos_mode = NOC_QOS_MODE_INVALID,
920 static struct qcom_icc_node slv_qpic = {
922 .id = QCM2290_SLAVE_QPIC,
924 .qos.ap_owned = true,
925 .qos.qos_mode = NOC_QOS_MODE_INVALID,
930 static struct qcom_icc_node slv_qup_0 = {
932 .id = QCM2290_SLAVE_QUP_0,
934 .qos.ap_owned = true,
935 .qos.qos_mode = NOC_QOS_MODE_INVALID,
940 static struct qcom_icc_node slv_sdcc_1 = {
941 .name = "slv_sdcc_1",
942 .id = QCM2290_SLAVE_SDCC_1,
944 .qos.ap_owned = true,
945 .qos.qos_mode = NOC_QOS_MODE_INVALID,
950 static struct qcom_icc_node slv_sdcc_2 = {
951 .name = "slv_sdcc_2",
952 .id = QCM2290_SLAVE_SDCC_2,
954 .qos.ap_owned = true,
955 .qos.qos_mode = NOC_QOS_MODE_INVALID,
960 static const u16 slv_snoc_cfg_links[] = {
961 QCM2290_MASTER_SNOC_CFG,
964 static struct qcom_icc_node slv_snoc_cfg = {
965 .name = "slv_snoc_cfg",
966 .id = QCM2290_SLAVE_SNOC_CFG,
968 .qos.ap_owned = true,
969 .qos.qos_mode = NOC_QOS_MODE_INVALID,
972 .num_links = ARRAY_SIZE(slv_snoc_cfg_links),
973 .links = slv_snoc_cfg_links,
976 static struct qcom_icc_node slv_tcsr = {
978 .id = QCM2290_SLAVE_TCSR,
980 .qos.ap_owned = true,
981 .qos.qos_mode = NOC_QOS_MODE_INVALID,
986 static struct qcom_icc_node slv_usb3 = {
988 .id = QCM2290_SLAVE_USB3,
990 .qos.ap_owned = true,
991 .qos.qos_mode = NOC_QOS_MODE_INVALID,
996 static struct qcom_icc_node slv_venus_cfg = {
997 .name = "slv_venus_cfg",
998 .id = QCM2290_SLAVE_VENUS_CFG,
1000 .qos.ap_owned = true,
1001 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1006 static struct qcom_icc_node slv_venus_throttle_cfg = {
1007 .name = "slv_venus_throttle_cfg",
1008 .id = QCM2290_SLAVE_VENUS_THROTTLE_CFG,
1010 .qos.ap_owned = true,
1011 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1016 static struct qcom_icc_node slv_vsense_ctrl_cfg = {
1017 .name = "slv_vsense_ctrl_cfg",
1018 .id = QCM2290_SLAVE_VSENSE_CTRL_CFG,
1020 .qos.ap_owned = true,
1021 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1026 static struct qcom_icc_node slv_service_cnoc = {
1027 .name = "slv_service_cnoc",
1028 .id = QCM2290_SLAVE_SERVICE_CNOC,
1030 .qos.ap_owned = true,
1031 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1036 static struct qcom_icc_node slv_qup_core_0 = {
1037 .name = "slv_qup_core_0",
1038 .id = QCM2290_SLAVE_QUP_CORE_0,
1040 .qos.ap_owned = true,
1041 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1046 static const u16 slv_snoc_bimc_nrt_links[] = {
1047 QCM2290_MASTER_SNOC_BIMC_NRT,
1050 static struct qcom_icc_node slv_snoc_bimc_nrt = {
1051 .name = "slv_snoc_bimc_nrt",
1052 .id = QCM2290_SLAVE_SNOC_BIMC_NRT,
1054 .qos.ap_owned = true,
1055 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1058 .num_links = ARRAY_SIZE(slv_snoc_bimc_nrt_links),
1059 .links = slv_snoc_bimc_nrt_links,
1062 static const u16 slv_snoc_bimc_rt_links[] = {
1063 QCM2290_MASTER_SNOC_BIMC_RT,
1066 static struct qcom_icc_node slv_snoc_bimc_rt = {
1067 .name = "slv_snoc_bimc_rt",
1068 .id = QCM2290_SLAVE_SNOC_BIMC_RT,
1070 .qos.ap_owned = true,
1071 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1074 .num_links = ARRAY_SIZE(slv_snoc_bimc_rt_links),
1075 .links = slv_snoc_bimc_rt_links,
1078 static struct qcom_icc_node slv_appss = {
1079 .name = "slv_appss",
1080 .id = QCM2290_SLAVE_APPSS,
1082 .qos.ap_owned = true,
1083 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1088 static const u16 slv_snoc_cnoc_links[] = {
1089 QCM2290_MASTER_SNOC_CNOC,
1092 static struct qcom_icc_node slv_snoc_cnoc = {
1093 .name = "slv_snoc_cnoc",
1094 .id = QCM2290_SLAVE_SNOC_CNOC,
1098 .num_links = ARRAY_SIZE(slv_snoc_cnoc_links),
1099 .links = slv_snoc_cnoc_links,
1102 static struct qcom_icc_node slv_imem = {
1104 .id = QCM2290_SLAVE_IMEM,
1110 static struct qcom_icc_node slv_pimem = {
1111 .name = "slv_pimem",
1112 .id = QCM2290_SLAVE_PIMEM,
1114 .qos.ap_owned = true,
1115 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1120 static const u16 slv_snoc_bimc_links[] = {
1121 QCM2290_MASTER_SNOC_BIMC,
1124 static struct qcom_icc_node slv_snoc_bimc = {
1125 .name = "slv_snoc_bimc",
1126 .id = QCM2290_SLAVE_SNOC_BIMC,
1130 .num_links = ARRAY_SIZE(slv_snoc_bimc_links),
1131 .links = slv_snoc_bimc_links,
1134 static struct qcom_icc_node slv_service_snoc = {
1135 .name = "slv_service_snoc",
1136 .id = QCM2290_SLAVE_SERVICE_SNOC,
1138 .qos.ap_owned = true,
1139 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1144 static struct qcom_icc_node slv_qdss_stm = {
1145 .name = "slv_qdss_stm",
1146 .id = QCM2290_SLAVE_QDSS_STM,
1152 static struct qcom_icc_node slv_tcu = {
1154 .id = QCM2290_SLAVE_TCU,
1156 .qos.ap_owned = true,
1157 .qos.qos_mode = NOC_QOS_MODE_INVALID,
1162 static const u16 slv_anoc_snoc_links[] = {
1163 QCM2290_MASTER_ANOC_SNOC,
1166 static struct qcom_icc_node slv_anoc_snoc = {
1167 .name = "slv_anoc_snoc",
1168 .id = QCM2290_SLAVE_ANOC_SNOC,
1172 .num_links = ARRAY_SIZE(slv_anoc_snoc_links),
1173 .links = slv_anoc_snoc_links,
1176 /* NoC descriptors */
1177 static struct qcom_icc_node * const qcm2290_bimc_nodes[] = {
1178 [MASTER_APPSS_PROC] = &mas_appss_proc,
1179 [MASTER_SNOC_BIMC_RT] = &mas_snoc_bimc_rt,
1180 [MASTER_SNOC_BIMC_NRT] = &mas_snoc_bimc_nrt,
1181 [MASTER_SNOC_BIMC] = &mas_snoc_bimc,
1182 [MASTER_TCU_0] = &mas_tcu_0,
1183 [MASTER_GFX3D] = &mas_gfx3d,
1184 [SLAVE_EBI1] = &slv_ebi1,
1185 [SLAVE_BIMC_SNOC] = &slv_bimc_snoc,
1188 static const struct regmap_config qcm2290_bimc_regmap_config = {
1192 .max_register = 0x80000,
1196 static const struct qcom_icc_desc qcm2290_bimc = {
1197 .type = QCOM_ICC_BIMC,
1198 .nodes = qcm2290_bimc_nodes,
1199 .num_nodes = ARRAY_SIZE(qcm2290_bimc_nodes),
1200 .regmap_cfg = &qcm2290_bimc_regmap_config,
1201 /* M_REG_BASE() in vendor msm_bus_bimc_adhoc driver */
1202 .qos_offset = 0x8000,
1205 static struct qcom_icc_node * const qcm2290_cnoc_nodes[] = {
1206 [MASTER_SNOC_CNOC] = &mas_snoc_cnoc,
1207 [MASTER_QDSS_DAP] = &mas_qdss_dap,
1208 [SLAVE_BIMC_CFG] = &slv_bimc_cfg,
1209 [SLAVE_CAMERA_NRT_THROTTLE_CFG] = &slv_camera_nrt_throttle_cfg,
1210 [SLAVE_CAMERA_RT_THROTTLE_CFG] = &slv_camera_rt_throttle_cfg,
1211 [SLAVE_CAMERA_CFG] = &slv_camera_cfg,
1212 [SLAVE_CLK_CTL] = &slv_clk_ctl,
1213 [SLAVE_CRYPTO_0_CFG] = &slv_crypto_0_cfg,
1214 [SLAVE_DISPLAY_CFG] = &slv_display_cfg,
1215 [SLAVE_DISPLAY_THROTTLE_CFG] = &slv_display_throttle_cfg,
1216 [SLAVE_GPU_CFG] = &slv_gpu_cfg,
1217 [SLAVE_HWKM] = &slv_hwkm,
1218 [SLAVE_IMEM_CFG] = &slv_imem_cfg,
1219 [SLAVE_IPA_CFG] = &slv_ipa_cfg,
1220 [SLAVE_LPASS] = &slv_lpass,
1221 [SLAVE_MESSAGE_RAM] = &slv_message_ram,
1222 [SLAVE_PDM] = &slv_pdm,
1223 [SLAVE_PIMEM_CFG] = &slv_pimem_cfg,
1224 [SLAVE_PKA_WRAPPER] = &slv_pka_wrapper,
1225 [SLAVE_PMIC_ARB] = &slv_pmic_arb,
1226 [SLAVE_PRNG] = &slv_prng,
1227 [SLAVE_QDSS_CFG] = &slv_qdss_cfg,
1228 [SLAVE_QM_CFG] = &slv_qm_cfg,
1229 [SLAVE_QM_MPU_CFG] = &slv_qm_mpu_cfg,
1230 [SLAVE_QPIC] = &slv_qpic,
1231 [SLAVE_QUP_0] = &slv_qup_0,
1232 [SLAVE_SDCC_1] = &slv_sdcc_1,
1233 [SLAVE_SDCC_2] = &slv_sdcc_2,
1234 [SLAVE_SNOC_CFG] = &slv_snoc_cfg,
1235 [SLAVE_TCSR] = &slv_tcsr,
1236 [SLAVE_USB3] = &slv_usb3,
1237 [SLAVE_VENUS_CFG] = &slv_venus_cfg,
1238 [SLAVE_VENUS_THROTTLE_CFG] = &slv_venus_throttle_cfg,
1239 [SLAVE_VSENSE_CTRL_CFG] = &slv_vsense_ctrl_cfg,
1240 [SLAVE_SERVICE_CNOC] = &slv_service_cnoc,
1243 static const struct regmap_config qcm2290_cnoc_regmap_config = {
1247 .max_register = 0x8200,
1251 static const struct qcom_icc_desc qcm2290_cnoc = {
1252 .type = QCOM_ICC_NOC,
1253 .nodes = qcm2290_cnoc_nodes,
1254 .num_nodes = ARRAY_SIZE(qcm2290_cnoc_nodes),
1255 .regmap_cfg = &qcm2290_cnoc_regmap_config,
1258 static struct qcom_icc_node * const qcm2290_snoc_nodes[] = {
1259 [MASTER_CRYPTO_CORE0] = &mas_crypto_core0,
1260 [MASTER_SNOC_CFG] = &mas_snoc_cfg,
1261 [MASTER_TIC] = &mas_tic,
1262 [MASTER_ANOC_SNOC] = &mas_anoc_snoc,
1263 [MASTER_BIMC_SNOC] = &mas_bimc_snoc,
1264 [MASTER_PIMEM] = &mas_pimem,
1265 [MASTER_QDSS_BAM] = &mas_qdss_bam,
1266 [MASTER_QUP_0] = &mas_qup_0,
1267 [MASTER_IPA] = &mas_ipa,
1268 [MASTER_QDSS_ETR] = &mas_qdss_etr,
1269 [MASTER_SDCC_1] = &mas_sdcc_1,
1270 [MASTER_SDCC_2] = &mas_sdcc_2,
1271 [MASTER_QPIC] = &mas_qpic,
1272 [MASTER_USB3_0] = &mas_usb3_0,
1273 [SLAVE_APPSS] = &slv_appss,
1274 [SLAVE_SNOC_CNOC] = &slv_snoc_cnoc,
1275 [SLAVE_IMEM] = &slv_imem,
1276 [SLAVE_PIMEM] = &slv_pimem,
1277 [SLAVE_SNOC_BIMC] = &slv_snoc_bimc,
1278 [SLAVE_SERVICE_SNOC] = &slv_service_snoc,
1279 [SLAVE_QDSS_STM] = &slv_qdss_stm,
1280 [SLAVE_TCU] = &slv_tcu,
1281 [SLAVE_ANOC_SNOC] = &slv_anoc_snoc,
1284 static const struct regmap_config qcm2290_snoc_regmap_config = {
1288 .max_register = 0x60200,
1292 static const struct qcom_icc_desc qcm2290_snoc = {
1293 .type = QCOM_ICC_QNOC,
1294 .nodes = qcm2290_snoc_nodes,
1295 .num_nodes = ARRAY_SIZE(qcm2290_snoc_nodes),
1296 .regmap_cfg = &qcm2290_snoc_regmap_config,
1297 /* Vendor DT node fab-sys_noc property 'qcom,base-offset' */
1298 .qos_offset = 0x15000,
1301 static struct qcom_icc_node * const qcm2290_qup_virt_nodes[] = {
1302 [MASTER_QUP_CORE_0] = &mas_qup_core_0,
1303 [SLAVE_QUP_CORE_0] = &slv_qup_core_0
1306 static const struct qcom_icc_desc qcm2290_qup_virt = {
1307 .type = QCOM_ICC_QNOC,
1308 .nodes = qcm2290_qup_virt_nodes,
1309 .num_nodes = ARRAY_SIZE(qcm2290_qup_virt_nodes),
1312 static struct qcom_icc_node * const qcm2290_mmnrt_virt_nodes[] = {
1313 [MASTER_CAMNOC_SF] = &mas_camnoc_sf,
1314 [MASTER_VIDEO_P0] = &mas_video_p0,
1315 [MASTER_VIDEO_PROC] = &mas_video_proc,
1316 [SLAVE_SNOC_BIMC_NRT] = &slv_snoc_bimc_nrt,
1319 static const struct qcom_icc_desc qcm2290_mmnrt_virt = {
1320 .type = QCOM_ICC_QNOC,
1321 .nodes = qcm2290_mmnrt_virt_nodes,
1322 .num_nodes = ARRAY_SIZE(qcm2290_mmnrt_virt_nodes),
1323 .regmap_cfg = &qcm2290_snoc_regmap_config,
1324 .qos_offset = 0x15000,
1327 static struct qcom_icc_node * const qcm2290_mmrt_virt_nodes[] = {
1328 [MASTER_CAMNOC_HF] = &mas_camnoc_hf,
1329 [MASTER_MDP0] = &mas_mdp0,
1330 [SLAVE_SNOC_BIMC_RT] = &slv_snoc_bimc_rt,
1333 static const struct qcom_icc_desc qcm2290_mmrt_virt = {
1334 .type = QCOM_ICC_QNOC,
1335 .nodes = qcm2290_mmrt_virt_nodes,
1336 .num_nodes = ARRAY_SIZE(qcm2290_mmrt_virt_nodes),
1337 .regmap_cfg = &qcm2290_snoc_regmap_config,
1338 .qos_offset = 0x15000,
1341 static const struct of_device_id qcm2290_noc_of_match[] = {
1342 { .compatible = "qcom,qcm2290-bimc", .data = &qcm2290_bimc },
1343 { .compatible = "qcom,qcm2290-cnoc", .data = &qcm2290_cnoc },
1344 { .compatible = "qcom,qcm2290-snoc", .data = &qcm2290_snoc },
1345 { .compatible = "qcom,qcm2290-qup-virt", .data = &qcm2290_qup_virt },
1346 { .compatible = "qcom,qcm2290-mmrt-virt", .data = &qcm2290_mmrt_virt },
1347 { .compatible = "qcom,qcm2290-mmnrt-virt", .data = &qcm2290_mmnrt_virt },
1350 MODULE_DEVICE_TABLE(of, qcm2290_noc_of_match);
1352 static struct platform_driver qcm2290_noc_driver = {
1353 .probe = qnoc_probe,
1354 .remove = qnoc_remove,
1356 .name = "qnoc-qcm2290",
1357 .of_match_table = qcm2290_noc_of_match,
1360 module_platform_driver(qcm2290_noc_driver);
1362 MODULE_DESCRIPTION("Qualcomm QCM2290 NoC driver");
1363 MODULE_LICENSE("GPL v2");