1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Qualcomm MSM8996 Network-on-Chip (NoC) QoS driver 4 * 5 * Copyright (c) 2021 Yassine Oudjana <y.oudjana@protonmail.com> 6 */ 7 8 #include <linux/clk.h> 9 #include <linux/device.h> 10 #include <linux/interconnect-provider.h> 11 #include <linux/io.h> 12 #include <linux/module.h> 13 #include <linux/of_device.h> 14 #include <linux/of_platform.h> 15 #include <linux/platform_device.h> 16 #include <linux/regmap.h> 17 18 #include <dt-bindings/interconnect/qcom,msm8996.h> 19 20 #include "icc-rpm.h" 21 #include "smd-rpm.h" 22 #include "msm8996.h" 23 24 static const char * const bus_mm_clocks[] = { 25 "bus", 26 "bus_a", 27 "iface" 28 }; 29 30 static const char * const bus_a0noc_clocks[] = { 31 "aggre0_snoc_axi", 32 "aggre0_cnoc_ahb", 33 "aggre0_noc_mpu_cfg" 34 }; 35 36 static const char * const bus_a2noc_clocks[] = { 37 "bus", 38 "bus_a", 39 "aggre2_ufs_axi", 40 "ufs_axi" 41 }; 42 43 static const u16 mas_a0noc_common_links[] = { 44 MSM8996_SLAVE_A0NOC_SNOC 45 }; 46 47 static struct qcom_icc_node mas_pcie_0 = { 48 .name = "mas_pcie_0", 49 .id = MSM8996_MASTER_PCIE_0, 50 .buswidth = 8, 51 .mas_rpm_id = 65, 52 .slv_rpm_id = -1, 53 .qos.ap_owned = true, 54 .qos.qos_mode = NOC_QOS_MODE_FIXED, 55 .qos.areq_prio = 1, 56 .qos.prio_level = 1, 57 .qos.qos_port = 0, 58 .num_links = ARRAY_SIZE(mas_a0noc_common_links), 59 .links = mas_a0noc_common_links 60 }; 61 62 static struct qcom_icc_node mas_pcie_1 = { 63 .name = "mas_pcie_1", 64 .id = MSM8996_MASTER_PCIE_1, 65 .buswidth = 8, 66 .mas_rpm_id = 66, 67 .slv_rpm_id = -1, 68 .qos.ap_owned = true, 69 .qos.qos_mode = NOC_QOS_MODE_FIXED, 70 .qos.areq_prio = 1, 71 .qos.prio_level = 1, 72 .qos.qos_port = 1, 73 .num_links = ARRAY_SIZE(mas_a0noc_common_links), 74 .links = mas_a0noc_common_links 75 }; 76 77 static struct qcom_icc_node mas_pcie_2 = { 78 .name = "mas_pcie_2", 79 .id = MSM8996_MASTER_PCIE_2, 80 .buswidth = 8, 81 .mas_rpm_id = 119, 82 .slv_rpm_id = -1, 83 .qos.ap_owned = true, 84 .qos.qos_mode = NOC_QOS_MODE_FIXED, 85 .qos.areq_prio = 1, 86 .qos.prio_level = 1, 87 .qos.qos_port = 2, 88 .num_links = ARRAY_SIZE(mas_a0noc_common_links), 89 .links = mas_a0noc_common_links 90 }; 91 92 static const u16 mas_a1noc_common_links[] = { 93 MSM8996_SLAVE_A1NOC_SNOC 94 }; 95 96 static struct qcom_icc_node mas_cnoc_a1noc = { 97 .name = "mas_cnoc_a1noc", 98 .id = MSM8996_MASTER_CNOC_A1NOC, 99 .buswidth = 8, 100 .mas_rpm_id = 116, 101 .slv_rpm_id = -1, 102 .qos.ap_owned = true, 103 .qos.qos_mode = NOC_QOS_MODE_INVALID, 104 .num_links = ARRAY_SIZE(mas_a1noc_common_links), 105 .links = mas_a1noc_common_links 106 }; 107 108 static struct qcom_icc_node mas_crypto_c0 = { 109 .name = "mas_crypto_c0", 110 .id = MSM8996_MASTER_CRYPTO_CORE0, 111 .buswidth = 8, 112 .mas_rpm_id = 23, 113 .slv_rpm_id = -1, 114 .qos.ap_owned = true, 115 .qos.qos_mode = NOC_QOS_MODE_FIXED, 116 .qos.areq_prio = 1, 117 .qos.prio_level = 1, 118 .qos.qos_port = 0, 119 .num_links = ARRAY_SIZE(mas_a1noc_common_links), 120 .links = mas_a1noc_common_links 121 }; 122 123 static struct qcom_icc_node mas_pnoc_a1noc = { 124 .name = "mas_pnoc_a1noc", 125 .id = MSM8996_MASTER_PNOC_A1NOC, 126 .buswidth = 8, 127 .mas_rpm_id = 117, 128 .slv_rpm_id = -1, 129 .qos.ap_owned = false, 130 .qos.qos_mode = NOC_QOS_MODE_FIXED, 131 .qos.areq_prio = 0, 132 .qos.prio_level = 0, 133 .qos.qos_port = 1, 134 .num_links = ARRAY_SIZE(mas_a1noc_common_links), 135 .links = mas_a1noc_common_links 136 }; 137 138 static const u16 mas_a2noc_common_links[] = { 139 MSM8996_SLAVE_A2NOC_SNOC 140 }; 141 142 static struct qcom_icc_node mas_usb3 = { 143 .name = "mas_usb3", 144 .id = MSM8996_MASTER_USB3, 145 .buswidth = 8, 146 .mas_rpm_id = 32, 147 .slv_rpm_id = -1, 148 .qos.ap_owned = true, 149 .qos.qos_mode = NOC_QOS_MODE_FIXED, 150 .qos.areq_prio = 1, 151 .qos.prio_level = 1, 152 .qos.qos_port = 3, 153 .num_links = ARRAY_SIZE(mas_a2noc_common_links), 154 .links = mas_a2noc_common_links 155 }; 156 157 static struct qcom_icc_node mas_ipa = { 158 .name = "mas_ipa", 159 .id = MSM8996_MASTER_IPA, 160 .buswidth = 8, 161 .mas_rpm_id = 59, 162 .slv_rpm_id = -1, 163 .qos.ap_owned = true, 164 .qos.qos_mode = NOC_QOS_MODE_FIXED, 165 .qos.areq_prio = 0, 166 .qos.prio_level = 0, 167 .qos.qos_port = -1, 168 .num_links = ARRAY_SIZE(mas_a2noc_common_links), 169 .links = mas_a2noc_common_links 170 }; 171 172 static struct qcom_icc_node mas_ufs = { 173 .name = "mas_ufs", 174 .id = MSM8996_MASTER_UFS, 175 .buswidth = 8, 176 .mas_rpm_id = 68, 177 .slv_rpm_id = -1, 178 .qos.ap_owned = true, 179 .qos.qos_mode = NOC_QOS_MODE_FIXED, 180 .qos.areq_prio = 1, 181 .qos.prio_level = 1, 182 .qos.qos_port = 2, 183 .num_links = ARRAY_SIZE(mas_a2noc_common_links), 184 .links = mas_a2noc_common_links 185 }; 186 187 static const u16 mas_apps_proc_links[] = { 188 MSM8996_SLAVE_BIMC_SNOC_1, 189 MSM8996_SLAVE_EBI_CH0, 190 MSM8996_SLAVE_BIMC_SNOC_0 191 }; 192 193 static struct qcom_icc_node mas_apps_proc = { 194 .name = "mas_apps_proc", 195 .id = MSM8996_MASTER_AMPSS_M0, 196 .buswidth = 8, 197 .mas_rpm_id = 0, 198 .slv_rpm_id = -1, 199 .qos.ap_owned = true, 200 .qos.qos_mode = NOC_QOS_MODE_FIXED, 201 .qos.areq_prio = 0, 202 .qos.prio_level = 0, 203 .qos.qos_port = 0, 204 .num_links = ARRAY_SIZE(mas_apps_proc_links), 205 .links = mas_apps_proc_links 206 }; 207 208 static const u16 mas_oxili_common_links[] = { 209 MSM8996_SLAVE_BIMC_SNOC_1, 210 MSM8996_SLAVE_HMSS_L3, 211 MSM8996_SLAVE_EBI_CH0, 212 MSM8996_SLAVE_BIMC_SNOC_0 213 }; 214 215 static struct qcom_icc_node mas_oxili = { 216 .name = "mas_oxili", 217 .id = MSM8996_MASTER_GRAPHICS_3D, 218 .buswidth = 8, 219 .mas_rpm_id = 6, 220 .slv_rpm_id = -1, 221 .qos.ap_owned = true, 222 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 223 .qos.areq_prio = 0, 224 .qos.prio_level = 0, 225 .qos.qos_port = 1, 226 .num_links = ARRAY_SIZE(mas_oxili_common_links), 227 .links = mas_oxili_common_links 228 }; 229 230 static struct qcom_icc_node mas_mnoc_bimc = { 231 .name = "mas_mnoc_bimc", 232 .id = MSM8996_MASTER_MNOC_BIMC, 233 .buswidth = 8, 234 .mas_rpm_id = 2, 235 .slv_rpm_id = -1, 236 .qos.ap_owned = true, 237 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 238 .qos.areq_prio = 0, 239 .qos.prio_level = 0, 240 .qos.qos_port = 2, 241 .num_links = ARRAY_SIZE(mas_oxili_common_links), 242 .links = mas_oxili_common_links 243 }; 244 245 static const u16 mas_snoc_bimc_links[] = { 246 MSM8996_SLAVE_HMSS_L3, 247 MSM8996_SLAVE_EBI_CH0 248 }; 249 250 static struct qcom_icc_node mas_snoc_bimc = { 251 .name = "mas_snoc_bimc", 252 .id = MSM8996_MASTER_SNOC_BIMC, 253 .buswidth = 8, 254 .mas_rpm_id = 3, 255 .slv_rpm_id = -1, 256 .qos.ap_owned = false, 257 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 258 .qos.areq_prio = 0, 259 .qos.prio_level = 0, 260 .qos.qos_port = -1, 261 .num_links = ARRAY_SIZE(mas_snoc_bimc_links), 262 .links = mas_snoc_bimc_links 263 }; 264 265 static const u16 mas_snoc_cnoc_links[] = { 266 MSM8996_SLAVE_CLK_CTL, 267 MSM8996_SLAVE_RBCPR_CX, 268 MSM8996_SLAVE_A2NOC_SMMU_CFG, 269 MSM8996_SLAVE_A0NOC_MPU_CFG, 270 MSM8996_SLAVE_MESSAGE_RAM, 271 MSM8996_SLAVE_CNOC_MNOC_MMSS_CFG, 272 MSM8996_SLAVE_PCIE_0_CFG, 273 MSM8996_SLAVE_TLMM, 274 MSM8996_SLAVE_MPM, 275 MSM8996_SLAVE_A0NOC_SMMU_CFG, 276 MSM8996_SLAVE_EBI1_PHY_CFG, 277 MSM8996_SLAVE_BIMC_CFG, 278 MSM8996_SLAVE_PIMEM_CFG, 279 MSM8996_SLAVE_RBCPR_MX, 280 MSM8996_SLAVE_PRNG, 281 MSM8996_SLAVE_PCIE20_AHB2PHY, 282 MSM8996_SLAVE_A2NOC_MPU_CFG, 283 MSM8996_SLAVE_QDSS_CFG, 284 MSM8996_SLAVE_A2NOC_CFG, 285 MSM8996_SLAVE_A0NOC_CFG, 286 MSM8996_SLAVE_UFS_CFG, 287 MSM8996_SLAVE_CRYPTO_0_CFG, 288 MSM8996_SLAVE_PCIE_1_CFG, 289 MSM8996_SLAVE_SNOC_CFG, 290 MSM8996_SLAVE_SNOC_MPU_CFG, 291 MSM8996_SLAVE_A1NOC_MPU_CFG, 292 MSM8996_SLAVE_A1NOC_SMMU_CFG, 293 MSM8996_SLAVE_PCIE_2_CFG, 294 MSM8996_SLAVE_CNOC_MNOC_CFG, 295 MSM8996_SLAVE_QDSS_RBCPR_APU_CFG, 296 MSM8996_SLAVE_PMIC_ARB, 297 MSM8996_SLAVE_IMEM_CFG, 298 MSM8996_SLAVE_A1NOC_CFG, 299 MSM8996_SLAVE_SSC_CFG, 300 MSM8996_SLAVE_TCSR, 301 MSM8996_SLAVE_LPASS_SMMU_CFG, 302 MSM8996_SLAVE_DCC_CFG 303 }; 304 305 static struct qcom_icc_node mas_snoc_cnoc = { 306 .name = "mas_snoc_cnoc", 307 .id = MSM8996_MASTER_SNOC_CNOC, 308 .buswidth = 8, 309 .mas_rpm_id = 52, 310 .slv_rpm_id = -1, 311 .num_links = ARRAY_SIZE(mas_snoc_cnoc_links), 312 .links = mas_snoc_cnoc_links 313 }; 314 315 static const u16 mas_qdss_dap_links[] = { 316 MSM8996_SLAVE_QDSS_RBCPR_APU_CFG, 317 MSM8996_SLAVE_RBCPR_CX, 318 MSM8996_SLAVE_A2NOC_SMMU_CFG, 319 MSM8996_SLAVE_A0NOC_MPU_CFG, 320 MSM8996_SLAVE_MESSAGE_RAM, 321 MSM8996_SLAVE_PCIE_0_CFG, 322 MSM8996_SLAVE_TLMM, 323 MSM8996_SLAVE_MPM, 324 MSM8996_SLAVE_A0NOC_SMMU_CFG, 325 MSM8996_SLAVE_EBI1_PHY_CFG, 326 MSM8996_SLAVE_BIMC_CFG, 327 MSM8996_SLAVE_PIMEM_CFG, 328 MSM8996_SLAVE_RBCPR_MX, 329 MSM8996_SLAVE_CLK_CTL, 330 MSM8996_SLAVE_PRNG, 331 MSM8996_SLAVE_PCIE20_AHB2PHY, 332 MSM8996_SLAVE_A2NOC_MPU_CFG, 333 MSM8996_SLAVE_QDSS_CFG, 334 MSM8996_SLAVE_A2NOC_CFG, 335 MSM8996_SLAVE_A0NOC_CFG, 336 MSM8996_SLAVE_UFS_CFG, 337 MSM8996_SLAVE_CRYPTO_0_CFG, 338 MSM8996_SLAVE_CNOC_A1NOC, 339 MSM8996_SLAVE_PCIE_1_CFG, 340 MSM8996_SLAVE_SNOC_CFG, 341 MSM8996_SLAVE_SNOC_MPU_CFG, 342 MSM8996_SLAVE_A1NOC_MPU_CFG, 343 MSM8996_SLAVE_A1NOC_SMMU_CFG, 344 MSM8996_SLAVE_PCIE_2_CFG, 345 MSM8996_SLAVE_CNOC_MNOC_CFG, 346 MSM8996_SLAVE_CNOC_MNOC_MMSS_CFG, 347 MSM8996_SLAVE_PMIC_ARB, 348 MSM8996_SLAVE_IMEM_CFG, 349 MSM8996_SLAVE_A1NOC_CFG, 350 MSM8996_SLAVE_SSC_CFG, 351 MSM8996_SLAVE_TCSR, 352 MSM8996_SLAVE_LPASS_SMMU_CFG, 353 MSM8996_SLAVE_DCC_CFG 354 }; 355 356 static struct qcom_icc_node mas_qdss_dap = { 357 .name = "mas_qdss_dap", 358 .id = MSM8996_MASTER_QDSS_DAP, 359 .buswidth = 8, 360 .mas_rpm_id = 49, 361 .slv_rpm_id = -1, 362 .qos.ap_owned = true, 363 .qos.qos_mode = NOC_QOS_MODE_INVALID, 364 .num_links = ARRAY_SIZE(mas_qdss_dap_links), 365 .links = mas_qdss_dap_links 366 }; 367 368 static const u16 mas_cnoc_mnoc_mmss_cfg_links[] = { 369 MSM8996_SLAVE_MMAGIC_CFG, 370 MSM8996_SLAVE_DSA_MPU_CFG, 371 MSM8996_SLAVE_MMSS_CLK_CFG, 372 MSM8996_SLAVE_CAMERA_THROTTLE_CFG, 373 MSM8996_SLAVE_VENUS_CFG, 374 MSM8996_SLAVE_SMMU_VFE_CFG, 375 MSM8996_SLAVE_MISC_CFG, 376 MSM8996_SLAVE_SMMU_CPP_CFG, 377 MSM8996_SLAVE_GRAPHICS_3D_CFG, 378 MSM8996_SLAVE_DISPLAY_THROTTLE_CFG, 379 MSM8996_SLAVE_VENUS_THROTTLE_CFG, 380 MSM8996_SLAVE_CAMERA_CFG, 381 MSM8996_SLAVE_DISPLAY_CFG, 382 MSM8996_SLAVE_CPR_CFG, 383 MSM8996_SLAVE_SMMU_ROTATOR_CFG, 384 MSM8996_SLAVE_DSA_CFG, 385 MSM8996_SLAVE_SMMU_VENUS_CFG, 386 MSM8996_SLAVE_VMEM_CFG, 387 MSM8996_SLAVE_SMMU_JPEG_CFG, 388 MSM8996_SLAVE_SMMU_MDP_CFG, 389 MSM8996_SLAVE_MNOC_MPU_CFG 390 }; 391 392 static struct qcom_icc_node mas_cnoc_mnoc_mmss_cfg = { 393 .name = "mas_cnoc_mnoc_mmss_cfg", 394 .id = MSM8996_MASTER_CNOC_MNOC_MMSS_CFG, 395 .buswidth = 8, 396 .mas_rpm_id = 4, 397 .slv_rpm_id = -1, 398 .qos.ap_owned = true, 399 .qos.qos_mode = NOC_QOS_MODE_INVALID, 400 .num_links = ARRAY_SIZE(mas_cnoc_mnoc_mmss_cfg_links), 401 .links = mas_cnoc_mnoc_mmss_cfg_links 402 }; 403 404 static const u16 mas_cnoc_mnoc_cfg_links[] = { 405 MSM8996_SLAVE_SERVICE_MNOC 406 }; 407 408 static struct qcom_icc_node mas_cnoc_mnoc_cfg = { 409 .name = "mas_cnoc_mnoc_cfg", 410 .id = MSM8996_MASTER_CNOC_MNOC_CFG, 411 .buswidth = 8, 412 .mas_rpm_id = 5, 413 .slv_rpm_id = -1, 414 .qos.ap_owned = true, 415 .qos.qos_mode = NOC_QOS_MODE_INVALID, 416 .num_links = ARRAY_SIZE(mas_cnoc_mnoc_cfg_links), 417 .links = mas_cnoc_mnoc_cfg_links 418 }; 419 420 static const u16 mas_mnoc_bimc_common_links[] = { 421 MSM8996_SLAVE_MNOC_BIMC 422 }; 423 424 static struct qcom_icc_node mas_cpp = { 425 .name = "mas_cpp", 426 .id = MSM8996_MASTER_CPP, 427 .buswidth = 32, 428 .mas_rpm_id = 115, 429 .slv_rpm_id = -1, 430 .qos.ap_owned = true, 431 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 432 .qos.areq_prio = 0, 433 .qos.prio_level = 0, 434 .qos.qos_port = 5, 435 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links), 436 .links = mas_mnoc_bimc_common_links 437 }; 438 439 static struct qcom_icc_node mas_jpeg = { 440 .name = "mas_jpeg", 441 .id = MSM8996_MASTER_JPEG, 442 .buswidth = 32, 443 .mas_rpm_id = 7, 444 .slv_rpm_id = -1, 445 .qos.ap_owned = true, 446 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 447 .qos.areq_prio = 0, 448 .qos.prio_level = 0, 449 .qos.qos_port = 7, 450 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links), 451 .links = mas_mnoc_bimc_common_links 452 }; 453 454 static struct qcom_icc_node mas_mdp_p0 = { 455 .name = "mas_mdp_p0", 456 .id = MSM8996_MASTER_MDP_PORT0, 457 .buswidth = 32, 458 .mas_rpm_id = 8, 459 .slv_rpm_id = -1, 460 .qos.ap_owned = true, 461 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 462 .qos.areq_prio = 0, 463 .qos.prio_level = 0, 464 .qos.qos_port = 1, 465 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links), 466 .links = mas_mnoc_bimc_common_links 467 }; 468 469 static struct qcom_icc_node mas_mdp_p1 = { 470 .name = "mas_mdp_p1", 471 .id = MSM8996_MASTER_MDP_PORT1, 472 .buswidth = 32, 473 .mas_rpm_id = 61, 474 .slv_rpm_id = -1, 475 .qos.ap_owned = true, 476 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 477 .qos.areq_prio = 0, 478 .qos.prio_level = 0, 479 .qos.qos_port = 2, 480 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links), 481 .links = mas_mnoc_bimc_common_links 482 }; 483 484 static struct qcom_icc_node mas_rotator = { 485 .name = "mas_rotator", 486 .id = MSM8996_MASTER_ROTATOR, 487 .buswidth = 32, 488 .mas_rpm_id = 120, 489 .slv_rpm_id = -1, 490 .qos.ap_owned = true, 491 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 492 .qos.areq_prio = 0, 493 .qos.prio_level = 0, 494 .qos.qos_port = 0, 495 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links), 496 .links = mas_mnoc_bimc_common_links 497 }; 498 499 static struct qcom_icc_node mas_venus = { 500 .name = "mas_venus", 501 .id = MSM8996_MASTER_VIDEO_P0, 502 .buswidth = 32, 503 .mas_rpm_id = 9, 504 .slv_rpm_id = -1, 505 .qos.ap_owned = true, 506 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 507 .qos.areq_prio = 0, 508 .qos.prio_level = 0, 509 .qos.qos_port = 3, 510 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links), 511 .links = mas_mnoc_bimc_common_links 512 }; 513 514 static struct qcom_icc_node mas_vfe = { 515 .name = "mas_vfe", 516 .id = MSM8996_MASTER_VFE, 517 .buswidth = 32, 518 .mas_rpm_id = 11, 519 .slv_rpm_id = -1, 520 .qos.ap_owned = true, 521 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 522 .qos.areq_prio = 0, 523 .qos.prio_level = 0, 524 .qos.qos_port = 6, 525 .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links), 526 .links = mas_mnoc_bimc_common_links 527 }; 528 529 static const u16 mas_vmem_common_links[] = { 530 MSM8996_SLAVE_VMEM 531 }; 532 533 static struct qcom_icc_node mas_snoc_vmem = { 534 .name = "mas_snoc_vmem", 535 .id = MSM8996_MASTER_SNOC_VMEM, 536 .buswidth = 32, 537 .mas_rpm_id = 114, 538 .slv_rpm_id = -1, 539 .qos.ap_owned = true, 540 .qos.qos_mode = NOC_QOS_MODE_INVALID, 541 .num_links = ARRAY_SIZE(mas_vmem_common_links), 542 .links = mas_vmem_common_links 543 }; 544 545 static struct qcom_icc_node mas_venus_vmem = { 546 .name = "mas_venus_vmem", 547 .id = MSM8996_MASTER_VIDEO_P0_OCMEM, 548 .buswidth = 32, 549 .mas_rpm_id = 121, 550 .slv_rpm_id = -1, 551 .qos.ap_owned = true, 552 .qos.qos_mode = NOC_QOS_MODE_INVALID, 553 .num_links = ARRAY_SIZE(mas_vmem_common_links), 554 .links = mas_vmem_common_links 555 }; 556 557 static const u16 mas_snoc_pnoc_links[] = { 558 MSM8996_SLAVE_BLSP_1, 559 MSM8996_SLAVE_BLSP_2, 560 MSM8996_SLAVE_SDCC_1, 561 MSM8996_SLAVE_SDCC_2, 562 MSM8996_SLAVE_SDCC_4, 563 MSM8996_SLAVE_TSIF, 564 MSM8996_SLAVE_PDM, 565 MSM8996_SLAVE_AHB2PHY 566 }; 567 568 static struct qcom_icc_node mas_snoc_pnoc = { 569 .name = "mas_snoc_pnoc", 570 .id = MSM8996_MASTER_SNOC_PNOC, 571 .buswidth = 8, 572 .mas_rpm_id = 44, 573 .slv_rpm_id = -1, 574 .num_links = ARRAY_SIZE(mas_snoc_pnoc_links), 575 .links = mas_snoc_pnoc_links 576 }; 577 578 static const u16 mas_pnoc_a1noc_common_links[] = { 579 MSM8996_SLAVE_PNOC_A1NOC 580 }; 581 582 static struct qcom_icc_node mas_sdcc_1 = { 583 .name = "mas_sdcc_1", 584 .id = MSM8996_MASTER_SDCC_1, 585 .buswidth = 8, 586 .mas_rpm_id = 33, 587 .slv_rpm_id = -1, 588 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links), 589 .links = mas_pnoc_a1noc_common_links 590 }; 591 592 static struct qcom_icc_node mas_sdcc_2 = { 593 .name = "mas_sdcc_2", 594 .id = MSM8996_MASTER_SDCC_2, 595 .buswidth = 8, 596 .mas_rpm_id = 35, 597 .slv_rpm_id = -1, 598 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links), 599 .links = mas_pnoc_a1noc_common_links 600 }; 601 602 static struct qcom_icc_node mas_sdcc_4 = { 603 .name = "mas_sdcc_4", 604 .id = MSM8996_MASTER_SDCC_4, 605 .buswidth = 8, 606 .mas_rpm_id = 36, 607 .slv_rpm_id = -1, 608 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links), 609 .links = mas_pnoc_a1noc_common_links 610 }; 611 612 static struct qcom_icc_node mas_usb_hs = { 613 .name = "mas_usb_hs", 614 .id = MSM8996_MASTER_USB_HS, 615 .buswidth = 8, 616 .mas_rpm_id = 42, 617 .slv_rpm_id = -1, 618 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links), 619 .links = mas_pnoc_a1noc_common_links 620 }; 621 622 static struct qcom_icc_node mas_blsp_1 = { 623 .name = "mas_blsp_1", 624 .id = MSM8996_MASTER_BLSP_1, 625 .buswidth = 4, 626 .mas_rpm_id = 41, 627 .slv_rpm_id = -1, 628 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links), 629 .links = mas_pnoc_a1noc_common_links 630 }; 631 632 static struct qcom_icc_node mas_blsp_2 = { 633 .name = "mas_blsp_2", 634 .id = MSM8996_MASTER_BLSP_2, 635 .buswidth = 4, 636 .mas_rpm_id = 39, 637 .slv_rpm_id = -1, 638 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links), 639 .links = mas_pnoc_a1noc_common_links 640 }; 641 642 static struct qcom_icc_node mas_tsif = { 643 .name = "mas_tsif", 644 .id = MSM8996_MASTER_TSIF, 645 .buswidth = 4, 646 .mas_rpm_id = 37, 647 .slv_rpm_id = -1, 648 .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links), 649 .links = mas_pnoc_a1noc_common_links 650 }; 651 652 static const u16 mas_hmss_links[] = { 653 MSM8996_SLAVE_PIMEM, 654 MSM8996_SLAVE_OCIMEM, 655 MSM8996_SLAVE_SNOC_BIMC 656 }; 657 658 static struct qcom_icc_node mas_hmss = { 659 .name = "mas_hmss", 660 .id = MSM8996_MASTER_HMSS, 661 .buswidth = 8, 662 .mas_rpm_id = 118, 663 .slv_rpm_id = -1, 664 .qos.ap_owned = true, 665 .qos.qos_mode = NOC_QOS_MODE_FIXED, 666 .qos.areq_prio = 1, 667 .qos.prio_level = 1, 668 .qos.qos_port = 4, 669 .num_links = ARRAY_SIZE(mas_hmss_links), 670 .links = mas_hmss_links 671 }; 672 673 static const u16 mas_qdss_common_links[] = { 674 MSM8996_SLAVE_PIMEM, 675 MSM8996_SLAVE_USB3, 676 MSM8996_SLAVE_OCIMEM, 677 MSM8996_SLAVE_SNOC_BIMC, 678 MSM8996_SLAVE_SNOC_PNOC 679 }; 680 681 static struct qcom_icc_node mas_qdss_bam = { 682 .name = "mas_qdss_bam", 683 .id = MSM8996_MASTER_QDSS_BAM, 684 .buswidth = 16, 685 .mas_rpm_id = 19, 686 .slv_rpm_id = -1, 687 .qos.ap_owned = true, 688 .qos.qos_mode = NOC_QOS_MODE_FIXED, 689 .qos.areq_prio = 1, 690 .qos.prio_level = 1, 691 .qos.qos_port = 2, 692 .num_links = ARRAY_SIZE(mas_qdss_common_links), 693 .links = mas_qdss_common_links 694 }; 695 696 static const u16 mas_snoc_cfg_links[] = { 697 MSM8996_SLAVE_SERVICE_SNOC 698 }; 699 700 static struct qcom_icc_node mas_snoc_cfg = { 701 .name = "mas_snoc_cfg", 702 .id = MSM8996_MASTER_SNOC_CFG, 703 .buswidth = 16, 704 .mas_rpm_id = 20, 705 .slv_rpm_id = -1, 706 .qos.ap_owned = true, 707 .qos.qos_mode = NOC_QOS_MODE_INVALID, 708 .num_links = ARRAY_SIZE(mas_snoc_cfg_links), 709 .links = mas_snoc_cfg_links 710 }; 711 712 static const u16 mas_bimc_snoc_0_links[] = { 713 MSM8996_SLAVE_SNOC_VMEM, 714 MSM8996_SLAVE_USB3, 715 MSM8996_SLAVE_PIMEM, 716 MSM8996_SLAVE_LPASS, 717 MSM8996_SLAVE_APPSS, 718 MSM8996_SLAVE_SNOC_CNOC, 719 MSM8996_SLAVE_SNOC_PNOC, 720 MSM8996_SLAVE_OCIMEM, 721 MSM8996_SLAVE_QDSS_STM 722 }; 723 724 static struct qcom_icc_node mas_bimc_snoc_0 = { 725 .name = "mas_bimc_snoc_0", 726 .id = MSM8996_MASTER_BIMC_SNOC_0, 727 .buswidth = 16, 728 .mas_rpm_id = 21, 729 .slv_rpm_id = -1, 730 .qos.ap_owned = true, 731 .qos.qos_mode = NOC_QOS_MODE_INVALID, 732 .num_links = ARRAY_SIZE(mas_bimc_snoc_0_links), 733 .links = mas_bimc_snoc_0_links 734 }; 735 736 static const u16 mas_bimc_snoc_1_links[] = { 737 MSM8996_SLAVE_PCIE_2, 738 MSM8996_SLAVE_PCIE_1, 739 MSM8996_SLAVE_PCIE_0 740 }; 741 742 static struct qcom_icc_node mas_bimc_snoc_1 = { 743 .name = "mas_bimc_snoc_1", 744 .id = MSM8996_MASTER_BIMC_SNOC_1, 745 .buswidth = 16, 746 .mas_rpm_id = 109, 747 .slv_rpm_id = -1, 748 .qos.ap_owned = true, 749 .qos.qos_mode = NOC_QOS_MODE_INVALID, 750 .num_links = ARRAY_SIZE(mas_bimc_snoc_1_links), 751 .links = mas_bimc_snoc_1_links 752 }; 753 754 static const u16 mas_a0noc_snoc_links[] = { 755 MSM8996_SLAVE_SNOC_PNOC, 756 MSM8996_SLAVE_OCIMEM, 757 MSM8996_SLAVE_APPSS, 758 MSM8996_SLAVE_SNOC_BIMC, 759 MSM8996_SLAVE_PIMEM 760 }; 761 762 static struct qcom_icc_node mas_a0noc_snoc = { 763 .name = "mas_a0noc_snoc", 764 .id = MSM8996_MASTER_A0NOC_SNOC, 765 .buswidth = 16, 766 .mas_rpm_id = 110, 767 .slv_rpm_id = -1, 768 .qos.ap_owned = true, 769 .qos.qos_mode = NOC_QOS_MODE_INVALID, 770 .num_links = ARRAY_SIZE(mas_a0noc_snoc_links), 771 .links = mas_a0noc_snoc_links 772 }; 773 774 static const u16 mas_a1noc_snoc_links[] = { 775 MSM8996_SLAVE_SNOC_VMEM, 776 MSM8996_SLAVE_USB3, 777 MSM8996_SLAVE_PCIE_0, 778 MSM8996_SLAVE_PIMEM, 779 MSM8996_SLAVE_PCIE_2, 780 MSM8996_SLAVE_LPASS, 781 MSM8996_SLAVE_PCIE_1, 782 MSM8996_SLAVE_APPSS, 783 MSM8996_SLAVE_SNOC_BIMC, 784 MSM8996_SLAVE_SNOC_CNOC, 785 MSM8996_SLAVE_SNOC_PNOC, 786 MSM8996_SLAVE_OCIMEM, 787 MSM8996_SLAVE_QDSS_STM 788 }; 789 790 static struct qcom_icc_node mas_a1noc_snoc = { 791 .name = "mas_a1noc_snoc", 792 .id = MSM8996_MASTER_A1NOC_SNOC, 793 .buswidth = 16, 794 .mas_rpm_id = 111, 795 .slv_rpm_id = -1, 796 .num_links = ARRAY_SIZE(mas_a1noc_snoc_links), 797 .links = mas_a1noc_snoc_links 798 }; 799 800 static const u16 mas_a2noc_snoc_links[] = { 801 MSM8996_SLAVE_SNOC_VMEM, 802 MSM8996_SLAVE_USB3, 803 MSM8996_SLAVE_PCIE_1, 804 MSM8996_SLAVE_PIMEM, 805 MSM8996_SLAVE_PCIE_2, 806 MSM8996_SLAVE_QDSS_STM, 807 MSM8996_SLAVE_LPASS, 808 MSM8996_SLAVE_SNOC_BIMC, 809 MSM8996_SLAVE_SNOC_CNOC, 810 MSM8996_SLAVE_SNOC_PNOC, 811 MSM8996_SLAVE_OCIMEM, 812 MSM8996_SLAVE_PCIE_0 813 }; 814 815 static struct qcom_icc_node mas_a2noc_snoc = { 816 .name = "mas_a2noc_snoc", 817 .id = MSM8996_MASTER_A2NOC_SNOC, 818 .buswidth = 16, 819 .mas_rpm_id = 112, 820 .slv_rpm_id = -1, 821 .num_links = ARRAY_SIZE(mas_a2noc_snoc_links), 822 .links = mas_a2noc_snoc_links 823 }; 824 825 static struct qcom_icc_node mas_qdss_etr = { 826 .name = "mas_qdss_etr", 827 .id = MSM8996_MASTER_QDSS_ETR, 828 .buswidth = 16, 829 .mas_rpm_id = 31, 830 .slv_rpm_id = -1, 831 .qos.ap_owned = true, 832 .qos.qos_mode = NOC_QOS_MODE_FIXED, 833 .qos.areq_prio = 1, 834 .qos.prio_level = 1, 835 .qos.qos_port = 3, 836 .num_links = ARRAY_SIZE(mas_qdss_common_links), 837 .links = mas_qdss_common_links 838 }; 839 840 static const u16 slv_a0noc_snoc_links[] = { 841 MSM8996_MASTER_A0NOC_SNOC 842 }; 843 844 static struct qcom_icc_node slv_a0noc_snoc = { 845 .name = "slv_a0noc_snoc", 846 .id = MSM8996_SLAVE_A0NOC_SNOC, 847 .buswidth = 8, 848 .mas_rpm_id = -1, 849 .slv_rpm_id = 141, 850 .qos.ap_owned = true, 851 .qos.qos_mode = NOC_QOS_MODE_INVALID, 852 .num_links = ARRAY_SIZE(slv_a0noc_snoc_links), 853 .links = slv_a0noc_snoc_links 854 }; 855 856 static const u16 slv_a1noc_snoc_links[] = { 857 MSM8996_MASTER_A1NOC_SNOC 858 }; 859 860 static struct qcom_icc_node slv_a1noc_snoc = { 861 .name = "slv_a1noc_snoc", 862 .id = MSM8996_SLAVE_A1NOC_SNOC, 863 .buswidth = 8, 864 .mas_rpm_id = -1, 865 .slv_rpm_id = 142, 866 .num_links = ARRAY_SIZE(slv_a1noc_snoc_links), 867 .links = slv_a1noc_snoc_links 868 }; 869 870 static const u16 slv_a2noc_snoc_links[] = { 871 MSM8996_MASTER_A2NOC_SNOC 872 }; 873 874 static struct qcom_icc_node slv_a2noc_snoc = { 875 .name = "slv_a2noc_snoc", 876 .id = MSM8996_SLAVE_A2NOC_SNOC, 877 .buswidth = 8, 878 .mas_rpm_id = -1, 879 .slv_rpm_id = 143, 880 .num_links = ARRAY_SIZE(slv_a2noc_snoc_links), 881 .links = slv_a2noc_snoc_links 882 }; 883 884 static struct qcom_icc_node slv_ebi = { 885 .name = "slv_ebi", 886 .id = MSM8996_SLAVE_EBI_CH0, 887 .buswidth = 8, 888 .mas_rpm_id = -1, 889 .slv_rpm_id = 0 890 }; 891 892 static struct qcom_icc_node slv_hmss_l3 = { 893 .name = "slv_hmss_l3", 894 .id = MSM8996_SLAVE_HMSS_L3, 895 .buswidth = 8, 896 .mas_rpm_id = -1, 897 .slv_rpm_id = 160 898 }; 899 900 static const u16 slv_bimc_snoc_0_links[] = { 901 MSM8996_MASTER_BIMC_SNOC_0 902 }; 903 904 static struct qcom_icc_node slv_bimc_snoc_0 = { 905 .name = "slv_bimc_snoc_0", 906 .id = MSM8996_SLAVE_BIMC_SNOC_0, 907 .buswidth = 8, 908 .mas_rpm_id = -1, 909 .slv_rpm_id = 2, 910 .qos.ap_owned = true, 911 .qos.qos_mode = NOC_QOS_MODE_INVALID, 912 .num_links = ARRAY_SIZE(slv_bimc_snoc_0_links), 913 .links = slv_bimc_snoc_0_links 914 }; 915 916 static const u16 slv_bimc_snoc_1_links[] = { 917 MSM8996_MASTER_BIMC_SNOC_1 918 }; 919 920 static struct qcom_icc_node slv_bimc_snoc_1 = { 921 .name = "slv_bimc_snoc_1", 922 .id = MSM8996_SLAVE_BIMC_SNOC_1, 923 .buswidth = 8, 924 .mas_rpm_id = -1, 925 .slv_rpm_id = 138, 926 .qos.ap_owned = true, 927 .qos.qos_mode = NOC_QOS_MODE_INVALID, 928 .num_links = ARRAY_SIZE(slv_bimc_snoc_1_links), 929 .links = slv_bimc_snoc_1_links 930 }; 931 932 static const u16 slv_cnoc_a1noc_links[] = { 933 MSM8996_MASTER_CNOC_A1NOC 934 }; 935 936 static struct qcom_icc_node slv_cnoc_a1noc = { 937 .name = "slv_cnoc_a1noc", 938 .id = MSM8996_SLAVE_CNOC_A1NOC, 939 .buswidth = 4, 940 .mas_rpm_id = -1, 941 .slv_rpm_id = 75, 942 .qos.ap_owned = true, 943 .qos.qos_mode = NOC_QOS_MODE_INVALID, 944 .num_links = ARRAY_SIZE(slv_cnoc_a1noc_links), 945 .links = slv_cnoc_a1noc_links 946 }; 947 948 static struct qcom_icc_node slv_clk_ctl = { 949 .name = "slv_clk_ctl", 950 .id = MSM8996_SLAVE_CLK_CTL, 951 .buswidth = 4, 952 .mas_rpm_id = -1, 953 .slv_rpm_id = 47 954 }; 955 956 static struct qcom_icc_node slv_tcsr = { 957 .name = "slv_tcsr", 958 .id = MSM8996_SLAVE_TCSR, 959 .buswidth = 4, 960 .mas_rpm_id = -1, 961 .slv_rpm_id = 50 962 }; 963 964 static struct qcom_icc_node slv_tlmm = { 965 .name = "slv_tlmm", 966 .id = MSM8996_SLAVE_TLMM, 967 .buswidth = 4, 968 .mas_rpm_id = -1, 969 .slv_rpm_id = 51 970 }; 971 972 static struct qcom_icc_node slv_crypto0_cfg = { 973 .name = "slv_crypto0_cfg", 974 .id = MSM8996_SLAVE_CRYPTO_0_CFG, 975 .buswidth = 4, 976 .mas_rpm_id = -1, 977 .slv_rpm_id = 52, 978 .qos.ap_owned = true, 979 .qos.qos_mode = NOC_QOS_MODE_INVALID 980 }; 981 982 static struct qcom_icc_node slv_mpm = { 983 .name = "slv_mpm", 984 .id = MSM8996_SLAVE_MPM, 985 .buswidth = 4, 986 .mas_rpm_id = -1, 987 .slv_rpm_id = 62, 988 .qos.ap_owned = true, 989 .qos.qos_mode = NOC_QOS_MODE_INVALID 990 }; 991 992 static struct qcom_icc_node slv_pimem_cfg = { 993 .name = "slv_pimem_cfg", 994 .id = MSM8996_SLAVE_PIMEM_CFG, 995 .buswidth = 4, 996 .mas_rpm_id = -1, 997 .slv_rpm_id = 167, 998 .qos.ap_owned = true, 999 .qos.qos_mode = NOC_QOS_MODE_INVALID 1000 }; 1001 1002 static struct qcom_icc_node slv_imem_cfg = { 1003 .name = "slv_imem_cfg", 1004 .id = MSM8996_SLAVE_IMEM_CFG, 1005 .buswidth = 4, 1006 .mas_rpm_id = -1, 1007 .slv_rpm_id = 54, 1008 .qos.ap_owned = true, 1009 .qos.qos_mode = NOC_QOS_MODE_INVALID 1010 }; 1011 1012 static struct qcom_icc_node slv_message_ram = { 1013 .name = "slv_message_ram", 1014 .id = MSM8996_SLAVE_MESSAGE_RAM, 1015 .buswidth = 4, 1016 .mas_rpm_id = -1, 1017 .slv_rpm_id = 55 1018 }; 1019 1020 static struct qcom_icc_node slv_bimc_cfg = { 1021 .name = "slv_bimc_cfg", 1022 .id = MSM8996_SLAVE_BIMC_CFG, 1023 .buswidth = 4, 1024 .mas_rpm_id = -1, 1025 .slv_rpm_id = 56, 1026 .qos.ap_owned = true, 1027 .qos.qos_mode = NOC_QOS_MODE_INVALID 1028 }; 1029 1030 static struct qcom_icc_node slv_pmic_arb = { 1031 .name = "slv_pmic_arb", 1032 .id = MSM8996_SLAVE_PMIC_ARB, 1033 .buswidth = 4, 1034 .mas_rpm_id = -1, 1035 .slv_rpm_id = 59 1036 }; 1037 1038 static struct qcom_icc_node slv_prng = { 1039 .name = "slv_prng", 1040 .id = MSM8996_SLAVE_PRNG, 1041 .buswidth = 4, 1042 .mas_rpm_id = -1, 1043 .slv_rpm_id = 127, 1044 .qos.ap_owned = true, 1045 .qos.qos_mode = NOC_QOS_MODE_INVALID 1046 }; 1047 1048 static struct qcom_icc_node slv_dcc_cfg = { 1049 .name = "slv_dcc_cfg", 1050 .id = MSM8996_SLAVE_DCC_CFG, 1051 .buswidth = 4, 1052 .mas_rpm_id = -1, 1053 .slv_rpm_id = 155, 1054 .qos.ap_owned = true, 1055 .qos.qos_mode = NOC_QOS_MODE_INVALID 1056 }; 1057 1058 static struct qcom_icc_node slv_rbcpr_mx = { 1059 .name = "slv_rbcpr_mx", 1060 .id = MSM8996_SLAVE_RBCPR_MX, 1061 .buswidth = 4, 1062 .mas_rpm_id = -1, 1063 .slv_rpm_id = 170, 1064 .qos.ap_owned = true, 1065 .qos.qos_mode = NOC_QOS_MODE_INVALID 1066 }; 1067 1068 static struct qcom_icc_node slv_qdss_cfg = { 1069 .name = "slv_qdss_cfg", 1070 .id = MSM8996_SLAVE_QDSS_CFG, 1071 .buswidth = 4, 1072 .mas_rpm_id = -1, 1073 .slv_rpm_id = 63, 1074 .qos.ap_owned = true, 1075 .qos.qos_mode = NOC_QOS_MODE_INVALID 1076 }; 1077 1078 static struct qcom_icc_node slv_rbcpr_cx = { 1079 .name = "slv_rbcpr_cx", 1080 .id = MSM8996_SLAVE_RBCPR_CX, 1081 .buswidth = 4, 1082 .mas_rpm_id = -1, 1083 .slv_rpm_id = 169, 1084 .qos.ap_owned = true, 1085 .qos.qos_mode = NOC_QOS_MODE_INVALID 1086 }; 1087 1088 static struct qcom_icc_node slv_cpu_apu_cfg = { 1089 .name = "slv_cpu_apu_cfg", 1090 .id = MSM8996_SLAVE_QDSS_RBCPR_APU_CFG, 1091 .buswidth = 4, 1092 .mas_rpm_id = -1, 1093 .slv_rpm_id = 168, 1094 .qos.ap_owned = true, 1095 .qos.qos_mode = NOC_QOS_MODE_INVALID 1096 }; 1097 1098 static const u16 slv_cnoc_mnoc_cfg_links[] = { 1099 MSM8996_MASTER_CNOC_MNOC_CFG 1100 }; 1101 1102 static struct qcom_icc_node slv_cnoc_mnoc_cfg = { 1103 .name = "slv_cnoc_mnoc_cfg", 1104 .id = MSM8996_SLAVE_CNOC_MNOC_CFG, 1105 .buswidth = 4, 1106 .mas_rpm_id = -1, 1107 .slv_rpm_id = 66, 1108 .qos.ap_owned = true, 1109 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1110 .num_links = ARRAY_SIZE(slv_cnoc_mnoc_cfg_links), 1111 .links = slv_cnoc_mnoc_cfg_links 1112 }; 1113 1114 static struct qcom_icc_node slv_snoc_cfg = { 1115 .name = "slv_snoc_cfg", 1116 .id = MSM8996_SLAVE_SNOC_CFG, 1117 .buswidth = 4, 1118 .mas_rpm_id = -1, 1119 .slv_rpm_id = 70, 1120 .qos.ap_owned = true, 1121 .qos.qos_mode = NOC_QOS_MODE_INVALID 1122 }; 1123 1124 static struct qcom_icc_node slv_snoc_mpu_cfg = { 1125 .name = "slv_snoc_mpu_cfg", 1126 .id = MSM8996_SLAVE_SNOC_MPU_CFG, 1127 .buswidth = 4, 1128 .mas_rpm_id = -1, 1129 .slv_rpm_id = 67, 1130 .qos.ap_owned = true, 1131 .qos.qos_mode = NOC_QOS_MODE_INVALID 1132 }; 1133 1134 static struct qcom_icc_node slv_ebi1_phy_cfg = { 1135 .name = "slv_ebi1_phy_cfg", 1136 .id = MSM8996_SLAVE_EBI1_PHY_CFG, 1137 .buswidth = 4, 1138 .mas_rpm_id = -1, 1139 .slv_rpm_id = 73, 1140 .qos.ap_owned = true, 1141 .qos.qos_mode = NOC_QOS_MODE_INVALID 1142 }; 1143 1144 static struct qcom_icc_node slv_a0noc_cfg = { 1145 .name = "slv_a0noc_cfg", 1146 .id = MSM8996_SLAVE_A0NOC_CFG, 1147 .buswidth = 4, 1148 .mas_rpm_id = -1, 1149 .slv_rpm_id = 144, 1150 .qos.ap_owned = true, 1151 .qos.qos_mode = NOC_QOS_MODE_INVALID 1152 }; 1153 1154 static struct qcom_icc_node slv_pcie_1_cfg = { 1155 .name = "slv_pcie_1_cfg", 1156 .id = MSM8996_SLAVE_PCIE_1_CFG, 1157 .buswidth = 4, 1158 .mas_rpm_id = -1, 1159 .slv_rpm_id = 89, 1160 .qos.ap_owned = true, 1161 .qos.qos_mode = NOC_QOS_MODE_INVALID 1162 }; 1163 1164 static struct qcom_icc_node slv_pcie_2_cfg = { 1165 .name = "slv_pcie_2_cfg", 1166 .id = MSM8996_SLAVE_PCIE_2_CFG, 1167 .buswidth = 4, 1168 .mas_rpm_id = -1, 1169 .slv_rpm_id = 165, 1170 .qos.ap_owned = true, 1171 .qos.qos_mode = NOC_QOS_MODE_INVALID 1172 }; 1173 1174 static struct qcom_icc_node slv_pcie_0_cfg = { 1175 .name = "slv_pcie_0_cfg", 1176 .id = MSM8996_SLAVE_PCIE_0_CFG, 1177 .buswidth = 4, 1178 .mas_rpm_id = -1, 1179 .slv_rpm_id = 88, 1180 .qos.ap_owned = true, 1181 .qos.qos_mode = NOC_QOS_MODE_INVALID 1182 }; 1183 1184 static struct qcom_icc_node slv_pcie20_ahb2phy = { 1185 .name = "slv_pcie20_ahb2phy", 1186 .id = MSM8996_SLAVE_PCIE20_AHB2PHY, 1187 .buswidth = 4, 1188 .mas_rpm_id = -1, 1189 .slv_rpm_id = 163, 1190 .qos.ap_owned = true, 1191 .qos.qos_mode = NOC_QOS_MODE_INVALID 1192 }; 1193 1194 static struct qcom_icc_node slv_a0noc_mpu_cfg = { 1195 .name = "slv_a0noc_mpu_cfg", 1196 .id = MSM8996_SLAVE_A0NOC_MPU_CFG, 1197 .buswidth = 4, 1198 .mas_rpm_id = -1, 1199 .slv_rpm_id = 145, 1200 .qos.ap_owned = true, 1201 .qos.qos_mode = NOC_QOS_MODE_INVALID 1202 }; 1203 1204 static struct qcom_icc_node slv_ufs_cfg = { 1205 .name = "slv_ufs_cfg", 1206 .id = MSM8996_SLAVE_UFS_CFG, 1207 .buswidth = 4, 1208 .mas_rpm_id = -1, 1209 .slv_rpm_id = 92, 1210 .qos.ap_owned = true, 1211 .qos.qos_mode = NOC_QOS_MODE_INVALID 1212 }; 1213 1214 static struct qcom_icc_node slv_a1noc_cfg = { 1215 .name = "slv_a1noc_cfg", 1216 .id = MSM8996_SLAVE_A1NOC_CFG, 1217 .buswidth = 4, 1218 .mas_rpm_id = -1, 1219 .slv_rpm_id = 147, 1220 .qos.ap_owned = true, 1221 .qos.qos_mode = NOC_QOS_MODE_INVALID 1222 }; 1223 1224 static struct qcom_icc_node slv_a1noc_mpu_cfg = { 1225 .name = "slv_a1noc_mpu_cfg", 1226 .id = MSM8996_SLAVE_A1NOC_MPU_CFG, 1227 .buswidth = 4, 1228 .mas_rpm_id = -1, 1229 .slv_rpm_id = 148, 1230 .qos.ap_owned = true, 1231 .qos.qos_mode = NOC_QOS_MODE_INVALID 1232 }; 1233 1234 static struct qcom_icc_node slv_a2noc_cfg = { 1235 .name = "slv_a2noc_cfg", 1236 .id = MSM8996_SLAVE_A2NOC_CFG, 1237 .buswidth = 4, 1238 .mas_rpm_id = -1, 1239 .slv_rpm_id = 150, 1240 .qos.ap_owned = true, 1241 .qos.qos_mode = NOC_QOS_MODE_INVALID 1242 }; 1243 1244 static struct qcom_icc_node slv_a2noc_mpu_cfg = { 1245 .name = "slv_a2noc_mpu_cfg", 1246 .id = MSM8996_SLAVE_A2NOC_MPU_CFG, 1247 .buswidth = 4, 1248 .mas_rpm_id = -1, 1249 .slv_rpm_id = 151, 1250 .qos.ap_owned = true, 1251 .qos.qos_mode = NOC_QOS_MODE_INVALID 1252 }; 1253 1254 static struct qcom_icc_node slv_ssc_cfg = { 1255 .name = "slv_ssc_cfg", 1256 .id = MSM8996_SLAVE_SSC_CFG, 1257 .buswidth = 4, 1258 .mas_rpm_id = -1, 1259 .slv_rpm_id = 177, 1260 .qos.ap_owned = true, 1261 .qos.qos_mode = NOC_QOS_MODE_INVALID 1262 }; 1263 1264 static struct qcom_icc_node slv_a0noc_smmu_cfg = { 1265 .name = "slv_a0noc_smmu_cfg", 1266 .id = MSM8996_SLAVE_A0NOC_SMMU_CFG, 1267 .buswidth = 8, 1268 .mas_rpm_id = -1, 1269 .slv_rpm_id = 146, 1270 .qos.ap_owned = true, 1271 .qos.qos_mode = NOC_QOS_MODE_INVALID 1272 }; 1273 1274 static struct qcom_icc_node slv_a1noc_smmu_cfg = { 1275 .name = "slv_a1noc_smmu_cfg", 1276 .id = MSM8996_SLAVE_A1NOC_SMMU_CFG, 1277 .buswidth = 8, 1278 .mas_rpm_id = -1, 1279 .slv_rpm_id = 149, 1280 .qos.ap_owned = true, 1281 .qos.qos_mode = NOC_QOS_MODE_INVALID 1282 }; 1283 1284 static struct qcom_icc_node slv_a2noc_smmu_cfg = { 1285 .name = "slv_a2noc_smmu_cfg", 1286 .id = MSM8996_SLAVE_A2NOC_SMMU_CFG, 1287 .buswidth = 8, 1288 .mas_rpm_id = -1, 1289 .slv_rpm_id = 152, 1290 .qos.ap_owned = true, 1291 .qos.qos_mode = NOC_QOS_MODE_INVALID 1292 }; 1293 1294 static struct qcom_icc_node slv_lpass_smmu_cfg = { 1295 .name = "slv_lpass_smmu_cfg", 1296 .id = MSM8996_SLAVE_LPASS_SMMU_CFG, 1297 .buswidth = 8, 1298 .mas_rpm_id = -1, 1299 .slv_rpm_id = 161, 1300 .qos.ap_owned = true, 1301 .qos.qos_mode = NOC_QOS_MODE_INVALID 1302 }; 1303 1304 static const u16 slv_cnoc_mnoc_mmss_cfg_links[] = { 1305 MSM8996_MASTER_CNOC_MNOC_MMSS_CFG 1306 }; 1307 1308 static struct qcom_icc_node slv_cnoc_mnoc_mmss_cfg = { 1309 .name = "slv_cnoc_mnoc_mmss_cfg", 1310 .id = MSM8996_SLAVE_CNOC_MNOC_MMSS_CFG, 1311 .buswidth = 8, 1312 .mas_rpm_id = -1, 1313 .slv_rpm_id = 58, 1314 .qos.ap_owned = true, 1315 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1316 .num_links = ARRAY_SIZE(slv_cnoc_mnoc_mmss_cfg_links), 1317 .links = slv_cnoc_mnoc_mmss_cfg_links 1318 }; 1319 1320 static struct qcom_icc_node slv_mmagic_cfg = { 1321 .name = "slv_mmagic_cfg", 1322 .id = MSM8996_SLAVE_MMAGIC_CFG, 1323 .buswidth = 8, 1324 .mas_rpm_id = -1, 1325 .slv_rpm_id = 162, 1326 .qos.ap_owned = true, 1327 .qos.qos_mode = NOC_QOS_MODE_INVALID 1328 }; 1329 1330 static struct qcom_icc_node slv_cpr_cfg = { 1331 .name = "slv_cpr_cfg", 1332 .id = MSM8996_SLAVE_CPR_CFG, 1333 .buswidth = 8, 1334 .mas_rpm_id = -1, 1335 .slv_rpm_id = 6, 1336 .qos.ap_owned = true, 1337 .qos.qos_mode = NOC_QOS_MODE_INVALID 1338 }; 1339 1340 static struct qcom_icc_node slv_misc_cfg = { 1341 .name = "slv_misc_cfg", 1342 .id = MSM8996_SLAVE_MISC_CFG, 1343 .buswidth = 8, 1344 .mas_rpm_id = -1, 1345 .slv_rpm_id = 8, 1346 .qos.ap_owned = true, 1347 .qos.qos_mode = NOC_QOS_MODE_INVALID 1348 }; 1349 1350 static struct qcom_icc_node slv_venus_throttle_cfg = { 1351 .name = "slv_venus_throttle_cfg", 1352 .id = MSM8996_SLAVE_VENUS_THROTTLE_CFG, 1353 .buswidth = 8, 1354 .mas_rpm_id = -1, 1355 .slv_rpm_id = 178, 1356 .qos.ap_owned = true, 1357 .qos.qos_mode = NOC_QOS_MODE_INVALID 1358 }; 1359 1360 static struct qcom_icc_node slv_venus_cfg = { 1361 .name = "slv_venus_cfg", 1362 .id = MSM8996_SLAVE_VENUS_CFG, 1363 .buswidth = 8, 1364 .mas_rpm_id = -1, 1365 .slv_rpm_id = 10, 1366 .qos.ap_owned = true, 1367 .qos.qos_mode = NOC_QOS_MODE_INVALID 1368 }; 1369 1370 static struct qcom_icc_node slv_vmem_cfg = { 1371 .name = "slv_vmem_cfg", 1372 .id = MSM8996_SLAVE_VMEM_CFG, 1373 .buswidth = 8, 1374 .mas_rpm_id = -1, 1375 .slv_rpm_id = 180, 1376 .qos.ap_owned = true, 1377 .qos.qos_mode = NOC_QOS_MODE_INVALID 1378 }; 1379 1380 static struct qcom_icc_node slv_dsa_cfg = { 1381 .name = "slv_dsa_cfg", 1382 .id = MSM8996_SLAVE_DSA_CFG, 1383 .buswidth = 8, 1384 .mas_rpm_id = -1, 1385 .slv_rpm_id = 157, 1386 .qos.ap_owned = true, 1387 .qos.qos_mode = NOC_QOS_MODE_INVALID 1388 }; 1389 1390 static struct qcom_icc_node slv_mnoc_clocks_cfg = { 1391 .name = "slv_mnoc_clocks_cfg", 1392 .id = MSM8996_SLAVE_MMSS_CLK_CFG, 1393 .buswidth = 8, 1394 .mas_rpm_id = -1, 1395 .slv_rpm_id = 12, 1396 .qos.ap_owned = true, 1397 .qos.qos_mode = NOC_QOS_MODE_INVALID 1398 }; 1399 1400 static struct qcom_icc_node slv_dsa_mpu_cfg = { 1401 .name = "slv_dsa_mpu_cfg", 1402 .id = MSM8996_SLAVE_DSA_MPU_CFG, 1403 .buswidth = 8, 1404 .mas_rpm_id = -1, 1405 .slv_rpm_id = 158, 1406 .qos.ap_owned = true, 1407 .qos.qos_mode = NOC_QOS_MODE_INVALID 1408 }; 1409 1410 static struct qcom_icc_node slv_mnoc_mpu_cfg = { 1411 .name = "slv_mnoc_mpu_cfg", 1412 .id = MSM8996_SLAVE_MNOC_MPU_CFG, 1413 .buswidth = 8, 1414 .mas_rpm_id = -1, 1415 .slv_rpm_id = 14, 1416 .qos.ap_owned = true, 1417 .qos.qos_mode = NOC_QOS_MODE_INVALID 1418 }; 1419 1420 static struct qcom_icc_node slv_display_cfg = { 1421 .name = "slv_display_cfg", 1422 .id = MSM8996_SLAVE_DISPLAY_CFG, 1423 .buswidth = 8, 1424 .mas_rpm_id = -1, 1425 .slv_rpm_id = 4, 1426 .qos.ap_owned = true, 1427 .qos.qos_mode = NOC_QOS_MODE_INVALID 1428 }; 1429 1430 static struct qcom_icc_node slv_display_throttle_cfg = { 1431 .name = "slv_display_throttle_cfg", 1432 .id = MSM8996_SLAVE_DISPLAY_THROTTLE_CFG, 1433 .buswidth = 8, 1434 .mas_rpm_id = -1, 1435 .slv_rpm_id = 156, 1436 .qos.ap_owned = true, 1437 .qos.qos_mode = NOC_QOS_MODE_INVALID 1438 }; 1439 1440 static struct qcom_icc_node slv_camera_cfg = { 1441 .name = "slv_camera_cfg", 1442 .id = MSM8996_SLAVE_CAMERA_CFG, 1443 .buswidth = 8, 1444 .mas_rpm_id = -1, 1445 .slv_rpm_id = 3, 1446 .qos.ap_owned = true, 1447 .qos.qos_mode = NOC_QOS_MODE_INVALID 1448 }; 1449 1450 static struct qcom_icc_node slv_camera_throttle_cfg = { 1451 .name = "slv_camera_throttle_cfg", 1452 .id = MSM8996_SLAVE_CAMERA_THROTTLE_CFG, 1453 .buswidth = 8, 1454 .mas_rpm_id = -1, 1455 .slv_rpm_id = 154, 1456 .qos.ap_owned = true, 1457 .qos.qos_mode = NOC_QOS_MODE_INVALID 1458 }; 1459 1460 static struct qcom_icc_node slv_oxili_cfg = { 1461 .name = "slv_oxili_cfg", 1462 .id = MSM8996_SLAVE_GRAPHICS_3D_CFG, 1463 .buswidth = 8, 1464 .mas_rpm_id = -1, 1465 .slv_rpm_id = 11, 1466 .qos.ap_owned = true, 1467 .qos.qos_mode = NOC_QOS_MODE_INVALID 1468 }; 1469 1470 static struct qcom_icc_node slv_smmu_mdp_cfg = { 1471 .name = "slv_smmu_mdp_cfg", 1472 .id = MSM8996_SLAVE_SMMU_MDP_CFG, 1473 .buswidth = 8, 1474 .mas_rpm_id = -1, 1475 .slv_rpm_id = 173, 1476 .qos.ap_owned = true, 1477 .qos.qos_mode = NOC_QOS_MODE_INVALID 1478 }; 1479 1480 static struct qcom_icc_node slv_smmu_rot_cfg = { 1481 .name = "slv_smmu_rot_cfg", 1482 .id = MSM8996_SLAVE_SMMU_ROTATOR_CFG, 1483 .buswidth = 8, 1484 .mas_rpm_id = -1, 1485 .slv_rpm_id = 174, 1486 .qos.ap_owned = true, 1487 .qos.qos_mode = NOC_QOS_MODE_INVALID 1488 }; 1489 1490 static struct qcom_icc_node slv_smmu_venus_cfg = { 1491 .name = "slv_smmu_venus_cfg", 1492 .id = MSM8996_SLAVE_SMMU_VENUS_CFG, 1493 .buswidth = 8, 1494 .mas_rpm_id = -1, 1495 .slv_rpm_id = 175, 1496 .qos.ap_owned = true, 1497 .qos.qos_mode = NOC_QOS_MODE_INVALID 1498 }; 1499 1500 static struct qcom_icc_node slv_smmu_cpp_cfg = { 1501 .name = "slv_smmu_cpp_cfg", 1502 .id = MSM8996_SLAVE_SMMU_CPP_CFG, 1503 .buswidth = 8, 1504 .mas_rpm_id = -1, 1505 .slv_rpm_id = 171, 1506 .qos.ap_owned = true, 1507 .qos.qos_mode = NOC_QOS_MODE_INVALID 1508 }; 1509 1510 static struct qcom_icc_node slv_smmu_jpeg_cfg = { 1511 .name = "slv_smmu_jpeg_cfg", 1512 .id = MSM8996_SLAVE_SMMU_JPEG_CFG, 1513 .buswidth = 8, 1514 .mas_rpm_id = -1, 1515 .slv_rpm_id = 172, 1516 .qos.ap_owned = true, 1517 .qos.qos_mode = NOC_QOS_MODE_INVALID 1518 }; 1519 1520 static struct qcom_icc_node slv_smmu_vfe_cfg = { 1521 .name = "slv_smmu_vfe_cfg", 1522 .id = MSM8996_SLAVE_SMMU_VFE_CFG, 1523 .buswidth = 8, 1524 .mas_rpm_id = -1, 1525 .slv_rpm_id = 176, 1526 .qos.ap_owned = true, 1527 .qos.qos_mode = NOC_QOS_MODE_INVALID 1528 }; 1529 1530 static const u16 slv_mnoc_bimc_links[] = { 1531 MSM8996_MASTER_MNOC_BIMC 1532 }; 1533 1534 static struct qcom_icc_node slv_mnoc_bimc = { 1535 .name = "slv_mnoc_bimc", 1536 .id = MSM8996_SLAVE_MNOC_BIMC, 1537 .buswidth = 32, 1538 .mas_rpm_id = -1, 1539 .slv_rpm_id = 16, 1540 .qos.ap_owned = true, 1541 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1542 .num_links = ARRAY_SIZE(slv_mnoc_bimc_links), 1543 .links = slv_mnoc_bimc_links 1544 }; 1545 1546 static struct qcom_icc_node slv_vmem = { 1547 .name = "slv_vmem", 1548 .id = MSM8996_SLAVE_VMEM, 1549 .buswidth = 32, 1550 .mas_rpm_id = -1, 1551 .slv_rpm_id = 179, 1552 .qos.ap_owned = true, 1553 .qos.qos_mode = NOC_QOS_MODE_INVALID 1554 }; 1555 1556 static struct qcom_icc_node slv_srvc_mnoc = { 1557 .name = "slv_srvc_mnoc", 1558 .id = MSM8996_SLAVE_SERVICE_MNOC, 1559 .buswidth = 8, 1560 .mas_rpm_id = -1, 1561 .slv_rpm_id = 17, 1562 .qos.ap_owned = true, 1563 .qos.qos_mode = NOC_QOS_MODE_INVALID 1564 }; 1565 1566 static const u16 slv_pnoc_a1noc_links[] = { 1567 MSM8996_MASTER_PNOC_A1NOC 1568 }; 1569 1570 static struct qcom_icc_node slv_pnoc_a1noc = { 1571 .name = "slv_pnoc_a1noc", 1572 .id = MSM8996_SLAVE_PNOC_A1NOC, 1573 .buswidth = 8, 1574 .mas_rpm_id = -1, 1575 .slv_rpm_id = 139, 1576 .num_links = ARRAY_SIZE(slv_pnoc_a1noc_links), 1577 .links = slv_pnoc_a1noc_links 1578 }; 1579 1580 static struct qcom_icc_node slv_usb_hs = { 1581 .name = "slv_usb_hs", 1582 .id = MSM8996_SLAVE_USB_HS, 1583 .buswidth = 4, 1584 .mas_rpm_id = -1, 1585 .slv_rpm_id = 40 1586 }; 1587 1588 static struct qcom_icc_node slv_sdcc_2 = { 1589 .name = "slv_sdcc_2", 1590 .id = MSM8996_SLAVE_SDCC_2, 1591 .buswidth = 4, 1592 .mas_rpm_id = -1, 1593 .slv_rpm_id = 33 1594 }; 1595 1596 static struct qcom_icc_node slv_sdcc_4 = { 1597 .name = "slv_sdcc_4", 1598 .id = MSM8996_SLAVE_SDCC_4, 1599 .buswidth = 4, 1600 .mas_rpm_id = -1, 1601 .slv_rpm_id = 34 1602 }; 1603 1604 static struct qcom_icc_node slv_tsif = { 1605 .name = "slv_tsif", 1606 .id = MSM8996_SLAVE_TSIF, 1607 .buswidth = 4, 1608 .mas_rpm_id = -1, 1609 .slv_rpm_id = 35 1610 }; 1611 1612 static struct qcom_icc_node slv_blsp_2 = { 1613 .name = "slv_blsp_2", 1614 .id = MSM8996_SLAVE_BLSP_2, 1615 .buswidth = 4, 1616 .mas_rpm_id = -1, 1617 .slv_rpm_id = 37 1618 }; 1619 1620 static struct qcom_icc_node slv_sdcc_1 = { 1621 .name = "slv_sdcc_1", 1622 .id = MSM8996_SLAVE_SDCC_1, 1623 .buswidth = 4, 1624 .mas_rpm_id = -1, 1625 .slv_rpm_id = 31 1626 }; 1627 1628 static struct qcom_icc_node slv_blsp_1 = { 1629 .name = "slv_blsp_1", 1630 .id = MSM8996_SLAVE_BLSP_1, 1631 .buswidth = 4, 1632 .mas_rpm_id = -1, 1633 .slv_rpm_id = 39 1634 }; 1635 1636 static struct qcom_icc_node slv_pdm = { 1637 .name = "slv_pdm", 1638 .id = MSM8996_SLAVE_PDM, 1639 .buswidth = 4, 1640 .mas_rpm_id = -1, 1641 .slv_rpm_id = 41 1642 }; 1643 1644 static struct qcom_icc_node slv_ahb2phy = { 1645 .name = "slv_ahb2phy", 1646 .id = MSM8996_SLAVE_AHB2PHY, 1647 .buswidth = 4, 1648 .mas_rpm_id = -1, 1649 .slv_rpm_id = 153, 1650 .qos.ap_owned = true, 1651 .qos.qos_mode = NOC_QOS_MODE_INVALID 1652 }; 1653 1654 static struct qcom_icc_node slv_hmss = { 1655 .name = "slv_hmss", 1656 .id = MSM8996_SLAVE_APPSS, 1657 .buswidth = 16, 1658 .mas_rpm_id = -1, 1659 .slv_rpm_id = 20, 1660 .qos.ap_owned = true, 1661 .qos.qos_mode = NOC_QOS_MODE_INVALID 1662 }; 1663 1664 static struct qcom_icc_node slv_lpass = { 1665 .name = "slv_lpass", 1666 .id = MSM8996_SLAVE_LPASS, 1667 .buswidth = 16, 1668 .mas_rpm_id = -1, 1669 .slv_rpm_id = 21, 1670 .qos.ap_owned = true, 1671 .qos.qos_mode = NOC_QOS_MODE_INVALID 1672 }; 1673 1674 static struct qcom_icc_node slv_usb3 = { 1675 .name = "slv_usb3", 1676 .id = MSM8996_SLAVE_USB3, 1677 .buswidth = 16, 1678 .mas_rpm_id = -1, 1679 .slv_rpm_id = 22, 1680 .qos.ap_owned = true, 1681 .qos.qos_mode = NOC_QOS_MODE_INVALID 1682 }; 1683 1684 static const u16 slv_snoc_bimc_links[] = { 1685 MSM8996_MASTER_SNOC_BIMC 1686 }; 1687 1688 static struct qcom_icc_node slv_snoc_bimc = { 1689 .name = "slv_snoc_bimc", 1690 .id = MSM8996_SLAVE_SNOC_BIMC, 1691 .buswidth = 32, 1692 .mas_rpm_id = -1, 1693 .slv_rpm_id = 24, 1694 .num_links = ARRAY_SIZE(slv_snoc_bimc_links), 1695 .links = slv_snoc_bimc_links 1696 }; 1697 1698 static const u16 slv_snoc_cnoc_links[] = { 1699 MSM8996_MASTER_SNOC_CNOC 1700 }; 1701 1702 static struct qcom_icc_node slv_snoc_cnoc = { 1703 .name = "slv_snoc_cnoc", 1704 .id = MSM8996_SLAVE_SNOC_CNOC, 1705 .buswidth = 16, 1706 .mas_rpm_id = -1, 1707 .slv_rpm_id = 25, 1708 .num_links = ARRAY_SIZE(slv_snoc_cnoc_links), 1709 .links = slv_snoc_cnoc_links 1710 }; 1711 1712 static struct qcom_icc_node slv_imem = { 1713 .name = "slv_imem", 1714 .id = MSM8996_SLAVE_OCIMEM, 1715 .buswidth = 16, 1716 .mas_rpm_id = -1, 1717 .slv_rpm_id = 26 1718 }; 1719 1720 static struct qcom_icc_node slv_pimem = { 1721 .name = "slv_pimem", 1722 .id = MSM8996_SLAVE_PIMEM, 1723 .buswidth = 16, 1724 .mas_rpm_id = -1, 1725 .slv_rpm_id = 166 1726 }; 1727 1728 static const u16 slv_snoc_vmem_links[] = { 1729 MSM8996_MASTER_SNOC_VMEM 1730 }; 1731 1732 static struct qcom_icc_node slv_snoc_vmem = { 1733 .name = "slv_snoc_vmem", 1734 .id = MSM8996_SLAVE_SNOC_VMEM, 1735 .buswidth = 16, 1736 .mas_rpm_id = -1, 1737 .slv_rpm_id = 140, 1738 .qos.ap_owned = true, 1739 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1740 .num_links = ARRAY_SIZE(slv_snoc_vmem_links), 1741 .links = slv_snoc_vmem_links 1742 }; 1743 1744 static const u16 slv_snoc_pnoc_links[] = { 1745 MSM8996_MASTER_SNOC_PNOC 1746 }; 1747 1748 static struct qcom_icc_node slv_snoc_pnoc = { 1749 .name = "slv_snoc_pnoc", 1750 .id = MSM8996_SLAVE_SNOC_PNOC, 1751 .buswidth = 16, 1752 .mas_rpm_id = -1, 1753 .slv_rpm_id = 28, 1754 .num_links = ARRAY_SIZE(slv_snoc_pnoc_links), 1755 .links = slv_snoc_pnoc_links 1756 }; 1757 1758 static struct qcom_icc_node slv_qdss_stm = { 1759 .name = "slv_qdss_stm", 1760 .id = MSM8996_SLAVE_QDSS_STM, 1761 .buswidth = 16, 1762 .mas_rpm_id = -1, 1763 .slv_rpm_id = 30 1764 }; 1765 1766 static struct qcom_icc_node slv_pcie_0 = { 1767 .name = "slv_pcie_0", 1768 .id = MSM8996_SLAVE_PCIE_0, 1769 .buswidth = 16, 1770 .mas_rpm_id = -1, 1771 .slv_rpm_id = 84, 1772 .qos.ap_owned = true, 1773 .qos.qos_mode = NOC_QOS_MODE_INVALID 1774 }; 1775 1776 static struct qcom_icc_node slv_pcie_1 = { 1777 .name = "slv_pcie_1", 1778 .id = MSM8996_SLAVE_PCIE_1, 1779 .buswidth = 16, 1780 .mas_rpm_id = -1, 1781 .slv_rpm_id = 85, 1782 .qos.ap_owned = true, 1783 .qos.qos_mode = NOC_QOS_MODE_INVALID 1784 }; 1785 1786 static struct qcom_icc_node slv_pcie_2 = { 1787 .name = "slv_pcie_2", 1788 .id = MSM8996_SLAVE_PCIE_2, 1789 .buswidth = 16, 1790 .mas_rpm_id = -1, 1791 .slv_rpm_id = 164, 1792 .qos.ap_owned = true, 1793 .qos.qos_mode = NOC_QOS_MODE_INVALID 1794 }; 1795 1796 static struct qcom_icc_node slv_srvc_snoc = { 1797 .name = "slv_srvc_snoc", 1798 .id = MSM8996_SLAVE_SERVICE_SNOC, 1799 .buswidth = 16, 1800 .mas_rpm_id = -1, 1801 .slv_rpm_id = 29, 1802 .qos.ap_owned = true, 1803 .qos.qos_mode = NOC_QOS_MODE_INVALID 1804 }; 1805 1806 static struct qcom_icc_node * const a0noc_nodes[] = { 1807 [MASTER_PCIE_0] = &mas_pcie_0, 1808 [MASTER_PCIE_1] = &mas_pcie_1, 1809 [MASTER_PCIE_2] = &mas_pcie_2 1810 }; 1811 1812 static const struct regmap_config msm8996_a0noc_regmap_config = { 1813 .reg_bits = 32, 1814 .reg_stride = 4, 1815 .val_bits = 32, 1816 .max_register = 0x6000, 1817 .fast_io = true 1818 }; 1819 1820 static const struct qcom_icc_desc msm8996_a0noc = { 1821 .type = QCOM_ICC_NOC, 1822 .nodes = a0noc_nodes, 1823 .num_nodes = ARRAY_SIZE(a0noc_nodes), 1824 .clocks = bus_a0noc_clocks, 1825 .num_clocks = ARRAY_SIZE(bus_a0noc_clocks), 1826 .has_bus_pd = true, 1827 .regmap_cfg = &msm8996_a0noc_regmap_config 1828 }; 1829 1830 static struct qcom_icc_node * const a1noc_nodes[] = { 1831 [MASTER_CNOC_A1NOC] = &mas_cnoc_a1noc, 1832 [MASTER_CRYPTO_CORE0] = &mas_crypto_c0, 1833 [MASTER_PNOC_A1NOC] = &mas_pnoc_a1noc 1834 }; 1835 1836 static const struct regmap_config msm8996_a1noc_regmap_config = { 1837 .reg_bits = 32, 1838 .reg_stride = 4, 1839 .val_bits = 32, 1840 .max_register = 0x5000, 1841 .fast_io = true 1842 }; 1843 1844 static const struct qcom_icc_desc msm8996_a1noc = { 1845 .type = QCOM_ICC_NOC, 1846 .nodes = a1noc_nodes, 1847 .num_nodes = ARRAY_SIZE(a1noc_nodes), 1848 .regmap_cfg = &msm8996_a1noc_regmap_config 1849 }; 1850 1851 static struct qcom_icc_node * const a2noc_nodes[] = { 1852 [MASTER_USB3] = &mas_usb3, 1853 [MASTER_IPA] = &mas_ipa, 1854 [MASTER_UFS] = &mas_ufs 1855 }; 1856 1857 static const struct regmap_config msm8996_a2noc_regmap_config = { 1858 .reg_bits = 32, 1859 .reg_stride = 4, 1860 .val_bits = 32, 1861 .max_register = 0x7000, 1862 .fast_io = true 1863 }; 1864 1865 static const struct qcom_icc_desc msm8996_a2noc = { 1866 .type = QCOM_ICC_NOC, 1867 .nodes = a2noc_nodes, 1868 .num_nodes = ARRAY_SIZE(a2noc_nodes), 1869 .clocks = bus_a2noc_clocks, 1870 .num_clocks = ARRAY_SIZE(bus_a2noc_clocks), 1871 .regmap_cfg = &msm8996_a2noc_regmap_config 1872 }; 1873 1874 static struct qcom_icc_node * const bimc_nodes[] = { 1875 [MASTER_AMPSS_M0] = &mas_apps_proc, 1876 [MASTER_GRAPHICS_3D] = &mas_oxili, 1877 [MASTER_MNOC_BIMC] = &mas_mnoc_bimc, 1878 [MASTER_SNOC_BIMC] = &mas_snoc_bimc, 1879 [SLAVE_EBI_CH0] = &slv_ebi, 1880 [SLAVE_HMSS_L3] = &slv_hmss_l3, 1881 [SLAVE_BIMC_SNOC_0] = &slv_bimc_snoc_0, 1882 [SLAVE_BIMC_SNOC_1] = &slv_bimc_snoc_1 1883 }; 1884 1885 static const struct regmap_config msm8996_bimc_regmap_config = { 1886 .reg_bits = 32, 1887 .reg_stride = 4, 1888 .val_bits = 32, 1889 .max_register = 0x5a000, 1890 .fast_io = true 1891 }; 1892 1893 static const struct qcom_icc_desc msm8996_bimc = { 1894 .type = QCOM_ICC_BIMC, 1895 .nodes = bimc_nodes, 1896 .num_nodes = ARRAY_SIZE(bimc_nodes), 1897 .regmap_cfg = &msm8996_bimc_regmap_config 1898 }; 1899 1900 static struct qcom_icc_node * const cnoc_nodes[] = { 1901 [MASTER_SNOC_CNOC] = &mas_snoc_cnoc, 1902 [MASTER_QDSS_DAP] = &mas_qdss_dap, 1903 [SLAVE_CNOC_A1NOC] = &slv_cnoc_a1noc, 1904 [SLAVE_CLK_CTL] = &slv_clk_ctl, 1905 [SLAVE_TCSR] = &slv_tcsr, 1906 [SLAVE_TLMM] = &slv_tlmm, 1907 [SLAVE_CRYPTO_0_CFG] = &slv_crypto0_cfg, 1908 [SLAVE_MPM] = &slv_mpm, 1909 [SLAVE_PIMEM_CFG] = &slv_pimem_cfg, 1910 [SLAVE_IMEM_CFG] = &slv_imem_cfg, 1911 [SLAVE_MESSAGE_RAM] = &slv_message_ram, 1912 [SLAVE_BIMC_CFG] = &slv_bimc_cfg, 1913 [SLAVE_PMIC_ARB] = &slv_pmic_arb, 1914 [SLAVE_PRNG] = &slv_prng, 1915 [SLAVE_DCC_CFG] = &slv_dcc_cfg, 1916 [SLAVE_RBCPR_MX] = &slv_rbcpr_mx, 1917 [SLAVE_QDSS_CFG] = &slv_qdss_cfg, 1918 [SLAVE_RBCPR_CX] = &slv_rbcpr_cx, 1919 [SLAVE_QDSS_RBCPR_APU] = &slv_cpu_apu_cfg, 1920 [SLAVE_CNOC_MNOC_CFG] = &slv_cnoc_mnoc_cfg, 1921 [SLAVE_SNOC_CFG] = &slv_snoc_cfg, 1922 [SLAVE_SNOC_MPU_CFG] = &slv_snoc_mpu_cfg, 1923 [SLAVE_EBI1_PHY_CFG] = &slv_ebi1_phy_cfg, 1924 [SLAVE_A0NOC_CFG] = &slv_a0noc_cfg, 1925 [SLAVE_PCIE_1_CFG] = &slv_pcie_1_cfg, 1926 [SLAVE_PCIE_2_CFG] = &slv_pcie_2_cfg, 1927 [SLAVE_PCIE_0_CFG] = &slv_pcie_0_cfg, 1928 [SLAVE_PCIE20_AHB2PHY] = &slv_pcie20_ahb2phy, 1929 [SLAVE_A0NOC_MPU_CFG] = &slv_a0noc_mpu_cfg, 1930 [SLAVE_UFS_CFG] = &slv_ufs_cfg, 1931 [SLAVE_A1NOC_CFG] = &slv_a1noc_cfg, 1932 [SLAVE_A1NOC_MPU_CFG] = &slv_a1noc_mpu_cfg, 1933 [SLAVE_A2NOC_CFG] = &slv_a2noc_cfg, 1934 [SLAVE_A2NOC_MPU_CFG] = &slv_a2noc_mpu_cfg, 1935 [SLAVE_SSC_CFG] = &slv_ssc_cfg, 1936 [SLAVE_A0NOC_SMMU_CFG] = &slv_a0noc_smmu_cfg, 1937 [SLAVE_A1NOC_SMMU_CFG] = &slv_a1noc_smmu_cfg, 1938 [SLAVE_A2NOC_SMMU_CFG] = &slv_a2noc_smmu_cfg, 1939 [SLAVE_LPASS_SMMU_CFG] = &slv_lpass_smmu_cfg, 1940 [SLAVE_CNOC_MNOC_MMSS_CFG] = &slv_cnoc_mnoc_mmss_cfg 1941 }; 1942 1943 static const struct regmap_config msm8996_cnoc_regmap_config = { 1944 .reg_bits = 32, 1945 .reg_stride = 4, 1946 .val_bits = 32, 1947 .max_register = 0x1000, 1948 .fast_io = true 1949 }; 1950 1951 static const struct qcom_icc_desc msm8996_cnoc = { 1952 .type = QCOM_ICC_NOC, 1953 .nodes = cnoc_nodes, 1954 .num_nodes = ARRAY_SIZE(cnoc_nodes), 1955 .regmap_cfg = &msm8996_cnoc_regmap_config 1956 }; 1957 1958 static struct qcom_icc_node * const mnoc_nodes[] = { 1959 [MASTER_CNOC_MNOC_CFG] = &mas_cnoc_mnoc_cfg, 1960 [MASTER_CPP] = &mas_cpp, 1961 [MASTER_JPEG] = &mas_jpeg, 1962 [MASTER_MDP_PORT0] = &mas_mdp_p0, 1963 [MASTER_MDP_PORT1] = &mas_mdp_p1, 1964 [MASTER_ROTATOR] = &mas_rotator, 1965 [MASTER_VIDEO_P0] = &mas_venus, 1966 [MASTER_VFE] = &mas_vfe, 1967 [MASTER_SNOC_VMEM] = &mas_snoc_vmem, 1968 [MASTER_VIDEO_P0_OCMEM] = &mas_venus_vmem, 1969 [MASTER_CNOC_MNOC_MMSS_CFG] = &mas_cnoc_mnoc_mmss_cfg, 1970 [SLAVE_MNOC_BIMC] = &slv_mnoc_bimc, 1971 [SLAVE_VMEM] = &slv_vmem, 1972 [SLAVE_SERVICE_MNOC] = &slv_srvc_mnoc, 1973 [SLAVE_MMAGIC_CFG] = &slv_mmagic_cfg, 1974 [SLAVE_CPR_CFG] = &slv_cpr_cfg, 1975 [SLAVE_MISC_CFG] = &slv_misc_cfg, 1976 [SLAVE_VENUS_THROTTLE_CFG] = &slv_venus_throttle_cfg, 1977 [SLAVE_VENUS_CFG] = &slv_venus_cfg, 1978 [SLAVE_VMEM_CFG] = &slv_vmem_cfg, 1979 [SLAVE_DSA_CFG] = &slv_dsa_cfg, 1980 [SLAVE_MMSS_CLK_CFG] = &slv_mnoc_clocks_cfg, 1981 [SLAVE_DSA_MPU_CFG] = &slv_dsa_mpu_cfg, 1982 [SLAVE_MNOC_MPU_CFG] = &slv_mnoc_mpu_cfg, 1983 [SLAVE_DISPLAY_CFG] = &slv_display_cfg, 1984 [SLAVE_DISPLAY_THROTTLE_CFG] = &slv_display_throttle_cfg, 1985 [SLAVE_CAMERA_CFG] = &slv_camera_cfg, 1986 [SLAVE_CAMERA_THROTTLE_CFG] = &slv_camera_throttle_cfg, 1987 [SLAVE_GRAPHICS_3D_CFG] = &slv_oxili_cfg, 1988 [SLAVE_SMMU_MDP_CFG] = &slv_smmu_mdp_cfg, 1989 [SLAVE_SMMU_ROT_CFG] = &slv_smmu_rot_cfg, 1990 [SLAVE_SMMU_VENUS_CFG] = &slv_smmu_venus_cfg, 1991 [SLAVE_SMMU_CPP_CFG] = &slv_smmu_cpp_cfg, 1992 [SLAVE_SMMU_JPEG_CFG] = &slv_smmu_jpeg_cfg, 1993 [SLAVE_SMMU_VFE_CFG] = &slv_smmu_vfe_cfg 1994 }; 1995 1996 static const struct regmap_config msm8996_mnoc_regmap_config = { 1997 .reg_bits = 32, 1998 .reg_stride = 4, 1999 .val_bits = 32, 2000 .max_register = 0x1c000, 2001 .fast_io = true 2002 }; 2003 2004 static const struct qcom_icc_desc msm8996_mnoc = { 2005 .type = QCOM_ICC_NOC, 2006 .nodes = mnoc_nodes, 2007 .num_nodes = ARRAY_SIZE(mnoc_nodes), 2008 .clocks = bus_mm_clocks, 2009 .num_clocks = ARRAY_SIZE(bus_mm_clocks), 2010 .regmap_cfg = &msm8996_mnoc_regmap_config 2011 }; 2012 2013 static struct qcom_icc_node * const pnoc_nodes[] = { 2014 [MASTER_SNOC_PNOC] = &mas_snoc_pnoc, 2015 [MASTER_SDCC_1] = &mas_sdcc_1, 2016 [MASTER_SDCC_2] = &mas_sdcc_2, 2017 [MASTER_SDCC_4] = &mas_sdcc_4, 2018 [MASTER_USB_HS] = &mas_usb_hs, 2019 [MASTER_BLSP_1] = &mas_blsp_1, 2020 [MASTER_BLSP_2] = &mas_blsp_2, 2021 [MASTER_TSIF] = &mas_tsif, 2022 [SLAVE_PNOC_A1NOC] = &slv_pnoc_a1noc, 2023 [SLAVE_USB_HS] = &slv_usb_hs, 2024 [SLAVE_SDCC_2] = &slv_sdcc_2, 2025 [SLAVE_SDCC_4] = &slv_sdcc_4, 2026 [SLAVE_TSIF] = &slv_tsif, 2027 [SLAVE_BLSP_2] = &slv_blsp_2, 2028 [SLAVE_SDCC_1] = &slv_sdcc_1, 2029 [SLAVE_BLSP_1] = &slv_blsp_1, 2030 [SLAVE_PDM] = &slv_pdm, 2031 [SLAVE_AHB2PHY] = &slv_ahb2phy 2032 }; 2033 2034 static const struct regmap_config msm8996_pnoc_regmap_config = { 2035 .reg_bits = 32, 2036 .reg_stride = 4, 2037 .val_bits = 32, 2038 .max_register = 0x3000, 2039 .fast_io = true 2040 }; 2041 2042 static const struct qcom_icc_desc msm8996_pnoc = { 2043 .type = QCOM_ICC_NOC, 2044 .nodes = pnoc_nodes, 2045 .num_nodes = ARRAY_SIZE(pnoc_nodes), 2046 .regmap_cfg = &msm8996_pnoc_regmap_config 2047 }; 2048 2049 static struct qcom_icc_node * const snoc_nodes[] = { 2050 [MASTER_HMSS] = &mas_hmss, 2051 [MASTER_QDSS_BAM] = &mas_qdss_bam, 2052 [MASTER_SNOC_CFG] = &mas_snoc_cfg, 2053 [MASTER_BIMC_SNOC_0] = &mas_bimc_snoc_0, 2054 [MASTER_BIMC_SNOC_1] = &mas_bimc_snoc_1, 2055 [MASTER_A0NOC_SNOC] = &mas_a0noc_snoc, 2056 [MASTER_A1NOC_SNOC] = &mas_a1noc_snoc, 2057 [MASTER_A2NOC_SNOC] = &mas_a2noc_snoc, 2058 [MASTER_QDSS_ETR] = &mas_qdss_etr, 2059 [SLAVE_A0NOC_SNOC] = &slv_a0noc_snoc, 2060 [SLAVE_A1NOC_SNOC] = &slv_a1noc_snoc, 2061 [SLAVE_A2NOC_SNOC] = &slv_a2noc_snoc, 2062 [SLAVE_HMSS] = &slv_hmss, 2063 [SLAVE_LPASS] = &slv_lpass, 2064 [SLAVE_USB3] = &slv_usb3, 2065 [SLAVE_SNOC_BIMC] = &slv_snoc_bimc, 2066 [SLAVE_SNOC_CNOC] = &slv_snoc_cnoc, 2067 [SLAVE_IMEM] = &slv_imem, 2068 [SLAVE_PIMEM] = &slv_pimem, 2069 [SLAVE_SNOC_VMEM] = &slv_snoc_vmem, 2070 [SLAVE_SNOC_PNOC] = &slv_snoc_pnoc, 2071 [SLAVE_QDSS_STM] = &slv_qdss_stm, 2072 [SLAVE_PCIE_0] = &slv_pcie_0, 2073 [SLAVE_PCIE_1] = &slv_pcie_1, 2074 [SLAVE_PCIE_2] = &slv_pcie_2, 2075 [SLAVE_SERVICE_SNOC] = &slv_srvc_snoc 2076 }; 2077 2078 static const struct regmap_config msm8996_snoc_regmap_config = { 2079 .reg_bits = 32, 2080 .reg_stride = 4, 2081 .val_bits = 32, 2082 .max_register = 0x20000, 2083 .fast_io = true 2084 }; 2085 2086 static const struct qcom_icc_desc msm8996_snoc = { 2087 .type = QCOM_ICC_NOC, 2088 .nodes = snoc_nodes, 2089 .num_nodes = ARRAY_SIZE(snoc_nodes), 2090 .regmap_cfg = &msm8996_snoc_regmap_config 2091 }; 2092 2093 static const struct of_device_id qnoc_of_match[] = { 2094 { .compatible = "qcom,msm8996-a0noc", .data = &msm8996_a0noc}, 2095 { .compatible = "qcom,msm8996-a1noc", .data = &msm8996_a1noc}, 2096 { .compatible = "qcom,msm8996-a2noc", .data = &msm8996_a2noc}, 2097 { .compatible = "qcom,msm8996-bimc", .data = &msm8996_bimc}, 2098 { .compatible = "qcom,msm8996-cnoc", .data = &msm8996_cnoc}, 2099 { .compatible = "qcom,msm8996-mnoc", .data = &msm8996_mnoc}, 2100 { .compatible = "qcom,msm8996-pnoc", .data = &msm8996_pnoc}, 2101 { .compatible = "qcom,msm8996-snoc", .data = &msm8996_snoc}, 2102 { } 2103 }; 2104 MODULE_DEVICE_TABLE(of, qnoc_of_match); 2105 2106 static struct platform_driver qnoc_driver = { 2107 .probe = qnoc_probe, 2108 .remove = qnoc_remove, 2109 .driver = { 2110 .name = "qnoc-msm8996", 2111 .of_match_table = qnoc_of_match, 2112 .sync_state = icc_sync_state, 2113 } 2114 }; 2115 module_platform_driver(qnoc_driver); 2116 2117 MODULE_AUTHOR("Yassine Oudjana <y.oudjana@protonmail.com>"); 2118 MODULE_DESCRIPTION("Qualcomm MSM8996 NoC driver"); 2119 MODULE_LICENSE("GPL v2"); 2120