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