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) 2023, Linaro Limited 6 */ 7 8#include <dt-bindings/interconnect/qcom,sm6115.h> 9#include <linux/device.h> 10#include <linux/interconnect-provider.h> 11#include <linux/mod_devicetable.h> 12#include <linux/module.h> 13#include <linux/platform_device.h> 14#include <linux/regmap.h> 15 16#include "icc-rpm.h" 17 18static const char * const snoc_intf_clocks[] = { 19 "cpu_axi", 20 "ufs_axi", 21 "usb_axi", 22 "ipa", /* Required by qxm_ipa */ 23}; 24 25static const char * const cnoc_intf_clocks[] = { 26 "usb_axi", 27}; 28 29enum { 30 SM6115_MASTER_AMPSS_M0, 31 SM6115_MASTER_ANOC_SNOC, 32 SM6115_MASTER_BIMC_SNOC, 33 SM6115_MASTER_CAMNOC_HF, 34 SM6115_MASTER_CAMNOC_SF, 35 SM6115_MASTER_CRYPTO_CORE0, 36 SM6115_MASTER_GRAPHICS_3D, 37 SM6115_MASTER_IPA, 38 SM6115_MASTER_MDP_PORT0, 39 SM6115_MASTER_PIMEM, 40 SM6115_MASTER_QDSS_BAM, 41 SM6115_MASTER_QDSS_DAP, 42 SM6115_MASTER_QDSS_ETR, 43 SM6115_MASTER_QPIC, 44 SM6115_MASTER_QUP_0, 45 SM6115_MASTER_QUP_CORE_0, 46 SM6115_MASTER_SDCC_1, 47 SM6115_MASTER_SDCC_2, 48 SM6115_MASTER_SNOC_BIMC_NRT, 49 SM6115_MASTER_SNOC_BIMC_RT, 50 SM6115_MASTER_SNOC_BIMC, 51 SM6115_MASTER_SNOC_CFG, 52 SM6115_MASTER_SNOC_CNOC, 53 SM6115_MASTER_TCU_0, 54 SM6115_MASTER_TIC, 55 SM6115_MASTER_USB3, 56 SM6115_MASTER_VIDEO_P0, 57 SM6115_MASTER_VIDEO_PROC, 58 59 SM6115_SLAVE_AHB2PHY_USB, 60 SM6115_SLAVE_ANOC_SNOC, 61 SM6115_SLAVE_APPSS, 62 SM6115_SLAVE_APSS_THROTTLE_CFG, 63 SM6115_SLAVE_BIMC_CFG, 64 SM6115_SLAVE_BIMC_SNOC, 65 SM6115_SLAVE_BOOT_ROM, 66 SM6115_SLAVE_CAMERA_CFG, 67 SM6115_SLAVE_CAMERA_NRT_THROTTLE_CFG, 68 SM6115_SLAVE_CAMERA_RT_THROTTLE_CFG, 69 SM6115_SLAVE_CLK_CTL, 70 SM6115_SLAVE_CNOC_MSS, 71 SM6115_SLAVE_CRYPTO_0_CFG, 72 SM6115_SLAVE_DCC_CFG, 73 SM6115_SLAVE_DDR_PHY_CFG, 74 SM6115_SLAVE_DDR_SS_CFG, 75 SM6115_SLAVE_DISPLAY_CFG, 76 SM6115_SLAVE_DISPLAY_THROTTLE_CFG, 77 SM6115_SLAVE_EBI_CH0, 78 SM6115_SLAVE_GPU_CFG, 79 SM6115_SLAVE_GPU_THROTTLE_CFG, 80 SM6115_SLAVE_HWKM_CORE, 81 SM6115_SLAVE_IMEM_CFG, 82 SM6115_SLAVE_IPA_CFG, 83 SM6115_SLAVE_LPASS, 84 SM6115_SLAVE_MAPSS, 85 SM6115_SLAVE_MDSP_MPU_CFG, 86 SM6115_SLAVE_MESSAGE_RAM, 87 SM6115_SLAVE_OCIMEM, 88 SM6115_SLAVE_PDM, 89 SM6115_SLAVE_PIMEM_CFG, 90 SM6115_SLAVE_PIMEM, 91 SM6115_SLAVE_PKA_CORE, 92 SM6115_SLAVE_PMIC_ARB, 93 SM6115_SLAVE_QDSS_CFG, 94 SM6115_SLAVE_QDSS_STM, 95 SM6115_SLAVE_QM_CFG, 96 SM6115_SLAVE_QM_MPU_CFG, 97 SM6115_SLAVE_QPIC, 98 SM6115_SLAVE_QUP_0, 99 SM6115_SLAVE_QUP_CORE_0, 100 SM6115_SLAVE_RBCPR_CX_CFG, 101 SM6115_SLAVE_RBCPR_MX_CFG, 102 SM6115_SLAVE_RPM, 103 SM6115_SLAVE_SDCC_1, 104 SM6115_SLAVE_SDCC_2, 105 SM6115_SLAVE_SECURITY, 106 SM6115_SLAVE_SERVICE_CNOC, 107 SM6115_SLAVE_SERVICE_SNOC, 108 SM6115_SLAVE_SNOC_BIMC_NRT, 109 SM6115_SLAVE_SNOC_BIMC_RT, 110 SM6115_SLAVE_SNOC_BIMC, 111 SM6115_SLAVE_SNOC_CFG, 112 SM6115_SLAVE_SNOC_CNOC, 113 SM6115_SLAVE_TCSR, 114 SM6115_SLAVE_TCU, 115 SM6115_SLAVE_TLMM, 116 SM6115_SLAVE_USB3, 117 SM6115_SLAVE_VENUS_CFG, 118 SM6115_SLAVE_VENUS_THROTTLE_CFG, 119 SM6115_SLAVE_VSENSE_CTRL_CFG, 120}; 121 122static const u16 slv_ebi_slv_bimc_snoc_links[] = { 123 SM6115_SLAVE_EBI_CH0, 124 SM6115_SLAVE_BIMC_SNOC, 125}; 126 127static struct qcom_icc_node apps_proc = { 128 .name = "apps_proc", 129 .id = SM6115_MASTER_AMPSS_M0, 130 .channels = 1, 131 .buswidth = 16, 132 .qos.qos_port = 0, 133 .qos.qos_mode = NOC_QOS_MODE_FIXED, 134 .qos.prio_level = 0, 135 .qos.areq_prio = 0, 136 .mas_rpm_id = 0, 137 .slv_rpm_id = -1, 138 .num_links = ARRAY_SIZE(slv_ebi_slv_bimc_snoc_links), 139 .links = slv_ebi_slv_bimc_snoc_links, 140}; 141 142static const u16 link_slv_ebi[] = { 143 SM6115_SLAVE_EBI_CH0, 144}; 145 146static struct qcom_icc_node mas_snoc_bimc_rt = { 147 .name = "mas_snoc_bimc_rt", 148 .id = SM6115_MASTER_SNOC_BIMC_RT, 149 .channels = 1, 150 .buswidth = 16, 151 .qos.qos_port = 2, 152 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 153 .qos.areq_prio = 0, 154 .qos.prio_level = 0, 155 .mas_rpm_id = -1, 156 .slv_rpm_id = -1, 157 .num_links = ARRAY_SIZE(link_slv_ebi), 158 .links = link_slv_ebi, 159}; 160 161static struct qcom_icc_node mas_snoc_bimc_nrt = { 162 .name = "mas_snoc_bimc_nrt", 163 .id = SM6115_MASTER_SNOC_BIMC_NRT, 164 .channels = 1, 165 .buswidth = 16, 166 .qos.qos_port = 3, 167 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 168 .qos.areq_prio = 0, 169 .qos.prio_level = 0, 170 .mas_rpm_id = -1, 171 .slv_rpm_id = -1, 172 .num_links = ARRAY_SIZE(link_slv_ebi), 173 .links = link_slv_ebi, 174}; 175 176static struct qcom_icc_node mas_snoc_bimc = { 177 .name = "mas_snoc_bimc", 178 .id = SM6115_MASTER_SNOC_BIMC, 179 .channels = 1, 180 .buswidth = 16, 181 .qos.qos_port = 6, 182 .qos.qos_mode = NOC_QOS_MODE_BYPASS, 183 .qos.areq_prio = 0, 184 .qos.prio_level = 0, 185 .mas_rpm_id = 3, 186 .slv_rpm_id = -1, 187 .num_links = ARRAY_SIZE(link_slv_ebi), 188 .links = link_slv_ebi, 189}; 190 191static struct qcom_icc_node qnm_gpu = { 192 .name = "qnm_gpu", 193 .id = SM6115_MASTER_GRAPHICS_3D, 194 .channels = 1, 195 .buswidth = 32, 196 .qos.qos_port = 1, 197 .qos.qos_mode = NOC_QOS_MODE_FIXED, 198 .qos.prio_level = 0, 199 .qos.areq_prio = 0, 200 .mas_rpm_id = -1, 201 .slv_rpm_id = -1, 202 .num_links = ARRAY_SIZE(slv_ebi_slv_bimc_snoc_links), 203 .links = slv_ebi_slv_bimc_snoc_links, 204}; 205 206static struct qcom_icc_node tcu_0 = { 207 .name = "tcu_0", 208 .id = SM6115_MASTER_TCU_0, 209 .channels = 1, 210 .buswidth = 8, 211 .qos.qos_port = 4, 212 .qos.qos_mode = NOC_QOS_MODE_FIXED, 213 .qos.prio_level = 6, 214 .qos.areq_prio = 6, 215 .mas_rpm_id = -1, 216 .slv_rpm_id = -1, 217 .num_links = ARRAY_SIZE(slv_ebi_slv_bimc_snoc_links), 218 .links = slv_ebi_slv_bimc_snoc_links, 219}; 220 221static const u16 qup_core_0_links[] = { 222 SM6115_SLAVE_QUP_CORE_0, 223}; 224 225static struct qcom_icc_node qup0_core_master = { 226 .name = "qup0_core_master", 227 .id = SM6115_MASTER_QUP_CORE_0, 228 .channels = 1, 229 .buswidth = 4, 230 .mas_rpm_id = 170, 231 .slv_rpm_id = -1, 232 .num_links = ARRAY_SIZE(qup_core_0_links), 233 .links = qup_core_0_links, 234}; 235 236static const u16 link_slv_anoc_snoc[] = { 237 SM6115_SLAVE_ANOC_SNOC, 238}; 239 240static struct qcom_icc_node crypto_c0 = { 241 .name = "crypto_c0", 242 .id = SM6115_MASTER_CRYPTO_CORE0, 243 .channels = 1, 244 .buswidth = 8, 245 .qos.qos_port = 43, 246 .qos.qos_mode = NOC_QOS_MODE_FIXED, 247 .qos.areq_prio = 2, 248 .mas_rpm_id = 23, 249 .slv_rpm_id = -1, 250 .num_links = ARRAY_SIZE(link_slv_anoc_snoc), 251 .links = link_slv_anoc_snoc, 252}; 253 254static const u16 mas_snoc_cnoc_links[] = { 255 SM6115_SLAVE_AHB2PHY_USB, 256 SM6115_SLAVE_APSS_THROTTLE_CFG, 257 SM6115_SLAVE_BIMC_CFG, 258 SM6115_SLAVE_BOOT_ROM, 259 SM6115_SLAVE_CAMERA_CFG, 260 SM6115_SLAVE_CAMERA_NRT_THROTTLE_CFG, 261 SM6115_SLAVE_CAMERA_RT_THROTTLE_CFG, 262 SM6115_SLAVE_CLK_CTL, 263 SM6115_SLAVE_CNOC_MSS, 264 SM6115_SLAVE_CRYPTO_0_CFG, 265 SM6115_SLAVE_DCC_CFG, 266 SM6115_SLAVE_DDR_PHY_CFG, 267 SM6115_SLAVE_DDR_SS_CFG, 268 SM6115_SLAVE_DISPLAY_CFG, 269 SM6115_SLAVE_DISPLAY_THROTTLE_CFG, 270 SM6115_SLAVE_GPU_CFG, 271 SM6115_SLAVE_GPU_THROTTLE_CFG, 272 SM6115_SLAVE_HWKM_CORE, 273 SM6115_SLAVE_IMEM_CFG, 274 SM6115_SLAVE_IPA_CFG, 275 SM6115_SLAVE_LPASS, 276 SM6115_SLAVE_MAPSS, 277 SM6115_SLAVE_MDSP_MPU_CFG, 278 SM6115_SLAVE_MESSAGE_RAM, 279 SM6115_SLAVE_PDM, 280 SM6115_SLAVE_PIMEM_CFG, 281 SM6115_SLAVE_PKA_CORE, 282 SM6115_SLAVE_PMIC_ARB, 283 SM6115_SLAVE_QDSS_CFG, 284 SM6115_SLAVE_QM_CFG, 285 SM6115_SLAVE_QM_MPU_CFG, 286 SM6115_SLAVE_QPIC, 287 SM6115_SLAVE_QUP_0, 288 SM6115_SLAVE_RBCPR_CX_CFG, 289 SM6115_SLAVE_RBCPR_MX_CFG, 290 SM6115_SLAVE_RPM, 291 SM6115_SLAVE_SDCC_1, 292 SM6115_SLAVE_SDCC_2, 293 SM6115_SLAVE_SECURITY, 294 SM6115_SLAVE_SERVICE_CNOC, 295 SM6115_SLAVE_SNOC_CFG, 296 SM6115_SLAVE_TCSR, 297 SM6115_SLAVE_TLMM, 298 SM6115_SLAVE_USB3, 299 SM6115_SLAVE_VENUS_CFG, 300 SM6115_SLAVE_VENUS_THROTTLE_CFG, 301 SM6115_SLAVE_VSENSE_CTRL_CFG, 302}; 303 304static struct qcom_icc_node mas_snoc_cnoc = { 305 .name = "mas_snoc_cnoc", 306 .id = SM6115_MASTER_SNOC_CNOC, 307 .channels = 1, 308 .buswidth = 8, 309 .mas_rpm_id = -1, 310 .slv_rpm_id = -1, 311 .num_links = ARRAY_SIZE(mas_snoc_cnoc_links), 312 .links = mas_snoc_cnoc_links, 313}; 314 315static struct qcom_icc_node xm_dap = { 316 .name = "xm_dap", 317 .id = SM6115_MASTER_QDSS_DAP, 318 .channels = 1, 319 .buswidth = 8, 320 .mas_rpm_id = -1, 321 .slv_rpm_id = -1, 322 .num_links = ARRAY_SIZE(mas_snoc_cnoc_links), 323 .links = mas_snoc_cnoc_links, 324}; 325 326static const u16 link_slv_snoc_bimc_nrt[] = { 327 SM6115_SLAVE_SNOC_BIMC_NRT, 328}; 329 330static struct qcom_icc_node qnm_camera_nrt = { 331 .name = "qnm_camera_nrt", 332 .id = SM6115_MASTER_CAMNOC_SF, 333 .channels = 1, 334 .buswidth = 32, 335 .qos.qos_port = 25, 336 .qos.qos_mode = NOC_QOS_MODE_FIXED, 337 .qos.areq_prio = 3, 338 .mas_rpm_id = -1, 339 .slv_rpm_id = -1, 340 .num_links = ARRAY_SIZE(link_slv_snoc_bimc_nrt), 341 .links = link_slv_snoc_bimc_nrt, 342}; 343 344static struct qcom_icc_node qxm_venus0 = { 345 .name = "qxm_venus0", 346 .id = SM6115_MASTER_VIDEO_P0, 347 .channels = 1, 348 .buswidth = 16, 349 .qos.qos_port = 30, 350 .qos.qos_mode = NOC_QOS_MODE_FIXED, 351 .qos.areq_prio = 3, 352 .qos.urg_fwd_en = true, 353 .mas_rpm_id = -1, 354 .slv_rpm_id = -1, 355 .num_links = ARRAY_SIZE(link_slv_snoc_bimc_nrt), 356 .links = link_slv_snoc_bimc_nrt, 357}; 358 359static struct qcom_icc_node qxm_venus_cpu = { 360 .name = "qxm_venus_cpu", 361 .id = SM6115_MASTER_VIDEO_PROC, 362 .channels = 1, 363 .buswidth = 8, 364 .qos.qos_port = 34, 365 .qos.qos_mode = NOC_QOS_MODE_FIXED, 366 .qos.areq_prio = 4, 367 .mas_rpm_id = -1, 368 .slv_rpm_id = -1, 369 .num_links = ARRAY_SIZE(link_slv_snoc_bimc_nrt), 370 .links = link_slv_snoc_bimc_nrt, 371}; 372 373static const u16 link_slv_snoc_bimc_rt[] = { 374 SM6115_SLAVE_SNOC_BIMC_RT, 375}; 376 377static struct qcom_icc_node qnm_camera_rt = { 378 .name = "qnm_camera_rt", 379 .id = SM6115_MASTER_CAMNOC_HF, 380 .channels = 1, 381 .buswidth = 32, 382 .qos.qos_port = 31, 383 .qos.qos_mode = NOC_QOS_MODE_FIXED, 384 .qos.areq_prio = 3, 385 .qos.urg_fwd_en = true, 386 .mas_rpm_id = -1, 387 .slv_rpm_id = -1, 388 .num_links = ARRAY_SIZE(link_slv_snoc_bimc_rt), 389 .links = link_slv_snoc_bimc_rt, 390}; 391 392static struct qcom_icc_node qxm_mdp0 = { 393 .name = "qxm_mdp0", 394 .id = SM6115_MASTER_MDP_PORT0, 395 .channels = 1, 396 .buswidth = 16, 397 .qos.qos_port = 26, 398 .qos.qos_mode = NOC_QOS_MODE_FIXED, 399 .qos.areq_prio = 3, 400 .qos.urg_fwd_en = true, 401 .mas_rpm_id = -1, 402 .slv_rpm_id = -1, 403 .num_links = ARRAY_SIZE(link_slv_snoc_bimc_rt), 404 .links = link_slv_snoc_bimc_rt, 405}; 406 407static const u16 slv_service_snoc_links[] = { 408 SM6115_SLAVE_SERVICE_SNOC, 409}; 410 411static struct qcom_icc_node qhm_snoc_cfg = { 412 .name = "qhm_snoc_cfg", 413 .id = SM6115_MASTER_SNOC_CFG, 414 .channels = 1, 415 .buswidth = 4, 416 .mas_rpm_id = -1, 417 .slv_rpm_id = -1, 418 .num_links = ARRAY_SIZE(slv_service_snoc_links), 419 .links = slv_service_snoc_links, 420}; 421 422static const u16 mas_tic_links[] = { 423 SM6115_SLAVE_APPSS, 424 SM6115_SLAVE_OCIMEM, 425 SM6115_SLAVE_PIMEM, 426 SM6115_SLAVE_QDSS_STM, 427 SM6115_SLAVE_TCU, 428 SM6115_SLAVE_SNOC_BIMC, 429 SM6115_SLAVE_SNOC_CNOC, 430}; 431 432static struct qcom_icc_node qhm_tic = { 433 .name = "qhm_tic", 434 .id = SM6115_MASTER_TIC, 435 .channels = 1, 436 .buswidth = 4, 437 .qos.qos_port = 29, 438 .qos.qos_mode = NOC_QOS_MODE_FIXED, 439 .qos.areq_prio = 2, 440 .mas_rpm_id = -1, 441 .slv_rpm_id = -1, 442 .num_links = ARRAY_SIZE(mas_tic_links), 443 .links = mas_tic_links, 444}; 445 446static struct qcom_icc_node mas_anoc_snoc = { 447 .name = "mas_anoc_snoc", 448 .id = SM6115_MASTER_ANOC_SNOC, 449 .channels = 1, 450 .buswidth = 16, 451 .mas_rpm_id = -1, 452 .slv_rpm_id = -1, 453 .num_links = ARRAY_SIZE(mas_tic_links), 454 .links = mas_tic_links, 455}; 456 457static const u16 mas_bimc_snoc_links[] = { 458 SM6115_SLAVE_APPSS, 459 SM6115_SLAVE_SNOC_CNOC, 460 SM6115_SLAVE_OCIMEM, 461 SM6115_SLAVE_PIMEM, 462 SM6115_SLAVE_QDSS_STM, 463 SM6115_SLAVE_TCU, 464}; 465 466static struct qcom_icc_node mas_bimc_snoc = { 467 .name = "mas_bimc_snoc", 468 .id = SM6115_MASTER_BIMC_SNOC, 469 .channels = 1, 470 .buswidth = 8, 471 .mas_rpm_id = 21, 472 .slv_rpm_id = -1, 473 .num_links = ARRAY_SIZE(mas_bimc_snoc_links), 474 .links = mas_bimc_snoc_links, 475}; 476 477static const u16 mas_pimem_links[] = { 478 SM6115_SLAVE_OCIMEM, 479 SM6115_SLAVE_SNOC_BIMC, 480}; 481 482static struct qcom_icc_node qxm_pimem = { 483 .name = "qxm_pimem", 484 .id = SM6115_MASTER_PIMEM, 485 .channels = 1, 486 .buswidth = 8, 487 .qos.qos_port = 41, 488 .qos.qos_mode = NOC_QOS_MODE_FIXED, 489 .qos.areq_prio = 2, 490 .mas_rpm_id = -1, 491 .slv_rpm_id = -1, 492 .num_links = ARRAY_SIZE(mas_pimem_links), 493 .links = mas_pimem_links, 494}; 495 496static struct qcom_icc_node qhm_qdss_bam = { 497 .name = "qhm_qdss_bam", 498 .id = SM6115_MASTER_QDSS_BAM, 499 .channels = 1, 500 .buswidth = 4, 501 .qos.qos_port = 23, 502 .qos.qos_mode = NOC_QOS_MODE_FIXED, 503 .qos.areq_prio = 2, 504 .mas_rpm_id = -1, 505 .slv_rpm_id = -1, 506 .num_links = ARRAY_SIZE(link_slv_anoc_snoc), 507 .links = link_slv_anoc_snoc, 508}; 509 510static struct qcom_icc_node qhm_qpic = { 511 .name = "qhm_qpic", 512 .id = SM6115_MASTER_QPIC, 513 .channels = 1, 514 .buswidth = 4, 515 .mas_rpm_id = -1, 516 .slv_rpm_id = -1, 517 .num_links = ARRAY_SIZE(link_slv_anoc_snoc), 518 .links = link_slv_anoc_snoc, 519}; 520 521static struct qcom_icc_node qhm_qup0 = { 522 .name = "qhm_qup0", 523 .id = SM6115_MASTER_QUP_0, 524 .channels = 1, 525 .buswidth = 4, 526 .qos.qos_port = 21, 527 .qos.qos_mode = NOC_QOS_MODE_FIXED, 528 .qos.areq_prio = 2, 529 .mas_rpm_id = 166, 530 .slv_rpm_id = -1, 531 .num_links = ARRAY_SIZE(link_slv_anoc_snoc), 532 .links = link_slv_anoc_snoc, 533}; 534 535static struct qcom_icc_node qxm_ipa = { 536 .name = "qxm_ipa", 537 .id = SM6115_MASTER_IPA, 538 .channels = 1, 539 .buswidth = 8, 540 .qos.qos_port = 24, 541 .qos.qos_mode = NOC_QOS_MODE_FIXED, 542 .qos.areq_prio = 2, 543 .mas_rpm_id = 59, 544 .slv_rpm_id = -1, 545 .num_links = ARRAY_SIZE(link_slv_anoc_snoc), 546 .links = link_slv_anoc_snoc, 547}; 548 549static struct qcom_icc_node xm_qdss_etr = { 550 .name = "xm_qdss_etr", 551 .id = SM6115_MASTER_QDSS_ETR, 552 .channels = 1, 553 .buswidth = 8, 554 .qos.qos_port = 33, 555 .qos.qos_mode = NOC_QOS_MODE_FIXED, 556 .qos.areq_prio = 2, 557 .mas_rpm_id = -1, 558 .slv_rpm_id = -1, 559 .num_links = ARRAY_SIZE(link_slv_anoc_snoc), 560 .links = link_slv_anoc_snoc, 561}; 562 563static struct qcom_icc_node xm_sdc1 = { 564 .name = "xm_sdc1", 565 .id = SM6115_MASTER_SDCC_1, 566 .channels = 1, 567 .buswidth = 8, 568 .qos.qos_port = 38, 569 .qos.qos_mode = NOC_QOS_MODE_FIXED, 570 .qos.areq_prio = 2, 571 .mas_rpm_id = 33, 572 .slv_rpm_id = -1, 573 .num_links = ARRAY_SIZE(link_slv_anoc_snoc), 574 .links = link_slv_anoc_snoc, 575}; 576 577static struct qcom_icc_node xm_sdc2 = { 578 .name = "xm_sdc2", 579 .id = SM6115_MASTER_SDCC_2, 580 .channels = 1, 581 .buswidth = 8, 582 .qos.qos_port = 44, 583 .qos.qos_mode = NOC_QOS_MODE_FIXED, 584 .qos.areq_prio = 2, 585 .mas_rpm_id = 35, 586 .slv_rpm_id = -1, 587 .num_links = ARRAY_SIZE(link_slv_anoc_snoc), 588 .links = link_slv_anoc_snoc, 589}; 590 591static struct qcom_icc_node xm_usb3_0 = { 592 .name = "xm_usb3_0", 593 .id = SM6115_MASTER_USB3, 594 .channels = 1, 595 .buswidth = 8, 596 .qos.qos_port = 45, 597 .qos.qos_mode = NOC_QOS_MODE_FIXED, 598 .qos.areq_prio = 2, 599 .mas_rpm_id = -1, 600 .slv_rpm_id = -1, 601 .num_links = ARRAY_SIZE(link_slv_anoc_snoc), 602 .links = link_slv_anoc_snoc, 603}; 604 605static struct qcom_icc_node ebi = { 606 .name = "ebi", 607 .id = SM6115_SLAVE_EBI_CH0, 608 .channels = 2, 609 .buswidth = 4, 610 .mas_rpm_id = -1, 611 .slv_rpm_id = 0, 612}; 613 614static const u16 slv_bimc_snoc_links[] = { 615 SM6115_MASTER_BIMC_SNOC, 616}; 617 618static struct qcom_icc_node slv_bimc_snoc = { 619 .name = "slv_bimc_snoc", 620 .id = SM6115_SLAVE_BIMC_SNOC, 621 .channels = 1, 622 .buswidth = 16, 623 .mas_rpm_id = -1, 624 .slv_rpm_id = 2, 625 .num_links = ARRAY_SIZE(slv_bimc_snoc_links), 626 .links = slv_bimc_snoc_links, 627}; 628 629static struct qcom_icc_node qup0_core_slave = { 630 .name = "qup0_core_slave", 631 .id = SM6115_SLAVE_QUP_CORE_0, 632 .channels = 1, 633 .buswidth = 4, 634 .mas_rpm_id = -1, 635 .slv_rpm_id = -1, 636}; 637 638static struct qcom_icc_node qhs_ahb2phy_usb = { 639 .name = "qhs_ahb2phy_usb", 640 .id = SM6115_SLAVE_AHB2PHY_USB, 641 .channels = 1, 642 .buswidth = 4, 643 .mas_rpm_id = -1, 644 .slv_rpm_id = -1, 645}; 646 647static struct qcom_icc_node qhs_apss_throttle_cfg = { 648 .name = "qhs_apss_throttle_cfg", 649 .id = SM6115_SLAVE_APSS_THROTTLE_CFG, 650 .channels = 1, 651 .buswidth = 4, 652 .mas_rpm_id = -1, 653 .slv_rpm_id = -1, 654}; 655 656static struct qcom_icc_node qhs_bimc_cfg = { 657 .name = "qhs_bimc_cfg", 658 .id = SM6115_SLAVE_BIMC_CFG, 659 .channels = 1, 660 .buswidth = 4, 661 .mas_rpm_id = -1, 662 .slv_rpm_id = -1, 663}; 664 665static struct qcom_icc_node qhs_boot_rom = { 666 .name = "qhs_boot_rom", 667 .id = SM6115_SLAVE_BOOT_ROM, 668 .channels = 1, 669 .buswidth = 4, 670 .mas_rpm_id = -1, 671 .slv_rpm_id = -1, 672}; 673 674static struct qcom_icc_node qhs_camera_nrt_throttle_cfg = { 675 .name = "qhs_camera_nrt_throttle_cfg", 676 .id = SM6115_SLAVE_CAMERA_NRT_THROTTLE_CFG, 677 .channels = 1, 678 .buswidth = 4, 679 .mas_rpm_id = -1, 680 .slv_rpm_id = -1, 681}; 682 683static struct qcom_icc_node qhs_camera_rt_throttle_cfg = { 684 .name = "qhs_camera_rt_throttle_cfg", 685 .id = SM6115_SLAVE_CAMERA_RT_THROTTLE_CFG, 686 .channels = 1, 687 .buswidth = 4, 688 .mas_rpm_id = -1, 689 .slv_rpm_id = -1, 690}; 691 692static struct qcom_icc_node qhs_camera_ss_cfg = { 693 .name = "qhs_camera_ss_cfg", 694 .id = SM6115_SLAVE_CAMERA_CFG, 695 .channels = 1, 696 .buswidth = 4, 697 .mas_rpm_id = -1, 698 .slv_rpm_id = -1, 699}; 700 701static struct qcom_icc_node qhs_clk_ctl = { 702 .name = "qhs_clk_ctl", 703 .id = SM6115_SLAVE_CLK_CTL, 704 .channels = 1, 705 .buswidth = 4, 706 .mas_rpm_id = -1, 707 .slv_rpm_id = -1, 708}; 709 710static struct qcom_icc_node qhs_cpr_cx = { 711 .name = "qhs_cpr_cx", 712 .id = SM6115_SLAVE_RBCPR_CX_CFG, 713 .channels = 1, 714 .buswidth = 4, 715 .mas_rpm_id = -1, 716 .slv_rpm_id = -1, 717}; 718 719static struct qcom_icc_node qhs_cpr_mx = { 720 .name = "qhs_cpr_mx", 721 .id = SM6115_SLAVE_RBCPR_MX_CFG, 722 .channels = 1, 723 .buswidth = 4, 724 .mas_rpm_id = -1, 725 .slv_rpm_id = -1, 726}; 727 728static struct qcom_icc_node qhs_crypto0_cfg = { 729 .name = "qhs_crypto0_cfg", 730 .id = SM6115_SLAVE_CRYPTO_0_CFG, 731 .channels = 1, 732 .buswidth = 4, 733 .mas_rpm_id = -1, 734 .slv_rpm_id = -1, 735}; 736 737static struct qcom_icc_node qhs_dcc_cfg = { 738 .name = "qhs_dcc_cfg", 739 .id = SM6115_SLAVE_DCC_CFG, 740 .channels = 1, 741 .buswidth = 4, 742 .mas_rpm_id = -1, 743 .slv_rpm_id = -1, 744}; 745 746static struct qcom_icc_node qhs_ddr_phy_cfg = { 747 .name = "qhs_ddr_phy_cfg", 748 .id = SM6115_SLAVE_DDR_PHY_CFG, 749 .channels = 1, 750 .buswidth = 4, 751 .mas_rpm_id = -1, 752 .slv_rpm_id = -1, 753}; 754 755static struct qcom_icc_node qhs_ddr_ss_cfg = { 756 .name = "qhs_ddr_ss_cfg", 757 .id = SM6115_SLAVE_DDR_SS_CFG, 758 .channels = 1, 759 .buswidth = 4, 760 .mas_rpm_id = -1, 761 .slv_rpm_id = -1, 762}; 763 764static struct qcom_icc_node qhs_disp_ss_cfg = { 765 .name = "qhs_disp_ss_cfg", 766 .id = SM6115_SLAVE_DISPLAY_CFG, 767 .channels = 1, 768 .buswidth = 4, 769 .mas_rpm_id = -1, 770 .slv_rpm_id = -1, 771}; 772 773static struct qcom_icc_node qhs_display_throttle_cfg = { 774 .name = "qhs_display_throttle_cfg", 775 .id = SM6115_SLAVE_DISPLAY_THROTTLE_CFG, 776 .channels = 1, 777 .buswidth = 4, 778 .mas_rpm_id = -1, 779 .slv_rpm_id = -1, 780}; 781 782static struct qcom_icc_node qhs_gpu_cfg = { 783 .name = "qhs_gpu_cfg", 784 .id = SM6115_SLAVE_GPU_CFG, 785 .channels = 1, 786 .buswidth = 8, 787 .mas_rpm_id = -1, 788 .slv_rpm_id = -1, 789}; 790 791static struct qcom_icc_node qhs_gpu_throttle_cfg = { 792 .name = "qhs_gpu_throttle_cfg", 793 .id = SM6115_SLAVE_GPU_THROTTLE_CFG, 794 .channels = 1, 795 .buswidth = 4, 796 .mas_rpm_id = -1, 797 .slv_rpm_id = -1, 798}; 799 800static struct qcom_icc_node qhs_hwkm = { 801 .name = "qhs_hwkm", 802 .id = SM6115_SLAVE_HWKM_CORE, 803 .channels = 1, 804 .buswidth = 4, 805 .mas_rpm_id = -1, 806 .slv_rpm_id = -1, 807}; 808 809static struct qcom_icc_node qhs_imem_cfg = { 810 .name = "qhs_imem_cfg", 811 .id = SM6115_SLAVE_IMEM_CFG, 812 .channels = 1, 813 .buswidth = 4, 814 .mas_rpm_id = -1, 815 .slv_rpm_id = -1, 816}; 817 818static struct qcom_icc_node qhs_ipa_cfg = { 819 .name = "qhs_ipa_cfg", 820 .id = SM6115_SLAVE_IPA_CFG, 821 .channels = 1, 822 .buswidth = 4, 823 .mas_rpm_id = -1, 824 .slv_rpm_id = -1, 825}; 826 827static struct qcom_icc_node qhs_lpass = { 828 .name = "qhs_lpass", 829 .id = SM6115_SLAVE_LPASS, 830 .channels = 1, 831 .buswidth = 4, 832 .mas_rpm_id = -1, 833 .slv_rpm_id = -1, 834}; 835 836static struct qcom_icc_node qhs_mapss = { 837 .name = "qhs_mapss", 838 .id = SM6115_SLAVE_MAPSS, 839 .channels = 1, 840 .buswidth = 4, 841 .mas_rpm_id = -1, 842 .slv_rpm_id = -1, 843}; 844 845static struct qcom_icc_node qhs_mdsp_mpu_cfg = { 846 .name = "qhs_mdsp_mpu_cfg", 847 .id = SM6115_SLAVE_MDSP_MPU_CFG, 848 .channels = 1, 849 .buswidth = 4, 850 .mas_rpm_id = -1, 851 .slv_rpm_id = -1, 852}; 853 854static struct qcom_icc_node qhs_mesg_ram = { 855 .name = "qhs_mesg_ram", 856 .id = SM6115_SLAVE_MESSAGE_RAM, 857 .channels = 1, 858 .buswidth = 4, 859 .mas_rpm_id = -1, 860 .slv_rpm_id = -1, 861}; 862 863static struct qcom_icc_node qhs_mss = { 864 .name = "qhs_mss", 865 .id = SM6115_SLAVE_CNOC_MSS, 866 .channels = 1, 867 .buswidth = 4, 868 .mas_rpm_id = -1, 869 .slv_rpm_id = -1, 870}; 871 872static struct qcom_icc_node qhs_pdm = { 873 .name = "qhs_pdm", 874 .id = SM6115_SLAVE_PDM, 875 .channels = 1, 876 .buswidth = 4, 877 .mas_rpm_id = -1, 878 .slv_rpm_id = -1, 879}; 880 881static struct qcom_icc_node qhs_pimem_cfg = { 882 .name = "qhs_pimem_cfg", 883 .id = SM6115_SLAVE_PIMEM_CFG, 884 .channels = 1, 885 .buswidth = 4, 886 .mas_rpm_id = -1, 887 .slv_rpm_id = -1, 888}; 889 890static struct qcom_icc_node qhs_pka_wrapper = { 891 .name = "qhs_pka_wrapper", 892 .id = SM6115_SLAVE_PKA_CORE, 893 .channels = 1, 894 .buswidth = 4, 895 .mas_rpm_id = -1, 896 .slv_rpm_id = -1, 897}; 898 899static struct qcom_icc_node qhs_pmic_arb = { 900 .name = "qhs_pmic_arb", 901 .id = SM6115_SLAVE_PMIC_ARB, 902 .channels = 1, 903 .buswidth = 4, 904 .mas_rpm_id = -1, 905 .slv_rpm_id = -1, 906}; 907 908static struct qcom_icc_node qhs_qdss_cfg = { 909 .name = "qhs_qdss_cfg", 910 .id = SM6115_SLAVE_QDSS_CFG, 911 .channels = 1, 912 .buswidth = 4, 913 .mas_rpm_id = -1, 914 .slv_rpm_id = -1, 915}; 916 917static struct qcom_icc_node qhs_qm_cfg = { 918 .name = "qhs_qm_cfg", 919 .id = SM6115_SLAVE_QM_CFG, 920 .channels = 1, 921 .buswidth = 4, 922 .mas_rpm_id = -1, 923 .slv_rpm_id = -1, 924}; 925 926static struct qcom_icc_node qhs_qm_mpu_cfg = { 927 .name = "qhs_qm_mpu_cfg", 928 .id = SM6115_SLAVE_QM_MPU_CFG, 929 .channels = 1, 930 .buswidth = 4, 931 .mas_rpm_id = -1, 932 .slv_rpm_id = -1, 933}; 934 935static struct qcom_icc_node qhs_qpic = { 936 .name = "qhs_qpic", 937 .id = SM6115_SLAVE_QPIC, 938 .channels = 1, 939 .buswidth = 4, 940 .mas_rpm_id = -1, 941 .slv_rpm_id = -1, 942}; 943 944static struct qcom_icc_node qhs_qup0 = { 945 .name = "qhs_qup0", 946 .id = SM6115_SLAVE_QUP_0, 947 .channels = 1, 948 .buswidth = 4, 949 .mas_rpm_id = -1, 950 .slv_rpm_id = -1, 951}; 952 953static struct qcom_icc_node qhs_rpm = { 954 .name = "qhs_rpm", 955 .id = SM6115_SLAVE_RPM, 956 .channels = 1, 957 .buswidth = 4, 958 .mas_rpm_id = -1, 959 .slv_rpm_id = -1, 960}; 961 962static struct qcom_icc_node qhs_sdc1 = { 963 .name = "qhs_sdc1", 964 .id = SM6115_SLAVE_SDCC_1, 965 .channels = 1, 966 .buswidth = 4, 967 .mas_rpm_id = -1, 968 .slv_rpm_id = -1, 969}; 970 971static struct qcom_icc_node qhs_sdc2 = { 972 .name = "qhs_sdc2", 973 .id = SM6115_SLAVE_SDCC_2, 974 .channels = 1, 975 .buswidth = 4, 976 .mas_rpm_id = -1, 977 .slv_rpm_id = -1, 978}; 979 980static struct qcom_icc_node qhs_security = { 981 .name = "qhs_security", 982 .id = SM6115_SLAVE_SECURITY, 983 .channels = 1, 984 .buswidth = 4, 985 .mas_rpm_id = -1, 986 .slv_rpm_id = -1, 987}; 988 989static const u16 slv_snoc_cfg_links[] = { 990 SM6115_MASTER_SNOC_CFG, 991}; 992 993static struct qcom_icc_node qhs_snoc_cfg = { 994 .name = "qhs_snoc_cfg", 995 .id = SM6115_SLAVE_SNOC_CFG, 996 .channels = 1, 997 .buswidth = 4, 998 .mas_rpm_id = -1, 999 .slv_rpm_id = -1, 1000 .num_links = ARRAY_SIZE(slv_snoc_cfg_links), 1001 .links = slv_snoc_cfg_links, 1002}; 1003 1004static struct qcom_icc_node qhs_tcsr = { 1005 .name = "qhs_tcsr", 1006 .id = SM6115_SLAVE_TCSR, 1007 .channels = 1, 1008 .buswidth = 4, 1009 .mas_rpm_id = -1, 1010 .slv_rpm_id = -1, 1011}; 1012 1013static struct qcom_icc_node qhs_tlmm = { 1014 .name = "qhs_tlmm", 1015 .id = SM6115_SLAVE_TLMM, 1016 .channels = 1, 1017 .buswidth = 4, 1018 .mas_rpm_id = -1, 1019 .slv_rpm_id = -1, 1020}; 1021 1022static struct qcom_icc_node qhs_usb3 = { 1023 .name = "qhs_usb3", 1024 .id = SM6115_SLAVE_USB3, 1025 .channels = 1, 1026 .buswidth = 4, 1027 .mas_rpm_id = -1, 1028 .slv_rpm_id = -1, 1029}; 1030 1031static struct qcom_icc_node qhs_venus_cfg = { 1032 .name = "qhs_venus_cfg", 1033 .id = SM6115_SLAVE_VENUS_CFG, 1034 .channels = 1, 1035 .buswidth = 4, 1036 .mas_rpm_id = -1, 1037 .slv_rpm_id = -1, 1038}; 1039 1040static struct qcom_icc_node qhs_venus_throttle_cfg = { 1041 .name = "qhs_venus_throttle_cfg", 1042 .id = SM6115_SLAVE_VENUS_THROTTLE_CFG, 1043 .channels = 1, 1044 .buswidth = 4, 1045 .mas_rpm_id = -1, 1046 .slv_rpm_id = -1, 1047}; 1048 1049static struct qcom_icc_node qhs_vsense_ctrl_cfg = { 1050 .name = "qhs_vsense_ctrl_cfg", 1051 .id = SM6115_SLAVE_VSENSE_CTRL_CFG, 1052 .channels = 1, 1053 .buswidth = 4, 1054 .mas_rpm_id = -1, 1055 .slv_rpm_id = -1, 1056}; 1057 1058static struct qcom_icc_node srvc_cnoc = { 1059 .name = "srvc_cnoc", 1060 .id = SM6115_SLAVE_SERVICE_CNOC, 1061 .channels = 1, 1062 .buswidth = 4, 1063 .mas_rpm_id = -1, 1064 .slv_rpm_id = -1, 1065}; 1066 1067static const u16 slv_snoc_bimc_nrt_links[] = { 1068 SM6115_MASTER_SNOC_BIMC_NRT, 1069}; 1070 1071static struct qcom_icc_node slv_snoc_bimc_nrt = { 1072 .name = "slv_snoc_bimc_nrt", 1073 .id = SM6115_SLAVE_SNOC_BIMC_NRT, 1074 .channels = 1, 1075 .buswidth = 16, 1076 .mas_rpm_id = -1, 1077 .slv_rpm_id = -1, 1078 .num_links = ARRAY_SIZE(slv_snoc_bimc_nrt_links), 1079 .links = slv_snoc_bimc_nrt_links, 1080}; 1081 1082static const u16 slv_snoc_bimc_rt_links[] = { 1083 SM6115_MASTER_SNOC_BIMC_RT, 1084}; 1085 1086static struct qcom_icc_node slv_snoc_bimc_rt = { 1087 .name = "slv_snoc_bimc_rt", 1088 .id = SM6115_SLAVE_SNOC_BIMC_RT, 1089 .channels = 1, 1090 .buswidth = 16, 1091 .mas_rpm_id = -1, 1092 .slv_rpm_id = -1, 1093 .num_links = ARRAY_SIZE(slv_snoc_bimc_rt_links), 1094 .links = slv_snoc_bimc_rt_links, 1095}; 1096 1097static struct qcom_icc_node qhs_apss = { 1098 .name = "qhs_apss", 1099 .id = SM6115_SLAVE_APPSS, 1100 .channels = 1, 1101 .buswidth = 8, 1102 .mas_rpm_id = -1, 1103 .slv_rpm_id = -1, 1104}; 1105 1106static const u16 slv_snoc_cnoc_links[] = { 1107 SM6115_MASTER_SNOC_CNOC 1108}; 1109 1110static struct qcom_icc_node slv_snoc_cnoc = { 1111 .name = "slv_snoc_cnoc", 1112 .id = SM6115_SLAVE_SNOC_CNOC, 1113 .channels = 1, 1114 .buswidth = 8, 1115 .mas_rpm_id = -1, 1116 .slv_rpm_id = 25, 1117 .num_links = ARRAY_SIZE(slv_snoc_cnoc_links), 1118 .links = slv_snoc_cnoc_links, 1119}; 1120 1121static struct qcom_icc_node qxs_imem = { 1122 .name = "qxs_imem", 1123 .id = SM6115_SLAVE_OCIMEM, 1124 .channels = 1, 1125 .buswidth = 8, 1126 .mas_rpm_id = -1, 1127 .slv_rpm_id = 26, 1128}; 1129 1130static struct qcom_icc_node qxs_pimem = { 1131 .name = "qxs_pimem", 1132 .id = SM6115_SLAVE_PIMEM, 1133 .channels = 1, 1134 .buswidth = 8, 1135 .mas_rpm_id = -1, 1136 .slv_rpm_id = -1, 1137}; 1138 1139static const u16 slv_snoc_bimc_links[] = { 1140 SM6115_MASTER_SNOC_BIMC, 1141}; 1142 1143static struct qcom_icc_node slv_snoc_bimc = { 1144 .name = "slv_snoc_bimc", 1145 .id = SM6115_SLAVE_SNOC_BIMC, 1146 .channels = 1, 1147 .buswidth = 16, 1148 .mas_rpm_id = -1, 1149 .slv_rpm_id = 24, 1150 .num_links = ARRAY_SIZE(slv_snoc_bimc_links), 1151 .links = slv_snoc_bimc_links, 1152}; 1153 1154static struct qcom_icc_node srvc_snoc = { 1155 .name = "srvc_snoc", 1156 .id = SM6115_SLAVE_SERVICE_SNOC, 1157 .channels = 1, 1158 .buswidth = 4, 1159 .mas_rpm_id = -1, 1160 .slv_rpm_id = -1, 1161}; 1162 1163static struct qcom_icc_node xs_qdss_stm = { 1164 .name = "xs_qdss_stm", 1165 .id = SM6115_SLAVE_QDSS_STM, 1166 .channels = 1, 1167 .buswidth = 4, 1168 .mas_rpm_id = -1, 1169 .slv_rpm_id = 30, 1170}; 1171 1172static struct qcom_icc_node xs_sys_tcu_cfg = { 1173 .name = "xs_sys_tcu_cfg", 1174 .id = SM6115_SLAVE_TCU, 1175 .channels = 1, 1176 .buswidth = 8, 1177 .mas_rpm_id = -1, 1178 .slv_rpm_id = -1, 1179}; 1180 1181static const u16 slv_anoc_snoc_links[] = { 1182 SM6115_MASTER_ANOC_SNOC, 1183}; 1184 1185static struct qcom_icc_node slv_anoc_snoc = { 1186 .name = "slv_anoc_snoc", 1187 .id = SM6115_SLAVE_ANOC_SNOC, 1188 .channels = 1, 1189 .buswidth = 16, 1190 .mas_rpm_id = -1, 1191 .slv_rpm_id = -1, 1192 .num_links = ARRAY_SIZE(slv_anoc_snoc_links), 1193 .links = slv_anoc_snoc_links, 1194}; 1195 1196static struct qcom_icc_node * const bimc_nodes[] = { 1197 [MASTER_AMPSS_M0] = &apps_proc, 1198 [MASTER_SNOC_BIMC_RT] = &mas_snoc_bimc_rt, 1199 [MASTER_SNOC_BIMC_NRT] = &mas_snoc_bimc_nrt, 1200 [SNOC_BIMC_MAS] = &mas_snoc_bimc, 1201 [MASTER_GRAPHICS_3D] = &qnm_gpu, 1202 [MASTER_TCU_0] = &tcu_0, 1203 [SLAVE_EBI_CH0] = &ebi, 1204 [BIMC_SNOC_SLV] = &slv_bimc_snoc, 1205}; 1206 1207static const struct regmap_config bimc_regmap_config = { 1208 .reg_bits = 32, 1209 .reg_stride = 4, 1210 .val_bits = 32, 1211 .max_register = 0x80000, 1212 .fast_io = true, 1213}; 1214 1215static const struct qcom_icc_desc sm6115_bimc = { 1216 .type = QCOM_ICC_BIMC, 1217 .nodes = bimc_nodes, 1218 .num_nodes = ARRAY_SIZE(bimc_nodes), 1219 .regmap_cfg = &bimc_regmap_config, 1220 .bus_clk_desc = &bimc_clk, 1221 .keep_alive = true, 1222 .qos_offset = 0x8000, 1223 .ab_coeff = 153, 1224}; 1225 1226static struct qcom_icc_node * const config_noc_nodes[] = { 1227 [SNOC_CNOC_MAS] = &mas_snoc_cnoc, 1228 [MASTER_QDSS_DAP] = &xm_dap, 1229 [SLAVE_AHB2PHY_USB] = &qhs_ahb2phy_usb, 1230 [SLAVE_APSS_THROTTLE_CFG] = &qhs_apss_throttle_cfg, 1231 [SLAVE_BIMC_CFG] = &qhs_bimc_cfg, 1232 [SLAVE_BOOT_ROM] = &qhs_boot_rom, 1233 [SLAVE_CAMERA_NRT_THROTTLE_CFG] = &qhs_camera_nrt_throttle_cfg, 1234 [SLAVE_CAMERA_RT_THROTTLE_CFG] = &qhs_camera_rt_throttle_cfg, 1235 [SLAVE_CAMERA_CFG] = &qhs_camera_ss_cfg, 1236 [SLAVE_CLK_CTL] = &qhs_clk_ctl, 1237 [SLAVE_RBCPR_CX_CFG] = &qhs_cpr_cx, 1238 [SLAVE_RBCPR_MX_CFG] = &qhs_cpr_mx, 1239 [SLAVE_CRYPTO_0_CFG] = &qhs_crypto0_cfg, 1240 [SLAVE_DCC_CFG] = &qhs_dcc_cfg, 1241 [SLAVE_DDR_PHY_CFG] = &qhs_ddr_phy_cfg, 1242 [SLAVE_DDR_SS_CFG] = &qhs_ddr_ss_cfg, 1243 [SLAVE_DISPLAY_CFG] = &qhs_disp_ss_cfg, 1244 [SLAVE_DISPLAY_THROTTLE_CFG] = &qhs_display_throttle_cfg, 1245 [SLAVE_GPU_CFG] = &qhs_gpu_cfg, 1246 [SLAVE_GPU_THROTTLE_CFG] = &qhs_gpu_throttle_cfg, 1247 [SLAVE_HWKM_CORE] = &qhs_hwkm, 1248 [SLAVE_IMEM_CFG] = &qhs_imem_cfg, 1249 [SLAVE_IPA_CFG] = &qhs_ipa_cfg, 1250 [SLAVE_LPASS] = &qhs_lpass, 1251 [SLAVE_MAPSS] = &qhs_mapss, 1252 [SLAVE_MDSP_MPU_CFG] = &qhs_mdsp_mpu_cfg, 1253 [SLAVE_MESSAGE_RAM] = &qhs_mesg_ram, 1254 [SLAVE_CNOC_MSS] = &qhs_mss, 1255 [SLAVE_PDM] = &qhs_pdm, 1256 [SLAVE_PIMEM_CFG] = &qhs_pimem_cfg, 1257 [SLAVE_PKA_CORE] = &qhs_pka_wrapper, 1258 [SLAVE_PMIC_ARB] = &qhs_pmic_arb, 1259 [SLAVE_QDSS_CFG] = &qhs_qdss_cfg, 1260 [SLAVE_QM_CFG] = &qhs_qm_cfg, 1261 [SLAVE_QM_MPU_CFG] = &qhs_qm_mpu_cfg, 1262 [SLAVE_QPIC] = &qhs_qpic, 1263 [SLAVE_QUP_0] = &qhs_qup0, 1264 [SLAVE_RPM] = &qhs_rpm, 1265 [SLAVE_SDCC_1] = &qhs_sdc1, 1266 [SLAVE_SDCC_2] = &qhs_sdc2, 1267 [SLAVE_SECURITY] = &qhs_security, 1268 [SLAVE_SNOC_CFG] = &qhs_snoc_cfg, 1269 [SLAVE_TCSR] = &qhs_tcsr, 1270 [SLAVE_TLMM] = &qhs_tlmm, 1271 [SLAVE_USB3] = &qhs_usb3, 1272 [SLAVE_VENUS_CFG] = &qhs_venus_cfg, 1273 [SLAVE_VENUS_THROTTLE_CFG] = &qhs_venus_throttle_cfg, 1274 [SLAVE_VSENSE_CTRL_CFG] = &qhs_vsense_ctrl_cfg, 1275 [SLAVE_SERVICE_CNOC] = &srvc_cnoc, 1276}; 1277 1278static const struct regmap_config cnoc_regmap_config = { 1279 .reg_bits = 32, 1280 .reg_stride = 4, 1281 .val_bits = 32, 1282 .max_register = 0x6200, 1283 .fast_io = true, 1284}; 1285 1286static const struct qcom_icc_desc sm6115_config_noc = { 1287 .type = QCOM_ICC_QNOC, 1288 .nodes = config_noc_nodes, 1289 .num_nodes = ARRAY_SIZE(config_noc_nodes), 1290 .regmap_cfg = &cnoc_regmap_config, 1291 .intf_clocks = cnoc_intf_clocks, 1292 .num_intf_clocks = ARRAY_SIZE(cnoc_intf_clocks), 1293 .bus_clk_desc = &bus_1_clk, 1294 .keep_alive = true, 1295}; 1296 1297static struct qcom_icc_node * const sys_noc_nodes[] = { 1298 [MASTER_CRYPTO_CORE0] = &crypto_c0, 1299 [MASTER_SNOC_CFG] = &qhm_snoc_cfg, 1300 [MASTER_TIC] = &qhm_tic, 1301 [MASTER_ANOC_SNOC] = &mas_anoc_snoc, 1302 [BIMC_SNOC_MAS] = &mas_bimc_snoc, 1303 [MASTER_PIMEM] = &qxm_pimem, 1304 [MASTER_QDSS_BAM] = &qhm_qdss_bam, 1305 [MASTER_QPIC] = &qhm_qpic, 1306 [MASTER_QUP_0] = &qhm_qup0, 1307 [MASTER_IPA] = &qxm_ipa, 1308 [MASTER_QDSS_ETR] = &xm_qdss_etr, 1309 [MASTER_SDCC_1] = &xm_sdc1, 1310 [MASTER_SDCC_2] = &xm_sdc2, 1311 [MASTER_USB3] = &xm_usb3_0, 1312 [SLAVE_APPSS] = &qhs_apss, 1313 [SNOC_CNOC_SLV] = &slv_snoc_cnoc, 1314 [SLAVE_OCIMEM] = &qxs_imem, 1315 [SLAVE_PIMEM] = &qxs_pimem, 1316 [SNOC_BIMC_SLV] = &slv_snoc_bimc, 1317 [SLAVE_SERVICE_SNOC] = &srvc_snoc, 1318 [SLAVE_QDSS_STM] = &xs_qdss_stm, 1319 [SLAVE_TCU] = &xs_sys_tcu_cfg, 1320 [SLAVE_ANOC_SNOC] = &slv_anoc_snoc, 1321}; 1322 1323static const struct regmap_config sys_noc_regmap_config = { 1324 .reg_bits = 32, 1325 .reg_stride = 4, 1326 .val_bits = 32, 1327 .max_register = 0x5f080, 1328 .fast_io = true, 1329}; 1330 1331static const struct qcom_icc_desc sm6115_sys_noc = { 1332 .type = QCOM_ICC_QNOC, 1333 .nodes = sys_noc_nodes, 1334 .num_nodes = ARRAY_SIZE(sys_noc_nodes), 1335 .regmap_cfg = &sys_noc_regmap_config, 1336 .intf_clocks = snoc_intf_clocks, 1337 .num_intf_clocks = ARRAY_SIZE(snoc_intf_clocks), 1338 .bus_clk_desc = &bus_2_clk, 1339 .keep_alive = true, 1340}; 1341 1342static struct qcom_icc_node * const clk_virt_nodes[] = { 1343 [MASTER_QUP_CORE_0] = &qup0_core_master, 1344 [SLAVE_QUP_CORE_0] = &qup0_core_slave, 1345}; 1346 1347static const struct qcom_icc_desc sm6115_clk_virt = { 1348 .type = QCOM_ICC_QNOC, 1349 .nodes = clk_virt_nodes, 1350 .num_nodes = ARRAY_SIZE(clk_virt_nodes), 1351 .regmap_cfg = &sys_noc_regmap_config, 1352 .bus_clk_desc = &qup_clk, 1353 .keep_alive = true, 1354}; 1355 1356static struct qcom_icc_node * const mmnrt_virt_nodes[] = { 1357 [MASTER_CAMNOC_SF] = &qnm_camera_nrt, 1358 [MASTER_VIDEO_P0] = &qxm_venus0, 1359 [MASTER_VIDEO_PROC] = &qxm_venus_cpu, 1360 [SLAVE_SNOC_BIMC_NRT] = &slv_snoc_bimc_nrt, 1361}; 1362 1363static const struct qcom_icc_desc sm6115_mmnrt_virt = { 1364 .type = QCOM_ICC_QNOC, 1365 .nodes = mmnrt_virt_nodes, 1366 .num_nodes = ARRAY_SIZE(mmnrt_virt_nodes), 1367 .regmap_cfg = &sys_noc_regmap_config, 1368 .bus_clk_desc = &mmaxi_0_clk, 1369 .keep_alive = true, 1370 .ab_coeff = 142, 1371}; 1372 1373static struct qcom_icc_node * const mmrt_virt_nodes[] = { 1374 [MASTER_CAMNOC_HF] = &qnm_camera_rt, 1375 [MASTER_MDP_PORT0] = &qxm_mdp0, 1376 [SLAVE_SNOC_BIMC_RT] = &slv_snoc_bimc_rt, 1377}; 1378 1379static const struct qcom_icc_desc sm6115_mmrt_virt = { 1380 .type = QCOM_ICC_QNOC, 1381 .nodes = mmrt_virt_nodes, 1382 .num_nodes = ARRAY_SIZE(mmrt_virt_nodes), 1383 .regmap_cfg = &sys_noc_regmap_config, 1384 .bus_clk_desc = &mmaxi_1_clk, 1385 .keep_alive = true, 1386 .ab_coeff = 139, 1387}; 1388 1389static const struct of_device_id qnoc_of_match[] = { 1390 { .compatible = "qcom,sm6115-bimc", .data = &sm6115_bimc }, 1391 { .compatible = "qcom,sm6115-clk-virt", .data = &sm6115_clk_virt }, 1392 { .compatible = "qcom,sm6115-cnoc", .data = &sm6115_config_noc }, 1393 { .compatible = "qcom,sm6115-mmrt-virt", .data = &sm6115_mmrt_virt }, 1394 { .compatible = "qcom,sm6115-mmnrt-virt", .data = &sm6115_mmnrt_virt }, 1395 { .compatible = "qcom,sm6115-snoc", .data = &sm6115_sys_noc }, 1396 { } 1397}; 1398MODULE_DEVICE_TABLE(of, qnoc_of_match); 1399 1400static struct platform_driver qnoc_driver = { 1401 .probe = qnoc_probe, 1402 .remove_new = qnoc_remove, 1403 .driver = { 1404 .name = "qnoc-sm6115", 1405 .of_match_table = qnoc_of_match, 1406 .sync_state = icc_sync_state, 1407 }, 1408}; 1409 1410static int __init qnoc_driver_init(void) 1411{ 1412 return platform_driver_register(&qnoc_driver); 1413} 1414core_initcall(qnoc_driver_init); 1415 1416static void __exit qnoc_driver_exit(void) 1417{ 1418 platform_driver_unregister(&qnoc_driver); 1419} 1420module_exit(qnoc_driver_exit); 1421 1422MODULE_DESCRIPTION("SM6115 NoC driver"); 1423MODULE_LICENSE("GPL"); 1424