Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.4-rc2 2223 lines 54 kB view raw
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (c) 2021, The Linux Foundation. All rights reserved. 4 * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. 5 * Copyright (c) 2022, Linaro Limited 6 * 7 */ 8 9#include <linux/device.h> 10#include <linux/interconnect.h> 11#include <linux/interconnect-provider.h> 12#include <linux/module.h> 13#include <linux/of_platform.h> 14#include <dt-bindings/interconnect/qcom,sm8550-rpmh.h> 15 16#include "bcm-voter.h" 17#include "icc-common.h" 18#include "icc-rpmh.h" 19#include "sm8550.h" 20 21static struct qcom_icc_node qhm_qspi = { 22 .name = "qhm_qspi", 23 .id = SM8550_MASTER_QSPI_0, 24 .channels = 1, 25 .buswidth = 4, 26 .num_links = 1, 27 .links = { SM8550_SLAVE_A1NOC_SNOC }, 28}; 29 30static struct qcom_icc_node qhm_qup1 = { 31 .name = "qhm_qup1", 32 .id = SM8550_MASTER_QUP_1, 33 .channels = 1, 34 .buswidth = 4, 35 .num_links = 1, 36 .links = { SM8550_SLAVE_A1NOC_SNOC }, 37}; 38 39static struct qcom_icc_node xm_sdc4 = { 40 .name = "xm_sdc4", 41 .id = SM8550_MASTER_SDCC_4, 42 .channels = 1, 43 .buswidth = 8, 44 .num_links = 1, 45 .links = { SM8550_SLAVE_A1NOC_SNOC }, 46}; 47 48static struct qcom_icc_node xm_ufs_mem = { 49 .name = "xm_ufs_mem", 50 .id = SM8550_MASTER_UFS_MEM, 51 .channels = 1, 52 .buswidth = 16, 53 .num_links = 1, 54 .links = { SM8550_SLAVE_A1NOC_SNOC }, 55}; 56 57static struct qcom_icc_node xm_usb3_0 = { 58 .name = "xm_usb3_0", 59 .id = SM8550_MASTER_USB3_0, 60 .channels = 1, 61 .buswidth = 8, 62 .num_links = 1, 63 .links = { SM8550_SLAVE_A1NOC_SNOC }, 64}; 65 66static struct qcom_icc_node qhm_qdss_bam = { 67 .name = "qhm_qdss_bam", 68 .id = SM8550_MASTER_QDSS_BAM, 69 .channels = 1, 70 .buswidth = 4, 71 .num_links = 1, 72 .links = { SM8550_SLAVE_A2NOC_SNOC }, 73}; 74 75static struct qcom_icc_node qhm_qup2 = { 76 .name = "qhm_qup2", 77 .id = SM8550_MASTER_QUP_2, 78 .channels = 1, 79 .buswidth = 4, 80 .num_links = 1, 81 .links = { SM8550_SLAVE_A2NOC_SNOC }, 82}; 83 84static struct qcom_icc_node qxm_crypto = { 85 .name = "qxm_crypto", 86 .id = SM8550_MASTER_CRYPTO, 87 .channels = 1, 88 .buswidth = 8, 89 .num_links = 1, 90 .links = { SM8550_SLAVE_A2NOC_SNOC }, 91}; 92 93static struct qcom_icc_node qxm_ipa = { 94 .name = "qxm_ipa", 95 .id = SM8550_MASTER_IPA, 96 .channels = 1, 97 .buswidth = 8, 98 .num_links = 1, 99 .links = { SM8550_SLAVE_A2NOC_SNOC }, 100}; 101 102static struct qcom_icc_node qxm_sp = { 103 .name = "qxm_sp", 104 .id = SM8550_MASTER_SP, 105 .channels = 1, 106 .buswidth = 8, 107 .num_links = 1, 108 .links = { SM8550_SLAVE_A2NOC_SNOC }, 109}; 110 111static struct qcom_icc_node xm_qdss_etr_0 = { 112 .name = "xm_qdss_etr_0", 113 .id = SM8550_MASTER_QDSS_ETR, 114 .channels = 1, 115 .buswidth = 8, 116 .num_links = 1, 117 .links = { SM8550_SLAVE_A2NOC_SNOC }, 118}; 119 120static struct qcom_icc_node xm_qdss_etr_1 = { 121 .name = "xm_qdss_etr_1", 122 .id = SM8550_MASTER_QDSS_ETR_1, 123 .channels = 1, 124 .buswidth = 8, 125 .num_links = 1, 126 .links = { SM8550_SLAVE_A2NOC_SNOC }, 127}; 128 129static struct qcom_icc_node xm_sdc2 = { 130 .name = "xm_sdc2", 131 .id = SM8550_MASTER_SDCC_2, 132 .channels = 1, 133 .buswidth = 8, 134 .num_links = 1, 135 .links = { SM8550_SLAVE_A2NOC_SNOC }, 136}; 137 138static struct qcom_icc_node qup0_core_master = { 139 .name = "qup0_core_master", 140 .id = SM8550_MASTER_QUP_CORE_0, 141 .channels = 1, 142 .buswidth = 4, 143 .num_links = 1, 144 .links = { SM8550_SLAVE_QUP_CORE_0 }, 145}; 146 147static struct qcom_icc_node qup1_core_master = { 148 .name = "qup1_core_master", 149 .id = SM8550_MASTER_QUP_CORE_1, 150 .channels = 1, 151 .buswidth = 4, 152 .num_links = 1, 153 .links = { SM8550_SLAVE_QUP_CORE_1 }, 154}; 155 156static struct qcom_icc_node qup2_core_master = { 157 .name = "qup2_core_master", 158 .id = SM8550_MASTER_QUP_CORE_2, 159 .channels = 1, 160 .buswidth = 4, 161 .num_links = 1, 162 .links = { SM8550_SLAVE_QUP_CORE_2 }, 163}; 164 165static struct qcom_icc_node qsm_cfg = { 166 .name = "qsm_cfg", 167 .id = SM8550_MASTER_CNOC_CFG, 168 .channels = 1, 169 .buswidth = 4, 170 .num_links = 44, 171 .links = { SM8550_SLAVE_AHB2PHY_SOUTH, SM8550_SLAVE_AHB2PHY_NORTH, 172 SM8550_SLAVE_APPSS, SM8550_SLAVE_CAMERA_CFG, 173 SM8550_SLAVE_CLK_CTL, SM8550_SLAVE_RBCPR_CX_CFG, 174 SM8550_SLAVE_RBCPR_MMCX_CFG, SM8550_SLAVE_RBCPR_MXA_CFG, 175 SM8550_SLAVE_RBCPR_MXC_CFG, SM8550_SLAVE_CPR_NSPCX, 176 SM8550_SLAVE_CRYPTO_0_CFG, SM8550_SLAVE_CX_RDPM, 177 SM8550_SLAVE_DISPLAY_CFG, SM8550_SLAVE_GFX3D_CFG, 178 SM8550_SLAVE_I2C, SM8550_SLAVE_IMEM_CFG, 179 SM8550_SLAVE_IPA_CFG, SM8550_SLAVE_IPC_ROUTER_CFG, 180 SM8550_SLAVE_CNOC_MSS, SM8550_SLAVE_MX_RDPM, 181 SM8550_SLAVE_PCIE_0_CFG, SM8550_SLAVE_PCIE_1_CFG, 182 SM8550_SLAVE_PDM, SM8550_SLAVE_PIMEM_CFG, 183 SM8550_SLAVE_PRNG, SM8550_SLAVE_QDSS_CFG, 184 SM8550_SLAVE_QSPI_0, SM8550_SLAVE_QUP_1, 185 SM8550_SLAVE_QUP_2, SM8550_SLAVE_SDCC_2, 186 SM8550_SLAVE_SDCC_4, SM8550_SLAVE_SPSS_CFG, 187 SM8550_SLAVE_TCSR, SM8550_SLAVE_TLMM, 188 SM8550_SLAVE_UFS_MEM_CFG, SM8550_SLAVE_USB3_0, 189 SM8550_SLAVE_VENUS_CFG, SM8550_SLAVE_VSENSE_CTRL_CFG, 190 SM8550_SLAVE_LPASS_QTB_CFG, SM8550_SLAVE_CNOC_MNOC_CFG, 191 SM8550_SLAVE_NSP_QTB_CFG, SM8550_SLAVE_PCIE_ANOC_CFG, 192 SM8550_SLAVE_QDSS_STM, SM8550_SLAVE_TCU }, 193}; 194 195static struct qcom_icc_node qnm_gemnoc_cnoc = { 196 .name = "qnm_gemnoc_cnoc", 197 .id = SM8550_MASTER_GEM_NOC_CNOC, 198 .channels = 1, 199 .buswidth = 16, 200 .num_links = 6, 201 .links = { SM8550_SLAVE_AOSS, SM8550_SLAVE_TME_CFG, 202 SM8550_SLAVE_CNOC_CFG, SM8550_SLAVE_DDRSS_CFG, 203 SM8550_SLAVE_BOOT_IMEM, SM8550_SLAVE_IMEM }, 204}; 205 206static struct qcom_icc_node qnm_gemnoc_pcie = { 207 .name = "qnm_gemnoc_pcie", 208 .id = SM8550_MASTER_GEM_NOC_PCIE_SNOC, 209 .channels = 1, 210 .buswidth = 8, 211 .num_links = 2, 212 .links = { SM8550_SLAVE_PCIE_0, SM8550_SLAVE_PCIE_1 }, 213}; 214 215static struct qcom_icc_node alm_gpu_tcu = { 216 .name = "alm_gpu_tcu", 217 .id = SM8550_MASTER_GPU_TCU, 218 .channels = 1, 219 .buswidth = 8, 220 .num_links = 2, 221 .links = { SM8550_SLAVE_GEM_NOC_CNOC, SM8550_SLAVE_LLCC }, 222}; 223 224static struct qcom_icc_node alm_sys_tcu = { 225 .name = "alm_sys_tcu", 226 .id = SM8550_MASTER_SYS_TCU, 227 .channels = 1, 228 .buswidth = 8, 229 .num_links = 2, 230 .links = { SM8550_SLAVE_GEM_NOC_CNOC, SM8550_SLAVE_LLCC }, 231}; 232 233static struct qcom_icc_node chm_apps = { 234 .name = "chm_apps", 235 .id = SM8550_MASTER_APPSS_PROC, 236 .channels = 3, 237 .buswidth = 32, 238 .num_links = 3, 239 .links = { SM8550_SLAVE_GEM_NOC_CNOC, SM8550_SLAVE_LLCC, 240 SM8550_SLAVE_MEM_NOC_PCIE_SNOC }, 241}; 242 243static struct qcom_icc_node qnm_gpu = { 244 .name = "qnm_gpu", 245 .id = SM8550_MASTER_GFX3D, 246 .channels = 2, 247 .buswidth = 32, 248 .num_links = 2, 249 .links = { SM8550_SLAVE_GEM_NOC_CNOC, SM8550_SLAVE_LLCC }, 250}; 251 252static struct qcom_icc_node qnm_lpass_gemnoc = { 253 .name = "qnm_lpass_gemnoc", 254 .id = SM8550_MASTER_LPASS_GEM_NOC, 255 .channels = 1, 256 .buswidth = 16, 257 .num_links = 3, 258 .links = { SM8550_SLAVE_GEM_NOC_CNOC, SM8550_SLAVE_LLCC, 259 SM8550_SLAVE_MEM_NOC_PCIE_SNOC }, 260}; 261 262static struct qcom_icc_node qnm_mdsp = { 263 .name = "qnm_mdsp", 264 .id = SM8550_MASTER_MSS_PROC, 265 .channels = 1, 266 .buswidth = 16, 267 .num_links = 3, 268 .links = { SM8550_SLAVE_GEM_NOC_CNOC, SM8550_SLAVE_LLCC, 269 SM8550_SLAVE_MEM_NOC_PCIE_SNOC }, 270}; 271 272static struct qcom_icc_node qnm_mnoc_hf = { 273 .name = "qnm_mnoc_hf", 274 .id = SM8550_MASTER_MNOC_HF_MEM_NOC, 275 .channels = 2, 276 .buswidth = 32, 277 .num_links = 2, 278 .links = { SM8550_SLAVE_GEM_NOC_CNOC, SM8550_SLAVE_LLCC }, 279}; 280 281static struct qcom_icc_node qnm_mnoc_sf = { 282 .name = "qnm_mnoc_sf", 283 .id = SM8550_MASTER_MNOC_SF_MEM_NOC, 284 .channels = 2, 285 .buswidth = 32, 286 .num_links = 2, 287 .links = { SM8550_SLAVE_GEM_NOC_CNOC, SM8550_SLAVE_LLCC }, 288}; 289 290static struct qcom_icc_node qnm_nsp_gemnoc = { 291 .name = "qnm_nsp_gemnoc", 292 .id = SM8550_MASTER_COMPUTE_NOC, 293 .channels = 2, 294 .buswidth = 32, 295 .num_links = 2, 296 .links = { SM8550_SLAVE_GEM_NOC_CNOC, SM8550_SLAVE_LLCC }, 297}; 298 299static struct qcom_icc_node qnm_pcie = { 300 .name = "qnm_pcie", 301 .id = SM8550_MASTER_ANOC_PCIE_GEM_NOC, 302 .channels = 1, 303 .buswidth = 16, 304 .num_links = 2, 305 .links = { SM8550_SLAVE_GEM_NOC_CNOC, SM8550_SLAVE_LLCC }, 306}; 307 308static struct qcom_icc_node qnm_snoc_gc = { 309 .name = "qnm_snoc_gc", 310 .id = SM8550_MASTER_SNOC_GC_MEM_NOC, 311 .channels = 1, 312 .buswidth = 8, 313 .num_links = 1, 314 .links = { SM8550_SLAVE_LLCC }, 315}; 316 317static struct qcom_icc_node qnm_snoc_sf = { 318 .name = "qnm_snoc_sf", 319 .id = SM8550_MASTER_SNOC_SF_MEM_NOC, 320 .channels = 1, 321 .buswidth = 16, 322 .num_links = 3, 323 .links = { SM8550_SLAVE_GEM_NOC_CNOC, SM8550_SLAVE_LLCC, 324 SM8550_SLAVE_MEM_NOC_PCIE_SNOC }, 325}; 326 327static struct qcom_icc_node qnm_lpiaon_noc = { 328 .name = "qnm_lpiaon_noc", 329 .id = SM8550_MASTER_LPIAON_NOC, 330 .channels = 1, 331 .buswidth = 16, 332 .num_links = 1, 333 .links = { SM8550_SLAVE_LPASS_GEM_NOC }, 334}; 335 336static struct qcom_icc_node qnm_lpass_lpinoc = { 337 .name = "qnm_lpass_lpinoc", 338 .id = SM8550_MASTER_LPASS_LPINOC, 339 .channels = 1, 340 .buswidth = 16, 341 .num_links = 1, 342 .links = { SM8550_SLAVE_LPIAON_NOC_LPASS_AG_NOC }, 343}; 344 345static struct qcom_icc_node qxm_lpinoc_dsp_axim = { 346 .name = "qxm_lpinoc_dsp_axim", 347 .id = SM8550_MASTER_LPASS_PROC, 348 .channels = 1, 349 .buswidth = 16, 350 .num_links = 1, 351 .links = { SM8550_SLAVE_LPICX_NOC_LPIAON_NOC }, 352}; 353 354static struct qcom_icc_node llcc_mc = { 355 .name = "llcc_mc", 356 .id = SM8550_MASTER_LLCC, 357 .channels = 4, 358 .buswidth = 4, 359 .num_links = 1, 360 .links = { SM8550_SLAVE_EBI1 }, 361}; 362 363static struct qcom_icc_node qnm_camnoc_hf = { 364 .name = "qnm_camnoc_hf", 365 .id = SM8550_MASTER_CAMNOC_HF, 366 .channels = 2, 367 .buswidth = 32, 368 .num_links = 1, 369 .links = { SM8550_SLAVE_MNOC_HF_MEM_NOC }, 370}; 371 372static struct qcom_icc_node qnm_camnoc_icp = { 373 .name = "qnm_camnoc_icp", 374 .id = SM8550_MASTER_CAMNOC_ICP, 375 .channels = 1, 376 .buswidth = 8, 377 .num_links = 1, 378 .links = { SM8550_SLAVE_MNOC_SF_MEM_NOC }, 379}; 380 381static struct qcom_icc_node qnm_camnoc_sf = { 382 .name = "qnm_camnoc_sf", 383 .id = SM8550_MASTER_CAMNOC_SF, 384 .channels = 2, 385 .buswidth = 32, 386 .num_links = 1, 387 .links = { SM8550_SLAVE_MNOC_SF_MEM_NOC }, 388}; 389 390static struct qcom_icc_node qnm_mdp = { 391 .name = "qnm_mdp", 392 .id = SM8550_MASTER_MDP, 393 .channels = 2, 394 .buswidth = 32, 395 .num_links = 1, 396 .links = { SM8550_SLAVE_MNOC_HF_MEM_NOC }, 397}; 398 399static struct qcom_icc_node qnm_vapss_hcp = { 400 .name = "qnm_vapss_hcp", 401 .id = SM8550_MASTER_CDSP_HCP, 402 .channels = 1, 403 .buswidth = 32, 404 .num_links = 1, 405 .links = { SM8550_SLAVE_MNOC_SF_MEM_NOC }, 406}; 407 408static struct qcom_icc_node qnm_video = { 409 .name = "qnm_video", 410 .id = SM8550_MASTER_VIDEO, 411 .channels = 2, 412 .buswidth = 32, 413 .num_links = 1, 414 .links = { SM8550_SLAVE_MNOC_SF_MEM_NOC }, 415}; 416 417static struct qcom_icc_node qnm_video_cv_cpu = { 418 .name = "qnm_video_cv_cpu", 419 .id = SM8550_MASTER_VIDEO_CV_PROC, 420 .channels = 1, 421 .buswidth = 8, 422 .num_links = 1, 423 .links = { SM8550_SLAVE_MNOC_SF_MEM_NOC }, 424}; 425 426static struct qcom_icc_node qnm_video_cvp = { 427 .name = "qnm_video_cvp", 428 .id = SM8550_MASTER_VIDEO_PROC, 429 .channels = 1, 430 .buswidth = 32, 431 .num_links = 1, 432 .links = { SM8550_SLAVE_MNOC_SF_MEM_NOC }, 433}; 434 435static struct qcom_icc_node qnm_video_v_cpu = { 436 .name = "qnm_video_v_cpu", 437 .id = SM8550_MASTER_VIDEO_V_PROC, 438 .channels = 1, 439 .buswidth = 8, 440 .num_links = 1, 441 .links = { SM8550_SLAVE_MNOC_SF_MEM_NOC }, 442}; 443 444static struct qcom_icc_node qsm_mnoc_cfg = { 445 .name = "qsm_mnoc_cfg", 446 .id = SM8550_MASTER_CNOC_MNOC_CFG, 447 .channels = 1, 448 .buswidth = 4, 449 .num_links = 1, 450 .links = { SM8550_SLAVE_SERVICE_MNOC }, 451}; 452 453static struct qcom_icc_node qxm_nsp = { 454 .name = "qxm_nsp", 455 .id = SM8550_MASTER_CDSP_PROC, 456 .channels = 2, 457 .buswidth = 32, 458 .num_links = 1, 459 .links = { SM8550_SLAVE_CDSP_MEM_NOC }, 460}; 461 462static struct qcom_icc_node qsm_pcie_anoc_cfg = { 463 .name = "qsm_pcie_anoc_cfg", 464 .id = SM8550_MASTER_PCIE_ANOC_CFG, 465 .channels = 1, 466 .buswidth = 4, 467 .num_links = 1, 468 .links = { SM8550_SLAVE_SERVICE_PCIE_ANOC }, 469}; 470 471static struct qcom_icc_node xm_pcie3_0 = { 472 .name = "xm_pcie3_0", 473 .id = SM8550_MASTER_PCIE_0, 474 .channels = 1, 475 .buswidth = 8, 476 .num_links = 1, 477 .links = { SM8550_SLAVE_ANOC_PCIE_GEM_NOC }, 478}; 479 480static struct qcom_icc_node xm_pcie3_1 = { 481 .name = "xm_pcie3_1", 482 .id = SM8550_MASTER_PCIE_1, 483 .channels = 1, 484 .buswidth = 16, 485 .num_links = 1, 486 .links = { SM8550_SLAVE_ANOC_PCIE_GEM_NOC }, 487}; 488 489static struct qcom_icc_node qhm_gic = { 490 .name = "qhm_gic", 491 .id = SM8550_MASTER_GIC_AHB, 492 .channels = 1, 493 .buswidth = 4, 494 .num_links = 1, 495 .links = { SM8550_SLAVE_SNOC_GEM_NOC_SF }, 496}; 497 498static struct qcom_icc_node qnm_aggre1_noc = { 499 .name = "qnm_aggre1_noc", 500 .id = SM8550_MASTER_A1NOC_SNOC, 501 .channels = 1, 502 .buswidth = 16, 503 .num_links = 1, 504 .links = { SM8550_SLAVE_SNOC_GEM_NOC_SF }, 505}; 506 507static struct qcom_icc_node qnm_aggre2_noc = { 508 .name = "qnm_aggre2_noc", 509 .id = SM8550_MASTER_A2NOC_SNOC, 510 .channels = 1, 511 .buswidth = 16, 512 .num_links = 1, 513 .links = { SM8550_SLAVE_SNOC_GEM_NOC_SF }, 514}; 515 516static struct qcom_icc_node xm_gic = { 517 .name = "xm_gic", 518 .id = SM8550_MASTER_GIC, 519 .channels = 1, 520 .buswidth = 8, 521 .num_links = 1, 522 .links = { SM8550_SLAVE_SNOC_GEM_NOC_GC }, 523}; 524 525static struct qcom_icc_node qnm_mnoc_hf_disp = { 526 .name = "qnm_mnoc_hf_disp", 527 .id = SM8550_MASTER_MNOC_HF_MEM_NOC_DISP, 528 .channels = 2, 529 .buswidth = 32, 530 .num_links = 1, 531 .links = { SM8550_SLAVE_LLCC_DISP }, 532}; 533 534static struct qcom_icc_node qnm_pcie_disp = { 535 .name = "qnm_pcie_disp", 536 .id = SM8550_MASTER_ANOC_PCIE_GEM_NOC_DISP, 537 .channels = 1, 538 .buswidth = 16, 539 .num_links = 1, 540 .links = { SM8550_SLAVE_LLCC_DISP }, 541}; 542 543static struct qcom_icc_node llcc_mc_disp = { 544 .name = "llcc_mc_disp", 545 .id = SM8550_MASTER_LLCC_DISP, 546 .channels = 4, 547 .buswidth = 4, 548 .num_links = 1, 549 .links = { SM8550_SLAVE_EBI1_DISP }, 550}; 551 552static struct qcom_icc_node qnm_mdp_disp = { 553 .name = "qnm_mdp_disp", 554 .id = SM8550_MASTER_MDP_DISP, 555 .channels = 2, 556 .buswidth = 32, 557 .num_links = 1, 558 .links = { SM8550_SLAVE_MNOC_HF_MEM_NOC_DISP }, 559}; 560 561static struct qcom_icc_node qnm_mnoc_hf_cam_ife_0 = { 562 .name = "qnm_mnoc_hf_cam_ife_0", 563 .id = SM8550_MASTER_MNOC_HF_MEM_NOC_CAM_IFE_0, 564 .channels = 2, 565 .buswidth = 32, 566 .num_links = 1, 567 .links = { SM8550_SLAVE_LLCC_CAM_IFE_0 }, 568}; 569 570static struct qcom_icc_node qnm_mnoc_sf_cam_ife_0 = { 571 .name = "qnm_mnoc_sf_cam_ife_0", 572 .id = SM8550_MASTER_MNOC_SF_MEM_NOC_CAM_IFE_0, 573 .channels = 2, 574 .buswidth = 32, 575 .num_links = 1, 576 .links = { SM8550_SLAVE_LLCC_CAM_IFE_0 }, 577}; 578 579static struct qcom_icc_node qnm_pcie_cam_ife_0 = { 580 .name = "qnm_pcie_cam_ife_0", 581 .id = SM8550_MASTER_ANOC_PCIE_GEM_NOC_CAM_IFE_0, 582 .channels = 1, 583 .buswidth = 16, 584 .num_links = 1, 585 .links = { SM8550_SLAVE_LLCC_CAM_IFE_0 }, 586}; 587 588static struct qcom_icc_node llcc_mc_cam_ife_0 = { 589 .name = "llcc_mc_cam_ife_0", 590 .id = SM8550_MASTER_LLCC_CAM_IFE_0, 591 .channels = 4, 592 .buswidth = 4, 593 .num_links = 1, 594 .links = { SM8550_SLAVE_EBI1_CAM_IFE_0 }, 595}; 596 597static struct qcom_icc_node qnm_camnoc_hf_cam_ife_0 = { 598 .name = "qnm_camnoc_hf_cam_ife_0", 599 .id = SM8550_MASTER_CAMNOC_HF_CAM_IFE_0, 600 .channels = 2, 601 .buswidth = 32, 602 .num_links = 1, 603 .links = { SM8550_SLAVE_MNOC_HF_MEM_NOC_CAM_IFE_0 }, 604}; 605 606static struct qcom_icc_node qnm_camnoc_icp_cam_ife_0 = { 607 .name = "qnm_camnoc_icp_cam_ife_0", 608 .id = SM8550_MASTER_CAMNOC_ICP_CAM_IFE_0, 609 .channels = 1, 610 .buswidth = 8, 611 .num_links = 1, 612 .links = { SM8550_SLAVE_MNOC_SF_MEM_NOC_CAM_IFE_0 }, 613}; 614 615static struct qcom_icc_node qnm_camnoc_sf_cam_ife_0 = { 616 .name = "qnm_camnoc_sf_cam_ife_0", 617 .id = SM8550_MASTER_CAMNOC_SF_CAM_IFE_0, 618 .channels = 2, 619 .buswidth = 32, 620 .num_links = 1, 621 .links = { SM8550_SLAVE_MNOC_SF_MEM_NOC_CAM_IFE_0 }, 622}; 623 624static struct qcom_icc_node qnm_mnoc_hf_cam_ife_1 = { 625 .name = "qnm_mnoc_hf_cam_ife_1", 626 .id = SM8550_MASTER_MNOC_HF_MEM_NOC_CAM_IFE_1, 627 .channels = 2, 628 .buswidth = 32, 629 .num_links = 1, 630 .links = { SM8550_SLAVE_LLCC_CAM_IFE_1 }, 631}; 632 633static struct qcom_icc_node qnm_mnoc_sf_cam_ife_1 = { 634 .name = "qnm_mnoc_sf_cam_ife_1", 635 .id = SM8550_MASTER_MNOC_SF_MEM_NOC_CAM_IFE_1, 636 .channels = 2, 637 .buswidth = 32, 638 .num_links = 1, 639 .links = { SM8550_SLAVE_LLCC_CAM_IFE_1 }, 640}; 641 642static struct qcom_icc_node qnm_pcie_cam_ife_1 = { 643 .name = "qnm_pcie_cam_ife_1", 644 .id = SM8550_MASTER_ANOC_PCIE_GEM_NOC_CAM_IFE_1, 645 .channels = 1, 646 .buswidth = 16, 647 .num_links = 1, 648 .links = { SM8550_SLAVE_LLCC_CAM_IFE_1 }, 649}; 650 651static struct qcom_icc_node llcc_mc_cam_ife_1 = { 652 .name = "llcc_mc_cam_ife_1", 653 .id = SM8550_MASTER_LLCC_CAM_IFE_1, 654 .channels = 4, 655 .buswidth = 4, 656 .num_links = 1, 657 .links = { SM8550_SLAVE_EBI1_CAM_IFE_1 }, 658}; 659 660static struct qcom_icc_node qnm_camnoc_hf_cam_ife_1 = { 661 .name = "qnm_camnoc_hf_cam_ife_1", 662 .id = SM8550_MASTER_CAMNOC_HF_CAM_IFE_1, 663 .channels = 2, 664 .buswidth = 32, 665 .num_links = 1, 666 .links = { SM8550_SLAVE_MNOC_HF_MEM_NOC_CAM_IFE_1 }, 667}; 668 669static struct qcom_icc_node qnm_camnoc_icp_cam_ife_1 = { 670 .name = "qnm_camnoc_icp_cam_ife_1", 671 .id = SM8550_MASTER_CAMNOC_ICP_CAM_IFE_1, 672 .channels = 1, 673 .buswidth = 8, 674 .num_links = 1, 675 .links = { SM8550_SLAVE_MNOC_SF_MEM_NOC_CAM_IFE_1 }, 676}; 677 678static struct qcom_icc_node qnm_camnoc_sf_cam_ife_1 = { 679 .name = "qnm_camnoc_sf_cam_ife_1", 680 .id = SM8550_MASTER_CAMNOC_SF_CAM_IFE_1, 681 .channels = 2, 682 .buswidth = 32, 683 .num_links = 1, 684 .links = { SM8550_SLAVE_MNOC_SF_MEM_NOC_CAM_IFE_1 }, 685}; 686 687static struct qcom_icc_node qnm_mnoc_hf_cam_ife_2 = { 688 .name = "qnm_mnoc_hf_cam_ife_2", 689 .id = SM8550_MASTER_MNOC_HF_MEM_NOC_CAM_IFE_2, 690 .channels = 2, 691 .buswidth = 32, 692 .num_links = 1, 693 .links = { SM8550_SLAVE_LLCC_CAM_IFE_2 }, 694}; 695 696static struct qcom_icc_node qnm_mnoc_sf_cam_ife_2 = { 697 .name = "qnm_mnoc_sf_cam_ife_2", 698 .id = SM8550_MASTER_MNOC_SF_MEM_NOC_CAM_IFE_2, 699 .channels = 2, 700 .buswidth = 32, 701 .num_links = 1, 702 .links = { SM8550_SLAVE_LLCC_CAM_IFE_2 }, 703}; 704 705static struct qcom_icc_node qnm_pcie_cam_ife_2 = { 706 .name = "qnm_pcie_cam_ife_2", 707 .id = SM8550_MASTER_ANOC_PCIE_GEM_NOC_CAM_IFE_2, 708 .channels = 1, 709 .buswidth = 16, 710 .num_links = 1, 711 .links = { SM8550_SLAVE_LLCC_CAM_IFE_2 }, 712}; 713 714static struct qcom_icc_node llcc_mc_cam_ife_2 = { 715 .name = "llcc_mc_cam_ife_2", 716 .id = SM8550_MASTER_LLCC_CAM_IFE_2, 717 .channels = 4, 718 .buswidth = 4, 719 .num_links = 1, 720 .links = { SM8550_SLAVE_EBI1_CAM_IFE_2 }, 721}; 722 723static struct qcom_icc_node qnm_camnoc_hf_cam_ife_2 = { 724 .name = "qnm_camnoc_hf_cam_ife_2", 725 .id = SM8550_MASTER_CAMNOC_HF_CAM_IFE_2, 726 .channels = 2, 727 .buswidth = 32, 728 .num_links = 1, 729 .links = { SM8550_SLAVE_MNOC_HF_MEM_NOC_CAM_IFE_2 }, 730}; 731 732static struct qcom_icc_node qnm_camnoc_icp_cam_ife_2 = { 733 .name = "qnm_camnoc_icp_cam_ife_2", 734 .id = SM8550_MASTER_CAMNOC_ICP_CAM_IFE_2, 735 .channels = 1, 736 .buswidth = 8, 737 .num_links = 1, 738 .links = { SM8550_SLAVE_MNOC_SF_MEM_NOC_CAM_IFE_2 }, 739}; 740 741static struct qcom_icc_node qnm_camnoc_sf_cam_ife_2 = { 742 .name = "qnm_camnoc_sf_cam_ife_2", 743 .id = SM8550_MASTER_CAMNOC_SF_CAM_IFE_2, 744 .channels = 2, 745 .buswidth = 32, 746 .num_links = 1, 747 .links = { SM8550_SLAVE_MNOC_SF_MEM_NOC_CAM_IFE_2 }, 748}; 749 750static struct qcom_icc_node qns_a1noc_snoc = { 751 .name = "qns_a1noc_snoc", 752 .id = SM8550_SLAVE_A1NOC_SNOC, 753 .channels = 1, 754 .buswidth = 16, 755 .num_links = 1, 756 .links = { SM8550_MASTER_A1NOC_SNOC }, 757}; 758 759static struct qcom_icc_node qns_a2noc_snoc = { 760 .name = "qns_a2noc_snoc", 761 .id = SM8550_SLAVE_A2NOC_SNOC, 762 .channels = 1, 763 .buswidth = 16, 764 .num_links = 1, 765 .links = { SM8550_MASTER_A2NOC_SNOC }, 766}; 767 768static struct qcom_icc_node qup0_core_slave = { 769 .name = "qup0_core_slave", 770 .id = SM8550_SLAVE_QUP_CORE_0, 771 .channels = 1, 772 .buswidth = 4, 773 .num_links = 0, 774}; 775 776static struct qcom_icc_node qup1_core_slave = { 777 .name = "qup1_core_slave", 778 .id = SM8550_SLAVE_QUP_CORE_1, 779 .channels = 1, 780 .buswidth = 4, 781 .num_links = 0, 782}; 783 784static struct qcom_icc_node qup2_core_slave = { 785 .name = "qup2_core_slave", 786 .id = SM8550_SLAVE_QUP_CORE_2, 787 .channels = 1, 788 .buswidth = 4, 789 .num_links = 0, 790}; 791 792static struct qcom_icc_node qhs_ahb2phy0 = { 793 .name = "qhs_ahb2phy0", 794 .id = SM8550_SLAVE_AHB2PHY_SOUTH, 795 .channels = 1, 796 .buswidth = 4, 797 .num_links = 0, 798}; 799 800static struct qcom_icc_node qhs_ahb2phy1 = { 801 .name = "qhs_ahb2phy1", 802 .id = SM8550_SLAVE_AHB2PHY_NORTH, 803 .channels = 1, 804 .buswidth = 4, 805 .num_links = 0, 806}; 807 808static struct qcom_icc_node qhs_apss = { 809 .name = "qhs_apss", 810 .id = SM8550_SLAVE_APPSS, 811 .channels = 1, 812 .buswidth = 8, 813 .num_links = 0, 814}; 815 816static struct qcom_icc_node qhs_camera_cfg = { 817 .name = "qhs_camera_cfg", 818 .id = SM8550_SLAVE_CAMERA_CFG, 819 .channels = 1, 820 .buswidth = 4, 821 .num_links = 0, 822}; 823 824static struct qcom_icc_node qhs_clk_ctl = { 825 .name = "qhs_clk_ctl", 826 .id = SM8550_SLAVE_CLK_CTL, 827 .channels = 1, 828 .buswidth = 4, 829 .num_links = 0, 830}; 831 832static struct qcom_icc_node qhs_cpr_cx = { 833 .name = "qhs_cpr_cx", 834 .id = SM8550_SLAVE_RBCPR_CX_CFG, 835 .channels = 1, 836 .buswidth = 4, 837 .num_links = 0, 838}; 839 840static struct qcom_icc_node qhs_cpr_mmcx = { 841 .name = "qhs_cpr_mmcx", 842 .id = SM8550_SLAVE_RBCPR_MMCX_CFG, 843 .channels = 1, 844 .buswidth = 4, 845 .num_links = 0, 846}; 847 848static struct qcom_icc_node qhs_cpr_mxa = { 849 .name = "qhs_cpr_mxa", 850 .id = SM8550_SLAVE_RBCPR_MXA_CFG, 851 .channels = 1, 852 .buswidth = 4, 853 .num_links = 0, 854}; 855 856static struct qcom_icc_node qhs_cpr_mxc = { 857 .name = "qhs_cpr_mxc", 858 .id = SM8550_SLAVE_RBCPR_MXC_CFG, 859 .channels = 1, 860 .buswidth = 4, 861 .num_links = 0, 862}; 863 864static struct qcom_icc_node qhs_cpr_nspcx = { 865 .name = "qhs_cpr_nspcx", 866 .id = SM8550_SLAVE_CPR_NSPCX, 867 .channels = 1, 868 .buswidth = 4, 869 .num_links = 0, 870}; 871 872static struct qcom_icc_node qhs_crypto0_cfg = { 873 .name = "qhs_crypto0_cfg", 874 .id = SM8550_SLAVE_CRYPTO_0_CFG, 875 .channels = 1, 876 .buswidth = 4, 877 .num_links = 0, 878}; 879 880static struct qcom_icc_node qhs_cx_rdpm = { 881 .name = "qhs_cx_rdpm", 882 .id = SM8550_SLAVE_CX_RDPM, 883 .channels = 1, 884 .buswidth = 4, 885 .num_links = 0, 886}; 887 888static struct qcom_icc_node qhs_display_cfg = { 889 .name = "qhs_display_cfg", 890 .id = SM8550_SLAVE_DISPLAY_CFG, 891 .channels = 1, 892 .buswidth = 4, 893 .num_links = 0, 894}; 895 896static struct qcom_icc_node qhs_gpuss_cfg = { 897 .name = "qhs_gpuss_cfg", 898 .id = SM8550_SLAVE_GFX3D_CFG, 899 .channels = 1, 900 .buswidth = 8, 901 .num_links = 0, 902}; 903 904static struct qcom_icc_node qhs_i2c = { 905 .name = "qhs_i2c", 906 .id = SM8550_SLAVE_I2C, 907 .channels = 1, 908 .buswidth = 4, 909 .num_links = 0, 910}; 911 912static struct qcom_icc_node qhs_imem_cfg = { 913 .name = "qhs_imem_cfg", 914 .id = SM8550_SLAVE_IMEM_CFG, 915 .channels = 1, 916 .buswidth = 4, 917 .num_links = 0, 918}; 919 920static struct qcom_icc_node qhs_ipa = { 921 .name = "qhs_ipa", 922 .id = SM8550_SLAVE_IPA_CFG, 923 .channels = 1, 924 .buswidth = 4, 925 .num_links = 0, 926}; 927 928static struct qcom_icc_node qhs_ipc_router = { 929 .name = "qhs_ipc_router", 930 .id = SM8550_SLAVE_IPC_ROUTER_CFG, 931 .channels = 1, 932 .buswidth = 4, 933 .num_links = 0, 934}; 935 936static struct qcom_icc_node qhs_mss_cfg = { 937 .name = "qhs_mss_cfg", 938 .id = SM8550_SLAVE_CNOC_MSS, 939 .channels = 1, 940 .buswidth = 4, 941 .num_links = 0, 942}; 943 944static struct qcom_icc_node qhs_mx_rdpm = { 945 .name = "qhs_mx_rdpm", 946 .id = SM8550_SLAVE_MX_RDPM, 947 .channels = 1, 948 .buswidth = 4, 949 .num_links = 0, 950}; 951 952static struct qcom_icc_node qhs_pcie0_cfg = { 953 .name = "qhs_pcie0_cfg", 954 .id = SM8550_SLAVE_PCIE_0_CFG, 955 .channels = 1, 956 .buswidth = 4, 957 .num_links = 0, 958}; 959 960static struct qcom_icc_node qhs_pcie1_cfg = { 961 .name = "qhs_pcie1_cfg", 962 .id = SM8550_SLAVE_PCIE_1_CFG, 963 .channels = 1, 964 .buswidth = 4, 965 .num_links = 0, 966}; 967 968static struct qcom_icc_node qhs_pdm = { 969 .name = "qhs_pdm", 970 .id = SM8550_SLAVE_PDM, 971 .channels = 1, 972 .buswidth = 4, 973 .num_links = 0, 974}; 975 976static struct qcom_icc_node qhs_pimem_cfg = { 977 .name = "qhs_pimem_cfg", 978 .id = SM8550_SLAVE_PIMEM_CFG, 979 .channels = 1, 980 .buswidth = 4, 981 .num_links = 0, 982}; 983 984static struct qcom_icc_node qhs_prng = { 985 .name = "qhs_prng", 986 .id = SM8550_SLAVE_PRNG, 987 .channels = 1, 988 .buswidth = 4, 989 .num_links = 0, 990}; 991 992static struct qcom_icc_node qhs_qdss_cfg = { 993 .name = "qhs_qdss_cfg", 994 .id = SM8550_SLAVE_QDSS_CFG, 995 .channels = 1, 996 .buswidth = 4, 997 .num_links = 0, 998}; 999 1000static struct qcom_icc_node qhs_qspi = { 1001 .name = "qhs_qspi", 1002 .id = SM8550_SLAVE_QSPI_0, 1003 .channels = 1, 1004 .buswidth = 4, 1005 .num_links = 0, 1006}; 1007 1008static struct qcom_icc_node qhs_qup1 = { 1009 .name = "qhs_qup1", 1010 .id = SM8550_SLAVE_QUP_1, 1011 .channels = 1, 1012 .buswidth = 4, 1013 .num_links = 0, 1014}; 1015 1016static struct qcom_icc_node qhs_qup2 = { 1017 .name = "qhs_qup2", 1018 .id = SM8550_SLAVE_QUP_2, 1019 .channels = 1, 1020 .buswidth = 4, 1021 .num_links = 0, 1022}; 1023 1024static struct qcom_icc_node qhs_sdc2 = { 1025 .name = "qhs_sdc2", 1026 .id = SM8550_SLAVE_SDCC_2, 1027 .channels = 1, 1028 .buswidth = 4, 1029 .num_links = 0, 1030}; 1031 1032static struct qcom_icc_node qhs_sdc4 = { 1033 .name = "qhs_sdc4", 1034 .id = SM8550_SLAVE_SDCC_4, 1035 .channels = 1, 1036 .buswidth = 4, 1037 .num_links = 0, 1038}; 1039 1040static struct qcom_icc_node qhs_spss_cfg = { 1041 .name = "qhs_spss_cfg", 1042 .id = SM8550_SLAVE_SPSS_CFG, 1043 .channels = 1, 1044 .buswidth = 4, 1045 .num_links = 0, 1046}; 1047 1048static struct qcom_icc_node qhs_tcsr = { 1049 .name = "qhs_tcsr", 1050 .id = SM8550_SLAVE_TCSR, 1051 .channels = 1, 1052 .buswidth = 4, 1053 .num_links = 0, 1054}; 1055 1056static struct qcom_icc_node qhs_tlmm = { 1057 .name = "qhs_tlmm", 1058 .id = SM8550_SLAVE_TLMM, 1059 .channels = 1, 1060 .buswidth = 4, 1061 .num_links = 0, 1062}; 1063 1064static struct qcom_icc_node qhs_ufs_mem_cfg = { 1065 .name = "qhs_ufs_mem_cfg", 1066 .id = SM8550_SLAVE_UFS_MEM_CFG, 1067 .channels = 1, 1068 .buswidth = 4, 1069 .num_links = 0, 1070}; 1071 1072static struct qcom_icc_node qhs_usb3_0 = { 1073 .name = "qhs_usb3_0", 1074 .id = SM8550_SLAVE_USB3_0, 1075 .channels = 1, 1076 .buswidth = 4, 1077 .num_links = 0, 1078}; 1079 1080static struct qcom_icc_node qhs_venus_cfg = { 1081 .name = "qhs_venus_cfg", 1082 .id = SM8550_SLAVE_VENUS_CFG, 1083 .channels = 1, 1084 .buswidth = 4, 1085 .num_links = 0, 1086}; 1087 1088static struct qcom_icc_node qhs_vsense_ctrl_cfg = { 1089 .name = "qhs_vsense_ctrl_cfg", 1090 .id = SM8550_SLAVE_VSENSE_CTRL_CFG, 1091 .channels = 1, 1092 .buswidth = 4, 1093 .num_links = 0, 1094}; 1095 1096static struct qcom_icc_node qss_lpass_qtb_cfg = { 1097 .name = "qss_lpass_qtb_cfg", 1098 .id = SM8550_SLAVE_LPASS_QTB_CFG, 1099 .channels = 1, 1100 .buswidth = 4, 1101 .num_links = 0, 1102}; 1103 1104static struct qcom_icc_node qss_mnoc_cfg = { 1105 .name = "qss_mnoc_cfg", 1106 .id = SM8550_SLAVE_CNOC_MNOC_CFG, 1107 .channels = 1, 1108 .buswidth = 4, 1109 .num_links = 1, 1110 .links = { SM8550_MASTER_CNOC_MNOC_CFG }, 1111}; 1112 1113static struct qcom_icc_node qss_nsp_qtb_cfg = { 1114 .name = "qss_nsp_qtb_cfg", 1115 .id = SM8550_SLAVE_NSP_QTB_CFG, 1116 .channels = 1, 1117 .buswidth = 4, 1118 .num_links = 0, 1119}; 1120 1121static struct qcom_icc_node qss_pcie_anoc_cfg = { 1122 .name = "qss_pcie_anoc_cfg", 1123 .id = SM8550_SLAVE_PCIE_ANOC_CFG, 1124 .channels = 1, 1125 .buswidth = 4, 1126 .num_links = 1, 1127 .links = { SM8550_MASTER_PCIE_ANOC_CFG }, 1128}; 1129 1130static struct qcom_icc_node xs_qdss_stm = { 1131 .name = "xs_qdss_stm", 1132 .id = SM8550_SLAVE_QDSS_STM, 1133 .channels = 1, 1134 .buswidth = 4, 1135 .num_links = 0, 1136}; 1137 1138static struct qcom_icc_node xs_sys_tcu_cfg = { 1139 .name = "xs_sys_tcu_cfg", 1140 .id = SM8550_SLAVE_TCU, 1141 .channels = 1, 1142 .buswidth = 8, 1143 .num_links = 0, 1144}; 1145 1146static struct qcom_icc_node qhs_aoss = { 1147 .name = "qhs_aoss", 1148 .id = SM8550_SLAVE_AOSS, 1149 .channels = 1, 1150 .buswidth = 4, 1151 .num_links = 0, 1152}; 1153 1154static struct qcom_icc_node qhs_tme_cfg = { 1155 .name = "qhs_tme_cfg", 1156 .id = SM8550_SLAVE_TME_CFG, 1157 .channels = 1, 1158 .buswidth = 4, 1159 .num_links = 0, 1160}; 1161 1162static struct qcom_icc_node qss_cfg = { 1163 .name = "qss_cfg", 1164 .id = SM8550_SLAVE_CNOC_CFG, 1165 .channels = 1, 1166 .buswidth = 4, 1167 .num_links = 1, 1168 .links = { SM8550_MASTER_CNOC_CFG }, 1169}; 1170 1171static struct qcom_icc_node qss_ddrss_cfg = { 1172 .name = "qss_ddrss_cfg", 1173 .id = SM8550_SLAVE_DDRSS_CFG, 1174 .channels = 1, 1175 .buswidth = 4, 1176 .num_links = 0, 1177}; 1178 1179static struct qcom_icc_node qxs_boot_imem = { 1180 .name = "qxs_boot_imem", 1181 .id = SM8550_SLAVE_BOOT_IMEM, 1182 .channels = 1, 1183 .buswidth = 8, 1184 .num_links = 0, 1185}; 1186 1187static struct qcom_icc_node qxs_imem = { 1188 .name = "qxs_imem", 1189 .id = SM8550_SLAVE_IMEM, 1190 .channels = 1, 1191 .buswidth = 8, 1192 .num_links = 0, 1193}; 1194 1195static struct qcom_icc_node xs_pcie_0 = { 1196 .name = "xs_pcie_0", 1197 .id = SM8550_SLAVE_PCIE_0, 1198 .channels = 1, 1199 .buswidth = 8, 1200 .num_links = 0, 1201}; 1202 1203static struct qcom_icc_node xs_pcie_1 = { 1204 .name = "xs_pcie_1", 1205 .id = SM8550_SLAVE_PCIE_1, 1206 .channels = 1, 1207 .buswidth = 16, 1208 .num_links = 0, 1209}; 1210 1211static struct qcom_icc_node qns_gem_noc_cnoc = { 1212 .name = "qns_gem_noc_cnoc", 1213 .id = SM8550_SLAVE_GEM_NOC_CNOC, 1214 .channels = 1, 1215 .buswidth = 16, 1216 .num_links = 1, 1217 .links = { SM8550_MASTER_GEM_NOC_CNOC }, 1218}; 1219 1220static struct qcom_icc_node qns_llcc = { 1221 .name = "qns_llcc", 1222 .id = SM8550_SLAVE_LLCC, 1223 .channels = 4, 1224 .buswidth = 16, 1225 .num_links = 1, 1226 .links = { SM8550_MASTER_LLCC }, 1227}; 1228 1229static struct qcom_icc_node qns_pcie = { 1230 .name = "qns_pcie", 1231 .id = SM8550_SLAVE_MEM_NOC_PCIE_SNOC, 1232 .channels = 1, 1233 .buswidth = 8, 1234 .num_links = 1, 1235 .links = { SM8550_MASTER_GEM_NOC_PCIE_SNOC }, 1236}; 1237 1238static struct qcom_icc_node qns_lpass_ag_noc_gemnoc = { 1239 .name = "qns_lpass_ag_noc_gemnoc", 1240 .id = SM8550_SLAVE_LPASS_GEM_NOC, 1241 .channels = 1, 1242 .buswidth = 16, 1243 .num_links = 1, 1244 .links = { SM8550_MASTER_LPASS_GEM_NOC }, 1245}; 1246 1247static struct qcom_icc_node qns_lpass_aggnoc = { 1248 .name = "qns_lpass_aggnoc", 1249 .id = SM8550_SLAVE_LPIAON_NOC_LPASS_AG_NOC, 1250 .channels = 1, 1251 .buswidth = 16, 1252 .num_links = 1, 1253 .links = { SM8550_MASTER_LPIAON_NOC }, 1254}; 1255 1256static struct qcom_icc_node qns_lpi_aon_noc = { 1257 .name = "qns_lpi_aon_noc", 1258 .id = SM8550_SLAVE_LPICX_NOC_LPIAON_NOC, 1259 .channels = 1, 1260 .buswidth = 16, 1261 .num_links = 1, 1262 .links = { SM8550_MASTER_LPASS_LPINOC }, 1263}; 1264 1265static struct qcom_icc_node ebi = { 1266 .name = "ebi", 1267 .id = SM8550_SLAVE_EBI1, 1268 .channels = 4, 1269 .buswidth = 4, 1270 .num_links = 0, 1271}; 1272 1273static struct qcom_icc_node qns_mem_noc_hf = { 1274 .name = "qns_mem_noc_hf", 1275 .id = SM8550_SLAVE_MNOC_HF_MEM_NOC, 1276 .channels = 2, 1277 .buswidth = 32, 1278 .num_links = 1, 1279 .links = { SM8550_MASTER_MNOC_HF_MEM_NOC }, 1280}; 1281 1282static struct qcom_icc_node qns_mem_noc_sf = { 1283 .name = "qns_mem_noc_sf", 1284 .id = SM8550_SLAVE_MNOC_SF_MEM_NOC, 1285 .channels = 2, 1286 .buswidth = 32, 1287 .num_links = 1, 1288 .links = { SM8550_MASTER_MNOC_SF_MEM_NOC }, 1289}; 1290 1291static struct qcom_icc_node srvc_mnoc = { 1292 .name = "srvc_mnoc", 1293 .id = SM8550_SLAVE_SERVICE_MNOC, 1294 .channels = 1, 1295 .buswidth = 4, 1296 .num_links = 0, 1297}; 1298 1299static struct qcom_icc_node qns_nsp_gemnoc = { 1300 .name = "qns_nsp_gemnoc", 1301 .id = SM8550_SLAVE_CDSP_MEM_NOC, 1302 .channels = 2, 1303 .buswidth = 32, 1304 .num_links = 1, 1305 .links = { SM8550_MASTER_COMPUTE_NOC }, 1306}; 1307 1308static struct qcom_icc_node qns_pcie_mem_noc = { 1309 .name = "qns_pcie_mem_noc", 1310 .id = SM8550_SLAVE_ANOC_PCIE_GEM_NOC, 1311 .channels = 1, 1312 .buswidth = 16, 1313 .num_links = 1, 1314 .links = { SM8550_MASTER_ANOC_PCIE_GEM_NOC }, 1315}; 1316 1317static struct qcom_icc_node srvc_pcie_aggre_noc = { 1318 .name = "srvc_pcie_aggre_noc", 1319 .id = SM8550_SLAVE_SERVICE_PCIE_ANOC, 1320 .channels = 1, 1321 .buswidth = 4, 1322 .num_links = 0, 1323}; 1324 1325static struct qcom_icc_node qns_gemnoc_gc = { 1326 .name = "qns_gemnoc_gc", 1327 .id = SM8550_SLAVE_SNOC_GEM_NOC_GC, 1328 .channels = 1, 1329 .buswidth = 8, 1330 .num_links = 1, 1331 .links = { SM8550_MASTER_SNOC_GC_MEM_NOC }, 1332}; 1333 1334static struct qcom_icc_node qns_gemnoc_sf = { 1335 .name = "qns_gemnoc_sf", 1336 .id = SM8550_SLAVE_SNOC_GEM_NOC_SF, 1337 .channels = 1, 1338 .buswidth = 16, 1339 .num_links = 1, 1340 .links = { SM8550_MASTER_SNOC_SF_MEM_NOC }, 1341}; 1342 1343static struct qcom_icc_node qns_llcc_disp = { 1344 .name = "qns_llcc_disp", 1345 .id = SM8550_SLAVE_LLCC_DISP, 1346 .channels = 4, 1347 .buswidth = 16, 1348 .num_links = 1, 1349 .links = { SM8550_MASTER_LLCC_DISP }, 1350}; 1351 1352static struct qcom_icc_node ebi_disp = { 1353 .name = "ebi_disp", 1354 .id = SM8550_SLAVE_EBI1_DISP, 1355 .channels = 4, 1356 .buswidth = 4, 1357 .num_links = 0, 1358}; 1359 1360static struct qcom_icc_node qns_mem_noc_hf_disp = { 1361 .name = "qns_mem_noc_hf_disp", 1362 .id = SM8550_SLAVE_MNOC_HF_MEM_NOC_DISP, 1363 .channels = 2, 1364 .buswidth = 32, 1365 .num_links = 1, 1366 .links = { SM8550_MASTER_MNOC_HF_MEM_NOC_DISP }, 1367}; 1368 1369static struct qcom_icc_node qns_llcc_cam_ife_0 = { 1370 .name = "qns_llcc_cam_ife_0", 1371 .id = SM8550_SLAVE_LLCC_CAM_IFE_0, 1372 .channels = 4, 1373 .buswidth = 16, 1374 .num_links = 1, 1375 .links = { SM8550_MASTER_LLCC_CAM_IFE_0 }, 1376}; 1377 1378static struct qcom_icc_node ebi_cam_ife_0 = { 1379 .name = "ebi_cam_ife_0", 1380 .id = SM8550_SLAVE_EBI1_CAM_IFE_0, 1381 .channels = 4, 1382 .buswidth = 4, 1383 .num_links = 0, 1384}; 1385 1386static struct qcom_icc_node qns_mem_noc_hf_cam_ife_0 = { 1387 .name = "qns_mem_noc_hf_cam_ife_0", 1388 .id = SM8550_SLAVE_MNOC_HF_MEM_NOC_CAM_IFE_0, 1389 .channels = 2, 1390 .buswidth = 32, 1391 .num_links = 1, 1392 .links = { SM8550_MASTER_MNOC_HF_MEM_NOC_CAM_IFE_0 }, 1393}; 1394 1395static struct qcom_icc_node qns_mem_noc_sf_cam_ife_0 = { 1396 .name = "qns_mem_noc_sf_cam_ife_0", 1397 .id = SM8550_SLAVE_MNOC_SF_MEM_NOC_CAM_IFE_0, 1398 .channels = 2, 1399 .buswidth = 32, 1400 .num_links = 1, 1401 .links = { SM8550_MASTER_MNOC_SF_MEM_NOC_CAM_IFE_0 }, 1402}; 1403 1404static struct qcom_icc_node qns_llcc_cam_ife_1 = { 1405 .name = "qns_llcc_cam_ife_1", 1406 .id = SM8550_SLAVE_LLCC_CAM_IFE_1, 1407 .channels = 4, 1408 .buswidth = 16, 1409 .num_links = 1, 1410 .links = { SM8550_MASTER_LLCC_CAM_IFE_1 }, 1411}; 1412 1413static struct qcom_icc_node ebi_cam_ife_1 = { 1414 .name = "ebi_cam_ife_1", 1415 .id = SM8550_SLAVE_EBI1_CAM_IFE_1, 1416 .channels = 4, 1417 .buswidth = 4, 1418 .num_links = 0, 1419}; 1420 1421static struct qcom_icc_node qns_mem_noc_hf_cam_ife_1 = { 1422 .name = "qns_mem_noc_hf_cam_ife_1", 1423 .id = SM8550_SLAVE_MNOC_HF_MEM_NOC_CAM_IFE_1, 1424 .channels = 2, 1425 .buswidth = 32, 1426 .num_links = 1, 1427 .links = { SM8550_MASTER_MNOC_HF_MEM_NOC_CAM_IFE_1 }, 1428}; 1429 1430static struct qcom_icc_node qns_mem_noc_sf_cam_ife_1 = { 1431 .name = "qns_mem_noc_sf_cam_ife_1", 1432 .id = SM8550_SLAVE_MNOC_SF_MEM_NOC_CAM_IFE_1, 1433 .channels = 2, 1434 .buswidth = 32, 1435 .num_links = 1, 1436 .links = { SM8550_MASTER_MNOC_SF_MEM_NOC_CAM_IFE_1 }, 1437}; 1438 1439static struct qcom_icc_node qns_llcc_cam_ife_2 = { 1440 .name = "qns_llcc_cam_ife_2", 1441 .id = SM8550_SLAVE_LLCC_CAM_IFE_2, 1442 .channels = 4, 1443 .buswidth = 16, 1444 .num_links = 1, 1445 .links = { SM8550_MASTER_LLCC_CAM_IFE_2 }, 1446}; 1447 1448static struct qcom_icc_node ebi_cam_ife_2 = { 1449 .name = "ebi_cam_ife_2", 1450 .id = SM8550_SLAVE_EBI1_CAM_IFE_2, 1451 .channels = 4, 1452 .buswidth = 4, 1453 .num_links = 0, 1454}; 1455 1456static struct qcom_icc_node qns_mem_noc_hf_cam_ife_2 = { 1457 .name = "qns_mem_noc_hf_cam_ife_2", 1458 .id = SM8550_SLAVE_MNOC_HF_MEM_NOC_CAM_IFE_2, 1459 .channels = 2, 1460 .buswidth = 32, 1461 .num_links = 1, 1462 .links = { SM8550_MASTER_MNOC_HF_MEM_NOC_CAM_IFE_2 }, 1463}; 1464 1465static struct qcom_icc_node qns_mem_noc_sf_cam_ife_2 = { 1466 .name = "qns_mem_noc_sf_cam_ife_2", 1467 .id = SM8550_SLAVE_MNOC_SF_MEM_NOC_CAM_IFE_2, 1468 .channels = 2, 1469 .buswidth = 32, 1470 .num_links = 1, 1471 .links = { SM8550_MASTER_MNOC_SF_MEM_NOC_CAM_IFE_2 }, 1472}; 1473 1474static struct qcom_icc_bcm bcm_acv = { 1475 .name = "ACV", 1476 .num_nodes = 1, 1477 .nodes = { &ebi }, 1478}; 1479 1480static struct qcom_icc_bcm bcm_ce0 = { 1481 .name = "CE0", 1482 .num_nodes = 1, 1483 .nodes = { &qxm_crypto }, 1484}; 1485 1486static struct qcom_icc_bcm bcm_cn0 = { 1487 .name = "CN0", 1488 .keepalive = true, 1489 .num_nodes = 54, 1490 .nodes = { &qsm_cfg, &qhs_ahb2phy0, 1491 &qhs_ahb2phy1, &qhs_apss, 1492 &qhs_camera_cfg, &qhs_clk_ctl, 1493 &qhs_cpr_cx, &qhs_cpr_mmcx, 1494 &qhs_cpr_mxa, &qhs_cpr_mxc, 1495 &qhs_cpr_nspcx, &qhs_crypto0_cfg, 1496 &qhs_cx_rdpm, &qhs_gpuss_cfg, 1497 &qhs_i2c, &qhs_imem_cfg, 1498 &qhs_ipa, &qhs_ipc_router, 1499 &qhs_mss_cfg, &qhs_mx_rdpm, 1500 &qhs_pcie0_cfg, &qhs_pcie1_cfg, 1501 &qhs_pdm, &qhs_pimem_cfg, 1502 &qhs_prng, &qhs_qdss_cfg, 1503 &qhs_qspi, &qhs_qup1, 1504 &qhs_qup2, &qhs_sdc2, 1505 &qhs_sdc4, &qhs_spss_cfg, 1506 &qhs_tcsr, &qhs_tlmm, 1507 &qhs_ufs_mem_cfg, &qhs_usb3_0, 1508 &qhs_venus_cfg, &qhs_vsense_ctrl_cfg, 1509 &qss_lpass_qtb_cfg, &qss_mnoc_cfg, 1510 &qss_nsp_qtb_cfg, &qss_pcie_anoc_cfg, 1511 &xs_qdss_stm, &xs_sys_tcu_cfg, 1512 &qnm_gemnoc_cnoc, &qnm_gemnoc_pcie, 1513 &qhs_aoss, &qhs_tme_cfg, 1514 &qss_cfg, &qss_ddrss_cfg, 1515 &qxs_boot_imem, &qxs_imem, 1516 &xs_pcie_0, &xs_pcie_1 }, 1517}; 1518 1519static struct qcom_icc_bcm bcm_cn1 = { 1520 .name = "CN1", 1521 .num_nodes = 1, 1522 .nodes = { &qhs_display_cfg }, 1523}; 1524 1525static struct qcom_icc_bcm bcm_co0 = { 1526 .name = "CO0", 1527 .num_nodes = 2, 1528 .nodes = { &qxm_nsp, &qns_nsp_gemnoc }, 1529}; 1530 1531static struct qcom_icc_bcm bcm_lp0 = { 1532 .name = "LP0", 1533 .num_nodes = 2, 1534 .nodes = { &qnm_lpass_lpinoc, &qns_lpass_aggnoc }, 1535}; 1536 1537static struct qcom_icc_bcm bcm_mc0 = { 1538 .name = "MC0", 1539 .keepalive = true, 1540 .num_nodes = 1, 1541 .nodes = { &ebi }, 1542}; 1543 1544static struct qcom_icc_bcm bcm_mm0 = { 1545 .name = "MM0", 1546 .num_nodes = 1, 1547 .nodes = { &qns_mem_noc_hf }, 1548}; 1549 1550static struct qcom_icc_bcm bcm_mm1 = { 1551 .name = "MM1", 1552 .num_nodes = 8, 1553 .nodes = { &qnm_camnoc_hf, &qnm_camnoc_icp, 1554 &qnm_camnoc_sf, &qnm_vapss_hcp, 1555 &qnm_video_cv_cpu, &qnm_video_cvp, 1556 &qnm_video_v_cpu, &qns_mem_noc_sf }, 1557}; 1558 1559static struct qcom_icc_bcm bcm_qup0 = { 1560 .name = "QUP0", 1561 .keepalive = true, 1562 .vote_scale = 1, 1563 .num_nodes = 1, 1564 .nodes = { &qup0_core_slave }, 1565}; 1566 1567static struct qcom_icc_bcm bcm_qup1 = { 1568 .name = "QUP1", 1569 .keepalive = true, 1570 .vote_scale = 1, 1571 .num_nodes = 1, 1572 .nodes = { &qup1_core_slave }, 1573}; 1574 1575static struct qcom_icc_bcm bcm_qup2 = { 1576 .name = "QUP2", 1577 .keepalive = true, 1578 .vote_scale = 1, 1579 .num_nodes = 1, 1580 .nodes = { &qup2_core_slave }, 1581}; 1582 1583static struct qcom_icc_bcm bcm_sh0 = { 1584 .name = "SH0", 1585 .keepalive = true, 1586 .num_nodes = 1, 1587 .nodes = { &qns_llcc }, 1588}; 1589 1590static struct qcom_icc_bcm bcm_sh1 = { 1591 .name = "SH1", 1592 .num_nodes = 13, 1593 .nodes = { &alm_gpu_tcu, &alm_sys_tcu, 1594 &chm_apps, &qnm_gpu, 1595 &qnm_mdsp, &qnm_mnoc_hf, 1596 &qnm_mnoc_sf, &qnm_nsp_gemnoc, 1597 &qnm_pcie, &qnm_snoc_gc, 1598 &qnm_snoc_sf, &qns_gem_noc_cnoc, 1599 &qns_pcie }, 1600}; 1601 1602static struct qcom_icc_bcm bcm_sn0 = { 1603 .name = "SN0", 1604 .keepalive = true, 1605 .num_nodes = 1, 1606 .nodes = { &qns_gemnoc_sf }, 1607}; 1608 1609static struct qcom_icc_bcm bcm_sn1 = { 1610 .name = "SN1", 1611 .num_nodes = 3, 1612 .nodes = { &qhm_gic, &xm_gic, 1613 &qns_gemnoc_gc }, 1614}; 1615 1616static struct qcom_icc_bcm bcm_sn2 = { 1617 .name = "SN2", 1618 .num_nodes = 1, 1619 .nodes = { &qnm_aggre1_noc }, 1620}; 1621 1622static struct qcom_icc_bcm bcm_sn3 = { 1623 .name = "SN3", 1624 .num_nodes = 1, 1625 .nodes = { &qnm_aggre2_noc }, 1626}; 1627 1628static struct qcom_icc_bcm bcm_sn7 = { 1629 .name = "SN7", 1630 .num_nodes = 1, 1631 .nodes = { &qns_pcie_mem_noc }, 1632}; 1633 1634static struct qcom_icc_bcm bcm_acv_disp = { 1635 .name = "ACV", 1636 .num_nodes = 1, 1637 .nodes = { &ebi_disp }, 1638}; 1639 1640static struct qcom_icc_bcm bcm_mc0_disp = { 1641 .name = "MC0", 1642 .num_nodes = 1, 1643 .nodes = { &ebi_disp }, 1644}; 1645 1646static struct qcom_icc_bcm bcm_mm0_disp = { 1647 .name = "MM0", 1648 .num_nodes = 1, 1649 .nodes = { &qns_mem_noc_hf_disp }, 1650}; 1651 1652static struct qcom_icc_bcm bcm_sh0_disp = { 1653 .name = "SH0", 1654 .num_nodes = 1, 1655 .nodes = { &qns_llcc_disp }, 1656}; 1657 1658static struct qcom_icc_bcm bcm_sh1_disp = { 1659 .name = "SH1", 1660 .num_nodes = 2, 1661 .nodes = { &qnm_mnoc_hf_disp, &qnm_pcie_disp }, 1662}; 1663 1664static struct qcom_icc_bcm bcm_acv_cam_ife_0 = { 1665 .name = "ACV", 1666 .num_nodes = 1, 1667 .nodes = { &ebi_cam_ife_0 }, 1668}; 1669 1670static struct qcom_icc_bcm bcm_mc0_cam_ife_0 = { 1671 .name = "MC0", 1672 .num_nodes = 1, 1673 .nodes = { &ebi_cam_ife_0 }, 1674}; 1675 1676static struct qcom_icc_bcm bcm_mm0_cam_ife_0 = { 1677 .name = "MM0", 1678 .num_nodes = 1, 1679 .nodes = { &qns_mem_noc_hf_cam_ife_0 }, 1680}; 1681 1682static struct qcom_icc_bcm bcm_mm1_cam_ife_0 = { 1683 .name = "MM1", 1684 .num_nodes = 4, 1685 .nodes = { &qnm_camnoc_hf_cam_ife_0, &qnm_camnoc_icp_cam_ife_0, 1686 &qnm_camnoc_sf_cam_ife_0, &qns_mem_noc_sf_cam_ife_0 }, 1687}; 1688 1689static struct qcom_icc_bcm bcm_sh0_cam_ife_0 = { 1690 .name = "SH0", 1691 .num_nodes = 1, 1692 .nodes = { &qns_llcc_cam_ife_0 }, 1693}; 1694 1695static struct qcom_icc_bcm bcm_sh1_cam_ife_0 = { 1696 .name = "SH1", 1697 .num_nodes = 3, 1698 .nodes = { &qnm_mnoc_hf_cam_ife_0, &qnm_mnoc_sf_cam_ife_0, 1699 &qnm_pcie_cam_ife_0 }, 1700}; 1701 1702static struct qcom_icc_bcm bcm_acv_cam_ife_1 = { 1703 .name = "ACV", 1704 .num_nodes = 1, 1705 .nodes = { &ebi_cam_ife_1 }, 1706}; 1707 1708static struct qcom_icc_bcm bcm_mc0_cam_ife_1 = { 1709 .name = "MC0", 1710 .num_nodes = 1, 1711 .nodes = { &ebi_cam_ife_1 }, 1712}; 1713 1714static struct qcom_icc_bcm bcm_mm0_cam_ife_1 = { 1715 .name = "MM0", 1716 .num_nodes = 1, 1717 .nodes = { &qns_mem_noc_hf_cam_ife_1 }, 1718}; 1719 1720static struct qcom_icc_bcm bcm_mm1_cam_ife_1 = { 1721 .name = "MM1", 1722 .num_nodes = 4, 1723 .nodes = { &qnm_camnoc_hf_cam_ife_1, &qnm_camnoc_icp_cam_ife_1, 1724 &qnm_camnoc_sf_cam_ife_1, &qns_mem_noc_sf_cam_ife_1 }, 1725}; 1726 1727static struct qcom_icc_bcm bcm_sh0_cam_ife_1 = { 1728 .name = "SH0", 1729 .num_nodes = 1, 1730 .nodes = { &qns_llcc_cam_ife_1 }, 1731}; 1732 1733static struct qcom_icc_bcm bcm_sh1_cam_ife_1 = { 1734 .name = "SH1", 1735 .num_nodes = 3, 1736 .nodes = { &qnm_mnoc_hf_cam_ife_1, &qnm_mnoc_sf_cam_ife_1, 1737 &qnm_pcie_cam_ife_1 }, 1738}; 1739 1740static struct qcom_icc_bcm bcm_acv_cam_ife_2 = { 1741 .name = "ACV", 1742 .num_nodes = 1, 1743 .nodes = { &ebi_cam_ife_2 }, 1744}; 1745 1746static struct qcom_icc_bcm bcm_mc0_cam_ife_2 = { 1747 .name = "MC0", 1748 .num_nodes = 1, 1749 .nodes = { &ebi_cam_ife_2 }, 1750}; 1751 1752static struct qcom_icc_bcm bcm_mm0_cam_ife_2 = { 1753 .name = "MM0", 1754 .num_nodes = 1, 1755 .nodes = { &qns_mem_noc_hf_cam_ife_2 }, 1756}; 1757 1758static struct qcom_icc_bcm bcm_mm1_cam_ife_2 = { 1759 .name = "MM1", 1760 .num_nodes = 4, 1761 .nodes = { &qnm_camnoc_hf_cam_ife_2, &qnm_camnoc_icp_cam_ife_2, 1762 &qnm_camnoc_sf_cam_ife_2, &qns_mem_noc_sf_cam_ife_2 }, 1763}; 1764 1765static struct qcom_icc_bcm bcm_sh0_cam_ife_2 = { 1766 .name = "SH0", 1767 .num_nodes = 1, 1768 .nodes = { &qns_llcc_cam_ife_2 }, 1769}; 1770 1771static struct qcom_icc_bcm bcm_sh1_cam_ife_2 = { 1772 .name = "SH1", 1773 .num_nodes = 3, 1774 .nodes = { &qnm_mnoc_hf_cam_ife_2, &qnm_mnoc_sf_cam_ife_2, 1775 &qnm_pcie_cam_ife_2 }, 1776}; 1777 1778static struct qcom_icc_bcm * const aggre1_noc_bcms[] = { 1779}; 1780 1781static struct qcom_icc_node * const aggre1_noc_nodes[] = { 1782 [MASTER_QSPI_0] = &qhm_qspi, 1783 [MASTER_QUP_1] = &qhm_qup1, 1784 [MASTER_SDCC_4] = &xm_sdc4, 1785 [MASTER_UFS_MEM] = &xm_ufs_mem, 1786 [MASTER_USB3_0] = &xm_usb3_0, 1787 [SLAVE_A1NOC_SNOC] = &qns_a1noc_snoc, 1788}; 1789 1790static const struct qcom_icc_desc sm8550_aggre1_noc = { 1791 .nodes = aggre1_noc_nodes, 1792 .num_nodes = ARRAY_SIZE(aggre1_noc_nodes), 1793 .bcms = aggre1_noc_bcms, 1794 .num_bcms = ARRAY_SIZE(aggre1_noc_bcms), 1795}; 1796 1797static struct qcom_icc_bcm * const aggre2_noc_bcms[] = { 1798 &bcm_ce0, 1799}; 1800 1801static struct qcom_icc_node * const aggre2_noc_nodes[] = { 1802 [MASTER_QDSS_BAM] = &qhm_qdss_bam, 1803 [MASTER_QUP_2] = &qhm_qup2, 1804 [MASTER_CRYPTO] = &qxm_crypto, 1805 [MASTER_IPA] = &qxm_ipa, 1806 [MASTER_SP] = &qxm_sp, 1807 [MASTER_QDSS_ETR] = &xm_qdss_etr_0, 1808 [MASTER_QDSS_ETR_1] = &xm_qdss_etr_1, 1809 [MASTER_SDCC_2] = &xm_sdc2, 1810 [SLAVE_A2NOC_SNOC] = &qns_a2noc_snoc, 1811}; 1812 1813static const struct qcom_icc_desc sm8550_aggre2_noc = { 1814 .nodes = aggre2_noc_nodes, 1815 .num_nodes = ARRAY_SIZE(aggre2_noc_nodes), 1816 .bcms = aggre2_noc_bcms, 1817 .num_bcms = ARRAY_SIZE(aggre2_noc_bcms), 1818}; 1819 1820static struct qcom_icc_bcm * const clk_virt_bcms[] = { 1821 &bcm_qup0, 1822 &bcm_qup1, 1823 &bcm_qup2, 1824}; 1825 1826static struct qcom_icc_node * const clk_virt_nodes[] = { 1827 [MASTER_QUP_CORE_0] = &qup0_core_master, 1828 [MASTER_QUP_CORE_1] = &qup1_core_master, 1829 [MASTER_QUP_CORE_2] = &qup2_core_master, 1830 [SLAVE_QUP_CORE_0] = &qup0_core_slave, 1831 [SLAVE_QUP_CORE_1] = &qup1_core_slave, 1832 [SLAVE_QUP_CORE_2] = &qup2_core_slave, 1833}; 1834 1835static const struct qcom_icc_desc sm8550_clk_virt = { 1836 .nodes = clk_virt_nodes, 1837 .num_nodes = ARRAY_SIZE(clk_virt_nodes), 1838 .bcms = clk_virt_bcms, 1839 .num_bcms = ARRAY_SIZE(clk_virt_bcms), 1840}; 1841 1842static struct qcom_icc_bcm * const config_noc_bcms[] = { 1843 &bcm_cn0, 1844 &bcm_cn1, 1845}; 1846 1847static struct qcom_icc_node * const config_noc_nodes[] = { 1848 [MASTER_CNOC_CFG] = &qsm_cfg, 1849 [SLAVE_AHB2PHY_SOUTH] = &qhs_ahb2phy0, 1850 [SLAVE_AHB2PHY_NORTH] = &qhs_ahb2phy1, 1851 [SLAVE_APPSS] = &qhs_apss, 1852 [SLAVE_CAMERA_CFG] = &qhs_camera_cfg, 1853 [SLAVE_CLK_CTL] = &qhs_clk_ctl, 1854 [SLAVE_RBCPR_CX_CFG] = &qhs_cpr_cx, 1855 [SLAVE_RBCPR_MMCX_CFG] = &qhs_cpr_mmcx, 1856 [SLAVE_RBCPR_MXA_CFG] = &qhs_cpr_mxa, 1857 [SLAVE_RBCPR_MXC_CFG] = &qhs_cpr_mxc, 1858 [SLAVE_CPR_NSPCX] = &qhs_cpr_nspcx, 1859 [SLAVE_CRYPTO_0_CFG] = &qhs_crypto0_cfg, 1860 [SLAVE_CX_RDPM] = &qhs_cx_rdpm, 1861 [SLAVE_DISPLAY_CFG] = &qhs_display_cfg, 1862 [SLAVE_GFX3D_CFG] = &qhs_gpuss_cfg, 1863 [SLAVE_I2C] = &qhs_i2c, 1864 [SLAVE_IMEM_CFG] = &qhs_imem_cfg, 1865 [SLAVE_IPA_CFG] = &qhs_ipa, 1866 [SLAVE_IPC_ROUTER_CFG] = &qhs_ipc_router, 1867 [SLAVE_CNOC_MSS] = &qhs_mss_cfg, 1868 [SLAVE_MX_RDPM] = &qhs_mx_rdpm, 1869 [SLAVE_PCIE_0_CFG] = &qhs_pcie0_cfg, 1870 [SLAVE_PCIE_1_CFG] = &qhs_pcie1_cfg, 1871 [SLAVE_PDM] = &qhs_pdm, 1872 [SLAVE_PIMEM_CFG] = &qhs_pimem_cfg, 1873 [SLAVE_PRNG] = &qhs_prng, 1874 [SLAVE_QDSS_CFG] = &qhs_qdss_cfg, 1875 [SLAVE_QSPI_0] = &qhs_qspi, 1876 [SLAVE_QUP_1] = &qhs_qup1, 1877 [SLAVE_QUP_2] = &qhs_qup2, 1878 [SLAVE_SDCC_2] = &qhs_sdc2, 1879 [SLAVE_SDCC_4] = &qhs_sdc4, 1880 [SLAVE_SPSS_CFG] = &qhs_spss_cfg, 1881 [SLAVE_TCSR] = &qhs_tcsr, 1882 [SLAVE_TLMM] = &qhs_tlmm, 1883 [SLAVE_UFS_MEM_CFG] = &qhs_ufs_mem_cfg, 1884 [SLAVE_USB3_0] = &qhs_usb3_0, 1885 [SLAVE_VENUS_CFG] = &qhs_venus_cfg, 1886 [SLAVE_VSENSE_CTRL_CFG] = &qhs_vsense_ctrl_cfg, 1887 [SLAVE_LPASS_QTB_CFG] = &qss_lpass_qtb_cfg, 1888 [SLAVE_CNOC_MNOC_CFG] = &qss_mnoc_cfg, 1889 [SLAVE_NSP_QTB_CFG] = &qss_nsp_qtb_cfg, 1890 [SLAVE_PCIE_ANOC_CFG] = &qss_pcie_anoc_cfg, 1891 [SLAVE_QDSS_STM] = &xs_qdss_stm, 1892 [SLAVE_TCU] = &xs_sys_tcu_cfg, 1893}; 1894 1895static const struct qcom_icc_desc sm8550_config_noc = { 1896 .nodes = config_noc_nodes, 1897 .num_nodes = ARRAY_SIZE(config_noc_nodes), 1898 .bcms = config_noc_bcms, 1899 .num_bcms = ARRAY_SIZE(config_noc_bcms), 1900}; 1901 1902static struct qcom_icc_bcm * const cnoc_main_bcms[] = { 1903 &bcm_cn0, 1904}; 1905 1906static struct qcom_icc_node * const cnoc_main_nodes[] = { 1907 [MASTER_GEM_NOC_CNOC] = &qnm_gemnoc_cnoc, 1908 [MASTER_GEM_NOC_PCIE_SNOC] = &qnm_gemnoc_pcie, 1909 [SLAVE_AOSS] = &qhs_aoss, 1910 [SLAVE_TME_CFG] = &qhs_tme_cfg, 1911 [SLAVE_CNOC_CFG] = &qss_cfg, 1912 [SLAVE_DDRSS_CFG] = &qss_ddrss_cfg, 1913 [SLAVE_BOOT_IMEM] = &qxs_boot_imem, 1914 [SLAVE_IMEM] = &qxs_imem, 1915 [SLAVE_PCIE_0] = &xs_pcie_0, 1916 [SLAVE_PCIE_1] = &xs_pcie_1, 1917}; 1918 1919static const struct qcom_icc_desc sm8550_cnoc_main = { 1920 .nodes = cnoc_main_nodes, 1921 .num_nodes = ARRAY_SIZE(cnoc_main_nodes), 1922 .bcms = cnoc_main_bcms, 1923 .num_bcms = ARRAY_SIZE(cnoc_main_bcms), 1924}; 1925 1926static struct qcom_icc_bcm * const gem_noc_bcms[] = { 1927 &bcm_sh0, 1928 &bcm_sh1, 1929 &bcm_sh0_disp, 1930 &bcm_sh1_disp, 1931 &bcm_sh0_cam_ife_0, 1932 &bcm_sh1_cam_ife_0, 1933 &bcm_sh0_cam_ife_1, 1934 &bcm_sh1_cam_ife_1, 1935 &bcm_sh0_cam_ife_2, 1936 &bcm_sh1_cam_ife_2, 1937}; 1938 1939static struct qcom_icc_node * const gem_noc_nodes[] = { 1940 [MASTER_GPU_TCU] = &alm_gpu_tcu, 1941 [MASTER_SYS_TCU] = &alm_sys_tcu, 1942 [MASTER_APPSS_PROC] = &chm_apps, 1943 [MASTER_GFX3D] = &qnm_gpu, 1944 [MASTER_LPASS_GEM_NOC] = &qnm_lpass_gemnoc, 1945 [MASTER_MSS_PROC] = &qnm_mdsp, 1946 [MASTER_MNOC_HF_MEM_NOC] = &qnm_mnoc_hf, 1947 [MASTER_MNOC_SF_MEM_NOC] = &qnm_mnoc_sf, 1948 [MASTER_COMPUTE_NOC] = &qnm_nsp_gemnoc, 1949 [MASTER_ANOC_PCIE_GEM_NOC] = &qnm_pcie, 1950 [MASTER_SNOC_GC_MEM_NOC] = &qnm_snoc_gc, 1951 [MASTER_SNOC_SF_MEM_NOC] = &qnm_snoc_sf, 1952 [SLAVE_GEM_NOC_CNOC] = &qns_gem_noc_cnoc, 1953 [SLAVE_LLCC] = &qns_llcc, 1954 [SLAVE_MEM_NOC_PCIE_SNOC] = &qns_pcie, 1955 [MASTER_MNOC_HF_MEM_NOC_DISP] = &qnm_mnoc_hf_disp, 1956 [MASTER_ANOC_PCIE_GEM_NOC_DISP] = &qnm_pcie_disp, 1957 [SLAVE_LLCC_DISP] = &qns_llcc_disp, 1958 [MASTER_MNOC_HF_MEM_NOC_CAM_IFE_0] = &qnm_mnoc_hf_cam_ife_0, 1959 [MASTER_MNOC_SF_MEM_NOC_CAM_IFE_0] = &qnm_mnoc_sf_cam_ife_0, 1960 [MASTER_ANOC_PCIE_GEM_NOC_CAM_IFE_0] = &qnm_pcie_cam_ife_0, 1961 [SLAVE_LLCC_CAM_IFE_0] = &qns_llcc_cam_ife_0, 1962 [MASTER_MNOC_HF_MEM_NOC_CAM_IFE_1] = &qnm_mnoc_hf_cam_ife_1, 1963 [MASTER_MNOC_SF_MEM_NOC_CAM_IFE_1] = &qnm_mnoc_sf_cam_ife_1, 1964 [MASTER_ANOC_PCIE_GEM_NOC_CAM_IFE_1] = &qnm_pcie_cam_ife_1, 1965 [SLAVE_LLCC_CAM_IFE_1] = &qns_llcc_cam_ife_1, 1966 [MASTER_MNOC_HF_MEM_NOC_CAM_IFE_2] = &qnm_mnoc_hf_cam_ife_2, 1967 [MASTER_MNOC_SF_MEM_NOC_CAM_IFE_2] = &qnm_mnoc_sf_cam_ife_2, 1968 [MASTER_ANOC_PCIE_GEM_NOC_CAM_IFE_2] = &qnm_pcie_cam_ife_2, 1969 [SLAVE_LLCC_CAM_IFE_2] = &qns_llcc_cam_ife_2, 1970}; 1971 1972static const struct qcom_icc_desc sm8550_gem_noc = { 1973 .nodes = gem_noc_nodes, 1974 .num_nodes = ARRAY_SIZE(gem_noc_nodes), 1975 .bcms = gem_noc_bcms, 1976 .num_bcms = ARRAY_SIZE(gem_noc_bcms), 1977}; 1978 1979static struct qcom_icc_bcm * const lpass_ag_noc_bcms[] = { 1980}; 1981 1982static struct qcom_icc_node * const lpass_ag_noc_nodes[] = { 1983 [MASTER_LPIAON_NOC] = &qnm_lpiaon_noc, 1984 [SLAVE_LPASS_GEM_NOC] = &qns_lpass_ag_noc_gemnoc, 1985}; 1986 1987static const struct qcom_icc_desc sm8550_lpass_ag_noc = { 1988 .nodes = lpass_ag_noc_nodes, 1989 .num_nodes = ARRAY_SIZE(lpass_ag_noc_nodes), 1990 .bcms = lpass_ag_noc_bcms, 1991 .num_bcms = ARRAY_SIZE(lpass_ag_noc_bcms), 1992}; 1993 1994static struct qcom_icc_bcm * const lpass_lpiaon_noc_bcms[] = { 1995 &bcm_lp0, 1996}; 1997 1998static struct qcom_icc_node * const lpass_lpiaon_noc_nodes[] = { 1999 [MASTER_LPASS_LPINOC] = &qnm_lpass_lpinoc, 2000 [SLAVE_LPIAON_NOC_LPASS_AG_NOC] = &qns_lpass_aggnoc, 2001}; 2002 2003static const struct qcom_icc_desc sm8550_lpass_lpiaon_noc = { 2004 .nodes = lpass_lpiaon_noc_nodes, 2005 .num_nodes = ARRAY_SIZE(lpass_lpiaon_noc_nodes), 2006 .bcms = lpass_lpiaon_noc_bcms, 2007 .num_bcms = ARRAY_SIZE(lpass_lpiaon_noc_bcms), 2008}; 2009 2010static struct qcom_icc_bcm * const lpass_lpicx_noc_bcms[] = { 2011}; 2012 2013static struct qcom_icc_node * const lpass_lpicx_noc_nodes[] = { 2014 [MASTER_LPASS_PROC] = &qxm_lpinoc_dsp_axim, 2015 [SLAVE_LPICX_NOC_LPIAON_NOC] = &qns_lpi_aon_noc, 2016}; 2017 2018static const struct qcom_icc_desc sm8550_lpass_lpicx_noc = { 2019 .nodes = lpass_lpicx_noc_nodes, 2020 .num_nodes = ARRAY_SIZE(lpass_lpicx_noc_nodes), 2021 .bcms = lpass_lpicx_noc_bcms, 2022 .num_bcms = ARRAY_SIZE(lpass_lpicx_noc_bcms), 2023}; 2024 2025static struct qcom_icc_bcm * const mc_virt_bcms[] = { 2026 &bcm_acv, 2027 &bcm_mc0, 2028 &bcm_acv_disp, 2029 &bcm_mc0_disp, 2030 &bcm_acv_cam_ife_0, 2031 &bcm_mc0_cam_ife_0, 2032 &bcm_acv_cam_ife_1, 2033 &bcm_mc0_cam_ife_1, 2034 &bcm_acv_cam_ife_2, 2035 &bcm_mc0_cam_ife_2, 2036}; 2037 2038static struct qcom_icc_node * const mc_virt_nodes[] = { 2039 [MASTER_LLCC] = &llcc_mc, 2040 [SLAVE_EBI1] = &ebi, 2041 [MASTER_LLCC_DISP] = &llcc_mc_disp, 2042 [SLAVE_EBI1_DISP] = &ebi_disp, 2043 [MASTER_LLCC_CAM_IFE_0] = &llcc_mc_cam_ife_0, 2044 [SLAVE_EBI1_CAM_IFE_0] = &ebi_cam_ife_0, 2045 [MASTER_LLCC_CAM_IFE_1] = &llcc_mc_cam_ife_1, 2046 [SLAVE_EBI1_CAM_IFE_1] = &ebi_cam_ife_1, 2047 [MASTER_LLCC_CAM_IFE_2] = &llcc_mc_cam_ife_2, 2048 [SLAVE_EBI1_CAM_IFE_2] = &ebi_cam_ife_2, 2049}; 2050 2051static const struct qcom_icc_desc sm8550_mc_virt = { 2052 .nodes = mc_virt_nodes, 2053 .num_nodes = ARRAY_SIZE(mc_virt_nodes), 2054 .bcms = mc_virt_bcms, 2055 .num_bcms = ARRAY_SIZE(mc_virt_bcms), 2056}; 2057 2058static struct qcom_icc_bcm * const mmss_noc_bcms[] = { 2059 &bcm_mm0, 2060 &bcm_mm1, 2061 &bcm_mm0_disp, 2062 &bcm_mm0_cam_ife_0, 2063 &bcm_mm1_cam_ife_0, 2064 &bcm_mm0_cam_ife_1, 2065 &bcm_mm1_cam_ife_1, 2066 &bcm_mm0_cam_ife_2, 2067 &bcm_mm1_cam_ife_2, 2068}; 2069 2070static struct qcom_icc_node * const mmss_noc_nodes[] = { 2071 [MASTER_CAMNOC_HF] = &qnm_camnoc_hf, 2072 [MASTER_CAMNOC_ICP] = &qnm_camnoc_icp, 2073 [MASTER_CAMNOC_SF] = &qnm_camnoc_sf, 2074 [MASTER_MDP] = &qnm_mdp, 2075 [MASTER_CDSP_HCP] = &qnm_vapss_hcp, 2076 [MASTER_VIDEO] = &qnm_video, 2077 [MASTER_VIDEO_CV_PROC] = &qnm_video_cv_cpu, 2078 [MASTER_VIDEO_PROC] = &qnm_video_cvp, 2079 [MASTER_VIDEO_V_PROC] = &qnm_video_v_cpu, 2080 [MASTER_CNOC_MNOC_CFG] = &qsm_mnoc_cfg, 2081 [SLAVE_MNOC_HF_MEM_NOC] = &qns_mem_noc_hf, 2082 [SLAVE_MNOC_SF_MEM_NOC] = &qns_mem_noc_sf, 2083 [SLAVE_SERVICE_MNOC] = &srvc_mnoc, 2084 [MASTER_MDP_DISP] = &qnm_mdp_disp, 2085 [SLAVE_MNOC_HF_MEM_NOC_DISP] = &qns_mem_noc_hf_disp, 2086 [MASTER_CAMNOC_HF_CAM_IFE_0] = &qnm_camnoc_hf_cam_ife_0, 2087 [MASTER_CAMNOC_ICP_CAM_IFE_0] = &qnm_camnoc_icp_cam_ife_0, 2088 [MASTER_CAMNOC_SF_CAM_IFE_0] = &qnm_camnoc_sf_cam_ife_0, 2089 [SLAVE_MNOC_HF_MEM_NOC_CAM_IFE_0] = &qns_mem_noc_hf_cam_ife_0, 2090 [SLAVE_MNOC_SF_MEM_NOC_CAM_IFE_0] = &qns_mem_noc_sf_cam_ife_0, 2091 [MASTER_CAMNOC_HF_CAM_IFE_1] = &qnm_camnoc_hf_cam_ife_1, 2092 [MASTER_CAMNOC_ICP_CAM_IFE_1] = &qnm_camnoc_icp_cam_ife_1, 2093 [MASTER_CAMNOC_SF_CAM_IFE_1] = &qnm_camnoc_sf_cam_ife_1, 2094 [SLAVE_MNOC_HF_MEM_NOC_CAM_IFE_1] = &qns_mem_noc_hf_cam_ife_1, 2095 [SLAVE_MNOC_SF_MEM_NOC_CAM_IFE_1] = &qns_mem_noc_sf_cam_ife_1, 2096 [MASTER_CAMNOC_HF_CAM_IFE_2] = &qnm_camnoc_hf_cam_ife_2, 2097 [MASTER_CAMNOC_ICP_CAM_IFE_2] = &qnm_camnoc_icp_cam_ife_2, 2098 [MASTER_CAMNOC_SF_CAM_IFE_2] = &qnm_camnoc_sf_cam_ife_2, 2099 [SLAVE_MNOC_HF_MEM_NOC_CAM_IFE_2] = &qns_mem_noc_hf_cam_ife_2, 2100 [SLAVE_MNOC_SF_MEM_NOC_CAM_IFE_2] = &qns_mem_noc_sf_cam_ife_2, 2101}; 2102 2103static const struct qcom_icc_desc sm8550_mmss_noc = { 2104 .nodes = mmss_noc_nodes, 2105 .num_nodes = ARRAY_SIZE(mmss_noc_nodes), 2106 .bcms = mmss_noc_bcms, 2107 .num_bcms = ARRAY_SIZE(mmss_noc_bcms), 2108}; 2109 2110static struct qcom_icc_bcm * const nsp_noc_bcms[] = { 2111 &bcm_co0, 2112}; 2113 2114static struct qcom_icc_node * const nsp_noc_nodes[] = { 2115 [MASTER_CDSP_PROC] = &qxm_nsp, 2116 [SLAVE_CDSP_MEM_NOC] = &qns_nsp_gemnoc, 2117}; 2118 2119static const struct qcom_icc_desc sm8550_nsp_noc = { 2120 .nodes = nsp_noc_nodes, 2121 .num_nodes = ARRAY_SIZE(nsp_noc_nodes), 2122 .bcms = nsp_noc_bcms, 2123 .num_bcms = ARRAY_SIZE(nsp_noc_bcms), 2124}; 2125 2126static struct qcom_icc_bcm * const pcie_anoc_bcms[] = { 2127 &bcm_sn7, 2128}; 2129 2130static struct qcom_icc_node * const pcie_anoc_nodes[] = { 2131 [MASTER_PCIE_ANOC_CFG] = &qsm_pcie_anoc_cfg, 2132 [MASTER_PCIE_0] = &xm_pcie3_0, 2133 [MASTER_PCIE_1] = &xm_pcie3_1, 2134 [SLAVE_ANOC_PCIE_GEM_NOC] = &qns_pcie_mem_noc, 2135 [SLAVE_SERVICE_PCIE_ANOC] = &srvc_pcie_aggre_noc, 2136}; 2137 2138static const struct qcom_icc_desc sm8550_pcie_anoc = { 2139 .nodes = pcie_anoc_nodes, 2140 .num_nodes = ARRAY_SIZE(pcie_anoc_nodes), 2141 .bcms = pcie_anoc_bcms, 2142 .num_bcms = ARRAY_SIZE(pcie_anoc_bcms), 2143}; 2144 2145static struct qcom_icc_bcm * const system_noc_bcms[] = { 2146 &bcm_sn0, 2147 &bcm_sn1, 2148 &bcm_sn2, 2149 &bcm_sn3, 2150}; 2151 2152static struct qcom_icc_node * const system_noc_nodes[] = { 2153 [MASTER_GIC_AHB] = &qhm_gic, 2154 [MASTER_A1NOC_SNOC] = &qnm_aggre1_noc, 2155 [MASTER_A2NOC_SNOC] = &qnm_aggre2_noc, 2156 [MASTER_GIC] = &xm_gic, 2157 [SLAVE_SNOC_GEM_NOC_GC] = &qns_gemnoc_gc, 2158 [SLAVE_SNOC_GEM_NOC_SF] = &qns_gemnoc_sf, 2159}; 2160 2161static const struct qcom_icc_desc sm8550_system_noc = { 2162 .nodes = system_noc_nodes, 2163 .num_nodes = ARRAY_SIZE(system_noc_nodes), 2164 .bcms = system_noc_bcms, 2165 .num_bcms = ARRAY_SIZE(system_noc_bcms), 2166}; 2167 2168static const struct of_device_id qnoc_of_match[] = { 2169 { .compatible = "qcom,sm8550-aggre1-noc", 2170 .data = &sm8550_aggre1_noc}, 2171 { .compatible = "qcom,sm8550-aggre2-noc", 2172 .data = &sm8550_aggre2_noc}, 2173 { .compatible = "qcom,sm8550-clk-virt", 2174 .data = &sm8550_clk_virt}, 2175 { .compatible = "qcom,sm8550-config-noc", 2176 .data = &sm8550_config_noc}, 2177 { .compatible = "qcom,sm8550-cnoc-main", 2178 .data = &sm8550_cnoc_main}, 2179 { .compatible = "qcom,sm8550-gem-noc", 2180 .data = &sm8550_gem_noc}, 2181 { .compatible = "qcom,sm8550-lpass-ag-noc", 2182 .data = &sm8550_lpass_ag_noc}, 2183 { .compatible = "qcom,sm8550-lpass-lpiaon-noc", 2184 .data = &sm8550_lpass_lpiaon_noc}, 2185 { .compatible = "qcom,sm8550-lpass-lpicx-noc", 2186 .data = &sm8550_lpass_lpicx_noc}, 2187 { .compatible = "qcom,sm8550-mc-virt", 2188 .data = &sm8550_mc_virt}, 2189 { .compatible = "qcom,sm8550-mmss-noc", 2190 .data = &sm8550_mmss_noc}, 2191 { .compatible = "qcom,sm8550-nsp-noc", 2192 .data = &sm8550_nsp_noc}, 2193 { .compatible = "qcom,sm8550-pcie-anoc", 2194 .data = &sm8550_pcie_anoc}, 2195 { .compatible = "qcom,sm8550-system-noc", 2196 .data = &sm8550_system_noc}, 2197 { } 2198}; 2199MODULE_DEVICE_TABLE(of, qnoc_of_match); 2200 2201static struct platform_driver qnoc_driver = { 2202 .probe = qcom_icc_rpmh_probe, 2203 .remove = qcom_icc_rpmh_remove, 2204 .driver = { 2205 .name = "qnoc-sm8550", 2206 .of_match_table = qnoc_of_match, 2207 }, 2208}; 2209 2210static int __init qnoc_driver_init(void) 2211{ 2212 return platform_driver_register(&qnoc_driver); 2213} 2214core_initcall(qnoc_driver_init); 2215 2216static void __exit qnoc_driver_exit(void) 2217{ 2218 platform_driver_unregister(&qnoc_driver); 2219} 2220module_exit(qnoc_driver_exit); 2221 2222MODULE_DESCRIPTION("sm8550 NoC driver"); 2223MODULE_LICENSE("GPL");