Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * Qualcomm QCM2290 Network-on-Chip (NoC) QoS driver
0004  *
0005  * Copyright (c) 2021, Linaro Ltd.
0006  *
0007  */
0008 
0009 #include <dt-bindings/interconnect/qcom,qcm2290.h>
0010 #include <linux/clk.h>
0011 #include <linux/device.h>
0012 #include <linux/interconnect-provider.h>
0013 #include <linux/io.h>
0014 #include <linux/module.h>
0015 #include <linux/of_device.h>
0016 #include <linux/of_platform.h>
0017 #include <linux/platform_device.h>
0018 #include <linux/regmap.h>
0019 #include <linux/slab.h>
0020 
0021 #include "icc-rpm.h"
0022 #include "smd-rpm.h"
0023 
0024 enum {
0025     QCM2290_MASTER_APPSS_PROC = 1,
0026     QCM2290_MASTER_SNOC_BIMC_RT,
0027     QCM2290_MASTER_SNOC_BIMC_NRT,
0028     QCM2290_MASTER_SNOC_BIMC,
0029     QCM2290_MASTER_TCU_0,
0030     QCM2290_MASTER_GFX3D,
0031     QCM2290_MASTER_SNOC_CNOC,
0032     QCM2290_MASTER_QDSS_DAP,
0033     QCM2290_MASTER_CRYPTO_CORE0,
0034     QCM2290_MASTER_SNOC_CFG,
0035     QCM2290_MASTER_TIC,
0036     QCM2290_MASTER_ANOC_SNOC,
0037     QCM2290_MASTER_BIMC_SNOC,
0038     QCM2290_MASTER_PIMEM,
0039     QCM2290_MASTER_QDSS_BAM,
0040     QCM2290_MASTER_QUP_0,
0041     QCM2290_MASTER_IPA,
0042     QCM2290_MASTER_QDSS_ETR,
0043     QCM2290_MASTER_SDCC_1,
0044     QCM2290_MASTER_SDCC_2,
0045     QCM2290_MASTER_QPIC,
0046     QCM2290_MASTER_USB3_0,
0047     QCM2290_MASTER_QUP_CORE_0,
0048     QCM2290_MASTER_CAMNOC_SF,
0049     QCM2290_MASTER_VIDEO_P0,
0050     QCM2290_MASTER_VIDEO_PROC,
0051     QCM2290_MASTER_CAMNOC_HF,
0052     QCM2290_MASTER_MDP0,
0053 
0054     QCM2290_SLAVE_EBI1,
0055     QCM2290_SLAVE_BIMC_SNOC,
0056     QCM2290_SLAVE_BIMC_CFG,
0057     QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG,
0058     QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG,
0059     QCM2290_SLAVE_CAMERA_CFG,
0060     QCM2290_SLAVE_CLK_CTL,
0061     QCM2290_SLAVE_CRYPTO_0_CFG,
0062     QCM2290_SLAVE_DISPLAY_CFG,
0063     QCM2290_SLAVE_DISPLAY_THROTTLE_CFG,
0064     QCM2290_SLAVE_GPU_CFG,
0065     QCM2290_SLAVE_HWKM,
0066     QCM2290_SLAVE_IMEM_CFG,
0067     QCM2290_SLAVE_IPA_CFG,
0068     QCM2290_SLAVE_LPASS,
0069     QCM2290_SLAVE_MESSAGE_RAM,
0070     QCM2290_SLAVE_PDM,
0071     QCM2290_SLAVE_PIMEM_CFG,
0072     QCM2290_SLAVE_PKA_WRAPPER,
0073     QCM2290_SLAVE_PMIC_ARB,
0074     QCM2290_SLAVE_PRNG,
0075     QCM2290_SLAVE_QDSS_CFG,
0076     QCM2290_SLAVE_QM_CFG,
0077     QCM2290_SLAVE_QM_MPU_CFG,
0078     QCM2290_SLAVE_QPIC,
0079     QCM2290_SLAVE_QUP_0,
0080     QCM2290_SLAVE_SDCC_1,
0081     QCM2290_SLAVE_SDCC_2,
0082     QCM2290_SLAVE_SNOC_CFG,
0083     QCM2290_SLAVE_TCSR,
0084     QCM2290_SLAVE_USB3,
0085     QCM2290_SLAVE_VENUS_CFG,
0086     QCM2290_SLAVE_VENUS_THROTTLE_CFG,
0087     QCM2290_SLAVE_VSENSE_CTRL_CFG,
0088     QCM2290_SLAVE_SERVICE_CNOC,
0089     QCM2290_SLAVE_APPSS,
0090     QCM2290_SLAVE_SNOC_CNOC,
0091     QCM2290_SLAVE_IMEM,
0092     QCM2290_SLAVE_PIMEM,
0093     QCM2290_SLAVE_SNOC_BIMC,
0094     QCM2290_SLAVE_SERVICE_SNOC,
0095     QCM2290_SLAVE_QDSS_STM,
0096     QCM2290_SLAVE_TCU,
0097     QCM2290_SLAVE_ANOC_SNOC,
0098     QCM2290_SLAVE_QUP_CORE_0,
0099     QCM2290_SLAVE_SNOC_BIMC_NRT,
0100     QCM2290_SLAVE_SNOC_BIMC_RT,
0101 };
0102 
0103 /* Master nodes */
0104 static const u16 mas_appss_proc_links[] = {
0105     QCM2290_SLAVE_EBI1,
0106     QCM2290_SLAVE_BIMC_SNOC,
0107 };
0108 
0109 static struct qcom_icc_node mas_appss_proc = {
0110     .id = QCM2290_MASTER_APPSS_PROC,
0111     .name = "mas_apps_proc",
0112     .buswidth = 16,
0113     .qos.ap_owned = true,
0114     .qos.qos_port = 0,
0115     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0116     .qos.prio_level = 0,
0117     .qos.areq_prio = 0,
0118     .mas_rpm_id = 0,
0119     .slv_rpm_id = -1,
0120     .num_links = ARRAY_SIZE(mas_appss_proc_links),
0121     .links = mas_appss_proc_links,
0122 };
0123 
0124 static const u16 mas_snoc_bimc_rt_links[] = {
0125     QCM2290_SLAVE_EBI1,
0126 };
0127 
0128 static struct qcom_icc_node mas_snoc_bimc_rt = {
0129     .id = QCM2290_MASTER_SNOC_BIMC_RT,
0130     .name = "mas_snoc_bimc_rt",
0131     .buswidth = 16,
0132     .qos.ap_owned = true,
0133     .qos.qos_port = 2,
0134     .qos.qos_mode = NOC_QOS_MODE_BYPASS,
0135     .mas_rpm_id = 163,
0136     .slv_rpm_id = -1,
0137     .num_links = ARRAY_SIZE(mas_snoc_bimc_rt_links),
0138     .links = mas_snoc_bimc_rt_links,
0139 };
0140 
0141 static const u16 mas_snoc_bimc_nrt_links[] = {
0142     QCM2290_SLAVE_EBI1,
0143 };
0144 
0145 static struct qcom_icc_node mas_snoc_bimc_nrt = {
0146     .id = QCM2290_MASTER_SNOC_BIMC_NRT,
0147     .name = "mas_snoc_bimc_nrt",
0148     .buswidth = 16,
0149     .qos.ap_owned = true,
0150     .qos.qos_port = 2,
0151     .qos.qos_mode = NOC_QOS_MODE_BYPASS,
0152     .mas_rpm_id = 163,
0153     .slv_rpm_id = -1,
0154     .num_links = ARRAY_SIZE(mas_snoc_bimc_nrt_links),
0155     .links = mas_snoc_bimc_nrt_links,
0156 };
0157 
0158 static const u16 mas_snoc_bimc_links[] = {
0159     QCM2290_SLAVE_EBI1,
0160 };
0161 
0162 static struct qcom_icc_node mas_snoc_bimc = {
0163     .id = QCM2290_MASTER_SNOC_BIMC,
0164     .name = "mas_snoc_bimc",
0165     .buswidth = 16,
0166     .qos.ap_owned = true,
0167     .qos.qos_port = 2,
0168     .qos.qos_mode = NOC_QOS_MODE_BYPASS,
0169     .mas_rpm_id = 164,
0170     .slv_rpm_id = -1,
0171     .num_links = ARRAY_SIZE(mas_snoc_bimc_links),
0172     .links = mas_snoc_bimc_links,
0173 };
0174 
0175 static const u16 mas_tcu_0_links[] = {
0176     QCM2290_SLAVE_EBI1,
0177     QCM2290_SLAVE_BIMC_SNOC,
0178 };
0179 
0180 static struct qcom_icc_node mas_tcu_0 = {
0181     .id = QCM2290_MASTER_TCU_0,
0182     .name = "mas_tcu_0",
0183     .buswidth = 8,
0184     .qos.ap_owned = true,
0185     .qos.qos_port = 4,
0186     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0187     .qos.prio_level = 6,
0188     .qos.areq_prio = 6,
0189     .mas_rpm_id = 102,
0190     .slv_rpm_id = -1,
0191     .num_links = ARRAY_SIZE(mas_tcu_0_links),
0192     .links = mas_tcu_0_links,
0193 };
0194 
0195 static const u16 mas_snoc_cnoc_links[] = {
0196     QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG,
0197     QCM2290_SLAVE_SDCC_2,
0198     QCM2290_SLAVE_SDCC_1,
0199     QCM2290_SLAVE_QM_CFG,
0200     QCM2290_SLAVE_BIMC_CFG,
0201     QCM2290_SLAVE_USB3,
0202     QCM2290_SLAVE_QM_MPU_CFG,
0203     QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG,
0204     QCM2290_SLAVE_QDSS_CFG,
0205     QCM2290_SLAVE_PDM,
0206     QCM2290_SLAVE_IPA_CFG,
0207     QCM2290_SLAVE_DISPLAY_THROTTLE_CFG,
0208     QCM2290_SLAVE_TCSR,
0209     QCM2290_SLAVE_MESSAGE_RAM,
0210     QCM2290_SLAVE_PMIC_ARB,
0211     QCM2290_SLAVE_LPASS,
0212     QCM2290_SLAVE_DISPLAY_CFG,
0213     QCM2290_SLAVE_VENUS_CFG,
0214     QCM2290_SLAVE_GPU_CFG,
0215     QCM2290_SLAVE_IMEM_CFG,
0216     QCM2290_SLAVE_SNOC_CFG,
0217     QCM2290_SLAVE_SERVICE_CNOC,
0218     QCM2290_SLAVE_VENUS_THROTTLE_CFG,
0219     QCM2290_SLAVE_PKA_WRAPPER,
0220     QCM2290_SLAVE_HWKM,
0221     QCM2290_SLAVE_PRNG,
0222     QCM2290_SLAVE_VSENSE_CTRL_CFG,
0223     QCM2290_SLAVE_CRYPTO_0_CFG,
0224     QCM2290_SLAVE_PIMEM_CFG,
0225     QCM2290_SLAVE_QUP_0,
0226     QCM2290_SLAVE_CAMERA_CFG,
0227     QCM2290_SLAVE_CLK_CTL,
0228     QCM2290_SLAVE_QPIC,
0229 };
0230 
0231 static struct qcom_icc_node mas_snoc_cnoc = {
0232     .id = QCM2290_MASTER_SNOC_CNOC,
0233     .name = "mas_snoc_cnoc",
0234     .buswidth = 8,
0235     .qos.ap_owned = true,
0236     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0237     .mas_rpm_id = 52,
0238     .slv_rpm_id = -1,
0239     .num_links = ARRAY_SIZE(mas_snoc_cnoc_links),
0240     .links = mas_snoc_cnoc_links,
0241 };
0242 
0243 static const u16 mas_qdss_dap_links[] = {
0244     QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG,
0245     QCM2290_SLAVE_SDCC_2,
0246     QCM2290_SLAVE_SDCC_1,
0247     QCM2290_SLAVE_QM_CFG,
0248     QCM2290_SLAVE_BIMC_CFG,
0249     QCM2290_SLAVE_USB3,
0250     QCM2290_SLAVE_QM_MPU_CFG,
0251     QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG,
0252     QCM2290_SLAVE_QDSS_CFG,
0253     QCM2290_SLAVE_PDM,
0254     QCM2290_SLAVE_IPA_CFG,
0255     QCM2290_SLAVE_DISPLAY_THROTTLE_CFG,
0256     QCM2290_SLAVE_TCSR,
0257     QCM2290_SLAVE_MESSAGE_RAM,
0258     QCM2290_SLAVE_PMIC_ARB,
0259     QCM2290_SLAVE_LPASS,
0260     QCM2290_SLAVE_DISPLAY_CFG,
0261     QCM2290_SLAVE_VENUS_CFG,
0262     QCM2290_SLAVE_GPU_CFG,
0263     QCM2290_SLAVE_IMEM_CFG,
0264     QCM2290_SLAVE_SNOC_CFG,
0265     QCM2290_SLAVE_SERVICE_CNOC,
0266     QCM2290_SLAVE_VENUS_THROTTLE_CFG,
0267     QCM2290_SLAVE_PKA_WRAPPER,
0268     QCM2290_SLAVE_HWKM,
0269     QCM2290_SLAVE_PRNG,
0270     QCM2290_SLAVE_VSENSE_CTRL_CFG,
0271     QCM2290_SLAVE_CRYPTO_0_CFG,
0272     QCM2290_SLAVE_PIMEM_CFG,
0273     QCM2290_SLAVE_QUP_0,
0274     QCM2290_SLAVE_CAMERA_CFG,
0275     QCM2290_SLAVE_CLK_CTL,
0276     QCM2290_SLAVE_QPIC,
0277 };
0278 
0279 static struct qcom_icc_node mas_qdss_dap = {
0280     .id = QCM2290_MASTER_QDSS_DAP,
0281     .name = "mas_qdss_dap",
0282     .buswidth = 8,
0283     .qos.ap_owned = true,
0284     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0285     .mas_rpm_id = 49,
0286     .slv_rpm_id = -1,
0287     .num_links = ARRAY_SIZE(mas_qdss_dap_links),
0288     .links = mas_qdss_dap_links,
0289 };
0290 
0291 static const u16 mas_crypto_core0_links[] = {
0292     QCM2290_SLAVE_ANOC_SNOC
0293 };
0294 
0295 static struct qcom_icc_node mas_crypto_core0 = {
0296     .id = QCM2290_MASTER_CRYPTO_CORE0,
0297     .name = "mas_crypto_core0",
0298     .buswidth = 8,
0299     .qos.ap_owned = true,
0300     .qos.qos_port = 22,
0301     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0302     .qos.areq_prio = 2,
0303     .mas_rpm_id = 23,
0304     .slv_rpm_id = -1,
0305     .num_links = ARRAY_SIZE(mas_crypto_core0_links),
0306     .links = mas_crypto_core0_links,
0307 };
0308 
0309 static const u16 mas_qup_core_0_links[] = {
0310     QCM2290_SLAVE_QUP_CORE_0,
0311 };
0312 
0313 static struct qcom_icc_node mas_qup_core_0 = {
0314     .id = QCM2290_MASTER_QUP_CORE_0,
0315     .name = "mas_qup_core_0",
0316     .buswidth = 4,
0317     .mas_rpm_id = 170,
0318     .slv_rpm_id = -1,
0319     .num_links = ARRAY_SIZE(mas_qup_core_0_links),
0320     .links = mas_qup_core_0_links,
0321 };
0322 
0323 static const u16 mas_camnoc_sf_links[] = {
0324     QCM2290_SLAVE_SNOC_BIMC_NRT,
0325 };
0326 
0327 static struct qcom_icc_node mas_camnoc_sf = {
0328     .id = QCM2290_MASTER_CAMNOC_SF,
0329     .name = "mas_camnoc_sf",
0330     .buswidth = 32,
0331     .qos.ap_owned = true,
0332     .qos.qos_port = 4,
0333     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0334     .qos.areq_prio = 3,
0335     .mas_rpm_id = 172,
0336     .slv_rpm_id = -1,
0337     .num_links = ARRAY_SIZE(mas_camnoc_sf_links),
0338     .links = mas_camnoc_sf_links,
0339 };
0340 
0341 static const u16 mas_camnoc_hf_links[] = {
0342     QCM2290_SLAVE_SNOC_BIMC_RT,
0343 };
0344 
0345 static struct qcom_icc_node mas_camnoc_hf = {
0346     .id = QCM2290_MASTER_CAMNOC_HF,
0347     .name = "mas_camnoc_hf",
0348     .buswidth = 32,
0349     .qos.ap_owned = true,
0350     .qos.qos_port = 10,
0351     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0352     .qos.areq_prio = 3,
0353     .qos.urg_fwd_en = true,
0354     .mas_rpm_id = 173,
0355     .slv_rpm_id = -1,
0356     .num_links = ARRAY_SIZE(mas_camnoc_hf_links),
0357     .links = mas_camnoc_hf_links,
0358 };
0359 
0360 static const u16 mas_mdp0_links[] = {
0361     QCM2290_SLAVE_SNOC_BIMC_RT,
0362 };
0363 
0364 static struct qcom_icc_node mas_mdp0 = {
0365     .id = QCM2290_MASTER_MDP0,
0366     .name = "mas_mdp0",
0367     .buswidth = 16,
0368     .qos.ap_owned = true,
0369     .qos.qos_port = 5,
0370     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0371     .qos.areq_prio = 3,
0372     .qos.urg_fwd_en = true,
0373     .mas_rpm_id = 8,
0374     .slv_rpm_id = -1,
0375     .num_links = ARRAY_SIZE(mas_mdp0_links),
0376     .links = mas_mdp0_links,
0377 };
0378 
0379 static const u16 mas_video_p0_links[] = {
0380     QCM2290_SLAVE_SNOC_BIMC_NRT,
0381 };
0382 
0383 static struct qcom_icc_node mas_video_p0 = {
0384     .id = QCM2290_MASTER_VIDEO_P0,
0385     .name = "mas_video_p0",
0386     .buswidth = 16,
0387     .qos.ap_owned = true,
0388     .qos.qos_port = 9,
0389     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0390     .qos.areq_prio = 3,
0391     .qos.urg_fwd_en = true,
0392     .mas_rpm_id = 9,
0393     .slv_rpm_id = -1,
0394     .num_links = ARRAY_SIZE(mas_video_p0_links),
0395     .links = mas_video_p0_links,
0396 };
0397 
0398 static const u16 mas_video_proc_links[] = {
0399     QCM2290_SLAVE_SNOC_BIMC_NRT,
0400 };
0401 
0402 static struct qcom_icc_node mas_video_proc = {
0403     .id = QCM2290_MASTER_VIDEO_PROC,
0404     .name = "mas_video_proc",
0405     .buswidth = 8,
0406     .qos.ap_owned = true,
0407     .qos.qos_port = 13,
0408     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0409     .qos.areq_prio = 4,
0410     .mas_rpm_id = 168,
0411     .slv_rpm_id = -1,
0412     .num_links = ARRAY_SIZE(mas_video_proc_links),
0413     .links = mas_video_proc_links,
0414 };
0415 
0416 static const u16 mas_snoc_cfg_links[] = {
0417     QCM2290_SLAVE_SERVICE_SNOC,
0418 };
0419 
0420 static struct qcom_icc_node mas_snoc_cfg = {
0421     .id = QCM2290_MASTER_SNOC_CFG,
0422     .name = "mas_snoc_cfg",
0423     .buswidth = 4,
0424     .qos.ap_owned = true,
0425     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0426     .mas_rpm_id = 20,
0427     .slv_rpm_id = -1,
0428     .num_links = ARRAY_SIZE(mas_snoc_cfg_links),
0429     .links = mas_snoc_cfg_links,
0430 };
0431 
0432 static const u16 mas_tic_links[] = {
0433     QCM2290_SLAVE_PIMEM,
0434     QCM2290_SLAVE_IMEM,
0435     QCM2290_SLAVE_APPSS,
0436     QCM2290_SLAVE_SNOC_BIMC,
0437     QCM2290_SLAVE_SNOC_CNOC,
0438     QCM2290_SLAVE_TCU,
0439     QCM2290_SLAVE_QDSS_STM,
0440 };
0441 
0442 static struct qcom_icc_node mas_tic = {
0443     .id = QCM2290_MASTER_TIC,
0444     .name = "mas_tic",
0445     .buswidth = 4,
0446     .qos.ap_owned = true,
0447     .qos.qos_port = 8,
0448     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0449     .qos.areq_prio = 2,
0450     .mas_rpm_id = 51,
0451     .slv_rpm_id = -1,
0452     .num_links = ARRAY_SIZE(mas_tic_links),
0453     .links = mas_tic_links,
0454 };
0455 
0456 static const u16 mas_anoc_snoc_links[] = {
0457     QCM2290_SLAVE_PIMEM,
0458     QCM2290_SLAVE_IMEM,
0459     QCM2290_SLAVE_APPSS,
0460     QCM2290_SLAVE_SNOC_BIMC,
0461     QCM2290_SLAVE_SNOC_CNOC,
0462     QCM2290_SLAVE_TCU,
0463     QCM2290_SLAVE_QDSS_STM,
0464 };
0465 
0466 static struct qcom_icc_node mas_anoc_snoc = {
0467     .id = QCM2290_MASTER_ANOC_SNOC,
0468     .name = "mas_anoc_snoc",
0469     .buswidth = 16,
0470     .mas_rpm_id = 110,
0471     .slv_rpm_id = -1,
0472     .num_links = ARRAY_SIZE(mas_anoc_snoc_links),
0473     .links = mas_anoc_snoc_links,
0474 };
0475 
0476 static const u16 mas_bimc_snoc_links[] = {
0477     QCM2290_SLAVE_PIMEM,
0478     QCM2290_SLAVE_IMEM,
0479     QCM2290_SLAVE_APPSS,
0480     QCM2290_SLAVE_SNOC_CNOC,
0481     QCM2290_SLAVE_TCU,
0482     QCM2290_SLAVE_QDSS_STM,
0483 };
0484 
0485 static struct qcom_icc_node mas_bimc_snoc = {
0486     .id = QCM2290_MASTER_BIMC_SNOC,
0487     .name = "mas_bimc_snoc",
0488     .buswidth = 8,
0489     .mas_rpm_id = 21,
0490     .slv_rpm_id = -1,
0491     .num_links = ARRAY_SIZE(mas_bimc_snoc_links),
0492     .links = mas_bimc_snoc_links,
0493 };
0494 
0495 static const u16 mas_pimem_links[] = {
0496     QCM2290_SLAVE_IMEM,
0497     QCM2290_SLAVE_SNOC_BIMC,
0498 };
0499 
0500 static struct qcom_icc_node mas_pimem = {
0501     .id = QCM2290_MASTER_PIMEM,
0502     .name = "mas_pimem",
0503     .buswidth = 8,
0504     .qos.ap_owned = true,
0505     .qos.qos_port = 20,
0506     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0507     .qos.areq_prio = 2,
0508     .mas_rpm_id = 113,
0509     .slv_rpm_id = -1,
0510     .num_links = ARRAY_SIZE(mas_pimem_links),
0511     .links = mas_pimem_links,
0512 };
0513 
0514 static const u16 mas_qdss_bam_links[] = {
0515     QCM2290_SLAVE_ANOC_SNOC,
0516 };
0517 
0518 static struct qcom_icc_node mas_qdss_bam = {
0519     .id = QCM2290_MASTER_QDSS_BAM,
0520     .name = "mas_qdss_bam",
0521     .buswidth = 4,
0522     .qos.ap_owned = true,
0523     .qos.qos_port = 2,
0524     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0525     .qos.areq_prio = 2,
0526     .mas_rpm_id = 19,
0527     .slv_rpm_id = -1,
0528     .num_links = ARRAY_SIZE(mas_qdss_bam_links),
0529     .links = mas_qdss_bam_links,
0530 };
0531 
0532 static const u16 mas_qup_0_links[] = {
0533     QCM2290_SLAVE_ANOC_SNOC,
0534 };
0535 
0536 static struct qcom_icc_node mas_qup_0 = {
0537     .id = QCM2290_MASTER_QUP_0,
0538     .name = "mas_qup_0",
0539     .buswidth = 4,
0540     .qos.ap_owned = true,
0541     .qos.qos_port = 0,
0542     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0543     .qos.areq_prio = 2,
0544     .mas_rpm_id = 166,
0545     .slv_rpm_id = -1,
0546     .num_links = ARRAY_SIZE(mas_qup_0_links),
0547     .links = mas_qup_0_links,
0548 };
0549 
0550 static const u16 mas_ipa_links[] = {
0551     QCM2290_SLAVE_ANOC_SNOC,
0552 };
0553 
0554 static struct qcom_icc_node mas_ipa = {
0555     .id = QCM2290_MASTER_IPA,
0556     .name = "mas_ipa",
0557     .buswidth = 8,
0558     .qos.ap_owned = true,
0559     .qos.qos_port = 3,
0560     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0561     .qos.areq_prio = 2,
0562     .mas_rpm_id = 59,
0563     .slv_rpm_id = -1,
0564     .num_links = ARRAY_SIZE(mas_ipa_links),
0565     .links = mas_ipa_links,
0566 };
0567 
0568 static const u16 mas_qdss_etr_links[] = {
0569     QCM2290_SLAVE_ANOC_SNOC,
0570 };
0571 
0572 static struct qcom_icc_node mas_qdss_etr = {
0573     .id = QCM2290_MASTER_QDSS_ETR,
0574     .name = "mas_qdss_etr",
0575     .buswidth = 8,
0576     .qos.ap_owned = true,
0577     .qos.qos_port = 12,
0578     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0579     .qos.areq_prio = 2,
0580     .mas_rpm_id = 31,
0581     .slv_rpm_id = -1,
0582     .num_links = ARRAY_SIZE(mas_qdss_etr_links),
0583     .links = mas_qdss_etr_links,
0584 };
0585 
0586 static const u16 mas_sdcc_1_links[] = {
0587     QCM2290_SLAVE_ANOC_SNOC,
0588 };
0589 
0590 static struct qcom_icc_node mas_sdcc_1 = {
0591     .id = QCM2290_MASTER_SDCC_1,
0592     .name = "mas_sdcc_1",
0593     .buswidth = 8,
0594     .qos.ap_owned = true,
0595     .qos.qos_port = 17,
0596     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0597     .qos.areq_prio = 2,
0598     .mas_rpm_id = 33,
0599     .slv_rpm_id = -1,
0600     .num_links = ARRAY_SIZE(mas_sdcc_1_links),
0601     .links = mas_sdcc_1_links,
0602 };
0603 
0604 static const u16 mas_sdcc_2_links[] = {
0605     QCM2290_SLAVE_ANOC_SNOC,
0606 };
0607 
0608 static struct qcom_icc_node mas_sdcc_2 = {
0609     .id = QCM2290_MASTER_SDCC_2,
0610     .name = "mas_sdcc_2",
0611     .buswidth = 8,
0612     .qos.ap_owned = true,
0613     .qos.qos_port = 23,
0614     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0615     .qos.areq_prio = 2,
0616     .mas_rpm_id = 35,
0617     .slv_rpm_id = -1,
0618     .num_links = ARRAY_SIZE(mas_sdcc_2_links),
0619     .links = mas_sdcc_2_links,
0620 };
0621 
0622 static const u16 mas_qpic_links[] = {
0623     QCM2290_SLAVE_ANOC_SNOC,
0624 };
0625 
0626 static struct qcom_icc_node mas_qpic = {
0627     .id = QCM2290_MASTER_QPIC,
0628     .name = "mas_qpic",
0629     .buswidth = 4,
0630     .qos.ap_owned = true,
0631     .qos.qos_port = 1,
0632     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0633     .qos.areq_prio = 2,
0634     .mas_rpm_id = 58,
0635     .slv_rpm_id = -1,
0636     .num_links = ARRAY_SIZE(mas_qpic_links),
0637     .links = mas_qpic_links,
0638 };
0639 
0640 static const u16 mas_usb3_0_links[] = {
0641     QCM2290_SLAVE_ANOC_SNOC,
0642 };
0643 
0644 static struct qcom_icc_node mas_usb3_0 = {
0645     .id = QCM2290_MASTER_USB3_0,
0646     .name = "mas_usb3_0",
0647     .buswidth = 8,
0648     .qos.ap_owned = true,
0649     .qos.qos_port = 24,
0650     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0651     .qos.areq_prio = 2,
0652     .mas_rpm_id = 32,
0653     .slv_rpm_id = -1,
0654     .num_links = ARRAY_SIZE(mas_usb3_0_links),
0655     .links = mas_usb3_0_links,
0656 };
0657 
0658 static const u16 mas_gfx3d_links[] = {
0659     QCM2290_SLAVE_EBI1,
0660 };
0661 
0662 static struct qcom_icc_node mas_gfx3d = {
0663     .id = QCM2290_MASTER_GFX3D,
0664     .name = "mas_gfx3d",
0665     .buswidth = 32,
0666     .qos.ap_owned = true,
0667     .qos.qos_port = 1,
0668     .qos.qos_mode = NOC_QOS_MODE_FIXED,
0669     .qos.prio_level = 0,
0670     .qos.areq_prio = 0,
0671     .mas_rpm_id = 6,
0672     .slv_rpm_id = -1,
0673     .num_links = ARRAY_SIZE(mas_gfx3d_links),
0674     .links = mas_gfx3d_links,
0675 };
0676 
0677 /* Slave nodes */
0678 static struct qcom_icc_node slv_ebi1 = {
0679     .name = "slv_ebi1",
0680     .id = QCM2290_SLAVE_EBI1,
0681     .buswidth = 8,
0682     .mas_rpm_id = -1,
0683     .slv_rpm_id = 0,
0684 };
0685 
0686 static const u16 slv_bimc_snoc_links[] = {
0687     QCM2290_MASTER_BIMC_SNOC,
0688 };
0689 
0690 static struct qcom_icc_node slv_bimc_snoc = {
0691     .name = "slv_bimc_snoc",
0692     .id = QCM2290_SLAVE_BIMC_SNOC,
0693     .buswidth = 8,
0694     .mas_rpm_id = -1,
0695     .slv_rpm_id = 2,
0696     .num_links = ARRAY_SIZE(slv_bimc_snoc_links),
0697     .links = slv_bimc_snoc_links,
0698 };
0699 
0700 static struct qcom_icc_node slv_bimc_cfg = {
0701     .name = "slv_bimc_cfg",
0702     .id = QCM2290_SLAVE_BIMC_CFG,
0703     .buswidth = 4,
0704     .qos.ap_owned = true,
0705     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0706     .mas_rpm_id = -1,
0707     .slv_rpm_id = 56,
0708 };
0709 
0710 static struct qcom_icc_node slv_camera_nrt_throttle_cfg = {
0711     .name = "slv_camera_nrt_throttle_cfg",
0712     .id = QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG,
0713     .buswidth = 4,
0714     .qos.ap_owned = true,
0715     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0716     .mas_rpm_id = -1,
0717     .slv_rpm_id = 271,
0718 };
0719 
0720 static struct qcom_icc_node slv_camera_rt_throttle_cfg = {
0721     .name = "slv_camera_rt_throttle_cfg",
0722     .id = QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG,
0723     .buswidth = 4,
0724     .qos.ap_owned = true,
0725     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0726     .mas_rpm_id = -1,
0727     .slv_rpm_id = 279,
0728 };
0729 
0730 static struct qcom_icc_node slv_camera_cfg = {
0731     .name = "slv_camera_cfg",
0732     .id = QCM2290_SLAVE_CAMERA_CFG,
0733     .buswidth = 4,
0734     .qos.ap_owned = true,
0735     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0736     .mas_rpm_id = -1,
0737     .slv_rpm_id = 3,
0738 };
0739 
0740 static struct qcom_icc_node slv_clk_ctl = {
0741     .name = "slv_clk_ctl",
0742     .id = QCM2290_SLAVE_CLK_CTL,
0743     .buswidth = 4,
0744     .qos.ap_owned = true,
0745     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0746     .mas_rpm_id = -1,
0747     .slv_rpm_id = 47,
0748 };
0749 
0750 static struct qcom_icc_node slv_crypto_0_cfg = {
0751     .name = "slv_crypto_0_cfg",
0752     .id = QCM2290_SLAVE_CRYPTO_0_CFG,
0753     .buswidth = 4,
0754     .qos.ap_owned = true,
0755     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0756     .mas_rpm_id = -1,
0757     .slv_rpm_id = 52,
0758 };
0759 
0760 static struct qcom_icc_node slv_display_cfg = {
0761     .name = "slv_display_cfg",
0762     .id = QCM2290_SLAVE_DISPLAY_CFG,
0763     .buswidth = 4,
0764     .qos.ap_owned = true,
0765     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0766     .mas_rpm_id = -1,
0767     .slv_rpm_id = 4,
0768 };
0769 
0770 static struct qcom_icc_node slv_display_throttle_cfg = {
0771     .name = "slv_display_throttle_cfg",
0772     .id = QCM2290_SLAVE_DISPLAY_THROTTLE_CFG,
0773     .buswidth = 4,
0774     .qos.ap_owned = true,
0775     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0776     .mas_rpm_id = -1,
0777     .slv_rpm_id = 156,
0778 };
0779 
0780 static struct qcom_icc_node slv_gpu_cfg = {
0781     .name = "slv_gpu_cfg",
0782     .id = QCM2290_SLAVE_GPU_CFG,
0783     .buswidth = 8,
0784     .qos.ap_owned = true,
0785     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0786     .mas_rpm_id = -1,
0787     .slv_rpm_id = 275,
0788 };
0789 
0790 static struct qcom_icc_node slv_hwkm = {
0791     .name = "slv_hwkm",
0792     .id = QCM2290_SLAVE_HWKM,
0793     .buswidth = 4,
0794     .qos.ap_owned = true,
0795     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0796     .mas_rpm_id = -1,
0797     .slv_rpm_id = 280,
0798 };
0799 
0800 static struct qcom_icc_node slv_imem_cfg = {
0801     .name = "slv_imem_cfg",
0802     .id = QCM2290_SLAVE_IMEM_CFG,
0803     .buswidth = 4,
0804     .qos.ap_owned = true,
0805     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0806     .mas_rpm_id = -1,
0807     .slv_rpm_id = 54,
0808 };
0809 
0810 static struct qcom_icc_node slv_ipa_cfg = {
0811     .name = "slv_ipa_cfg",
0812     .id = QCM2290_SLAVE_IPA_CFG,
0813     .buswidth = 4,
0814     .qos.ap_owned = true,
0815     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0816     .mas_rpm_id = -1,
0817     .slv_rpm_id = 183,
0818 };
0819 
0820 static struct qcom_icc_node slv_lpass = {
0821     .name = "slv_lpass",
0822     .id = QCM2290_SLAVE_LPASS,
0823     .buswidth = 4,
0824     .qos.ap_owned = true,
0825     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0826     .mas_rpm_id = -1,
0827     .slv_rpm_id = 21,
0828 };
0829 
0830 static struct qcom_icc_node slv_message_ram = {
0831     .name = "slv_message_ram",
0832     .id = QCM2290_SLAVE_MESSAGE_RAM,
0833     .buswidth = 4,
0834     .qos.ap_owned = true,
0835     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0836     .mas_rpm_id = -1,
0837     .slv_rpm_id = 55,
0838 };
0839 
0840 static struct qcom_icc_node slv_pdm = {
0841     .name = "slv_pdm",
0842     .id = QCM2290_SLAVE_PDM,
0843     .buswidth = 4,
0844     .qos.ap_owned = true,
0845     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0846     .mas_rpm_id = -1,
0847     .slv_rpm_id = 41,
0848 };
0849 
0850 static struct qcom_icc_node slv_pimem_cfg = {
0851     .name = "slv_pimem_cfg",
0852     .id = QCM2290_SLAVE_PIMEM_CFG,
0853     .buswidth = 4,
0854     .qos.ap_owned = true,
0855     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0856     .mas_rpm_id = -1,
0857     .slv_rpm_id = 167,
0858 };
0859 
0860 static struct qcom_icc_node slv_pka_wrapper = {
0861     .name = "slv_pka_wrapper",
0862     .id = QCM2290_SLAVE_PKA_WRAPPER,
0863     .buswidth = 4,
0864     .qos.ap_owned = true,
0865     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0866     .mas_rpm_id = -1,
0867     .slv_rpm_id = 281,
0868 };
0869 
0870 static struct qcom_icc_node slv_pmic_arb = {
0871     .name = "slv_pmic_arb",
0872     .id = QCM2290_SLAVE_PMIC_ARB,
0873     .buswidth = 4,
0874     .qos.ap_owned = true,
0875     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0876     .mas_rpm_id = -1,
0877     .slv_rpm_id = 59,
0878 };
0879 
0880 static struct qcom_icc_node slv_prng = {
0881     .name = "slv_prng",
0882     .id = QCM2290_SLAVE_PRNG,
0883     .buswidth = 4,
0884     .qos.ap_owned = true,
0885     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0886     .mas_rpm_id = -1,
0887     .slv_rpm_id = 44,
0888 };
0889 
0890 static struct qcom_icc_node slv_qdss_cfg = {
0891     .name = "slv_qdss_cfg",
0892     .id = QCM2290_SLAVE_QDSS_CFG,
0893     .buswidth = 4,
0894     .qos.ap_owned = true,
0895     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0896     .mas_rpm_id = -1,
0897     .slv_rpm_id = 63,
0898 };
0899 
0900 static struct qcom_icc_node slv_qm_cfg = {
0901     .name = "slv_qm_cfg",
0902     .id = QCM2290_SLAVE_QM_CFG,
0903     .buswidth = 4,
0904     .qos.ap_owned = true,
0905     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0906     .mas_rpm_id = -1,
0907     .slv_rpm_id = 212,
0908 };
0909 
0910 static struct qcom_icc_node slv_qm_mpu_cfg = {
0911     .name = "slv_qm_mpu_cfg",
0912     .id = QCM2290_SLAVE_QM_MPU_CFG,
0913     .buswidth = 4,
0914     .qos.ap_owned = true,
0915     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0916     .mas_rpm_id = -1,
0917     .slv_rpm_id = 231,
0918 };
0919 
0920 static struct qcom_icc_node slv_qpic = {
0921     .name = "slv_qpic",
0922     .id = QCM2290_SLAVE_QPIC,
0923     .buswidth = 4,
0924     .qos.ap_owned = true,
0925     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0926     .mas_rpm_id = -1,
0927     .slv_rpm_id = 80,
0928 };
0929 
0930 static struct qcom_icc_node slv_qup_0 = {
0931     .name = "slv_qup_0",
0932     .id = QCM2290_SLAVE_QUP_0,
0933     .buswidth = 4,
0934     .qos.ap_owned = true,
0935     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0936     .mas_rpm_id = -1,
0937     .slv_rpm_id = 261,
0938 };
0939 
0940 static struct qcom_icc_node slv_sdcc_1 = {
0941     .name = "slv_sdcc_1",
0942     .id = QCM2290_SLAVE_SDCC_1,
0943     .buswidth = 4,
0944     .qos.ap_owned = true,
0945     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0946     .mas_rpm_id = -1,
0947     .slv_rpm_id = 31,
0948 };
0949 
0950 static struct qcom_icc_node slv_sdcc_2 = {
0951     .name = "slv_sdcc_2",
0952     .id = QCM2290_SLAVE_SDCC_2,
0953     .buswidth = 4,
0954     .qos.ap_owned = true,
0955     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0956     .mas_rpm_id = -1,
0957     .slv_rpm_id = 33,
0958 };
0959 
0960 static const u16 slv_snoc_cfg_links[] = {
0961     QCM2290_MASTER_SNOC_CFG,
0962 };
0963 
0964 static struct qcom_icc_node slv_snoc_cfg = {
0965     .name = "slv_snoc_cfg",
0966     .id = QCM2290_SLAVE_SNOC_CFG,
0967     .buswidth = 4,
0968     .qos.ap_owned = true,
0969     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0970     .mas_rpm_id = -1,
0971     .slv_rpm_id = 70,
0972     .num_links = ARRAY_SIZE(slv_snoc_cfg_links),
0973     .links = slv_snoc_cfg_links,
0974 };
0975 
0976 static struct qcom_icc_node slv_tcsr = {
0977     .name = "slv_tcsr",
0978     .id = QCM2290_SLAVE_TCSR,
0979     .buswidth = 4,
0980     .qos.ap_owned = true,
0981     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0982     .mas_rpm_id = -1,
0983     .slv_rpm_id = 50,
0984 };
0985 
0986 static struct qcom_icc_node slv_usb3 = {
0987     .name = "slv_usb3",
0988     .id = QCM2290_SLAVE_USB3,
0989     .buswidth = 4,
0990     .qos.ap_owned = true,
0991     .qos.qos_mode = NOC_QOS_MODE_INVALID,
0992     .mas_rpm_id = -1,
0993     .slv_rpm_id = 22,
0994 };
0995 
0996 static struct qcom_icc_node slv_venus_cfg = {
0997     .name = "slv_venus_cfg",
0998     .id = QCM2290_SLAVE_VENUS_CFG,
0999     .buswidth = 4,
1000     .qos.ap_owned = true,
1001     .qos.qos_mode = NOC_QOS_MODE_INVALID,
1002     .mas_rpm_id = -1,
1003     .slv_rpm_id = 10,
1004 };
1005 
1006 static struct qcom_icc_node slv_venus_throttle_cfg = {
1007     .name = "slv_venus_throttle_cfg",
1008     .id = QCM2290_SLAVE_VENUS_THROTTLE_CFG,
1009     .buswidth = 4,
1010     .qos.ap_owned = true,
1011     .qos.qos_mode = NOC_QOS_MODE_INVALID,
1012     .mas_rpm_id = -1,
1013     .slv_rpm_id = 178,
1014 };
1015 
1016 static struct qcom_icc_node slv_vsense_ctrl_cfg = {
1017     .name = "slv_vsense_ctrl_cfg",
1018     .id = QCM2290_SLAVE_VSENSE_CTRL_CFG,
1019     .buswidth = 4,
1020     .qos.ap_owned = true,
1021     .qos.qos_mode = NOC_QOS_MODE_INVALID,
1022     .mas_rpm_id = -1,
1023     .slv_rpm_id = 263,
1024 };
1025 
1026 static struct qcom_icc_node slv_service_cnoc = {
1027     .name = "slv_service_cnoc",
1028     .id = QCM2290_SLAVE_SERVICE_CNOC,
1029     .buswidth = 4,
1030     .qos.ap_owned = true,
1031     .qos.qos_mode = NOC_QOS_MODE_INVALID,
1032     .mas_rpm_id = -1,
1033     .slv_rpm_id = 76,
1034 };
1035 
1036 static struct qcom_icc_node slv_qup_core_0 = {
1037     .name = "slv_qup_core_0",
1038     .id = QCM2290_SLAVE_QUP_CORE_0,
1039     .buswidth = 4,
1040     .qos.ap_owned = true,
1041     .qos.qos_mode = NOC_QOS_MODE_INVALID,
1042     .mas_rpm_id = -1,
1043     .slv_rpm_id = 264,
1044 };
1045 
1046 static const u16 slv_snoc_bimc_nrt_links[] = {
1047     QCM2290_MASTER_SNOC_BIMC_NRT,
1048 };
1049 
1050 static struct qcom_icc_node slv_snoc_bimc_nrt = {
1051     .name = "slv_snoc_bimc_nrt",
1052     .id = QCM2290_SLAVE_SNOC_BIMC_NRT,
1053     .buswidth = 16,
1054     .qos.ap_owned = true,
1055     .qos.qos_mode = NOC_QOS_MODE_INVALID,
1056     .mas_rpm_id = -1,
1057     .slv_rpm_id = 259,
1058     .num_links = ARRAY_SIZE(slv_snoc_bimc_nrt_links),
1059     .links = slv_snoc_bimc_nrt_links,
1060 };
1061 
1062 static const u16 slv_snoc_bimc_rt_links[] = {
1063     QCM2290_MASTER_SNOC_BIMC_RT,
1064 };
1065 
1066 static struct qcom_icc_node slv_snoc_bimc_rt = {
1067     .name = "slv_snoc_bimc_rt",
1068     .id = QCM2290_SLAVE_SNOC_BIMC_RT,
1069     .buswidth = 16,
1070     .qos.ap_owned = true,
1071     .qos.qos_mode = NOC_QOS_MODE_INVALID,
1072     .mas_rpm_id = -1,
1073     .slv_rpm_id = 260,
1074     .num_links = ARRAY_SIZE(slv_snoc_bimc_rt_links),
1075     .links = slv_snoc_bimc_rt_links,
1076 };
1077 
1078 static struct qcom_icc_node slv_appss = {
1079     .name = "slv_appss",
1080     .id = QCM2290_SLAVE_APPSS,
1081     .buswidth = 8,
1082     .qos.ap_owned = true,
1083     .qos.qos_mode = NOC_QOS_MODE_INVALID,
1084     .mas_rpm_id = -1,
1085     .slv_rpm_id = 20,
1086 };
1087 
1088 static const u16 slv_snoc_cnoc_links[] = {
1089     QCM2290_MASTER_SNOC_CNOC,
1090 };
1091 
1092 static struct qcom_icc_node slv_snoc_cnoc = {
1093     .name = "slv_snoc_cnoc",
1094     .id = QCM2290_SLAVE_SNOC_CNOC,
1095     .buswidth = 8,
1096     .mas_rpm_id = -1,
1097     .slv_rpm_id = 25,
1098     .num_links = ARRAY_SIZE(slv_snoc_cnoc_links),
1099     .links = slv_snoc_cnoc_links,
1100 };
1101 
1102 static struct qcom_icc_node slv_imem = {
1103     .name = "slv_imem",
1104     .id = QCM2290_SLAVE_IMEM,
1105     .buswidth = 8,
1106     .mas_rpm_id = -1,
1107     .slv_rpm_id = 26,
1108 };
1109 
1110 static struct qcom_icc_node slv_pimem = {
1111     .name = "slv_pimem",
1112     .id = QCM2290_SLAVE_PIMEM,
1113     .buswidth = 8,
1114     .qos.ap_owned = true,
1115     .qos.qos_mode = NOC_QOS_MODE_INVALID,
1116     .mas_rpm_id = -1,
1117     .slv_rpm_id = 166,
1118 };
1119 
1120 static const u16 slv_snoc_bimc_links[] = {
1121     QCM2290_MASTER_SNOC_BIMC,
1122 };
1123 
1124 static struct qcom_icc_node slv_snoc_bimc = {
1125     .name = "slv_snoc_bimc",
1126     .id = QCM2290_SLAVE_SNOC_BIMC,
1127     .buswidth = 16,
1128     .mas_rpm_id = -1,
1129     .slv_rpm_id = 24,
1130     .num_links = ARRAY_SIZE(slv_snoc_bimc_links),
1131     .links = slv_snoc_bimc_links,
1132 };
1133 
1134 static struct qcom_icc_node slv_service_snoc = {
1135     .name = "slv_service_snoc",
1136     .id = QCM2290_SLAVE_SERVICE_SNOC,
1137     .buswidth = 4,
1138     .qos.ap_owned = true,
1139     .qos.qos_mode = NOC_QOS_MODE_INVALID,
1140     .mas_rpm_id = -1,
1141     .slv_rpm_id = 29,
1142 };
1143 
1144 static struct qcom_icc_node slv_qdss_stm = {
1145     .name = "slv_qdss_stm",
1146     .id = QCM2290_SLAVE_QDSS_STM,
1147     .buswidth = 4,
1148     .mas_rpm_id = -1,
1149     .slv_rpm_id = 30,
1150 };
1151 
1152 static struct qcom_icc_node slv_tcu = {
1153     .name = "slv_tcu",
1154     .id = QCM2290_SLAVE_TCU,
1155     .buswidth = 8,
1156     .qos.ap_owned = true,
1157     .qos.qos_mode = NOC_QOS_MODE_INVALID,
1158     .mas_rpm_id = -1,
1159     .slv_rpm_id = 133,
1160 };
1161 
1162 static const u16 slv_anoc_snoc_links[] = {
1163     QCM2290_MASTER_ANOC_SNOC,
1164 };
1165 
1166 static struct qcom_icc_node slv_anoc_snoc = {
1167     .name = "slv_anoc_snoc",
1168     .id = QCM2290_SLAVE_ANOC_SNOC,
1169     .buswidth = 16,
1170     .mas_rpm_id = -1,
1171     .slv_rpm_id = 141,
1172     .num_links = ARRAY_SIZE(slv_anoc_snoc_links),
1173     .links = slv_anoc_snoc_links,
1174 };
1175 
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,
1186 };
1187 
1188 static const struct regmap_config qcm2290_bimc_regmap_config = {
1189     .reg_bits   = 32,
1190     .reg_stride = 4,
1191     .val_bits   = 32,
1192     .max_register   = 0x80000,
1193     .fast_io    = true,
1194 };
1195 
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,
1203 };
1204 
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,
1241 };
1242 
1243 static const struct regmap_config qcm2290_cnoc_regmap_config = {
1244     .reg_bits   = 32,
1245     .reg_stride = 4,
1246     .val_bits   = 32,
1247     .max_register   = 0x8200,
1248     .fast_io    = true,
1249 };
1250 
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,
1256 };
1257 
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,
1282 };
1283 
1284 static const struct regmap_config qcm2290_snoc_regmap_config = {
1285     .reg_bits   = 32,
1286     .reg_stride = 4,
1287     .val_bits   = 32,
1288     .max_register   = 0x60200,
1289     .fast_io    = true,
1290 };
1291 
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,
1299 };
1300 
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
1304 };
1305 
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),
1310 };
1311 
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,
1317 };
1318 
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,
1325 };
1326 
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,
1331 };
1332 
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,
1339 };
1340 
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 },
1348     { },
1349 };
1350 MODULE_DEVICE_TABLE(of, qcm2290_noc_of_match);
1351 
1352 static struct platform_driver qcm2290_noc_driver = {
1353     .probe = qnoc_probe,
1354     .remove = qnoc_remove,
1355     .driver = {
1356         .name = "qnoc-qcm2290",
1357         .of_match_table = qcm2290_noc_of_match,
1358     },
1359 };
1360 module_platform_driver(qcm2290_noc_driver);
1361 
1362 MODULE_DESCRIPTION("Qualcomm QCM2290 NoC driver");
1363 MODULE_LICENSE("GPL v2");