1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Qualcomm QCM2290 Network-on-Chip (NoC) QoS driver 4 * 5 * Copyright (c) 2021, Linaro Ltd. 6 * 7 */ 8 9 #include <dt-bindings/interconnect/qcom,qcm2290.h> 10 #include <linux/device.h> 11 #include <linux/interconnect-provider.h> 12 #include <linux/io.h> 13 #include <linux/mod_devicetable.h> 14 #include <linux/module.h> 15 #include <linux/platform_device.h> 16 #include <linux/regmap.h> 17 #include <linux/slab.h> 18 19 #include "icc-rpm.h" 20 21 enum { 22 QCM2290_MASTER_APPSS_PROC = 1, 23 QCM2290_MASTER_SNOC_BIMC_RT, 24 QCM2290_MASTER_SNOC_BIMC_NRT, 25 QCM2290_MASTER_SNOC_BIMC, 26 QCM2290_MASTER_TCU_0, 27 QCM2290_MASTER_GFX3D, 28 QCM2290_MASTER_SNOC_CNOC, 29 QCM2290_MASTER_QDSS_DAP, 30 QCM2290_MASTER_CRYPTO_CORE0, 31 QCM2290_MASTER_SNOC_CFG, 32 QCM2290_MASTER_TIC, 33 QCM2290_MASTER_ANOC_SNOC, 34 QCM2290_MASTER_BIMC_SNOC, 35 QCM2290_MASTER_PIMEM, 36 QCM2290_MASTER_QDSS_BAM, 37 QCM2290_MASTER_QUP_0, 38 QCM2290_MASTER_IPA, 39 QCM2290_MASTER_QDSS_ETR, 40 QCM2290_MASTER_SDCC_1, 41 QCM2290_MASTER_SDCC_2, 42 QCM2290_MASTER_QPIC, 43 QCM2290_MASTER_USB3_0, 44 QCM2290_MASTER_QUP_CORE_0, 45 QCM2290_MASTER_CAMNOC_SF, 46 QCM2290_MASTER_VIDEO_P0, 47 QCM2290_MASTER_VIDEO_PROC, 48 QCM2290_MASTER_CAMNOC_HF, 49 QCM2290_MASTER_MDP0, 50 51 QCM2290_SLAVE_EBI1, 52 QCM2290_SLAVE_BIMC_SNOC, 53 QCM2290_SLAVE_BIMC_CFG, 54 QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG, 55 QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG, 56 QCM2290_SLAVE_CAMERA_CFG, 57 QCM2290_SLAVE_CLK_CTL, 58 QCM2290_SLAVE_CRYPTO_0_CFG, 59 QCM2290_SLAVE_DISPLAY_CFG, 60 QCM2290_SLAVE_DISPLAY_THROTTLE_CFG, 61 QCM2290_SLAVE_GPU_CFG, 62 QCM2290_SLAVE_HWKM, 63 QCM2290_SLAVE_IMEM_CFG, 64 QCM2290_SLAVE_IPA_CFG, 65 QCM2290_SLAVE_LPASS, 66 QCM2290_SLAVE_MESSAGE_RAM, 67 QCM2290_SLAVE_PDM, 68 QCM2290_SLAVE_PIMEM_CFG, 69 QCM2290_SLAVE_PKA_WRAPPER, 70 QCM2290_SLAVE_PMIC_ARB, 71 QCM2290_SLAVE_PRNG, 72 QCM2290_SLAVE_QDSS_CFG, 73 QCM2290_SLAVE_QM_CFG, 74 QCM2290_SLAVE_QM_MPU_CFG, 75 QCM2290_SLAVE_QPIC, 76 QCM2290_SLAVE_QUP_0, 77 QCM2290_SLAVE_SDCC_1, 78 QCM2290_SLAVE_SDCC_2, 79 QCM2290_SLAVE_SNOC_CFG, 80 QCM2290_SLAVE_TCSR, 81 QCM2290_SLAVE_USB3, 82 QCM2290_SLAVE_VENUS_CFG, 83 QCM2290_SLAVE_VENUS_THROTTLE_CFG, 84 QCM2290_SLAVE_VSENSE_CTRL_CFG, 85 QCM2290_SLAVE_SERVICE_CNOC, 86 QCM2290_SLAVE_APPSS, 87 QCM2290_SLAVE_SNOC_CNOC, 88 QCM2290_SLAVE_IMEM, 89 QCM2290_SLAVE_PIMEM, 90 QCM2290_SLAVE_SNOC_BIMC, 91 QCM2290_SLAVE_SERVICE_SNOC, 92 QCM2290_SLAVE_QDSS_STM, 93 QCM2290_SLAVE_TCU, 94 QCM2290_SLAVE_ANOC_SNOC, 95 QCM2290_SLAVE_QUP_CORE_0, 96 QCM2290_SLAVE_SNOC_BIMC_NRT, 97 QCM2290_SLAVE_SNOC_BIMC_RT, 98 }; 99 100 /* Master nodes */ 101 static const u16 mas_appss_proc_links[] = { 102 QCM2290_SLAVE_EBI1, 103 QCM2290_SLAVE_BIMC_SNOC, 104 }; 105 106 static struct qcom_icc_node mas_appss_proc = { 107 .id = QCM2290_MASTER_APPSS_PROC, 108 .name = "mas_apps_proc", 109 .buswidth = 16, 110 .qos.ap_owned = true, 111 .qos.qos_port = 0, 112 .qos.qos_mode = NOC_QOS_MODE_FIXED, 113 .qos.prio_level = 0, 114 .qos.areq_prio = 0, 115 .mas_rpm_id = 0, 116 .slv_rpm_id = -1, 117 .num_links = ARRAY_SIZE(mas_appss_proc_links), 118 .links = mas_appss_proc_links, 119 }; 120 121 static const u16 mas_snoc_bimc_rt_links[] = { 122 QCM2290_SLAVE_EBI1, 123 }; 124 125 static struct qcom_icc_node mas_snoc_bimc_rt = { 126 .id = QCM2290_MASTER_SNOC_BIMC_RT, 127 .name = "mas_snoc_bimc_rt", 128 .buswidth = 16, 129 .qos.ap_owned = true, 130 .qos.qos_port = 2, 131 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 132 .mas_rpm_id = 163, 133 .slv_rpm_id = -1, 134 .num_links = ARRAY_SIZE(mas_snoc_bimc_rt_links), 135 .links = mas_snoc_bimc_rt_links, 136 }; 137 138 static const u16 mas_snoc_bimc_nrt_links[] = { 139 QCM2290_SLAVE_EBI1, 140 }; 141 142 static struct qcom_icc_node mas_snoc_bimc_nrt = { 143 .id = QCM2290_MASTER_SNOC_BIMC_NRT, 144 .name = "mas_snoc_bimc_nrt", 145 .buswidth = 16, 146 .qos.ap_owned = true, 147 .qos.qos_port = 3, 148 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 149 .mas_rpm_id = 164, 150 .slv_rpm_id = -1, 151 .num_links = ARRAY_SIZE(mas_snoc_bimc_nrt_links), 152 .links = mas_snoc_bimc_nrt_links, 153 }; 154 155 static const u16 mas_snoc_bimc_links[] = { 156 QCM2290_SLAVE_EBI1, 157 }; 158 159 static struct qcom_icc_node mas_snoc_bimc = { 160 .id = QCM2290_MASTER_SNOC_BIMC, 161 .name = "mas_snoc_bimc", 162 .buswidth = 16, 163 .qos.ap_owned = true, 164 .qos.qos_port = 2, 165 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 166 .mas_rpm_id = 164, 167 .slv_rpm_id = -1, 168 .num_links = ARRAY_SIZE(mas_snoc_bimc_links), 169 .links = mas_snoc_bimc_links, 170 }; 171 172 static const u16 mas_tcu_0_links[] = { 173 QCM2290_SLAVE_EBI1, 174 QCM2290_SLAVE_BIMC_SNOC, 175 }; 176 177 static struct qcom_icc_node mas_tcu_0 = { 178 .id = QCM2290_MASTER_TCU_0, 179 .name = "mas_tcu_0", 180 .buswidth = 8, 181 .qos.ap_owned = true, 182 .qos.qos_port = 4, 183 .qos.qos_mode = NOC_QOS_MODE_FIXED, 184 .qos.prio_level = 6, 185 .qos.areq_prio = 6, 186 .mas_rpm_id = 102, 187 .slv_rpm_id = -1, 188 .num_links = ARRAY_SIZE(mas_tcu_0_links), 189 .links = mas_tcu_0_links, 190 }; 191 192 static const u16 mas_snoc_cnoc_links[] = { 193 QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG, 194 QCM2290_SLAVE_SDCC_2, 195 QCM2290_SLAVE_SDCC_1, 196 QCM2290_SLAVE_QM_CFG, 197 QCM2290_SLAVE_BIMC_CFG, 198 QCM2290_SLAVE_USB3, 199 QCM2290_SLAVE_QM_MPU_CFG, 200 QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG, 201 QCM2290_SLAVE_QDSS_CFG, 202 QCM2290_SLAVE_PDM, 203 QCM2290_SLAVE_IPA_CFG, 204 QCM2290_SLAVE_DISPLAY_THROTTLE_CFG, 205 QCM2290_SLAVE_TCSR, 206 QCM2290_SLAVE_MESSAGE_RAM, 207 QCM2290_SLAVE_PMIC_ARB, 208 QCM2290_SLAVE_LPASS, 209 QCM2290_SLAVE_DISPLAY_CFG, 210 QCM2290_SLAVE_VENUS_CFG, 211 QCM2290_SLAVE_GPU_CFG, 212 QCM2290_SLAVE_IMEM_CFG, 213 QCM2290_SLAVE_SNOC_CFG, 214 QCM2290_SLAVE_SERVICE_CNOC, 215 QCM2290_SLAVE_VENUS_THROTTLE_CFG, 216 QCM2290_SLAVE_PKA_WRAPPER, 217 QCM2290_SLAVE_HWKM, 218 QCM2290_SLAVE_PRNG, 219 QCM2290_SLAVE_VSENSE_CTRL_CFG, 220 QCM2290_SLAVE_CRYPTO_0_CFG, 221 QCM2290_SLAVE_PIMEM_CFG, 222 QCM2290_SLAVE_QUP_0, 223 QCM2290_SLAVE_CAMERA_CFG, 224 QCM2290_SLAVE_CLK_CTL, 225 QCM2290_SLAVE_QPIC, 226 }; 227 228 static struct qcom_icc_node mas_snoc_cnoc = { 229 .id = QCM2290_MASTER_SNOC_CNOC, 230 .name = "mas_snoc_cnoc", 231 .buswidth = 8, 232 .qos.ap_owned = true, 233 .qos.qos_mode = NOC_QOS_MODE_INVALID, 234 .mas_rpm_id = 52, 235 .slv_rpm_id = -1, 236 .num_links = ARRAY_SIZE(mas_snoc_cnoc_links), 237 .links = mas_snoc_cnoc_links, 238 }; 239 240 static const u16 mas_qdss_dap_links[] = { 241 QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG, 242 QCM2290_SLAVE_SDCC_2, 243 QCM2290_SLAVE_SDCC_1, 244 QCM2290_SLAVE_QM_CFG, 245 QCM2290_SLAVE_BIMC_CFG, 246 QCM2290_SLAVE_USB3, 247 QCM2290_SLAVE_QM_MPU_CFG, 248 QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG, 249 QCM2290_SLAVE_QDSS_CFG, 250 QCM2290_SLAVE_PDM, 251 QCM2290_SLAVE_IPA_CFG, 252 QCM2290_SLAVE_DISPLAY_THROTTLE_CFG, 253 QCM2290_SLAVE_TCSR, 254 QCM2290_SLAVE_MESSAGE_RAM, 255 QCM2290_SLAVE_PMIC_ARB, 256 QCM2290_SLAVE_LPASS, 257 QCM2290_SLAVE_DISPLAY_CFG, 258 QCM2290_SLAVE_VENUS_CFG, 259 QCM2290_SLAVE_GPU_CFG, 260 QCM2290_SLAVE_IMEM_CFG, 261 QCM2290_SLAVE_SNOC_CFG, 262 QCM2290_SLAVE_SERVICE_CNOC, 263 QCM2290_SLAVE_VENUS_THROTTLE_CFG, 264 QCM2290_SLAVE_PKA_WRAPPER, 265 QCM2290_SLAVE_HWKM, 266 QCM2290_SLAVE_PRNG, 267 QCM2290_SLAVE_VSENSE_CTRL_CFG, 268 QCM2290_SLAVE_CRYPTO_0_CFG, 269 QCM2290_SLAVE_PIMEM_CFG, 270 QCM2290_SLAVE_QUP_0, 271 QCM2290_SLAVE_CAMERA_CFG, 272 QCM2290_SLAVE_CLK_CTL, 273 QCM2290_SLAVE_QPIC, 274 }; 275 276 static struct qcom_icc_node mas_qdss_dap = { 277 .id = QCM2290_MASTER_QDSS_DAP, 278 .name = "mas_qdss_dap", 279 .buswidth = 8, 280 .qos.ap_owned = true, 281 .qos.qos_mode = NOC_QOS_MODE_INVALID, 282 .mas_rpm_id = 49, 283 .slv_rpm_id = -1, 284 .num_links = ARRAY_SIZE(mas_qdss_dap_links), 285 .links = mas_qdss_dap_links, 286 }; 287 288 static const u16 mas_crypto_core0_links[] = { 289 QCM2290_SLAVE_ANOC_SNOC 290 }; 291 292 static struct qcom_icc_node mas_crypto_core0 = { 293 .id = QCM2290_MASTER_CRYPTO_CORE0, 294 .name = "mas_crypto_core0", 295 .buswidth = 8, 296 .qos.ap_owned = true, 297 .qos.qos_port = 22, 298 .qos.qos_mode = NOC_QOS_MODE_FIXED, 299 .qos.areq_prio = 2, 300 .mas_rpm_id = 23, 301 .slv_rpm_id = -1, 302 .num_links = ARRAY_SIZE(mas_crypto_core0_links), 303 .links = mas_crypto_core0_links, 304 }; 305 306 static const u16 mas_qup_core_0_links[] = { 307 QCM2290_SLAVE_QUP_CORE_0, 308 }; 309 310 static struct qcom_icc_node mas_qup_core_0 = { 311 .id = QCM2290_MASTER_QUP_CORE_0, 312 .name = "mas_qup_core_0", 313 .buswidth = 4, 314 .mas_rpm_id = 170, 315 .slv_rpm_id = -1, 316 .num_links = ARRAY_SIZE(mas_qup_core_0_links), 317 .links = mas_qup_core_0_links, 318 }; 319 320 static const u16 mas_camnoc_sf_links[] = { 321 QCM2290_SLAVE_SNOC_BIMC_NRT, 322 }; 323 324 static struct qcom_icc_node mas_camnoc_sf = { 325 .id = QCM2290_MASTER_CAMNOC_SF, 326 .name = "mas_camnoc_sf", 327 .buswidth = 32, 328 .qos.ap_owned = true, 329 .qos.qos_port = 4, 330 .qos.qos_mode = NOC_QOS_MODE_FIXED, 331 .qos.areq_prio = 3, 332 .mas_rpm_id = 172, 333 .slv_rpm_id = -1, 334 .num_links = ARRAY_SIZE(mas_camnoc_sf_links), 335 .links = mas_camnoc_sf_links, 336 }; 337 338 static const u16 mas_camnoc_hf_links[] = { 339 QCM2290_SLAVE_SNOC_BIMC_RT, 340 }; 341 342 static struct qcom_icc_node mas_camnoc_hf = { 343 .id = QCM2290_MASTER_CAMNOC_HF, 344 .name = "mas_camnoc_hf", 345 .buswidth = 32, 346 .qos.ap_owned = true, 347 .qos.qos_port = 10, 348 .qos.qos_mode = NOC_QOS_MODE_FIXED, 349 .qos.areq_prio = 3, 350 .qos.urg_fwd_en = true, 351 .mas_rpm_id = 173, 352 .slv_rpm_id = -1, 353 .num_links = ARRAY_SIZE(mas_camnoc_hf_links), 354 .links = mas_camnoc_hf_links, 355 }; 356 357 static const u16 mas_mdp0_links[] = { 358 QCM2290_SLAVE_SNOC_BIMC_RT, 359 }; 360 361 static struct qcom_icc_node mas_mdp0 = { 362 .id = QCM2290_MASTER_MDP0, 363 .name = "mas_mdp0", 364 .buswidth = 16, 365 .qos.ap_owned = true, 366 .qos.qos_port = 5, 367 .qos.qos_mode = NOC_QOS_MODE_FIXED, 368 .qos.areq_prio = 3, 369 .qos.urg_fwd_en = true, 370 .mas_rpm_id = 8, 371 .slv_rpm_id = -1, 372 .num_links = ARRAY_SIZE(mas_mdp0_links), 373 .links = mas_mdp0_links, 374 }; 375 376 static const u16 mas_video_p0_links[] = { 377 QCM2290_SLAVE_SNOC_BIMC_NRT, 378 }; 379 380 static struct qcom_icc_node mas_video_p0 = { 381 .id = QCM2290_MASTER_VIDEO_P0, 382 .name = "mas_video_p0", 383 .buswidth = 16, 384 .qos.ap_owned = true, 385 .qos.qos_port = 9, 386 .qos.qos_mode = NOC_QOS_MODE_FIXED, 387 .qos.areq_prio = 3, 388 .qos.urg_fwd_en = true, 389 .mas_rpm_id = 9, 390 .slv_rpm_id = -1, 391 .num_links = ARRAY_SIZE(mas_video_p0_links), 392 .links = mas_video_p0_links, 393 }; 394 395 static const u16 mas_video_proc_links[] = { 396 QCM2290_SLAVE_SNOC_BIMC_NRT, 397 }; 398 399 static struct qcom_icc_node mas_video_proc = { 400 .id = QCM2290_MASTER_VIDEO_PROC, 401 .name = "mas_video_proc", 402 .buswidth = 8, 403 .qos.ap_owned = true, 404 .qos.qos_port = 13, 405 .qos.qos_mode = NOC_QOS_MODE_FIXED, 406 .qos.areq_prio = 4, 407 .mas_rpm_id = 168, 408 .slv_rpm_id = -1, 409 .num_links = ARRAY_SIZE(mas_video_proc_links), 410 .links = mas_video_proc_links, 411 }; 412 413 static const u16 mas_snoc_cfg_links[] = { 414 QCM2290_SLAVE_SERVICE_SNOC, 415 }; 416 417 static struct qcom_icc_node mas_snoc_cfg = { 418 .id = QCM2290_MASTER_SNOC_CFG, 419 .name = "mas_snoc_cfg", 420 .buswidth = 4, 421 .qos.ap_owned = true, 422 .qos.qos_mode = NOC_QOS_MODE_INVALID, 423 .mas_rpm_id = 20, 424 .slv_rpm_id = -1, 425 .num_links = ARRAY_SIZE(mas_snoc_cfg_links), 426 .links = mas_snoc_cfg_links, 427 }; 428 429 static const u16 mas_tic_links[] = { 430 QCM2290_SLAVE_PIMEM, 431 QCM2290_SLAVE_IMEM, 432 QCM2290_SLAVE_APPSS, 433 QCM2290_SLAVE_SNOC_BIMC, 434 QCM2290_SLAVE_SNOC_CNOC, 435 QCM2290_SLAVE_TCU, 436 QCM2290_SLAVE_QDSS_STM, 437 }; 438 439 static struct qcom_icc_node mas_tic = { 440 .id = QCM2290_MASTER_TIC, 441 .name = "mas_tic", 442 .buswidth = 4, 443 .qos.ap_owned = true, 444 .qos.qos_port = 8, 445 .qos.qos_mode = NOC_QOS_MODE_FIXED, 446 .qos.areq_prio = 2, 447 .mas_rpm_id = 51, 448 .slv_rpm_id = -1, 449 .num_links = ARRAY_SIZE(mas_tic_links), 450 .links = mas_tic_links, 451 }; 452 453 static const u16 mas_anoc_snoc_links[] = { 454 QCM2290_SLAVE_PIMEM, 455 QCM2290_SLAVE_IMEM, 456 QCM2290_SLAVE_APPSS, 457 QCM2290_SLAVE_SNOC_BIMC, 458 QCM2290_SLAVE_SNOC_CNOC, 459 QCM2290_SLAVE_TCU, 460 QCM2290_SLAVE_QDSS_STM, 461 }; 462 463 static struct qcom_icc_node mas_anoc_snoc = { 464 .id = QCM2290_MASTER_ANOC_SNOC, 465 .name = "mas_anoc_snoc", 466 .buswidth = 16, 467 .mas_rpm_id = 110, 468 .slv_rpm_id = -1, 469 .num_links = ARRAY_SIZE(mas_anoc_snoc_links), 470 .links = mas_anoc_snoc_links, 471 }; 472 473 static const u16 mas_bimc_snoc_links[] = { 474 QCM2290_SLAVE_PIMEM, 475 QCM2290_SLAVE_IMEM, 476 QCM2290_SLAVE_APPSS, 477 QCM2290_SLAVE_SNOC_CNOC, 478 QCM2290_SLAVE_TCU, 479 QCM2290_SLAVE_QDSS_STM, 480 }; 481 482 static struct qcom_icc_node mas_bimc_snoc = { 483 .id = QCM2290_MASTER_BIMC_SNOC, 484 .name = "mas_bimc_snoc", 485 .buswidth = 8, 486 .mas_rpm_id = 21, 487 .slv_rpm_id = -1, 488 .num_links = ARRAY_SIZE(mas_bimc_snoc_links), 489 .links = mas_bimc_snoc_links, 490 }; 491 492 static const u16 mas_pimem_links[] = { 493 QCM2290_SLAVE_IMEM, 494 QCM2290_SLAVE_SNOC_BIMC, 495 }; 496 497 static struct qcom_icc_node mas_pimem = { 498 .id = QCM2290_MASTER_PIMEM, 499 .name = "mas_pimem", 500 .buswidth = 8, 501 .qos.ap_owned = true, 502 .qos.qos_port = 20, 503 .qos.qos_mode = NOC_QOS_MODE_FIXED, 504 .qos.areq_prio = 2, 505 .mas_rpm_id = 113, 506 .slv_rpm_id = -1, 507 .num_links = ARRAY_SIZE(mas_pimem_links), 508 .links = mas_pimem_links, 509 }; 510 511 static const u16 mas_qdss_bam_links[] = { 512 QCM2290_SLAVE_ANOC_SNOC, 513 }; 514 515 static struct qcom_icc_node mas_qdss_bam = { 516 .id = QCM2290_MASTER_QDSS_BAM, 517 .name = "mas_qdss_bam", 518 .buswidth = 4, 519 .qos.ap_owned = true, 520 .qos.qos_port = 2, 521 .qos.qos_mode = NOC_QOS_MODE_FIXED, 522 .qos.areq_prio = 2, 523 .mas_rpm_id = 19, 524 .slv_rpm_id = -1, 525 .num_links = ARRAY_SIZE(mas_qdss_bam_links), 526 .links = mas_qdss_bam_links, 527 }; 528 529 static const u16 mas_qup_0_links[] = { 530 QCM2290_SLAVE_ANOC_SNOC, 531 }; 532 533 static struct qcom_icc_node mas_qup_0 = { 534 .id = QCM2290_MASTER_QUP_0, 535 .name = "mas_qup_0", 536 .buswidth = 4, 537 .qos.ap_owned = true, 538 .qos.qos_port = 0, 539 .qos.qos_mode = NOC_QOS_MODE_FIXED, 540 .qos.areq_prio = 2, 541 .mas_rpm_id = 166, 542 .slv_rpm_id = -1, 543 .num_links = ARRAY_SIZE(mas_qup_0_links), 544 .links = mas_qup_0_links, 545 }; 546 547 static const u16 mas_ipa_links[] = { 548 QCM2290_SLAVE_ANOC_SNOC, 549 }; 550 551 static struct qcom_icc_node mas_ipa = { 552 .id = QCM2290_MASTER_IPA, 553 .name = "mas_ipa", 554 .buswidth = 8, 555 .qos.ap_owned = true, 556 .qos.qos_port = 3, 557 .qos.qos_mode = NOC_QOS_MODE_FIXED, 558 .qos.areq_prio = 2, 559 .mas_rpm_id = 59, 560 .slv_rpm_id = -1, 561 .num_links = ARRAY_SIZE(mas_ipa_links), 562 .links = mas_ipa_links, 563 }; 564 565 static const u16 mas_qdss_etr_links[] = { 566 QCM2290_SLAVE_ANOC_SNOC, 567 }; 568 569 static struct qcom_icc_node mas_qdss_etr = { 570 .id = QCM2290_MASTER_QDSS_ETR, 571 .name = "mas_qdss_etr", 572 .buswidth = 8, 573 .qos.ap_owned = true, 574 .qos.qos_port = 12, 575 .qos.qos_mode = NOC_QOS_MODE_FIXED, 576 .qos.areq_prio = 2, 577 .mas_rpm_id = 31, 578 .slv_rpm_id = -1, 579 .num_links = ARRAY_SIZE(mas_qdss_etr_links), 580 .links = mas_qdss_etr_links, 581 }; 582 583 static const u16 mas_sdcc_1_links[] = { 584 QCM2290_SLAVE_ANOC_SNOC, 585 }; 586 587 static struct qcom_icc_node mas_sdcc_1 = { 588 .id = QCM2290_MASTER_SDCC_1, 589 .name = "mas_sdcc_1", 590 .buswidth = 8, 591 .qos.ap_owned = true, 592 .qos.qos_port = 17, 593 .qos.qos_mode = NOC_QOS_MODE_FIXED, 594 .qos.areq_prio = 2, 595 .mas_rpm_id = 33, 596 .slv_rpm_id = -1, 597 .num_links = ARRAY_SIZE(mas_sdcc_1_links), 598 .links = mas_sdcc_1_links, 599 }; 600 601 static const u16 mas_sdcc_2_links[] = { 602 QCM2290_SLAVE_ANOC_SNOC, 603 }; 604 605 static struct qcom_icc_node mas_sdcc_2 = { 606 .id = QCM2290_MASTER_SDCC_2, 607 .name = "mas_sdcc_2", 608 .buswidth = 8, 609 .qos.ap_owned = true, 610 .qos.qos_port = 23, 611 .qos.qos_mode = NOC_QOS_MODE_FIXED, 612 .qos.areq_prio = 2, 613 .mas_rpm_id = 35, 614 .slv_rpm_id = -1, 615 .num_links = ARRAY_SIZE(mas_sdcc_2_links), 616 .links = mas_sdcc_2_links, 617 }; 618 619 static const u16 mas_qpic_links[] = { 620 QCM2290_SLAVE_ANOC_SNOC, 621 }; 622 623 static struct qcom_icc_node mas_qpic = { 624 .id = QCM2290_MASTER_QPIC, 625 .name = "mas_qpic", 626 .buswidth = 4, 627 .qos.ap_owned = true, 628 .qos.qos_port = 1, 629 .qos.qos_mode = NOC_QOS_MODE_FIXED, 630 .qos.areq_prio = 2, 631 .mas_rpm_id = 58, 632 .slv_rpm_id = -1, 633 .num_links = ARRAY_SIZE(mas_qpic_links), 634 .links = mas_qpic_links, 635 }; 636 637 static const u16 mas_usb3_0_links[] = { 638 QCM2290_SLAVE_ANOC_SNOC, 639 }; 640 641 static struct qcom_icc_node mas_usb3_0 = { 642 .id = QCM2290_MASTER_USB3_0, 643 .name = "mas_usb3_0", 644 .buswidth = 8, 645 .qos.ap_owned = true, 646 .qos.qos_port = 24, 647 .qos.qos_mode = NOC_QOS_MODE_FIXED, 648 .qos.areq_prio = 2, 649 .mas_rpm_id = 32, 650 .slv_rpm_id = -1, 651 .num_links = ARRAY_SIZE(mas_usb3_0_links), 652 .links = mas_usb3_0_links, 653 }; 654 655 static const u16 mas_gfx3d_links[] = { 656 QCM2290_SLAVE_EBI1, 657 }; 658 659 static struct qcom_icc_node mas_gfx3d = { 660 .id = QCM2290_MASTER_GFX3D, 661 .name = "mas_gfx3d", 662 .buswidth = 32, 663 .qos.ap_owned = true, 664 .qos.qos_port = 1, 665 .qos.qos_mode = NOC_QOS_MODE_FIXED, 666 .qos.prio_level = 0, 667 .qos.areq_prio = 0, 668 .mas_rpm_id = 6, 669 .slv_rpm_id = -1, 670 .num_links = ARRAY_SIZE(mas_gfx3d_links), 671 .links = mas_gfx3d_links, 672 }; 673 674 /* Slave nodes */ 675 static struct qcom_icc_node slv_ebi1 = { 676 .name = "slv_ebi1", 677 .id = QCM2290_SLAVE_EBI1, 678 .buswidth = 8, 679 .mas_rpm_id = -1, 680 .slv_rpm_id = 0, 681 }; 682 683 static const u16 slv_bimc_snoc_links[] = { 684 QCM2290_MASTER_BIMC_SNOC, 685 }; 686 687 static struct qcom_icc_node slv_bimc_snoc = { 688 .name = "slv_bimc_snoc", 689 .id = QCM2290_SLAVE_BIMC_SNOC, 690 .buswidth = 8, 691 .mas_rpm_id = -1, 692 .slv_rpm_id = 2, 693 .num_links = ARRAY_SIZE(slv_bimc_snoc_links), 694 .links = slv_bimc_snoc_links, 695 }; 696 697 static struct qcom_icc_node slv_bimc_cfg = { 698 .name = "slv_bimc_cfg", 699 .id = QCM2290_SLAVE_BIMC_CFG, 700 .buswidth = 4, 701 .qos.ap_owned = true, 702 .qos.qos_mode = NOC_QOS_MODE_INVALID, 703 .mas_rpm_id = -1, 704 .slv_rpm_id = 56, 705 }; 706 707 static struct qcom_icc_node slv_camera_nrt_throttle_cfg = { 708 .name = "slv_camera_nrt_throttle_cfg", 709 .id = QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG, 710 .buswidth = 4, 711 .qos.ap_owned = true, 712 .qos.qos_mode = NOC_QOS_MODE_INVALID, 713 .mas_rpm_id = -1, 714 .slv_rpm_id = 271, 715 }; 716 717 static struct qcom_icc_node slv_camera_rt_throttle_cfg = { 718 .name = "slv_camera_rt_throttle_cfg", 719 .id = QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG, 720 .buswidth = 4, 721 .qos.ap_owned = true, 722 .qos.qos_mode = NOC_QOS_MODE_INVALID, 723 .mas_rpm_id = -1, 724 .slv_rpm_id = 279, 725 }; 726 727 static struct qcom_icc_node slv_camera_cfg = { 728 .name = "slv_camera_cfg", 729 .id = QCM2290_SLAVE_CAMERA_CFG, 730 .buswidth = 4, 731 .qos.ap_owned = true, 732 .qos.qos_mode = NOC_QOS_MODE_INVALID, 733 .mas_rpm_id = -1, 734 .slv_rpm_id = 3, 735 }; 736 737 static struct qcom_icc_node slv_clk_ctl = { 738 .name = "slv_clk_ctl", 739 .id = QCM2290_SLAVE_CLK_CTL, 740 .buswidth = 4, 741 .qos.ap_owned = true, 742 .qos.qos_mode = NOC_QOS_MODE_INVALID, 743 .mas_rpm_id = -1, 744 .slv_rpm_id = 47, 745 }; 746 747 static struct qcom_icc_node slv_crypto_0_cfg = { 748 .name = "slv_crypto_0_cfg", 749 .id = QCM2290_SLAVE_CRYPTO_0_CFG, 750 .buswidth = 4, 751 .qos.ap_owned = true, 752 .qos.qos_mode = NOC_QOS_MODE_INVALID, 753 .mas_rpm_id = -1, 754 .slv_rpm_id = 52, 755 }; 756 757 static struct qcom_icc_node slv_display_cfg = { 758 .name = "slv_display_cfg", 759 .id = QCM2290_SLAVE_DISPLAY_CFG, 760 .buswidth = 4, 761 .qos.ap_owned = true, 762 .qos.qos_mode = NOC_QOS_MODE_INVALID, 763 .mas_rpm_id = -1, 764 .slv_rpm_id = 4, 765 }; 766 767 static struct qcom_icc_node slv_display_throttle_cfg = { 768 .name = "slv_display_throttle_cfg", 769 .id = QCM2290_SLAVE_DISPLAY_THROTTLE_CFG, 770 .buswidth = 4, 771 .qos.ap_owned = true, 772 .qos.qos_mode = NOC_QOS_MODE_INVALID, 773 .mas_rpm_id = -1, 774 .slv_rpm_id = 156, 775 }; 776 777 static struct qcom_icc_node slv_gpu_cfg = { 778 .name = "slv_gpu_cfg", 779 .id = QCM2290_SLAVE_GPU_CFG, 780 .buswidth = 8, 781 .qos.ap_owned = true, 782 .qos.qos_mode = NOC_QOS_MODE_INVALID, 783 .mas_rpm_id = -1, 784 .slv_rpm_id = 275, 785 }; 786 787 static struct qcom_icc_node slv_hwkm = { 788 .name = "slv_hwkm", 789 .id = QCM2290_SLAVE_HWKM, 790 .buswidth = 4, 791 .qos.ap_owned = true, 792 .qos.qos_mode = NOC_QOS_MODE_INVALID, 793 .mas_rpm_id = -1, 794 .slv_rpm_id = 280, 795 }; 796 797 static struct qcom_icc_node slv_imem_cfg = { 798 .name = "slv_imem_cfg", 799 .id = QCM2290_SLAVE_IMEM_CFG, 800 .buswidth = 4, 801 .qos.ap_owned = true, 802 .qos.qos_mode = NOC_QOS_MODE_INVALID, 803 .mas_rpm_id = -1, 804 .slv_rpm_id = 54, 805 }; 806 807 static struct qcom_icc_node slv_ipa_cfg = { 808 .name = "slv_ipa_cfg", 809 .id = QCM2290_SLAVE_IPA_CFG, 810 .buswidth = 4, 811 .qos.ap_owned = true, 812 .qos.qos_mode = NOC_QOS_MODE_INVALID, 813 .mas_rpm_id = -1, 814 .slv_rpm_id = 183, 815 }; 816 817 static struct qcom_icc_node slv_lpass = { 818 .name = "slv_lpass", 819 .id = QCM2290_SLAVE_LPASS, 820 .buswidth = 4, 821 .qos.ap_owned = true, 822 .qos.qos_mode = NOC_QOS_MODE_INVALID, 823 .mas_rpm_id = -1, 824 .slv_rpm_id = 21, 825 }; 826 827 static struct qcom_icc_node slv_message_ram = { 828 .name = "slv_message_ram", 829 .id = QCM2290_SLAVE_MESSAGE_RAM, 830 .buswidth = 4, 831 .qos.ap_owned = true, 832 .qos.qos_mode = NOC_QOS_MODE_INVALID, 833 .mas_rpm_id = -1, 834 .slv_rpm_id = 55, 835 }; 836 837 static struct qcom_icc_node slv_pdm = { 838 .name = "slv_pdm", 839 .id = QCM2290_SLAVE_PDM, 840 .buswidth = 4, 841 .qos.ap_owned = true, 842 .qos.qos_mode = NOC_QOS_MODE_INVALID, 843 .mas_rpm_id = -1, 844 .slv_rpm_id = 41, 845 }; 846 847 static struct qcom_icc_node slv_pimem_cfg = { 848 .name = "slv_pimem_cfg", 849 .id = QCM2290_SLAVE_PIMEM_CFG, 850 .buswidth = 4, 851 .qos.ap_owned = true, 852 .qos.qos_mode = NOC_QOS_MODE_INVALID, 853 .mas_rpm_id = -1, 854 .slv_rpm_id = 167, 855 }; 856 857 static struct qcom_icc_node slv_pka_wrapper = { 858 .name = "slv_pka_wrapper", 859 .id = QCM2290_SLAVE_PKA_WRAPPER, 860 .buswidth = 4, 861 .qos.ap_owned = true, 862 .qos.qos_mode = NOC_QOS_MODE_INVALID, 863 .mas_rpm_id = -1, 864 .slv_rpm_id = 281, 865 }; 866 867 static struct qcom_icc_node slv_pmic_arb = { 868 .name = "slv_pmic_arb", 869 .id = QCM2290_SLAVE_PMIC_ARB, 870 .buswidth = 4, 871 .qos.ap_owned = true, 872 .qos.qos_mode = NOC_QOS_MODE_INVALID, 873 .mas_rpm_id = -1, 874 .slv_rpm_id = 59, 875 }; 876 877 static struct qcom_icc_node slv_prng = { 878 .name = "slv_prng", 879 .id = QCM2290_SLAVE_PRNG, 880 .buswidth = 4, 881 .qos.ap_owned = true, 882 .qos.qos_mode = NOC_QOS_MODE_INVALID, 883 .mas_rpm_id = -1, 884 .slv_rpm_id = 44, 885 }; 886 887 static struct qcom_icc_node slv_qdss_cfg = { 888 .name = "slv_qdss_cfg", 889 .id = QCM2290_SLAVE_QDSS_CFG, 890 .buswidth = 4, 891 .qos.ap_owned = true, 892 .qos.qos_mode = NOC_QOS_MODE_INVALID, 893 .mas_rpm_id = -1, 894 .slv_rpm_id = 63, 895 }; 896 897 static struct qcom_icc_node slv_qm_cfg = { 898 .name = "slv_qm_cfg", 899 .id = QCM2290_SLAVE_QM_CFG, 900 .buswidth = 4, 901 .qos.ap_owned = true, 902 .qos.qos_mode = NOC_QOS_MODE_INVALID, 903 .mas_rpm_id = -1, 904 .slv_rpm_id = 212, 905 }; 906 907 static struct qcom_icc_node slv_qm_mpu_cfg = { 908 .name = "slv_qm_mpu_cfg", 909 .id = QCM2290_SLAVE_QM_MPU_CFG, 910 .buswidth = 4, 911 .qos.ap_owned = true, 912 .qos.qos_mode = NOC_QOS_MODE_INVALID, 913 .mas_rpm_id = -1, 914 .slv_rpm_id = 231, 915 }; 916 917 static struct qcom_icc_node slv_qpic = { 918 .name = "slv_qpic", 919 .id = QCM2290_SLAVE_QPIC, 920 .buswidth = 4, 921 .qos.ap_owned = true, 922 .qos.qos_mode = NOC_QOS_MODE_INVALID, 923 .mas_rpm_id = -1, 924 .slv_rpm_id = 80, 925 }; 926 927 static struct qcom_icc_node slv_qup_0 = { 928 .name = "slv_qup_0", 929 .id = QCM2290_SLAVE_QUP_0, 930 .buswidth = 4, 931 .qos.ap_owned = true, 932 .qos.qos_mode = NOC_QOS_MODE_INVALID, 933 .mas_rpm_id = -1, 934 .slv_rpm_id = 261, 935 }; 936 937 static struct qcom_icc_node slv_sdcc_1 = { 938 .name = "slv_sdcc_1", 939 .id = QCM2290_SLAVE_SDCC_1, 940 .buswidth = 4, 941 .qos.ap_owned = true, 942 .qos.qos_mode = NOC_QOS_MODE_INVALID, 943 .mas_rpm_id = -1, 944 .slv_rpm_id = 31, 945 }; 946 947 static struct qcom_icc_node slv_sdcc_2 = { 948 .name = "slv_sdcc_2", 949 .id = QCM2290_SLAVE_SDCC_2, 950 .buswidth = 4, 951 .qos.ap_owned = true, 952 .qos.qos_mode = NOC_QOS_MODE_INVALID, 953 .mas_rpm_id = -1, 954 .slv_rpm_id = 33, 955 }; 956 957 static const u16 slv_snoc_cfg_links[] = { 958 QCM2290_MASTER_SNOC_CFG, 959 }; 960 961 static struct qcom_icc_node slv_snoc_cfg = { 962 .name = "slv_snoc_cfg", 963 .id = QCM2290_SLAVE_SNOC_CFG, 964 .buswidth = 4, 965 .qos.ap_owned = true, 966 .qos.qos_mode = NOC_QOS_MODE_INVALID, 967 .mas_rpm_id = -1, 968 .slv_rpm_id = 70, 969 .num_links = ARRAY_SIZE(slv_snoc_cfg_links), 970 .links = slv_snoc_cfg_links, 971 }; 972 973 static struct qcom_icc_node slv_tcsr = { 974 .name = "slv_tcsr", 975 .id = QCM2290_SLAVE_TCSR, 976 .buswidth = 4, 977 .qos.ap_owned = true, 978 .qos.qos_mode = NOC_QOS_MODE_INVALID, 979 .mas_rpm_id = -1, 980 .slv_rpm_id = 50, 981 }; 982 983 static struct qcom_icc_node slv_usb3 = { 984 .name = "slv_usb3", 985 .id = QCM2290_SLAVE_USB3, 986 .buswidth = 4, 987 .qos.ap_owned = true, 988 .qos.qos_mode = NOC_QOS_MODE_INVALID, 989 .mas_rpm_id = -1, 990 .slv_rpm_id = 22, 991 }; 992 993 static struct qcom_icc_node slv_venus_cfg = { 994 .name = "slv_venus_cfg", 995 .id = QCM2290_SLAVE_VENUS_CFG, 996 .buswidth = 4, 997 .qos.ap_owned = true, 998 .qos.qos_mode = NOC_QOS_MODE_INVALID, 999 .mas_rpm_id = -1, 1000 .slv_rpm_id = 10, 1001 }; 1002 1003 static struct qcom_icc_node slv_venus_throttle_cfg = { 1004 .name = "slv_venus_throttle_cfg", 1005 .id = QCM2290_SLAVE_VENUS_THROTTLE_CFG, 1006 .buswidth = 4, 1007 .qos.ap_owned = true, 1008 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1009 .mas_rpm_id = -1, 1010 .slv_rpm_id = 178, 1011 }; 1012 1013 static struct qcom_icc_node slv_vsense_ctrl_cfg = { 1014 .name = "slv_vsense_ctrl_cfg", 1015 .id = QCM2290_SLAVE_VSENSE_CTRL_CFG, 1016 .buswidth = 4, 1017 .qos.ap_owned = true, 1018 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1019 .mas_rpm_id = -1, 1020 .slv_rpm_id = 263, 1021 }; 1022 1023 static struct qcom_icc_node slv_service_cnoc = { 1024 .name = "slv_service_cnoc", 1025 .id = QCM2290_SLAVE_SERVICE_CNOC, 1026 .buswidth = 4, 1027 .qos.ap_owned = true, 1028 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1029 .mas_rpm_id = -1, 1030 .slv_rpm_id = 76, 1031 }; 1032 1033 static struct qcom_icc_node slv_qup_core_0 = { 1034 .name = "slv_qup_core_0", 1035 .id = QCM2290_SLAVE_QUP_CORE_0, 1036 .buswidth = 4, 1037 .qos.ap_owned = true, 1038 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1039 .mas_rpm_id = -1, 1040 .slv_rpm_id = 264, 1041 }; 1042 1043 static const u16 slv_snoc_bimc_nrt_links[] = { 1044 QCM2290_MASTER_SNOC_BIMC_NRT, 1045 }; 1046 1047 static struct qcom_icc_node slv_snoc_bimc_nrt = { 1048 .name = "slv_snoc_bimc_nrt", 1049 .id = QCM2290_SLAVE_SNOC_BIMC_NRT, 1050 .buswidth = 16, 1051 .qos.ap_owned = true, 1052 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1053 .mas_rpm_id = -1, 1054 .slv_rpm_id = 259, 1055 .num_links = ARRAY_SIZE(slv_snoc_bimc_nrt_links), 1056 .links = slv_snoc_bimc_nrt_links, 1057 }; 1058 1059 static const u16 slv_snoc_bimc_rt_links[] = { 1060 QCM2290_MASTER_SNOC_BIMC_RT, 1061 }; 1062 1063 static struct qcom_icc_node slv_snoc_bimc_rt = { 1064 .name = "slv_snoc_bimc_rt", 1065 .id = QCM2290_SLAVE_SNOC_BIMC_RT, 1066 .buswidth = 16, 1067 .qos.ap_owned = true, 1068 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1069 .mas_rpm_id = -1, 1070 .slv_rpm_id = 260, 1071 .num_links = ARRAY_SIZE(slv_snoc_bimc_rt_links), 1072 .links = slv_snoc_bimc_rt_links, 1073 }; 1074 1075 static struct qcom_icc_node slv_appss = { 1076 .name = "slv_appss", 1077 .id = QCM2290_SLAVE_APPSS, 1078 .buswidth = 8, 1079 .qos.ap_owned = true, 1080 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1081 .mas_rpm_id = -1, 1082 .slv_rpm_id = 20, 1083 }; 1084 1085 static const u16 slv_snoc_cnoc_links[] = { 1086 QCM2290_MASTER_SNOC_CNOC, 1087 }; 1088 1089 static struct qcom_icc_node slv_snoc_cnoc = { 1090 .name = "slv_snoc_cnoc", 1091 .id = QCM2290_SLAVE_SNOC_CNOC, 1092 .buswidth = 8, 1093 .mas_rpm_id = -1, 1094 .slv_rpm_id = 25, 1095 .num_links = ARRAY_SIZE(slv_snoc_cnoc_links), 1096 .links = slv_snoc_cnoc_links, 1097 }; 1098 1099 static struct qcom_icc_node slv_imem = { 1100 .name = "slv_imem", 1101 .id = QCM2290_SLAVE_IMEM, 1102 .buswidth = 8, 1103 .mas_rpm_id = -1, 1104 .slv_rpm_id = 26, 1105 }; 1106 1107 static struct qcom_icc_node slv_pimem = { 1108 .name = "slv_pimem", 1109 .id = QCM2290_SLAVE_PIMEM, 1110 .buswidth = 8, 1111 .qos.ap_owned = true, 1112 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1113 .mas_rpm_id = -1, 1114 .slv_rpm_id = 166, 1115 }; 1116 1117 static const u16 slv_snoc_bimc_links[] = { 1118 QCM2290_MASTER_SNOC_BIMC, 1119 }; 1120 1121 static struct qcom_icc_node slv_snoc_bimc = { 1122 .name = "slv_snoc_bimc", 1123 .id = QCM2290_SLAVE_SNOC_BIMC, 1124 .buswidth = 16, 1125 .mas_rpm_id = -1, 1126 .slv_rpm_id = 24, 1127 .num_links = ARRAY_SIZE(slv_snoc_bimc_links), 1128 .links = slv_snoc_bimc_links, 1129 }; 1130 1131 static struct qcom_icc_node slv_service_snoc = { 1132 .name = "slv_service_snoc", 1133 .id = QCM2290_SLAVE_SERVICE_SNOC, 1134 .buswidth = 4, 1135 .qos.ap_owned = true, 1136 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1137 .mas_rpm_id = -1, 1138 .slv_rpm_id = 29, 1139 }; 1140 1141 static struct qcom_icc_node slv_qdss_stm = { 1142 .name = "slv_qdss_stm", 1143 .id = QCM2290_SLAVE_QDSS_STM, 1144 .buswidth = 4, 1145 .mas_rpm_id = -1, 1146 .slv_rpm_id = 30, 1147 }; 1148 1149 static struct qcom_icc_node slv_tcu = { 1150 .name = "slv_tcu", 1151 .id = QCM2290_SLAVE_TCU, 1152 .buswidth = 8, 1153 .qos.ap_owned = true, 1154 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1155 .mas_rpm_id = -1, 1156 .slv_rpm_id = 133, 1157 }; 1158 1159 static const u16 slv_anoc_snoc_links[] = { 1160 QCM2290_MASTER_ANOC_SNOC, 1161 }; 1162 1163 static struct qcom_icc_node slv_anoc_snoc = { 1164 .name = "slv_anoc_snoc", 1165 .id = QCM2290_SLAVE_ANOC_SNOC, 1166 .buswidth = 16, 1167 .mas_rpm_id = -1, 1168 .slv_rpm_id = 141, 1169 .num_links = ARRAY_SIZE(slv_anoc_snoc_links), 1170 .links = slv_anoc_snoc_links, 1171 }; 1172 1173 /* NoC descriptors */ 1174 static struct qcom_icc_node * const qcm2290_bimc_nodes[] = { 1175 [MASTER_APPSS_PROC] = &mas_appss_proc, 1176 [MASTER_SNOC_BIMC_RT] = &mas_snoc_bimc_rt, 1177 [MASTER_SNOC_BIMC_NRT] = &mas_snoc_bimc_nrt, 1178 [MASTER_SNOC_BIMC] = &mas_snoc_bimc, 1179 [MASTER_TCU_0] = &mas_tcu_0, 1180 [MASTER_GFX3D] = &mas_gfx3d, 1181 [SLAVE_EBI1] = &slv_ebi1, 1182 [SLAVE_BIMC_SNOC] = &slv_bimc_snoc, 1183 }; 1184 1185 static const struct regmap_config qcm2290_bimc_regmap_config = { 1186 .reg_bits = 32, 1187 .reg_stride = 4, 1188 .val_bits = 32, 1189 .max_register = 0x80000, 1190 .fast_io = true, 1191 }; 1192 1193 static const struct qcom_icc_desc qcm2290_bimc = { 1194 .type = QCOM_ICC_BIMC, 1195 .nodes = qcm2290_bimc_nodes, 1196 .num_nodes = ARRAY_SIZE(qcm2290_bimc_nodes), 1197 .bus_clk_desc = &bimc_clk, 1198 .regmap_cfg = &qcm2290_bimc_regmap_config, 1199 .keep_alive = true, 1200 /* M_REG_BASE() in vendor msm_bus_bimc_adhoc driver */ 1201 .qos_offset = 0x8000, 1202 }; 1203 1204 static struct qcom_icc_node * const qcm2290_cnoc_nodes[] = { 1205 [MASTER_SNOC_CNOC] = &mas_snoc_cnoc, 1206 [MASTER_QDSS_DAP] = &mas_qdss_dap, 1207 [SLAVE_BIMC_CFG] = &slv_bimc_cfg, 1208 [SLAVE_CAMERA_NRT_THROTTLE_CFG] = &slv_camera_nrt_throttle_cfg, 1209 [SLAVE_CAMERA_RT_THROTTLE_CFG] = &slv_camera_rt_throttle_cfg, 1210 [SLAVE_CAMERA_CFG] = &slv_camera_cfg, 1211 [SLAVE_CLK_CTL] = &slv_clk_ctl, 1212 [SLAVE_CRYPTO_0_CFG] = &slv_crypto_0_cfg, 1213 [SLAVE_DISPLAY_CFG] = &slv_display_cfg, 1214 [SLAVE_DISPLAY_THROTTLE_CFG] = &slv_display_throttle_cfg, 1215 [SLAVE_GPU_CFG] = &slv_gpu_cfg, 1216 [SLAVE_HWKM] = &slv_hwkm, 1217 [SLAVE_IMEM_CFG] = &slv_imem_cfg, 1218 [SLAVE_IPA_CFG] = &slv_ipa_cfg, 1219 [SLAVE_LPASS] = &slv_lpass, 1220 [SLAVE_MESSAGE_RAM] = &slv_message_ram, 1221 [SLAVE_PDM] = &slv_pdm, 1222 [SLAVE_PIMEM_CFG] = &slv_pimem_cfg, 1223 [SLAVE_PKA_WRAPPER] = &slv_pka_wrapper, 1224 [SLAVE_PMIC_ARB] = &slv_pmic_arb, 1225 [SLAVE_PRNG] = &slv_prng, 1226 [SLAVE_QDSS_CFG] = &slv_qdss_cfg, 1227 [SLAVE_QM_CFG] = &slv_qm_cfg, 1228 [SLAVE_QM_MPU_CFG] = &slv_qm_mpu_cfg, 1229 [SLAVE_QPIC] = &slv_qpic, 1230 [SLAVE_QUP_0] = &slv_qup_0, 1231 [SLAVE_SDCC_1] = &slv_sdcc_1, 1232 [SLAVE_SDCC_2] = &slv_sdcc_2, 1233 [SLAVE_SNOC_CFG] = &slv_snoc_cfg, 1234 [SLAVE_TCSR] = &slv_tcsr, 1235 [SLAVE_USB3] = &slv_usb3, 1236 [SLAVE_VENUS_CFG] = &slv_venus_cfg, 1237 [SLAVE_VENUS_THROTTLE_CFG] = &slv_venus_throttle_cfg, 1238 [SLAVE_VSENSE_CTRL_CFG] = &slv_vsense_ctrl_cfg, 1239 [SLAVE_SERVICE_CNOC] = &slv_service_cnoc, 1240 }; 1241 1242 static const struct regmap_config qcm2290_cnoc_regmap_config = { 1243 .reg_bits = 32, 1244 .reg_stride = 4, 1245 .val_bits = 32, 1246 .max_register = 0x8200, 1247 .fast_io = true, 1248 }; 1249 1250 static const struct qcom_icc_desc qcm2290_cnoc = { 1251 .type = QCOM_ICC_NOC, 1252 .nodes = qcm2290_cnoc_nodes, 1253 .num_nodes = ARRAY_SIZE(qcm2290_cnoc_nodes), 1254 .bus_clk_desc = &bus_1_clk, 1255 .regmap_cfg = &qcm2290_cnoc_regmap_config, 1256 .keep_alive = true, 1257 }; 1258 1259 static struct qcom_icc_node * const qcm2290_snoc_nodes[] = { 1260 [MASTER_CRYPTO_CORE0] = &mas_crypto_core0, 1261 [MASTER_SNOC_CFG] = &mas_snoc_cfg, 1262 [MASTER_TIC] = &mas_tic, 1263 [MASTER_ANOC_SNOC] = &mas_anoc_snoc, 1264 [MASTER_BIMC_SNOC] = &mas_bimc_snoc, 1265 [MASTER_PIMEM] = &mas_pimem, 1266 [MASTER_QDSS_BAM] = &mas_qdss_bam, 1267 [MASTER_QUP_0] = &mas_qup_0, 1268 [MASTER_IPA] = &mas_ipa, 1269 [MASTER_QDSS_ETR] = &mas_qdss_etr, 1270 [MASTER_SDCC_1] = &mas_sdcc_1, 1271 [MASTER_SDCC_2] = &mas_sdcc_2, 1272 [MASTER_QPIC] = &mas_qpic, 1273 [MASTER_USB3_0] = &mas_usb3_0, 1274 [SLAVE_APPSS] = &slv_appss, 1275 [SLAVE_SNOC_CNOC] = &slv_snoc_cnoc, 1276 [SLAVE_IMEM] = &slv_imem, 1277 [SLAVE_PIMEM] = &slv_pimem, 1278 [SLAVE_SNOC_BIMC] = &slv_snoc_bimc, 1279 [SLAVE_SERVICE_SNOC] = &slv_service_snoc, 1280 [SLAVE_QDSS_STM] = &slv_qdss_stm, 1281 [SLAVE_TCU] = &slv_tcu, 1282 [SLAVE_ANOC_SNOC] = &slv_anoc_snoc, 1283 }; 1284 1285 static const struct regmap_config qcm2290_snoc_regmap_config = { 1286 .reg_bits = 32, 1287 .reg_stride = 4, 1288 .val_bits = 32, 1289 .max_register = 0x60200, 1290 .fast_io = true, 1291 }; 1292 1293 static const struct qcom_icc_desc qcm2290_snoc = { 1294 .type = QCOM_ICC_QNOC, 1295 .nodes = qcm2290_snoc_nodes, 1296 .num_nodes = ARRAY_SIZE(qcm2290_snoc_nodes), 1297 .bus_clk_desc = &bus_2_clk, 1298 .regmap_cfg = &qcm2290_snoc_regmap_config, 1299 .keep_alive = true, 1300 /* Vendor DT node fab-sys_noc property 'qcom,base-offset' */ 1301 .qos_offset = 0x15000, 1302 }; 1303 1304 static struct qcom_icc_node * const qcm2290_qup_virt_nodes[] = { 1305 [MASTER_QUP_CORE_0] = &mas_qup_core_0, 1306 [SLAVE_QUP_CORE_0] = &slv_qup_core_0 1307 }; 1308 1309 static const struct qcom_icc_desc qcm2290_qup_virt = { 1310 .type = QCOM_ICC_QNOC, 1311 .nodes = qcm2290_qup_virt_nodes, 1312 .num_nodes = ARRAY_SIZE(qcm2290_qup_virt_nodes), 1313 .bus_clk_desc = &qup_clk, 1314 .keep_alive = true, 1315 }; 1316 1317 static struct qcom_icc_node * const qcm2290_mmnrt_virt_nodes[] = { 1318 [MASTER_CAMNOC_SF] = &mas_camnoc_sf, 1319 [MASTER_VIDEO_P0] = &mas_video_p0, 1320 [MASTER_VIDEO_PROC] = &mas_video_proc, 1321 [SLAVE_SNOC_BIMC_NRT] = &slv_snoc_bimc_nrt, 1322 }; 1323 1324 static const struct qcom_icc_desc qcm2290_mmnrt_virt = { 1325 .type = QCOM_ICC_QNOC, 1326 .nodes = qcm2290_mmnrt_virt_nodes, 1327 .num_nodes = ARRAY_SIZE(qcm2290_mmnrt_virt_nodes), 1328 .bus_clk_desc = &mmaxi_0_clk, 1329 .regmap_cfg = &qcm2290_snoc_regmap_config, 1330 .keep_alive = true, 1331 .qos_offset = 0x15000, 1332 }; 1333 1334 static struct qcom_icc_node * const qcm2290_mmrt_virt_nodes[] = { 1335 [MASTER_CAMNOC_HF] = &mas_camnoc_hf, 1336 [MASTER_MDP0] = &mas_mdp0, 1337 [SLAVE_SNOC_BIMC_RT] = &slv_snoc_bimc_rt, 1338 }; 1339 1340 static const struct qcom_icc_desc qcm2290_mmrt_virt = { 1341 .type = QCOM_ICC_QNOC, 1342 .nodes = qcm2290_mmrt_virt_nodes, 1343 .num_nodes = ARRAY_SIZE(qcm2290_mmrt_virt_nodes), 1344 .bus_clk_desc = &mmaxi_1_clk, 1345 .regmap_cfg = &qcm2290_snoc_regmap_config, 1346 .keep_alive = true, 1347 .qos_offset = 0x15000, 1348 }; 1349 1350 static const struct of_device_id qcm2290_noc_of_match[] = { 1351 { .compatible = "qcom,qcm2290-bimc", .data = &qcm2290_bimc }, 1352 { .compatible = "qcom,qcm2290-cnoc", .data = &qcm2290_cnoc }, 1353 { .compatible = "qcom,qcm2290-snoc", .data = &qcm2290_snoc }, 1354 { .compatible = "qcom,qcm2290-qup-virt", .data = &qcm2290_qup_virt }, 1355 { .compatible = "qcom,qcm2290-mmrt-virt", .data = &qcm2290_mmrt_virt }, 1356 { .compatible = "qcom,qcm2290-mmnrt-virt", .data = &qcm2290_mmnrt_virt }, 1357 { }, 1358 }; 1359 MODULE_DEVICE_TABLE(of, qcm2290_noc_of_match); 1360 1361 static struct platform_driver qcm2290_noc_driver = { 1362 .probe = qnoc_probe, 1363 .remove = qnoc_remove, 1364 .driver = { 1365 .name = "qnoc-qcm2290", 1366 .of_match_table = qcm2290_noc_of_match, 1367 .sync_state = icc_sync_state, 1368 }, 1369 }; 1370 module_platform_driver(qcm2290_noc_driver); 1371 1372 MODULE_DESCRIPTION("Qualcomm QCM2290 NoC driver"); 1373 MODULE_LICENSE("GPL v2"); 1374