at v6.19 1440 lines 32 kB view raw
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Based on data from msm8976-bus.dtsi in Qualcomm's msm-3.10 release: 4 * Copyright (c) 2014-2016, The Linux Foundation. All rights reserved. 5 */ 6 7#include <linux/device.h> 8#include <linux/interconnect-provider.h> 9#include <linux/mod_devicetable.h> 10#include <linux/module.h> 11#include <linux/platform_device.h> 12#include <linux/regmap.h> 13 14#include <dt-bindings/interconnect/qcom,msm8976.h> 15 16#include "icc-rpm.h" 17 18enum { 19 QNOC_MASTER_AMPSS_M0 = 1, 20 QNOC_MNOC_BIMC_MAS, 21 QNOC_SNOC_BIMC_MAS, 22 QNOC_MASTER_TCU_0, 23 QNOC_MASTER_USB_HS2, 24 QNOC_MASTER_BLSP_1, 25 QNOC_MASTER_USB_HS, 26 QNOC_MASTER_BLSP_2, 27 QNOC_MASTER_CRYPTO_CORE0, 28 QNOC_MASTER_SDCC_1, 29 QNOC_MASTER_SDCC_2, 30 QNOC_MASTER_SDCC_3, 31 QNOC_SNOC_PNOC_MAS, 32 QNOC_MASTER_LPASS_AHB, 33 QNOC_MASTER_SPDM, 34 QNOC_MASTER_DEHR, 35 QNOC_MASTER_XM_USB_HS1, 36 QNOC_MASTER_QDSS_BAM, 37 QNOC_BIMC_SNOC_MAS, 38 QNOC_MASTER_JPEG, 39 QNOC_MASTER_GRAPHICS_3D, 40 QNOC_MASTER_MDP_PORT0, 41 QNOC_MASTER_MDP_PORT1, 42 QNOC_PNOC_SNOC_MAS, 43 QNOC_MASTER_VIDEO_P0, 44 QNOC_MASTER_VIDEO_P1, 45 QNOC_MASTER_VFE0, 46 QNOC_MASTER_VFE1, 47 QNOC_MASTER_CPP, 48 QNOC_MASTER_QDSS_ETR, 49 QNOC_MASTER_LPASS_PROC, 50 QNOC_MASTER_IPA, 51 QNOC_PNOC_M_0, 52 QNOC_PNOC_M_1, 53 QNOC_PNOC_INT_0, 54 QNOC_PNOC_INT_1, 55 QNOC_PNOC_INT_2, 56 QNOC_PNOC_SLV_1, 57 QNOC_PNOC_SLV_2, 58 QNOC_PNOC_SLV_3, 59 QNOC_PNOC_SLV_4, 60 QNOC_PNOC_SLV_8, 61 QNOC_PNOC_SLV_9, 62 QNOC_SNOC_MM_INT_0, 63 QNOC_SNOC_QDSS_INT, 64 QNOC_SNOC_INT_0, 65 QNOC_SNOC_INT_1, 66 QNOC_SNOC_INT_2, 67 QNOC_SLAVE_EBI_CH0, 68 QNOC_BIMC_SNOC_SLV, 69 QNOC_SLAVE_TCSR, 70 QNOC_SLAVE_TLMM, 71 QNOC_SLAVE_CRYPTO_0_CFG, 72 QNOC_SLAVE_MESSAGE_RAM, 73 QNOC_SLAVE_PDM, 74 QNOC_SLAVE_PRNG, 75 QNOC_SLAVE_PMIC_ARB, 76 QNOC_SLAVE_SNOC_CFG, 77 QNOC_SLAVE_DCC_CFG, 78 QNOC_SLAVE_CAMERA_CFG, 79 QNOC_SLAVE_DISPLAY_CFG, 80 QNOC_SLAVE_VENUS_CFG, 81 QNOC_SLAVE_SDCC_1, 82 QNOC_SLAVE_BLSP_1, 83 QNOC_SLAVE_USB_HS, 84 QNOC_SLAVE_SDCC_3, 85 QNOC_SLAVE_SDCC_2, 86 QNOC_SLAVE_GRAPHICS_3D_CFG, 87 QNOC_SLAVE_USB_HS2, 88 QNOC_SLAVE_BLSP_2, 89 QNOC_PNOC_SNOC_SLV, 90 QNOC_SLAVE_APPSS, 91 QNOC_MNOC_BIMC_SLV, 92 QNOC_SNOC_BIMC_SLV, 93 QNOC_SLAVE_SYSTEM_IMEM, 94 QNOC_SNOC_PNOC_SLV, 95 QNOC_SLAVE_QDSS_STM, 96 QNOC_SLAVE_CATS_128, 97 QNOC_SLAVE_OCMEM_64, 98 QNOC_SLAVE_LPASS, 99}; 100 101static const u16 mas_apps_proc_links[] = { 102 QNOC_SLAVE_EBI_CH0, 103 QNOC_BIMC_SNOC_SLV 104}; 105 106static struct qcom_icc_node mas_apps_proc = { 107 .name = "mas_apps_proc", 108 .id = QNOC_MASTER_AMPSS_M0, 109 .buswidth = 16, 110 .mas_rpm_id = 0, 111 .slv_rpm_id = -1, 112 .qos.ap_owned = true, 113 .qos.qos_mode = NOC_QOS_MODE_FIXED, 114 .qos.areq_prio = 0, 115 .qos.prio_level = 0, 116 .qos.qos_port = 0, 117 .num_links = ARRAY_SIZE(mas_apps_proc_links), 118 .links = mas_apps_proc_links, 119}; 120 121static const u16 mas_smmnoc_bimc_links[] = { 122 QNOC_SLAVE_EBI_CH0 123}; 124 125static struct qcom_icc_node mas_smmnoc_bimc = { 126 .name = "mas_smmnoc_bimc", 127 .id = QNOC_MNOC_BIMC_MAS, 128 .channels = 2, 129 .buswidth = 16, 130 .mas_rpm_id = 135, 131 .slv_rpm_id = -1, 132 .qos.ap_owned = true, 133 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 134 .qos.areq_prio = 0, 135 .qos.prio_level = 0, 136 .qos.qos_port = 2, 137 .num_links = ARRAY_SIZE(mas_smmnoc_bimc_links), 138 .links = mas_smmnoc_bimc_links, 139}; 140 141static const u16 mas_snoc_bimc_links[] = { 142 QNOC_SLAVE_EBI_CH0 143}; 144 145static struct qcom_icc_node mas_snoc_bimc = { 146 .name = "mas_snoc_bimc", 147 .id = QNOC_SNOC_BIMC_MAS, 148 .channels = 2, 149 .buswidth = 16, 150 .mas_rpm_id = 3, 151 .slv_rpm_id = -1, 152 .qos.ap_owned = true, 153 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 154 .qos.areq_prio = 0, 155 .qos.prio_level = 0, 156 .qos.qos_port = 3, 157 .num_links = ARRAY_SIZE(mas_snoc_bimc_links), 158 .links = mas_snoc_bimc_links, 159}; 160 161static const u16 mas_tcu_0_links[] = { 162 QNOC_SLAVE_EBI_CH0, 163 QNOC_BIMC_SNOC_SLV 164}; 165 166static struct qcom_icc_node mas_tcu_0 = { 167 .name = "mas_tcu_0", 168 .id = QNOC_MASTER_TCU_0, 169 .buswidth = 16, 170 .mas_rpm_id = 102, 171 .slv_rpm_id = -1, 172 .qos.ap_owned = true, 173 .qos.qos_mode = NOC_QOS_MODE_FIXED, 174 .qos.areq_prio = 0, 175 .qos.prio_level = 2, 176 .qos.qos_port = 4, 177 .num_links = ARRAY_SIZE(mas_tcu_0_links), 178 .links = mas_tcu_0_links, 179}; 180 181static const u16 mas_usb_hs2_links[] = { 182 QNOC_PNOC_M_0 183}; 184 185static struct qcom_icc_node mas_usb_hs2 = { 186 .name = "mas_usb_hs2", 187 .id = QNOC_MASTER_USB_HS2, 188 .buswidth = 4, 189 .mas_rpm_id = 57, 190 .slv_rpm_id = -1, 191 .num_links = ARRAY_SIZE(mas_usb_hs2_links), 192 .links = mas_usb_hs2_links, 193}; 194 195static const u16 mas_blsp_1_links[] = { 196 QNOC_PNOC_M_1 197}; 198 199static struct qcom_icc_node mas_blsp_1 = { 200 .name = "mas_blsp_1", 201 .id = QNOC_MASTER_BLSP_1, 202 .buswidth = 4, 203 .mas_rpm_id = 41, 204 .slv_rpm_id = -1, 205 .num_links = ARRAY_SIZE(mas_blsp_1_links), 206 .links = mas_blsp_1_links, 207}; 208 209static const u16 mas_usb_hs1_links[] = { 210 QNOC_PNOC_M_1 211}; 212 213static struct qcom_icc_node mas_usb_hs1 = { 214 .name = "mas_usb_hs1", 215 .id = QNOC_MASTER_USB_HS, 216 .buswidth = 4, 217 .mas_rpm_id = 42, 218 .slv_rpm_id = -1, 219 .num_links = ARRAY_SIZE(mas_usb_hs1_links), 220 .links = mas_usb_hs1_links, 221}; 222 223static const u16 mas_blsp_2_links[] = { 224 QNOC_PNOC_M_1 225}; 226 227static struct qcom_icc_node mas_blsp_2 = { 228 .name = "mas_blsp_2", 229 .id = QNOC_MASTER_BLSP_2, 230 .buswidth = 4, 231 .mas_rpm_id = 39, 232 .slv_rpm_id = -1, 233 .num_links = ARRAY_SIZE(mas_blsp_2_links), 234 .links = mas_blsp_2_links, 235}; 236 237static const u16 mas_crypto_links[] = { 238 QNOC_PNOC_INT_1 239}; 240 241static struct qcom_icc_node mas_crypto = { 242 .name = "mas_crypto", 243 .id = QNOC_MASTER_CRYPTO_CORE0, 244 .buswidth = 8, 245 .mas_rpm_id = 23, 246 .slv_rpm_id = -1, 247 .qos.ap_owned = true, 248 .qos.qos_mode = NOC_QOS_MODE_FIXED, 249 .qos.areq_prio = 0, 250 .qos.prio_level = 0, 251 .qos.qos_port = 0, 252 .num_links = ARRAY_SIZE(mas_crypto_links), 253 .links = mas_crypto_links, 254}; 255 256static const u16 mas_sdcc_1_links[] = { 257 QNOC_PNOC_INT_1 258}; 259 260static struct qcom_icc_node mas_sdcc_1 = { 261 .name = "mas_sdcc_1", 262 .id = QNOC_MASTER_SDCC_1, 263 .buswidth = 8, 264 .mas_rpm_id = 33, 265 .slv_rpm_id = -1, 266 .qos.qos_mode = NOC_QOS_MODE_FIXED, 267 .qos.areq_prio = 0, 268 .qos.prio_level = 0, 269 .qos.qos_port = 7, 270 .num_links = ARRAY_SIZE(mas_sdcc_1_links), 271 .links = mas_sdcc_1_links, 272}; 273 274static const u16 mas_sdcc_2_links[] = { 275 QNOC_PNOC_INT_1 276}; 277 278static struct qcom_icc_node mas_sdcc_2 = { 279 .name = "mas_sdcc_2", 280 .id = QNOC_MASTER_SDCC_2, 281 .buswidth = 8, 282 .mas_rpm_id = 35, 283 .slv_rpm_id = -1, 284 .qos.qos_mode = NOC_QOS_MODE_FIXED, 285 .qos.areq_prio = 0, 286 .qos.prio_level = 0, 287 .qos.qos_port = 8, 288 .num_links = ARRAY_SIZE(mas_sdcc_2_links), 289 .links = mas_sdcc_2_links, 290}; 291 292static const u16 mas_sdcc_3_links[] = { 293 QNOC_PNOC_INT_1 294}; 295 296static struct qcom_icc_node mas_sdcc_3 = { 297 .name = "mas_sdcc_3", 298 .id = QNOC_MASTER_SDCC_3, 299 .buswidth = 8, 300 .mas_rpm_id = 34, 301 .slv_rpm_id = -1, 302 .qos.qos_mode = NOC_QOS_MODE_FIXED, 303 .qos.areq_prio = 0, 304 .qos.prio_level = 0, 305 .qos.qos_port = 10, 306 .num_links = ARRAY_SIZE(mas_sdcc_3_links), 307 .links = mas_sdcc_3_links, 308}; 309 310static const u16 mas_snoc_pcnoc_links[] = { 311 QNOC_PNOC_INT_2 312}; 313 314static struct qcom_icc_node mas_snoc_pcnoc = { 315 .name = "mas_snoc_pcnoc", 316 .id = QNOC_SNOC_PNOC_MAS, 317 .buswidth = 8, 318 .mas_rpm_id = 77, 319 .slv_rpm_id = -1, 320 .qos.qos_mode = NOC_QOS_MODE_FIXED, 321 .qos.areq_prio = 0, 322 .qos.prio_level = 0, 323 .qos.qos_port = 9, 324 .num_links = ARRAY_SIZE(mas_snoc_pcnoc_links), 325 .links = mas_snoc_pcnoc_links, 326}; 327 328static const u16 mas_lpass_ahb_links[] = { 329 QNOC_PNOC_SNOC_SLV 330}; 331 332static struct qcom_icc_node mas_lpass_ahb = { 333 .name = "mas_lpass_ahb", 334 .id = QNOC_MASTER_LPASS_AHB, 335 .buswidth = 8, 336 .mas_rpm_id = 18, 337 .slv_rpm_id = -1, 338 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 339 .qos.areq_prio = 0, 340 .qos.prio_level = 0, 341 .qos.qos_port = 12, 342 .num_links = ARRAY_SIZE(mas_lpass_ahb_links), 343 .links = mas_lpass_ahb_links, 344}; 345 346static const u16 mas_spdm_links[] = { 347 QNOC_PNOC_M_0 348}; 349 350static struct qcom_icc_node mas_spdm = { 351 .name = "mas_spdm", 352 .id = QNOC_MASTER_SPDM, 353 .buswidth = 4, 354 .mas_rpm_id = -1, 355 .slv_rpm_id = -1, 356 .num_links = ARRAY_SIZE(mas_spdm_links), 357 .links = mas_spdm_links, 358}; 359 360static const u16 mas_dehr_links[] = { 361 QNOC_PNOC_M_0 362}; 363 364static struct qcom_icc_node mas_dehr = { 365 .name = "mas_dehr", 366 .id = QNOC_MASTER_DEHR, 367 .buswidth = 4, 368 .mas_rpm_id = -1, 369 .slv_rpm_id = -1, 370 .num_links = ARRAY_SIZE(mas_dehr_links), 371 .links = mas_dehr_links, 372}; 373 374static const u16 mas_xm_usb_hs1_links[] = { 375 QNOC_PNOC_INT_0 376}; 377 378static struct qcom_icc_node mas_xm_usb_hs1 = { 379 .name = "mas_xm_usb_hs1", 380 .id = QNOC_MASTER_XM_USB_HS1, 381 .buswidth = 8, 382 .mas_rpm_id = -1, 383 .slv_rpm_id = -1, 384 .num_links = ARRAY_SIZE(mas_xm_usb_hs1_links), 385 .links = mas_xm_usb_hs1_links, 386}; 387 388static const u16 mas_qdss_bam_links[] = { 389 QNOC_SNOC_QDSS_INT 390}; 391 392static struct qcom_icc_node mas_qdss_bam = { 393 .name = "mas_qdss_bam", 394 .id = QNOC_MASTER_QDSS_BAM, 395 .buswidth = 4, 396 .mas_rpm_id = 19, 397 .slv_rpm_id = -1, 398 .qos.ap_owned = true, 399 .qos.qos_mode = NOC_QOS_MODE_FIXED, 400 .qos.areq_prio = 1, 401 .qos.prio_level = 1, 402 .qos.qos_port = 11, 403 .num_links = ARRAY_SIZE(mas_qdss_bam_links), 404 .links = mas_qdss_bam_links, 405}; 406 407static const u16 mas_bimc_snoc_links[] = { 408 QNOC_SNOC_INT_2 409}; 410 411static struct qcom_icc_node mas_bimc_snoc = { 412 .name = "mas_bimc_snoc", 413 .id = QNOC_BIMC_SNOC_MAS, 414 .buswidth = 8, 415 .mas_rpm_id = 21, 416 .slv_rpm_id = -1, 417 .num_links = ARRAY_SIZE(mas_bimc_snoc_links), 418 .links = mas_bimc_snoc_links, 419}; 420 421static const u16 mas_jpeg_links[] = { 422 QNOC_SNOC_MM_INT_0, 423 QNOC_MNOC_BIMC_SLV 424}; 425 426static struct qcom_icc_node mas_jpeg = { 427 .name = "mas_jpeg", 428 .id = QNOC_MASTER_JPEG, 429 .buswidth = 16, 430 .mas_rpm_id = 7, 431 .slv_rpm_id = -1, 432 .qos.ap_owned = true, 433 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 434 .qos.areq_prio = 0, 435 .qos.prio_level = 0, 436 .qos.qos_port = 6, 437 .num_links = ARRAY_SIZE(mas_jpeg_links), 438 .links = mas_jpeg_links, 439}; 440 441static const u16 mas_oxili_links[] = { 442 QNOC_MNOC_BIMC_SLV, 443 QNOC_SNOC_MM_INT_0 444}; 445 446static struct qcom_icc_node mas_oxili = { 447 .name = "mas_oxili", 448 .id = QNOC_MASTER_GRAPHICS_3D, 449 .channels = 2, 450 .buswidth = 16, 451 .ib_coeff = 200, 452 .mas_rpm_id = 6, 453 .slv_rpm_id = -1, 454 .qos.ap_owned = true, 455 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 456 .qos.areq_prio = 0, 457 .qos.prio_level = 0, 458 .qos.qos_port = 16, /* [16, 17] */ 459 .num_links = ARRAY_SIZE(mas_oxili_links), 460 .links = mas_oxili_links, 461}; 462 463static const u16 mas_mdp0_links[] = { 464 QNOC_SNOC_MM_INT_0, 465 QNOC_MNOC_BIMC_SLV 466}; 467 468static struct qcom_icc_node mas_mdp0 = { 469 .name = "mas_mdp0", 470 .id = QNOC_MASTER_MDP_PORT0, 471 .buswidth = 16, 472 .ib_coeff = 50, 473 .mas_rpm_id = 8, 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 = 7, 480 .num_links = ARRAY_SIZE(mas_mdp0_links), 481 .links = mas_mdp0_links, 482}; 483 484static const u16 mas_mdp1_links[] = { 485 QNOC_SNOC_MM_INT_0, 486 QNOC_MNOC_BIMC_SLV 487}; 488 489static struct qcom_icc_node mas_mdp1 = { 490 .name = "mas_mdp1", 491 .id = QNOC_MASTER_MDP_PORT1, 492 .buswidth = 16, 493 .ib_coeff = 50, 494 .mas_rpm_id = 61, 495 .slv_rpm_id = -1, 496 .qos.ap_owned = true, 497 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 498 .qos.areq_prio = 0, 499 .qos.prio_level = 0, 500 .qos.qos_port = 13, 501 .num_links = ARRAY_SIZE(mas_mdp1_links), 502 .links = mas_mdp1_links, 503}; 504 505static const u16 mas_pcnoc_snoc_links[] = { 506 QNOC_SNOC_INT_2 507}; 508 509static struct qcom_icc_node mas_pcnoc_snoc = { 510 .name = "mas_pcnoc_snoc", 511 .id = QNOC_PNOC_SNOC_MAS, 512 .buswidth = 8, 513 .mas_rpm_id = 29, 514 .slv_rpm_id = -1, 515 .qos.qos_mode = NOC_QOS_MODE_FIXED, 516 .qos.areq_prio = 0, 517 .qos.prio_level = 0, 518 .qos.qos_port = 5, 519 .num_links = ARRAY_SIZE(mas_pcnoc_snoc_links), 520 .links = mas_pcnoc_snoc_links, 521}; 522 523static const u16 mas_venus_0_links[] = { 524 QNOC_SNOC_MM_INT_0, 525 QNOC_MNOC_BIMC_SLV 526}; 527 528static struct qcom_icc_node mas_venus_0 = { 529 .name = "mas_venus_0", 530 .id = QNOC_MASTER_VIDEO_P0, 531 .buswidth = 16, 532 .mas_rpm_id = 9, 533 .slv_rpm_id = -1, 534 .qos.ap_owned = true, 535 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 536 .qos.areq_prio = 0, 537 .qos.prio_level = 0, 538 .qos.qos_port = 8, 539 .num_links = ARRAY_SIZE(mas_venus_0_links), 540 .links = mas_venus_0_links, 541}; 542 543static const u16 mas_venus_1_links[] = { 544 QNOC_SNOC_MM_INT_0, 545 QNOC_MNOC_BIMC_SLV 546}; 547 548static struct qcom_icc_node mas_venus_1 = { 549 .name = "mas_venus_1", 550 .id = QNOC_MASTER_VIDEO_P1, 551 .buswidth = 16, 552 .mas_rpm_id = 10, 553 .slv_rpm_id = -1, 554 .qos.ap_owned = true, 555 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 556 .qos.areq_prio = 0, 557 .qos.prio_level = 0, 558 .qos.qos_port = 14, 559 .num_links = ARRAY_SIZE(mas_venus_1_links), 560 .links = mas_venus_1_links, 561}; 562 563static const u16 mas_vfe_0_links[] = { 564 QNOC_SNOC_MM_INT_0, 565 QNOC_MNOC_BIMC_SLV 566}; 567 568static struct qcom_icc_node mas_vfe_0 = { 569 .name = "mas_vfe_0", 570 .id = QNOC_MASTER_VFE0, 571 .buswidth = 16, 572 .mas_rpm_id = 11, 573 .slv_rpm_id = -1, 574 .qos.ap_owned = true, 575 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 576 .qos.areq_prio = 0, 577 .qos.prio_level = 0, 578 .qos.qos_port = 9, 579 .num_links = ARRAY_SIZE(mas_vfe_0_links), 580 .links = mas_vfe_0_links, 581}; 582 583static const u16 mas_vfe_1_links[] = { 584 QNOC_SNOC_MM_INT_0, 585 QNOC_MNOC_BIMC_SLV 586}; 587 588static struct qcom_icc_node mas_vfe_1 = { 589 .name = "mas_vfe_1", 590 .id = QNOC_MASTER_VFE1, 591 .buswidth = 16, 592 .mas_rpm_id = 133, 593 .slv_rpm_id = -1, 594 .qos.ap_owned = true, 595 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 596 .qos.areq_prio = 0, 597 .qos.prio_level = 0, 598 .qos.qos_port = 15, 599 .num_links = ARRAY_SIZE(mas_vfe_1_links), 600 .links = mas_vfe_1_links, 601}; 602 603static const u16 mas_cpp_links[] = { 604 QNOC_SNOC_MM_INT_0, 605 QNOC_MNOC_BIMC_SLV 606}; 607 608static struct qcom_icc_node mas_cpp = { 609 .name = "mas_cpp", 610 .id = QNOC_MASTER_CPP, 611 .buswidth = 16, 612 .mas_rpm_id = 115, 613 .slv_rpm_id = -1, 614 .qos.ap_owned = true, 615 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 616 .qos.areq_prio = 0, 617 .qos.prio_level = 0, 618 .qos.qos_port = 12, 619 .num_links = ARRAY_SIZE(mas_cpp_links), 620 .links = mas_cpp_links, 621}; 622 623static const u16 mas_qdss_etr_links[] = { 624 QNOC_SNOC_QDSS_INT 625}; 626 627static struct qcom_icc_node mas_qdss_etr = { 628 .name = "mas_qdss_etr", 629 .id = QNOC_MASTER_QDSS_ETR, 630 .buswidth = 8, 631 .mas_rpm_id = 31, 632 .slv_rpm_id = -1, 633 .qos.ap_owned = true, 634 .qos.qos_mode = NOC_QOS_MODE_FIXED, 635 .qos.areq_prio = 1, 636 .qos.prio_level = 1, 637 .qos.qos_port = 10, 638 .num_links = ARRAY_SIZE(mas_qdss_etr_links), 639 .links = mas_qdss_etr_links, 640}; 641 642static const u16 mas_lpass_proc_links[] = { 643 QNOC_SNOC_INT_0, 644 QNOC_SNOC_INT_1, 645 QNOC_SNOC_BIMC_SLV 646}; 647 648static struct qcom_icc_node mas_lpass_proc = { 649 .name = "mas_lpass_proc", 650 .id = QNOC_MASTER_LPASS_PROC, 651 .buswidth = 8, 652 .mas_rpm_id = -1, 653 .slv_rpm_id = -1, 654 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 655 .qos.areq_prio = 0, 656 .qos.prio_level = 0, 657 .qos.qos_port = 19, 658 .num_links = ARRAY_SIZE(mas_lpass_proc_links), 659 .links = mas_lpass_proc_links, 660}; 661 662static const u16 mas_ipa_links[] = { 663 QNOC_SNOC_INT_2 664}; 665 666static struct qcom_icc_node mas_ipa = { 667 .name = "mas_ipa", 668 .id = QNOC_MASTER_IPA, 669 .buswidth = 8, 670 .mas_rpm_id = 59, 671 .slv_rpm_id = -1, 672 .qos.ap_owned = true, 673 .qos.qos_mode = NOC_QOS_MODE_FIXED, 674 .qos.areq_prio = 1, 675 .qos.prio_level = 1, 676 .qos.qos_port = 18, 677 .num_links = ARRAY_SIZE(mas_ipa_links), 678 .links = mas_ipa_links, 679}; 680 681static const u16 pcnoc_m_0_links[] = { 682 QNOC_PNOC_SNOC_SLV 683}; 684 685static struct qcom_icc_node pcnoc_m_0 = { 686 .name = "pcnoc_m_0", 687 .id = QNOC_PNOC_M_0, 688 .buswidth = 4, 689 .mas_rpm_id = 87, 690 .slv_rpm_id = 116, 691 .qos.qos_mode = NOC_QOS_MODE_FIXED, 692 .qos.areq_prio = 0, 693 .qos.prio_level = 0, 694 .qos.qos_port = 5, 695 .num_links = ARRAY_SIZE(pcnoc_m_0_links), 696 .links = pcnoc_m_0_links, 697}; 698 699static const u16 pcnoc_m_1_links[] = { 700 QNOC_PNOC_SNOC_SLV 701}; 702 703static struct qcom_icc_node pcnoc_m_1 = { 704 .name = "pcnoc_m_1", 705 .id = QNOC_PNOC_M_1, 706 .buswidth = 4, 707 .mas_rpm_id = 88, 708 .slv_rpm_id = 117, 709 .qos.qos_mode = NOC_QOS_MODE_FIXED, 710 .qos.areq_prio = 0, 711 .qos.prio_level = 0, 712 .qos.qos_port = 6, 713 .num_links = ARRAY_SIZE(pcnoc_m_1_links), 714 .links = pcnoc_m_1_links, 715}; 716 717static const u16 pcnoc_int_0_links[] = { 718 QNOC_PNOC_SNOC_SLV, 719 QNOC_PNOC_INT_2 720}; 721 722static struct qcom_icc_node pcnoc_int_0 = { 723 .name = "pcnoc_int_0", 724 .id = QNOC_PNOC_INT_0, 725 .buswidth = 4, 726 .mas_rpm_id = -1, 727 .slv_rpm_id = -1, 728 .num_links = ARRAY_SIZE(pcnoc_int_0_links), 729 .links = pcnoc_int_0_links, 730}; 731 732static const u16 pcnoc_int_1_links[] = { 733 QNOC_PNOC_SNOC_SLV, 734 QNOC_PNOC_INT_2 735}; 736 737static struct qcom_icc_node pcnoc_int_1 = { 738 .name = "pcnoc_int_1", 739 .id = QNOC_PNOC_INT_1, 740 .buswidth = 8, 741 .mas_rpm_id = 86, 742 .slv_rpm_id = 115, 743 .num_links = ARRAY_SIZE(pcnoc_int_1_links), 744 .links = pcnoc_int_1_links, 745}; 746 747static const u16 pcnoc_int_2_links[] = { 748 QNOC_PNOC_SLV_1, 749 QNOC_PNOC_SLV_2, 750 QNOC_PNOC_SLV_4, 751 QNOC_PNOC_SLV_8, 752 QNOC_PNOC_SLV_9, 753 QNOC_PNOC_SLV_3 754}; 755 756static struct qcom_icc_node pcnoc_int_2 = { 757 .name = "pcnoc_int_2", 758 .id = QNOC_PNOC_INT_2, 759 .buswidth = 8, 760 .mas_rpm_id = 124, 761 .slv_rpm_id = 184, 762 .num_links = ARRAY_SIZE(pcnoc_int_2_links), 763 .links = pcnoc_int_2_links, 764}; 765 766static const u16 pcnoc_s_1_links[] = { 767 QNOC_SLAVE_CRYPTO_0_CFG, 768 QNOC_SLAVE_PRNG, 769 QNOC_SLAVE_PDM, 770 QNOC_SLAVE_MESSAGE_RAM 771}; 772 773static struct qcom_icc_node pcnoc_s_1 = { 774 .name = "pcnoc_s_1", 775 .id = QNOC_PNOC_SLV_1, 776 .buswidth = 4, 777 .mas_rpm_id = 90, 778 .slv_rpm_id = 119, 779 .num_links = ARRAY_SIZE(pcnoc_s_1_links), 780 .links = pcnoc_s_1_links, 781}; 782 783static const u16 pcnoc_s_2_links[] = { 784 QNOC_SLAVE_PMIC_ARB 785}; 786 787static struct qcom_icc_node pcnoc_s_2 = { 788 .name = "pcnoc_s_2", 789 .id = QNOC_PNOC_SLV_2, 790 .buswidth = 4, 791 .mas_rpm_id = 91, 792 .slv_rpm_id = 120, 793 .num_links = ARRAY_SIZE(pcnoc_s_2_links), 794 .links = pcnoc_s_2_links, 795}; 796 797static const u16 pcnoc_s_3_links[] = { 798 QNOC_SLAVE_SNOC_CFG, 799 QNOC_SLAVE_DCC_CFG 800}; 801 802static struct qcom_icc_node pcnoc_s_3 = { 803 .name = "pcnoc_s_3", 804 .id = QNOC_PNOC_SLV_3, 805 .buswidth = 4, 806 .mas_rpm_id = 92, 807 .slv_rpm_id = 121, 808 .num_links = ARRAY_SIZE(pcnoc_s_3_links), 809 .links = pcnoc_s_3_links, 810}; 811 812static const u16 pcnoc_s_4_links[] = { 813 QNOC_SLAVE_CAMERA_CFG, 814 QNOC_SLAVE_DISPLAY_CFG, 815 QNOC_SLAVE_VENUS_CFG 816}; 817 818static struct qcom_icc_node pcnoc_s_4 = { 819 .name = "pcnoc_s_4", 820 .id = QNOC_PNOC_SLV_4, 821 .buswidth = 4, 822 .mas_rpm_id = 93, 823 .slv_rpm_id = 122, 824 .qos.ap_owned = true, 825 .qos.qos_mode = NOC_QOS_MODE_INVALID, 826 .num_links = ARRAY_SIZE(pcnoc_s_4_links), 827 .links = pcnoc_s_4_links, 828}; 829 830static const u16 pcnoc_s_8_links[] = { 831 QNOC_SLAVE_USB_HS, 832 QNOC_SLAVE_SDCC_3, 833 QNOC_SLAVE_BLSP_1, 834 QNOC_SLAVE_SDCC_1 835}; 836 837static struct qcom_icc_node pcnoc_s_8 = { 838 .name = "pcnoc_s_8", 839 .id = QNOC_PNOC_SLV_8, 840 .buswidth = 4, 841 .mas_rpm_id = 96, 842 .slv_rpm_id = 125, 843 .num_links = ARRAY_SIZE(pcnoc_s_8_links), 844 .links = pcnoc_s_8_links, 845}; 846 847static const u16 pcnoc_s_9_links[] = { 848 QNOC_SLAVE_GRAPHICS_3D_CFG, 849 QNOC_SLAVE_USB_HS2, 850 QNOC_SLAVE_SDCC_2, 851 QNOC_SLAVE_BLSP_2 852}; 853 854static struct qcom_icc_node pcnoc_s_9 = { 855 .name = "pcnoc_s_9", 856 .id = QNOC_PNOC_SLV_9, 857 .buswidth = 4, 858 .mas_rpm_id = 97, 859 .slv_rpm_id = 126, 860 .num_links = ARRAY_SIZE(pcnoc_s_9_links), 861 .links = pcnoc_s_9_links, 862}; 863 864static const u16 mm_int_0_links[] = { 865 QNOC_SNOC_INT_0 866}; 867 868static struct qcom_icc_node mm_int_0 = { 869 .name = "mm_int_0", 870 .id = QNOC_SNOC_MM_INT_0, 871 .buswidth = 16, 872 .ib_coeff = 200, 873 .mas_rpm_id = 79, 874 .slv_rpm_id = 108, 875 .qos.ap_owned = true, 876 .qos.qos_mode = NOC_QOS_MODE_INVALID, 877 .num_links = ARRAY_SIZE(mm_int_0_links), 878 .links = mm_int_0_links, 879}; 880 881static const u16 qdss_int_links[] = { 882 QNOC_SNOC_INT_2 883}; 884 885static struct qcom_icc_node qdss_int = { 886 .name = "qdss_int", 887 .id = QNOC_SNOC_QDSS_INT, 888 .buswidth = 8, 889 .mas_rpm_id = 98, 890 .slv_rpm_id = 128, 891 .qos.ap_owned = true, 892 .qos.qos_mode = NOC_QOS_MODE_INVALID, 893 .num_links = ARRAY_SIZE(qdss_int_links), 894 .links = qdss_int_links, 895}; 896 897static const u16 snoc_int_0_links[] = { 898 QNOC_SLAVE_QDSS_STM, 899 QNOC_SLAVE_SYSTEM_IMEM, 900 QNOC_SNOC_PNOC_SLV 901}; 902 903static struct qcom_icc_node snoc_int_0 = { 904 .name = "snoc_int_0", 905 .id = QNOC_SNOC_INT_0, 906 .buswidth = 8, 907 .mas_rpm_id = 99, 908 .slv_rpm_id = 130, 909 .num_links = ARRAY_SIZE(snoc_int_0_links), 910 .links = snoc_int_0_links, 911}; 912 913static const u16 snoc_int_1_links[] = { 914 QNOC_SLAVE_LPASS, 915 QNOC_SLAVE_CATS_128, 916 QNOC_SLAVE_OCMEM_64, 917 QNOC_SLAVE_APPSS 918}; 919 920static struct qcom_icc_node snoc_int_1 = { 921 .name = "snoc_int_1", 922 .id = QNOC_SNOC_INT_1, 923 .buswidth = 8, 924 .mas_rpm_id = 100, 925 .slv_rpm_id = 131, 926 .qos.ap_owned = true, 927 .qos.qos_mode = NOC_QOS_MODE_INVALID, 928 .num_links = ARRAY_SIZE(snoc_int_1_links), 929 .links = snoc_int_1_links, 930}; 931 932static const u16 snoc_int_2_links[] = { 933 QNOC_SNOC_INT_0, 934 QNOC_SNOC_INT_1, 935 QNOC_SNOC_BIMC_SLV 936}; 937 938static struct qcom_icc_node snoc_int_2 = { 939 .name = "snoc_int_2", 940 .id = QNOC_SNOC_INT_2, 941 .buswidth = 8, 942 .mas_rpm_id = 134, 943 .slv_rpm_id = 197, 944 .num_links = ARRAY_SIZE(snoc_int_2_links), 945 .links = snoc_int_2_links, 946}; 947 948static struct qcom_icc_node slv_ebi = { 949 .name = "slv_ebi", 950 .id = QNOC_SLAVE_EBI_CH0, 951 .channels = 2, 952 .buswidth = 16, 953 .mas_rpm_id = -1, 954 .slv_rpm_id = 0, 955}; 956 957static const u16 slv_bimc_snoc_links[] = { 958 QNOC_BIMC_SNOC_MAS 959}; 960 961static struct qcom_icc_node slv_bimc_snoc = { 962 .name = "slv_bimc_snoc", 963 .id = QNOC_BIMC_SNOC_SLV, 964 .buswidth = 16, 965 .mas_rpm_id = -1, 966 .slv_rpm_id = 2, 967 .num_links = ARRAY_SIZE(slv_bimc_snoc_links), 968 .links = slv_bimc_snoc_links, 969}; 970 971static struct qcom_icc_node slv_tcsr = { 972 .name = "slv_tcsr", 973 .id = QNOC_SLAVE_TCSR, 974 .buswidth = 4, 975 .mas_rpm_id = -1, 976 .slv_rpm_id = 50, 977}; 978 979static struct qcom_icc_node slv_tlmm = { 980 .name = "slv_tlmm", 981 .id = QNOC_SLAVE_TLMM, 982 .buswidth = 4, 983 .mas_rpm_id = -1, 984 .slv_rpm_id = 51, 985}; 986 987static struct qcom_icc_node slv_crypto_0_cfg = { 988 .name = "slv_crypto_0_cfg", 989 .id = QNOC_SLAVE_CRYPTO_0_CFG, 990 .buswidth = 4, 991 .mas_rpm_id = -1, 992 .slv_rpm_id = 52, 993 .qos.ap_owned = true, 994 .qos.qos_mode = NOC_QOS_MODE_INVALID, 995}; 996 997static struct qcom_icc_node slv_message_ram = { 998 .name = "slv_message_ram", 999 .id = QNOC_SLAVE_MESSAGE_RAM, 1000 .buswidth = 4, 1001 .mas_rpm_id = -1, 1002 .slv_rpm_id = 55, 1003}; 1004 1005static struct qcom_icc_node slv_pdm = { 1006 .name = "slv_pdm", 1007 .id = QNOC_SLAVE_PDM, 1008 .buswidth = 4, 1009 .mas_rpm_id = -1, 1010 .slv_rpm_id = 41, 1011}; 1012 1013static struct qcom_icc_node slv_prng = { 1014 .name = "slv_prng", 1015 .id = QNOC_SLAVE_PRNG, 1016 .buswidth = 4, 1017 .mas_rpm_id = -1, 1018 .slv_rpm_id = 44, 1019 .qos.ap_owned = true, 1020 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1021}; 1022 1023static struct qcom_icc_node slv_pmic_arb = { 1024 .name = "slv_pmic_arb", 1025 .id = QNOC_SLAVE_PMIC_ARB, 1026 .buswidth = 4, 1027 .mas_rpm_id = -1, 1028 .slv_rpm_id = 59, 1029}; 1030 1031static struct qcom_icc_node slv_snoc_cfg = { 1032 .name = "slv_snoc_cfg", 1033 .id = QNOC_SLAVE_SNOC_CFG, 1034 .buswidth = 4, 1035 .mas_rpm_id = -1, 1036 .slv_rpm_id = 70, 1037}; 1038 1039static struct qcom_icc_node slv_dcc_cfg = { 1040 .name = "slv_dcc_cfg", 1041 .id = QNOC_SLAVE_DCC_CFG, 1042 .buswidth = 4, 1043 .mas_rpm_id = -1, 1044 .slv_rpm_id = 155, 1045 .qos.ap_owned = true, 1046 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1047}; 1048 1049static struct qcom_icc_node slv_camera_ss_cfg = { 1050 .name = "slv_camera_ss_cfg", 1051 .id = QNOC_SLAVE_CAMERA_CFG, 1052 .buswidth = 4, 1053 .mas_rpm_id = -1, 1054 .slv_rpm_id = 3, 1055 .qos.ap_owned = true, 1056 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1057}; 1058 1059static struct qcom_icc_node slv_disp_ss_cfg = { 1060 .name = "slv_disp_ss_cfg", 1061 .id = QNOC_SLAVE_DISPLAY_CFG, 1062 .buswidth = 4, 1063 .mas_rpm_id = -1, 1064 .slv_rpm_id = 4, 1065 .qos.ap_owned = true, 1066 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1067}; 1068 1069static struct qcom_icc_node slv_venus_cfg = { 1070 .name = "slv_venus_cfg", 1071 .id = QNOC_SLAVE_VENUS_CFG, 1072 .buswidth = 4, 1073 .mas_rpm_id = -1, 1074 .slv_rpm_id = 10, 1075 .qos.ap_owned = true, 1076 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1077}; 1078 1079static struct qcom_icc_node slv_sdcc_1 = { 1080 .name = "slv_sdcc_1", 1081 .id = QNOC_SLAVE_SDCC_1, 1082 .buswidth = 4, 1083 .mas_rpm_id = -1, 1084 .slv_rpm_id = 31, 1085}; 1086 1087static struct qcom_icc_node slv_blsp_1 = { 1088 .name = "slv_blsp_1", 1089 .id = QNOC_SLAVE_BLSP_1, 1090 .buswidth = 4, 1091 .mas_rpm_id = -1, 1092 .slv_rpm_id = 39, 1093}; 1094 1095static struct qcom_icc_node slv_usb_hs = { 1096 .name = "slv_usb_hs", 1097 .id = QNOC_SLAVE_USB_HS, 1098 .buswidth = 4, 1099 .mas_rpm_id = -1, 1100 .slv_rpm_id = 40, 1101}; 1102 1103static struct qcom_icc_node slv_sdcc_3 = { 1104 .name = "slv_sdcc_3", 1105 .id = QNOC_SLAVE_SDCC_3, 1106 .buswidth = 4, 1107 .mas_rpm_id = -1, 1108 .slv_rpm_id = 32, 1109}; 1110 1111static struct qcom_icc_node slv_sdcc_2 = { 1112 .name = "slv_sdcc_2", 1113 .id = QNOC_SLAVE_SDCC_2, 1114 .buswidth = 4, 1115 .mas_rpm_id = -1, 1116 .slv_rpm_id = 33, 1117}; 1118 1119static struct qcom_icc_node slv_gpu_cfg = { 1120 .name = "slv_gpu_cfg", 1121 .id = QNOC_SLAVE_GRAPHICS_3D_CFG, 1122 .buswidth = 4, 1123 .mas_rpm_id = -1, 1124 .slv_rpm_id = 11, 1125 .qos.ap_owned = true, 1126 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1127}; 1128 1129static struct qcom_icc_node slv_usb_hs2 = { 1130 .name = "slv_usb_hs2", 1131 .id = QNOC_SLAVE_USB_HS2, 1132 .buswidth = 4, 1133 .mas_rpm_id = -1, 1134 .slv_rpm_id = 79, 1135}; 1136 1137static struct qcom_icc_node slv_blsp_2 = { 1138 .name = "slv_blsp_2", 1139 .id = QNOC_SLAVE_BLSP_2, 1140 .buswidth = 4, 1141 .mas_rpm_id = -1, 1142 .slv_rpm_id = 37, 1143}; 1144 1145static const u16 slv_pcnoc_snoc_links[] = { 1146 QNOC_PNOC_SNOC_MAS 1147}; 1148 1149static struct qcom_icc_node slv_pcnoc_snoc = { 1150 .name = "slv_pcnoc_snoc", 1151 .id = QNOC_PNOC_SNOC_SLV, 1152 .buswidth = 8, 1153 .mas_rpm_id = -1, 1154 .slv_rpm_id = 45, 1155 .num_links = ARRAY_SIZE(slv_pcnoc_snoc_links), 1156 .links = slv_pcnoc_snoc_links, 1157}; 1158 1159static struct qcom_icc_node slv_kpss_ahb = { 1160 .name = "slv_kpss_ahb", 1161 .id = QNOC_SLAVE_APPSS, 1162 .buswidth = 4, 1163 .mas_rpm_id = -1, 1164 .slv_rpm_id = 20, 1165 .qos.ap_owned = true, 1166 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1167}; 1168 1169static const u16 slv_smmnoc_bimc_links[] = { 1170 QNOC_MNOC_BIMC_MAS 1171}; 1172 1173static struct qcom_icc_node slv_smmnoc_bimc = { 1174 .name = "slv_smmnoc_bimc", 1175 .id = QNOC_MNOC_BIMC_SLV, 1176 .channels = 2, 1177 .buswidth = 16, 1178 .ib_coeff = 200, 1179 .mas_rpm_id = -1, 1180 .slv_rpm_id = 198, 1181 .qos.ap_owned = true, 1182 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1183 .num_links = ARRAY_SIZE(slv_smmnoc_bimc_links), 1184 .links = slv_smmnoc_bimc_links, 1185}; 1186 1187static const u16 slv_snoc_bimc_links[] = { 1188 QNOC_SNOC_BIMC_MAS 1189}; 1190 1191static struct qcom_icc_node slv_snoc_bimc = { 1192 .name = "slv_snoc_bimc", 1193 .id = QNOC_SNOC_BIMC_SLV, 1194 .channels = 2, 1195 .buswidth = 8, 1196 .mas_rpm_id = -1, 1197 .slv_rpm_id = 24, 1198 .qos.ap_owned = true, 1199 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1200 .num_links = ARRAY_SIZE(slv_snoc_bimc_links), 1201 .links = slv_snoc_bimc_links, 1202}; 1203 1204static struct qcom_icc_node slv_imem = { 1205 .name = "slv_imem", 1206 .id = QNOC_SLAVE_SYSTEM_IMEM, 1207 .buswidth = 8, 1208 .mas_rpm_id = -1, 1209 .slv_rpm_id = 26, 1210}; 1211 1212static const u16 slv_snoc_pcnoc_links[] = { 1213 QNOC_SNOC_PNOC_MAS 1214}; 1215 1216static struct qcom_icc_node slv_snoc_pcnoc = { 1217 .name = "slv_snoc_pcnoc", 1218 .id = QNOC_SNOC_PNOC_SLV, 1219 .buswidth = 8, 1220 .mas_rpm_id = -1, 1221 .slv_rpm_id = 28, 1222 .num_links = ARRAY_SIZE(slv_snoc_pcnoc_links), 1223 .links = slv_snoc_pcnoc_links, 1224}; 1225 1226static struct qcom_icc_node slv_qdss_stm = { 1227 .name = "slv_qdss_stm", 1228 .id = QNOC_SLAVE_QDSS_STM, 1229 .buswidth = 4, 1230 .mas_rpm_id = -1, 1231 .slv_rpm_id = 30, 1232}; 1233 1234static struct qcom_icc_node slv_cats_0 = { 1235 .name = "slv_cats_0", 1236 .id = QNOC_SLAVE_CATS_128, 1237 .buswidth = 16, 1238 .mas_rpm_id = -1, 1239 .slv_rpm_id = 106, 1240 .qos.ap_owned = true, 1241 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1242}; 1243 1244static struct qcom_icc_node slv_cats_1 = { 1245 .name = "slv_cats_1", 1246 .id = QNOC_SLAVE_OCMEM_64, 1247 .buswidth = 8, 1248 .mas_rpm_id = -1, 1249 .slv_rpm_id = 107, 1250 .qos.ap_owned = true, 1251 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1252}; 1253 1254static struct qcom_icc_node slv_lpass = { 1255 .name = "slv_lpass", 1256 .id = QNOC_SLAVE_LPASS, 1257 .buswidth = 8, 1258 .mas_rpm_id = -1, 1259 .slv_rpm_id = 21, 1260 .qos.ap_owned = true, 1261 .qos.qos_mode = NOC_QOS_MODE_INVALID, 1262}; 1263 1264static struct qcom_icc_node * const msm8976_bimc_nodes[] = { 1265 [MAS_APPS_PROC] = &mas_apps_proc, 1266 [MAS_SMMNOC_BIMC] = &mas_smmnoc_bimc, 1267 [MAS_SNOC_BIMC] = &mas_snoc_bimc, 1268 [MAS_TCU_0] = &mas_tcu_0, 1269 [SLV_EBI] = &slv_ebi, 1270 [SLV_BIMC_SNOC] = &slv_bimc_snoc, 1271}; 1272 1273static const struct regmap_config msm8976_bimc_regmap_config = { 1274 .reg_bits = 32, 1275 .reg_stride = 4, 1276 .val_bits = 32, 1277 .max_register = 0x62000, 1278 .fast_io = true, 1279}; 1280 1281static const struct qcom_icc_desc msm8976_bimc = { 1282 .type = QCOM_ICC_BIMC, 1283 .nodes = msm8976_bimc_nodes, 1284 .num_nodes = ARRAY_SIZE(msm8976_bimc_nodes), 1285 .bus_clk_desc = &bimc_clk, 1286 .regmap_cfg = &msm8976_bimc_regmap_config, 1287 .qos_offset = 0x8000, 1288 .ab_coeff = 154, 1289}; 1290 1291static struct qcom_icc_node * const msm8976_pcnoc_nodes[] = { 1292 [MAS_USB_HS2] = &mas_usb_hs2, 1293 [MAS_BLSP_1] = &mas_blsp_1, 1294 [MAS_USB_HS1] = &mas_usb_hs1, 1295 [MAS_BLSP_2] = &mas_blsp_2, 1296 [MAS_CRYPTO] = &mas_crypto, 1297 [MAS_SDCC_1] = &mas_sdcc_1, 1298 [MAS_SDCC_2] = &mas_sdcc_2, 1299 [MAS_SDCC_3] = &mas_sdcc_3, 1300 [MAS_SNOC_PCNOC] = &mas_snoc_pcnoc, 1301 [MAS_LPASS_AHB] = &mas_lpass_ahb, 1302 [MAS_SPDM] = &mas_spdm, 1303 [MAS_DEHR] = &mas_dehr, 1304 [MAS_XM_USB_HS1] = &mas_xm_usb_hs1, 1305 [PCNOC_M_0] = &pcnoc_m_0, 1306 [PCNOC_M_1] = &pcnoc_m_1, 1307 [PCNOC_INT_0] = &pcnoc_int_0, 1308 [PCNOC_INT_1] = &pcnoc_int_1, 1309 [PCNOC_INT_2] = &pcnoc_int_2, 1310 [PCNOC_S_1] = &pcnoc_s_1, 1311 [PCNOC_S_2] = &pcnoc_s_2, 1312 [PCNOC_S_3] = &pcnoc_s_3, 1313 [PCNOC_S_4] = &pcnoc_s_4, 1314 [PCNOC_S_8] = &pcnoc_s_8, 1315 [PCNOC_S_9] = &pcnoc_s_9, 1316 [SLV_TCSR] = &slv_tcsr, 1317 [SLV_TLMM] = &slv_tlmm, 1318 [SLV_CRYPTO_0_CFG] = &slv_crypto_0_cfg, 1319 [SLV_MESSAGE_RAM] = &slv_message_ram, 1320 [SLV_PDM] = &slv_pdm, 1321 [SLV_PRNG] = &slv_prng, 1322 [SLV_PMIC_ARB] = &slv_pmic_arb, 1323 [SLV_SNOC_CFG] = &slv_snoc_cfg, 1324 [SLV_DCC_CFG] = &slv_dcc_cfg, 1325 [SLV_CAMERA_SS_CFG] = &slv_camera_ss_cfg, 1326 [SLV_DISP_SS_CFG] = &slv_disp_ss_cfg, 1327 [SLV_VENUS_CFG] = &slv_venus_cfg, 1328 [SLV_SDCC_1] = &slv_sdcc_1, 1329 [SLV_BLSP_1] = &slv_blsp_1, 1330 [SLV_USB_HS] = &slv_usb_hs, 1331 [SLV_SDCC_3] = &slv_sdcc_3, 1332 [SLV_SDCC_2] = &slv_sdcc_2, 1333 [SLV_GPU_CFG] = &slv_gpu_cfg, 1334 [SLV_USB_HS2] = &slv_usb_hs2, 1335 [SLV_BLSP_2] = &slv_blsp_2, 1336 [SLV_PCNOC_SNOC] = &slv_pcnoc_snoc, 1337}; 1338 1339static const struct regmap_config msm8976_pcnoc_regmap_config = { 1340 .reg_bits = 32, 1341 .reg_stride = 4, 1342 .val_bits = 32, 1343 .max_register = 0x14000, 1344 .fast_io = true, 1345}; 1346 1347static const struct qcom_icc_desc msm8976_pcnoc = { 1348 .type = QCOM_ICC_NOC, 1349 .nodes = msm8976_pcnoc_nodes, 1350 .num_nodes = ARRAY_SIZE(msm8976_pcnoc_nodes), 1351 .bus_clk_desc = &bus_0_clk, 1352 .qos_offset = 0x7000, 1353 .keep_alive = true, 1354 .regmap_cfg = &msm8976_pcnoc_regmap_config, 1355}; 1356 1357static struct qcom_icc_node * const msm8976_snoc_nodes[] = { 1358 [MAS_QDSS_BAM] = &mas_qdss_bam, 1359 [MAS_BIMC_SNOC] = &mas_bimc_snoc, 1360 [MAS_PCNOC_SNOC] = &mas_pcnoc_snoc, 1361 [MAS_QDSS_ETR] = &mas_qdss_etr, 1362 [MAS_LPASS_PROC] = &mas_lpass_proc, 1363 [MAS_IPA] = &mas_ipa, 1364 [QDSS_INT] = &qdss_int, 1365 [SNOC_INT_0] = &snoc_int_0, 1366 [SNOC_INT_1] = &snoc_int_1, 1367 [SNOC_INT_2] = &snoc_int_2, 1368 [SLV_KPSS_AHB] = &slv_kpss_ahb, 1369 [SLV_SNOC_BIMC] = &slv_snoc_bimc, 1370 [SLV_IMEM] = &slv_imem, 1371 [SLV_SNOC_PCNOC] = &slv_snoc_pcnoc, 1372 [SLV_QDSS_STM] = &slv_qdss_stm, 1373 [SLV_CATS_0] = &slv_cats_0, 1374 [SLV_CATS_1] = &slv_cats_1, 1375 [SLV_LPASS] = &slv_lpass, 1376}; 1377 1378static const struct regmap_config msm8976_snoc_regmap_config = { 1379 .reg_bits = 32, 1380 .reg_stride = 4, 1381 .val_bits = 32, 1382 .max_register = 0x1A000, 1383 .fast_io = true, 1384}; 1385 1386static const struct qcom_icc_desc msm8976_snoc = { 1387 .type = QCOM_ICC_NOC, 1388 .nodes = msm8976_snoc_nodes, 1389 .num_nodes = ARRAY_SIZE(msm8976_snoc_nodes), 1390 .bus_clk_desc = &bus_1_clk, 1391 .regmap_cfg = &msm8976_snoc_regmap_config, 1392 .qos_offset = 0x7000, 1393}; 1394 1395static struct qcom_icc_node * const msm8976_snoc_mm_nodes[] = { 1396 [MAS_JPEG] = &mas_jpeg, 1397 [MAS_OXILI] = &mas_oxili, 1398 [MAS_MDP0] = &mas_mdp0, 1399 [MAS_MDP1] = &mas_mdp1, 1400 [MAS_VENUS_0] = &mas_venus_0, 1401 [MAS_VENUS_1] = &mas_venus_1, 1402 [MAS_VFE_0] = &mas_vfe_0, 1403 [MAS_VFE_1] = &mas_vfe_1, 1404 [MAS_CPP] = &mas_cpp, 1405 [MM_INT_0] = &mm_int_0, 1406 [SLV_SMMNOC_BIMC] = &slv_smmnoc_bimc, 1407}; 1408 1409static const struct qcom_icc_desc msm8976_snoc_mm = { 1410 .type = QCOM_ICC_NOC, 1411 .nodes = msm8976_snoc_mm_nodes, 1412 .num_nodes = ARRAY_SIZE(msm8976_snoc_mm_nodes), 1413 .bus_clk_desc = &bus_2_clk, 1414 .regmap_cfg = &msm8976_snoc_regmap_config, 1415 .qos_offset = 0x7000, 1416 .ab_coeff = 154, 1417}; 1418 1419static const struct of_device_id msm8976_noc_of_match[] = { 1420 { .compatible = "qcom,msm8976-bimc", .data = &msm8976_bimc }, 1421 { .compatible = "qcom,msm8976-pcnoc", .data = &msm8976_pcnoc }, 1422 { .compatible = "qcom,msm8976-snoc", .data = &msm8976_snoc }, 1423 { .compatible = "qcom,msm8976-snoc-mm", .data = &msm8976_snoc_mm }, 1424 { } 1425}; 1426MODULE_DEVICE_TABLE(of, msm8976_noc_of_match); 1427 1428static struct platform_driver msm8976_noc_driver = { 1429 .probe = qnoc_probe, 1430 .remove = qnoc_remove, 1431 .driver = { 1432 .name = "qnoc-msm8976", 1433 .of_match_table = msm8976_noc_of_match, 1434 .sync_state = icc_sync_state, 1435 }, 1436}; 1437module_platform_driver(msm8976_noc_driver); 1438 1439MODULE_DESCRIPTION("Qualcomm MSM8976 NoC driver"); 1440MODULE_LICENSE("GPL");