at v6.19 899 lines 19 kB view raw
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. 4 */ 5 6#include <linux/device.h> 7#include <linux/interconnect.h> 8#include <linux/interconnect-provider.h> 9#include <linux/mod_devicetable.h> 10#include <linux/module.h> 11#include <linux/platform_device.h> 12#include <dt-bindings/interconnect/qcom,sdx65.h> 13 14#include "bcm-voter.h" 15#include "icc-rpmh.h" 16 17static struct qcom_icc_node llcc_mc; 18static struct qcom_icc_node acm_tcu; 19static struct qcom_icc_node qnm_snoc_gc; 20static struct qcom_icc_node xm_apps_rdwr; 21static struct qcom_icc_node qhm_audio; 22static struct qcom_icc_node qhm_blsp1; 23static struct qcom_icc_node qhm_qdss_bam; 24static struct qcom_icc_node qhm_qpic; 25static struct qcom_icc_node qhm_snoc_cfg; 26static struct qcom_icc_node qhm_spmi_fetcher1; 27static struct qcom_icc_node qnm_aggre_noc; 28static struct qcom_icc_node qnm_ipa; 29static struct qcom_icc_node qnm_memnoc; 30static struct qcom_icc_node qnm_memnoc_pcie; 31static struct qcom_icc_node qxm_crypto; 32static struct qcom_icc_node xm_ipa2pcie_slv; 33static struct qcom_icc_node xm_pcie; 34static struct qcom_icc_node xm_qdss_etr; 35static struct qcom_icc_node xm_sdc1; 36static struct qcom_icc_node xm_usb3; 37static struct qcom_icc_node ebi; 38static struct qcom_icc_node qns_llcc; 39static struct qcom_icc_node qns_memnoc_snoc; 40static struct qcom_icc_node qns_sys_pcie; 41static struct qcom_icc_node qhs_aoss; 42static struct qcom_icc_node qhs_apss; 43static struct qcom_icc_node qhs_audio; 44static struct qcom_icc_node qhs_blsp1; 45static struct qcom_icc_node qhs_clk_ctl; 46static struct qcom_icc_node qhs_crypto0_cfg; 47static struct qcom_icc_node qhs_ddrss_cfg; 48static struct qcom_icc_node qhs_ecc_cfg; 49static struct qcom_icc_node qhs_imem_cfg; 50static struct qcom_icc_node qhs_ipa; 51static struct qcom_icc_node qhs_mss_cfg; 52static struct qcom_icc_node qhs_pcie_parf; 53static struct qcom_icc_node qhs_pdm; 54static struct qcom_icc_node qhs_prng; 55static struct qcom_icc_node qhs_qdss_cfg; 56static struct qcom_icc_node qhs_qpic; 57static struct qcom_icc_node qhs_sdc1; 58static struct qcom_icc_node qhs_snoc_cfg; 59static struct qcom_icc_node qhs_spmi_fetcher; 60static struct qcom_icc_node qhs_spmi_vgi_coex; 61static struct qcom_icc_node qhs_tcsr; 62static struct qcom_icc_node qhs_tlmm; 63static struct qcom_icc_node qhs_usb3; 64static struct qcom_icc_node qhs_usb3_phy; 65static struct qcom_icc_node qns_aggre_noc; 66static struct qcom_icc_node qns_snoc_memnoc; 67static struct qcom_icc_node qxs_imem; 68static struct qcom_icc_node srvc_snoc; 69static struct qcom_icc_node xs_pcie; 70static struct qcom_icc_node xs_qdss_stm; 71static struct qcom_icc_node xs_sys_tcu_cfg; 72 73static struct qcom_icc_node llcc_mc = { 74 .name = "llcc_mc", 75 .channels = 1, 76 .buswidth = 4, 77 .num_links = 1, 78 .link_nodes = { &ebi }, 79}; 80 81static struct qcom_icc_node acm_tcu = { 82 .name = "acm_tcu", 83 .channels = 1, 84 .buswidth = 8, 85 .num_links = 3, 86 .link_nodes = { &qns_llcc, 87 &qns_memnoc_snoc, 88 &qns_sys_pcie }, 89}; 90 91static struct qcom_icc_node qnm_snoc_gc = { 92 .name = "qnm_snoc_gc", 93 .channels = 1, 94 .buswidth = 16, 95 .num_links = 1, 96 .link_nodes = { &qns_llcc }, 97}; 98 99static struct qcom_icc_node xm_apps_rdwr = { 100 .name = "xm_apps_rdwr", 101 .channels = 1, 102 .buswidth = 16, 103 .num_links = 3, 104 .link_nodes = { &qns_llcc, 105 &qns_memnoc_snoc, 106 &qns_sys_pcie }, 107}; 108 109static struct qcom_icc_node qhm_audio = { 110 .name = "qhm_audio", 111 .channels = 1, 112 .buswidth = 4, 113 .num_links = 1, 114 .link_nodes = { &qns_aggre_noc }, 115}; 116 117static struct qcom_icc_node qhm_blsp1 = { 118 .name = "qhm_blsp1", 119 .channels = 1, 120 .buswidth = 4, 121 .num_links = 1, 122 .link_nodes = { &qns_aggre_noc }, 123}; 124 125static struct qcom_icc_node qhm_qdss_bam = { 126 .name = "qhm_qdss_bam", 127 .channels = 1, 128 .buswidth = 4, 129 .num_links = 26, 130 .link_nodes = { &qhs_aoss, 131 &qhs_audio, 132 &qhs_blsp1, 133 &qhs_clk_ctl, 134 &qhs_crypto0_cfg, 135 &qhs_ddrss_cfg, 136 &qhs_ecc_cfg, 137 &qhs_imem_cfg, 138 &qhs_ipa, 139 &qhs_mss_cfg, 140 &qhs_pcie_parf, 141 &qhs_pdm, 142 &qhs_prng, 143 &qhs_qdss_cfg, 144 &qhs_qpic, 145 &qhs_sdc1, 146 &qhs_snoc_cfg, 147 &qhs_spmi_fetcher, 148 &qhs_spmi_vgi_coex, 149 &qhs_tcsr, 150 &qhs_tlmm, 151 &qhs_usb3, 152 &qhs_usb3_phy, 153 &qns_snoc_memnoc, 154 &qxs_imem, 155 &xs_sys_tcu_cfg }, 156}; 157 158static struct qcom_icc_node qhm_qpic = { 159 .name = "qhm_qpic", 160 .channels = 1, 161 .buswidth = 4, 162 .num_links = 4, 163 .link_nodes = { &qhs_aoss, 164 &qhs_audio, 165 &qhs_ipa, 166 &qns_aggre_noc }, 167}; 168 169static struct qcom_icc_node qhm_snoc_cfg = { 170 .name = "qhm_snoc_cfg", 171 .channels = 1, 172 .buswidth = 4, 173 .num_links = 1, 174 .link_nodes = { &srvc_snoc }, 175}; 176 177static struct qcom_icc_node qhm_spmi_fetcher1 = { 178 .name = "qhm_spmi_fetcher1", 179 .channels = 1, 180 .buswidth = 4, 181 .num_links = 2, 182 .link_nodes = { &qhs_aoss, 183 &qns_aggre_noc }, 184}; 185 186static struct qcom_icc_node qnm_aggre_noc = { 187 .name = "qnm_aggre_noc", 188 .channels = 1, 189 .buswidth = 8, 190 .num_links = 29, 191 .link_nodes = { &qhs_aoss, 192 &qhs_apss, 193 &qhs_audio, 194 &qhs_blsp1, 195 &qhs_clk_ctl, 196 &qhs_crypto0_cfg, 197 &qhs_ddrss_cfg, 198 &qhs_ecc_cfg, 199 &qhs_imem_cfg, 200 &qhs_ipa, 201 &qhs_mss_cfg, 202 &qhs_pcie_parf, 203 &qhs_pdm, 204 &qhs_prng, 205 &qhs_qdss_cfg, 206 &qhs_qpic, 207 &qhs_sdc1, 208 &qhs_snoc_cfg, 209 &qhs_spmi_fetcher, 210 &qhs_spmi_vgi_coex, 211 &qhs_tcsr, 212 &qhs_tlmm, 213 &qhs_usb3, 214 &qhs_usb3_phy, 215 &qns_snoc_memnoc, 216 &qxs_imem, 217 &xs_pcie, 218 &xs_qdss_stm, 219 &xs_sys_tcu_cfg }, 220}; 221 222static struct qcom_icc_node qnm_ipa = { 223 .name = "qnm_ipa", 224 .channels = 1, 225 .buswidth = 8, 226 .num_links = 26, 227 .link_nodes = { &qhs_aoss, 228 &qhs_audio, 229 &qhs_blsp1, 230 &qhs_clk_ctl, 231 &qhs_crypto0_cfg, 232 &qhs_ddrss_cfg, 233 &qhs_ecc_cfg, 234 &qhs_imem_cfg, 235 &qhs_ipa, 236 &qhs_mss_cfg, 237 &qhs_pcie_parf, 238 &qhs_pdm, 239 &qhs_prng, 240 &qhs_qdss_cfg, 241 &qhs_qpic, 242 &qhs_sdc1, 243 &qhs_snoc_cfg, 244 &qhs_spmi_fetcher, 245 &qhs_tcsr, 246 &qhs_tlmm, 247 &qhs_usb3, 248 &qhs_usb3_phy, 249 &qns_snoc_memnoc, 250 &qxs_imem, 251 &xs_pcie, 252 &xs_qdss_stm }, 253}; 254 255static struct qcom_icc_node qnm_memnoc = { 256 .name = "qnm_memnoc", 257 .channels = 1, 258 .buswidth = 8, 259 .num_links = 27, 260 .link_nodes = { &qhs_aoss, 261 &qhs_apss, 262 &qhs_audio, 263 &qhs_blsp1, 264 &qhs_clk_ctl, 265 &qhs_crypto0_cfg, 266 &qhs_ddrss_cfg, 267 &qhs_ecc_cfg, 268 &qhs_imem_cfg, 269 &qhs_ipa, 270 &qhs_mss_cfg, 271 &qhs_pcie_parf, 272 &qhs_pdm, 273 &qhs_prng, 274 &qhs_qdss_cfg, 275 &qhs_qpic, 276 &qhs_sdc1, 277 &qhs_snoc_cfg, 278 &qhs_spmi_fetcher, 279 &qhs_spmi_vgi_coex, 280 &qhs_tcsr, 281 &qhs_tlmm, 282 &qhs_usb3, 283 &qhs_usb3_phy, 284 &qxs_imem, 285 &xs_qdss_stm, 286 &xs_sys_tcu_cfg }, 287}; 288 289static struct qcom_icc_node qnm_memnoc_pcie = { 290 .name = "qnm_memnoc_pcie", 291 .channels = 1, 292 .buswidth = 8, 293 .num_links = 1, 294 .link_nodes = { &xs_pcie }, 295}; 296 297static struct qcom_icc_node qxm_crypto = { 298 .name = "qxm_crypto", 299 .channels = 1, 300 .buswidth = 8, 301 .num_links = 2, 302 .link_nodes = { &qhs_aoss, 303 &qns_aggre_noc }, 304}; 305 306static struct qcom_icc_node xm_ipa2pcie_slv = { 307 .name = "xm_ipa2pcie_slv", 308 .channels = 1, 309 .buswidth = 8, 310 .num_links = 1, 311 .link_nodes = { &xs_pcie }, 312}; 313 314static struct qcom_icc_node xm_pcie = { 315 .name = "xm_pcie", 316 .channels = 1, 317 .buswidth = 8, 318 .num_links = 1, 319 .link_nodes = { &qns_aggre_noc }, 320}; 321 322static struct qcom_icc_node xm_qdss_etr = { 323 .name = "xm_qdss_etr", 324 .channels = 1, 325 .buswidth = 8, 326 .num_links = 26, 327 .link_nodes = { &qhs_aoss, 328 &qhs_audio, 329 &qhs_blsp1, 330 &qhs_clk_ctl, 331 &qhs_crypto0_cfg, 332 &qhs_ddrss_cfg, 333 &qhs_ecc_cfg, 334 &qhs_imem_cfg, 335 &qhs_ipa, 336 &qhs_mss_cfg, 337 &qhs_pcie_parf, 338 &qhs_pdm, 339 &qhs_prng, 340 &qhs_qdss_cfg, 341 &qhs_qpic, 342 &qhs_sdc1, 343 &qhs_snoc_cfg, 344 &qhs_spmi_fetcher, 345 &qhs_spmi_vgi_coex, 346 &qhs_tcsr, 347 &qhs_tlmm, 348 &qhs_usb3, 349 &qhs_usb3_phy, 350 &qns_snoc_memnoc, 351 &qxs_imem, 352 &xs_sys_tcu_cfg }, 353}; 354 355static struct qcom_icc_node xm_sdc1 = { 356 .name = "xm_sdc1", 357 .channels = 1, 358 .buswidth = 8, 359 .num_links = 4, 360 .link_nodes = { &qhs_aoss, 361 &qhs_audio, 362 &qhs_ipa, 363 &qns_aggre_noc }, 364}; 365 366static struct qcom_icc_node xm_usb3 = { 367 .name = "xm_usb3", 368 .channels = 1, 369 .buswidth = 8, 370 .num_links = 1, 371 .link_nodes = { &qns_aggre_noc }, 372}; 373 374static struct qcom_icc_node ebi = { 375 .name = "ebi", 376 .channels = 1, 377 .buswidth = 4, 378}; 379 380static struct qcom_icc_node qns_llcc = { 381 .name = "qns_llcc", 382 .channels = 1, 383 .buswidth = 16, 384 .num_links = 1, 385 .link_nodes = { &llcc_mc }, 386}; 387 388static struct qcom_icc_node qns_memnoc_snoc = { 389 .name = "qns_memnoc_snoc", 390 .channels = 1, 391 .buswidth = 8, 392 .num_links = 1, 393 .link_nodes = { &qnm_memnoc }, 394}; 395 396static struct qcom_icc_node qns_sys_pcie = { 397 .name = "qns_sys_pcie", 398 .channels = 1, 399 .buswidth = 8, 400 .num_links = 1, 401 .link_nodes = { &qnm_memnoc_pcie }, 402}; 403 404static struct qcom_icc_node qhs_aoss = { 405 .name = "qhs_aoss", 406 .channels = 1, 407 .buswidth = 4, 408}; 409 410static struct qcom_icc_node qhs_apss = { 411 .name = "qhs_apss", 412 .channels = 1, 413 .buswidth = 4, 414}; 415 416static struct qcom_icc_node qhs_audio = { 417 .name = "qhs_audio", 418 .channels = 1, 419 .buswidth = 4, 420}; 421 422static struct qcom_icc_node qhs_blsp1 = { 423 .name = "qhs_blsp1", 424 .channels = 1, 425 .buswidth = 4, 426}; 427 428static struct qcom_icc_node qhs_clk_ctl = { 429 .name = "qhs_clk_ctl", 430 .channels = 1, 431 .buswidth = 4, 432}; 433 434static struct qcom_icc_node qhs_crypto0_cfg = { 435 .name = "qhs_crypto0_cfg", 436 .channels = 1, 437 .buswidth = 4, 438}; 439 440static struct qcom_icc_node qhs_ddrss_cfg = { 441 .name = "qhs_ddrss_cfg", 442 .channels = 1, 443 .buswidth = 4, 444}; 445 446static struct qcom_icc_node qhs_ecc_cfg = { 447 .name = "qhs_ecc_cfg", 448 .channels = 1, 449 .buswidth = 4, 450}; 451 452static struct qcom_icc_node qhs_imem_cfg = { 453 .name = "qhs_imem_cfg", 454 .channels = 1, 455 .buswidth = 4, 456}; 457 458static struct qcom_icc_node qhs_ipa = { 459 .name = "qhs_ipa", 460 .channels = 1, 461 .buswidth = 4, 462}; 463 464static struct qcom_icc_node qhs_mss_cfg = { 465 .name = "qhs_mss_cfg", 466 .channels = 1, 467 .buswidth = 4, 468}; 469 470static struct qcom_icc_node qhs_pcie_parf = { 471 .name = "qhs_pcie_parf", 472 .channels = 1, 473 .buswidth = 4, 474}; 475 476static struct qcom_icc_node qhs_pdm = { 477 .name = "qhs_pdm", 478 .channels = 1, 479 .buswidth = 4, 480}; 481 482static struct qcom_icc_node qhs_prng = { 483 .name = "qhs_prng", 484 .channels = 1, 485 .buswidth = 4, 486}; 487 488static struct qcom_icc_node qhs_qdss_cfg = { 489 .name = "qhs_qdss_cfg", 490 .channels = 1, 491 .buswidth = 4, 492}; 493 494static struct qcom_icc_node qhs_qpic = { 495 .name = "qhs_qpic", 496 .channels = 1, 497 .buswidth = 4, 498}; 499 500static struct qcom_icc_node qhs_sdc1 = { 501 .name = "qhs_sdc1", 502 .channels = 1, 503 .buswidth = 4, 504}; 505 506static struct qcom_icc_node qhs_snoc_cfg = { 507 .name = "qhs_snoc_cfg", 508 .channels = 1, 509 .buswidth = 4, 510 .num_links = 1, 511 .link_nodes = { &qhm_snoc_cfg }, 512}; 513 514static struct qcom_icc_node qhs_spmi_fetcher = { 515 .name = "qhs_spmi_fetcher", 516 .channels = 1, 517 .buswidth = 4, 518}; 519 520static struct qcom_icc_node qhs_spmi_vgi_coex = { 521 .name = "qhs_spmi_vgi_coex", 522 .channels = 1, 523 .buswidth = 4, 524}; 525 526static struct qcom_icc_node qhs_tcsr = { 527 .name = "qhs_tcsr", 528 .channels = 1, 529 .buswidth = 4, 530}; 531 532static struct qcom_icc_node qhs_tlmm = { 533 .name = "qhs_tlmm", 534 .channels = 1, 535 .buswidth = 4, 536}; 537 538static struct qcom_icc_node qhs_usb3 = { 539 .name = "qhs_usb3", 540 .channels = 1, 541 .buswidth = 4, 542}; 543 544static struct qcom_icc_node qhs_usb3_phy = { 545 .name = "qhs_usb3_phy", 546 .channels = 1, 547 .buswidth = 4, 548}; 549 550static struct qcom_icc_node qns_aggre_noc = { 551 .name = "qns_aggre_noc", 552 .channels = 1, 553 .buswidth = 8, 554 .num_links = 1, 555 .link_nodes = { &qnm_aggre_noc }, 556}; 557 558static struct qcom_icc_node qns_snoc_memnoc = { 559 .name = "qns_snoc_memnoc", 560 .channels = 1, 561 .buswidth = 16, 562 .num_links = 1, 563 .link_nodes = { &qnm_snoc_gc }, 564}; 565 566static struct qcom_icc_node qxs_imem = { 567 .name = "qxs_imem", 568 .channels = 1, 569 .buswidth = 8, 570}; 571 572static struct qcom_icc_node srvc_snoc = { 573 .name = "srvc_snoc", 574 .channels = 1, 575 .buswidth = 4, 576}; 577 578static struct qcom_icc_node xs_pcie = { 579 .name = "xs_pcie", 580 .channels = 1, 581 .buswidth = 8, 582}; 583 584static struct qcom_icc_node xs_qdss_stm = { 585 .name = "xs_qdss_stm", 586 .channels = 1, 587 .buswidth = 4, 588}; 589 590static struct qcom_icc_node xs_sys_tcu_cfg = { 591 .name = "xs_sys_tcu_cfg", 592 .channels = 1, 593 .buswidth = 8, 594}; 595 596static struct qcom_icc_bcm bcm_ce0 = { 597 .name = "CE0", 598 .keepalive = false, 599 .num_nodes = 1, 600 .nodes = { &qxm_crypto }, 601}; 602 603static struct qcom_icc_bcm bcm_mc0 = { 604 .name = "MC0", 605 .keepalive = true, 606 .num_nodes = 1, 607 .nodes = { &ebi }, 608}; 609 610static struct qcom_icc_bcm bcm_pn0 = { 611 .name = "PN0", 612 .keepalive = true, 613 .num_nodes = 26, 614 .nodes = { &qhm_snoc_cfg, 615 &qhs_aoss, 616 &qhs_apss, 617 &qhs_audio, 618 &qhs_blsp1, 619 &qhs_clk_ctl, 620 &qhs_crypto0_cfg, 621 &qhs_ddrss_cfg, 622 &qhs_ecc_cfg, 623 &qhs_imem_cfg, 624 &qhs_ipa, 625 &qhs_mss_cfg, 626 &qhs_pcie_parf, 627 &qhs_pdm, 628 &qhs_prng, 629 &qhs_qdss_cfg, 630 &qhs_qpic, 631 &qhs_sdc1, 632 &qhs_snoc_cfg, 633 &qhs_spmi_fetcher, 634 &qhs_spmi_vgi_coex, 635 &qhs_tcsr, 636 &qhs_tlmm, 637 &qhs_usb3, 638 &qhs_usb3_phy, 639 &srvc_snoc 640 }, 641}; 642 643static struct qcom_icc_bcm bcm_pn1 = { 644 .name = "PN1", 645 .keepalive = false, 646 .num_nodes = 1, 647 .nodes = { &xm_sdc1 }, 648}; 649 650static struct qcom_icc_bcm bcm_pn2 = { 651 .name = "PN2", 652 .keepalive = false, 653 .num_nodes = 2, 654 .nodes = { &qhm_audio, &qhm_spmi_fetcher1 }, 655}; 656 657static struct qcom_icc_bcm bcm_pn3 = { 658 .name = "PN3", 659 .keepalive = false, 660 .num_nodes = 2, 661 .nodes = { &qhm_blsp1, &qhm_qpic }, 662}; 663 664static struct qcom_icc_bcm bcm_pn4 = { 665 .name = "PN4", 666 .keepalive = false, 667 .num_nodes = 1, 668 .nodes = { &qxm_crypto }, 669}; 670 671static struct qcom_icc_bcm bcm_sh0 = { 672 .name = "SH0", 673 .keepalive = true, 674 .num_nodes = 1, 675 .nodes = { &qns_llcc }, 676}; 677 678static struct qcom_icc_bcm bcm_sh1 = { 679 .name = "SH1", 680 .keepalive = false, 681 .num_nodes = 1, 682 .nodes = { &qns_memnoc_snoc }, 683}; 684 685static struct qcom_icc_bcm bcm_sh3 = { 686 .name = "SH3", 687 .keepalive = false, 688 .num_nodes = 1, 689 .nodes = { &xm_apps_rdwr }, 690}; 691 692static struct qcom_icc_bcm bcm_sn0 = { 693 .name = "SN0", 694 .keepalive = true, 695 .num_nodes = 1, 696 .nodes = { &qns_snoc_memnoc }, 697}; 698 699static struct qcom_icc_bcm bcm_sn1 = { 700 .name = "SN1", 701 .keepalive = false, 702 .num_nodes = 1, 703 .nodes = { &qxs_imem }, 704}; 705 706static struct qcom_icc_bcm bcm_sn2 = { 707 .name = "SN2", 708 .keepalive = false, 709 .num_nodes = 1, 710 .nodes = { &xs_qdss_stm }, 711}; 712 713static struct qcom_icc_bcm bcm_sn3 = { 714 .name = "SN3", 715 .keepalive = false, 716 .num_nodes = 1, 717 .nodes = { &xs_sys_tcu_cfg }, 718}; 719 720static struct qcom_icc_bcm bcm_sn5 = { 721 .name = "SN5", 722 .keepalive = false, 723 .num_nodes = 1, 724 .nodes = { &xs_pcie }, 725}; 726 727static struct qcom_icc_bcm bcm_sn6 = { 728 .name = "SN6", 729 .keepalive = false, 730 .num_nodes = 2, 731 .nodes = { &qhm_qdss_bam, &xm_qdss_etr }, 732}; 733 734static struct qcom_icc_bcm bcm_sn7 = { 735 .name = "SN7", 736 .keepalive = false, 737 .num_nodes = 4, 738 .nodes = { &qnm_aggre_noc, &xm_pcie, &xm_usb3, &qns_aggre_noc }, 739}; 740 741static struct qcom_icc_bcm bcm_sn8 = { 742 .name = "SN8", 743 .keepalive = false, 744 .num_nodes = 1, 745 .nodes = { &qnm_memnoc }, 746}; 747 748static struct qcom_icc_bcm bcm_sn9 = { 749 .name = "SN9", 750 .keepalive = false, 751 .num_nodes = 1, 752 .nodes = { &qnm_memnoc_pcie }, 753}; 754 755static struct qcom_icc_bcm bcm_sn10 = { 756 .name = "SN10", 757 .keepalive = false, 758 .num_nodes = 2, 759 .nodes = { &qnm_ipa, &xm_ipa2pcie_slv }, 760}; 761 762static struct qcom_icc_bcm * const mc_virt_bcms[] = { 763 &bcm_mc0, 764}; 765 766static struct qcom_icc_node * const mc_virt_nodes[] = { 767 [MASTER_LLCC] = &llcc_mc, 768 [SLAVE_EBI1] = &ebi, 769}; 770 771static const struct qcom_icc_desc sdx65_mc_virt = { 772 .nodes = mc_virt_nodes, 773 .num_nodes = ARRAY_SIZE(mc_virt_nodes), 774 .bcms = mc_virt_bcms, 775 .num_bcms = ARRAY_SIZE(mc_virt_bcms), 776}; 777 778static struct qcom_icc_bcm * const mem_noc_bcms[] = { 779 &bcm_sh0, 780 &bcm_sh1, 781 &bcm_sh3, 782}; 783 784static struct qcom_icc_node * const mem_noc_nodes[] = { 785 [MASTER_TCU_0] = &acm_tcu, 786 [MASTER_SNOC_GC_MEM_NOC] = &qnm_snoc_gc, 787 [MASTER_APPSS_PROC] = &xm_apps_rdwr, 788 [SLAVE_LLCC] = &qns_llcc, 789 [SLAVE_MEM_NOC_SNOC] = &qns_memnoc_snoc, 790 [SLAVE_MEM_NOC_PCIE_SNOC] = &qns_sys_pcie, 791}; 792 793static const struct qcom_icc_desc sdx65_mem_noc = { 794 .nodes = mem_noc_nodes, 795 .num_nodes = ARRAY_SIZE(mem_noc_nodes), 796 .bcms = mem_noc_bcms, 797 .num_bcms = ARRAY_SIZE(mem_noc_bcms), 798}; 799 800static struct qcom_icc_bcm * const system_noc_bcms[] = { 801 &bcm_ce0, 802 &bcm_pn0, 803 &bcm_pn1, 804 &bcm_pn2, 805 &bcm_pn3, 806 &bcm_pn4, 807 &bcm_sn0, 808 &bcm_sn1, 809 &bcm_sn2, 810 &bcm_sn3, 811 &bcm_sn5, 812 &bcm_sn6, 813 &bcm_sn7, 814 &bcm_sn8, 815 &bcm_sn9, 816 &bcm_sn10, 817}; 818 819static struct qcom_icc_node * const system_noc_nodes[] = { 820 [MASTER_AUDIO] = &qhm_audio, 821 [MASTER_BLSP_1] = &qhm_blsp1, 822 [MASTER_QDSS_BAM] = &qhm_qdss_bam, 823 [MASTER_QPIC] = &qhm_qpic, 824 [MASTER_SNOC_CFG] = &qhm_snoc_cfg, 825 [MASTER_SPMI_FETCHER] = &qhm_spmi_fetcher1, 826 [MASTER_ANOC_SNOC] = &qnm_aggre_noc, 827 [MASTER_IPA] = &qnm_ipa, 828 [MASTER_MEM_NOC_SNOC] = &qnm_memnoc, 829 [MASTER_MEM_NOC_PCIE_SNOC] = &qnm_memnoc_pcie, 830 [MASTER_CRYPTO] = &qxm_crypto, 831 [MASTER_IPA_PCIE] = &xm_ipa2pcie_slv, 832 [MASTER_PCIE_0] = &xm_pcie, 833 [MASTER_QDSS_ETR] = &xm_qdss_etr, 834 [MASTER_SDCC_1] = &xm_sdc1, 835 [MASTER_USB3] = &xm_usb3, 836 [SLAVE_AOSS] = &qhs_aoss, 837 [SLAVE_APPSS] = &qhs_apss, 838 [SLAVE_AUDIO] = &qhs_audio, 839 [SLAVE_BLSP_1] = &qhs_blsp1, 840 [SLAVE_CLK_CTL] = &qhs_clk_ctl, 841 [SLAVE_CRYPTO_0_CFG] = &qhs_crypto0_cfg, 842 [SLAVE_CNOC_DDRSS] = &qhs_ddrss_cfg, 843 [SLAVE_ECC_CFG] = &qhs_ecc_cfg, 844 [SLAVE_IMEM_CFG] = &qhs_imem_cfg, 845 [SLAVE_IPA_CFG] = &qhs_ipa, 846 [SLAVE_CNOC_MSS] = &qhs_mss_cfg, 847 [SLAVE_PCIE_PARF] = &qhs_pcie_parf, 848 [SLAVE_PDM] = &qhs_pdm, 849 [SLAVE_PRNG] = &qhs_prng, 850 [SLAVE_QDSS_CFG] = &qhs_qdss_cfg, 851 [SLAVE_QPIC] = &qhs_qpic, 852 [SLAVE_SDCC_1] = &qhs_sdc1, 853 [SLAVE_SNOC_CFG] = &qhs_snoc_cfg, 854 [SLAVE_SPMI_FETCHER] = &qhs_spmi_fetcher, 855 [SLAVE_SPMI_VGI_COEX] = &qhs_spmi_vgi_coex, 856 [SLAVE_TCSR] = &qhs_tcsr, 857 [SLAVE_TLMM] = &qhs_tlmm, 858 [SLAVE_USB3] = &qhs_usb3, 859 [SLAVE_USB3_PHY_CFG] = &qhs_usb3_phy, 860 [SLAVE_ANOC_SNOC] = &qns_aggre_noc, 861 [SLAVE_SNOC_MEM_NOC_GC] = &qns_snoc_memnoc, 862 [SLAVE_IMEM] = &qxs_imem, 863 [SLAVE_SERVICE_SNOC] = &srvc_snoc, 864 [SLAVE_PCIE_0] = &xs_pcie, 865 [SLAVE_QDSS_STM] = &xs_qdss_stm, 866 [SLAVE_TCU] = &xs_sys_tcu_cfg, 867}; 868 869static const struct qcom_icc_desc sdx65_system_noc = { 870 .nodes = system_noc_nodes, 871 .num_nodes = ARRAY_SIZE(system_noc_nodes), 872 .bcms = system_noc_bcms, 873 .num_bcms = ARRAY_SIZE(system_noc_bcms), 874}; 875 876static const struct of_device_id qnoc_of_match[] = { 877 { .compatible = "qcom,sdx65-mc-virt", 878 .data = &sdx65_mc_virt}, 879 { .compatible = "qcom,sdx65-mem-noc", 880 .data = &sdx65_mem_noc}, 881 { .compatible = "qcom,sdx65-system-noc", 882 .data = &sdx65_system_noc}, 883 { } 884}; 885MODULE_DEVICE_TABLE(of, qnoc_of_match); 886 887static struct platform_driver qnoc_driver = { 888 .probe = qcom_icc_rpmh_probe, 889 .remove = qcom_icc_rpmh_remove, 890 .driver = { 891 .name = "qnoc-sdx65", 892 .of_match_table = qnoc_of_match, 893 .sync_state = icc_sync_state, 894 }, 895}; 896module_platform_driver(qnoc_driver); 897 898MODULE_DESCRIPTION("Qualcomm SDX65 NoC driver"); 899MODULE_LICENSE("GPL v2");