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