File Index
Files and directories
Sign in
FILE

qcs615.c

File preview with syntax highlighting.

linux-6.19.14/drivers/interconnect/qcom/qcs615.c C
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
   4 *
   5 */
   6
   7#include <linux/device.h>
   8#include <linux/interconnect.h>
   9#include <linux/interconnect-provider.h>
  10#include <linux/module.h>
  11#include <linux/of_platform.h>
  12#include <dt-bindings/interconnect/qcom,qcs615-rpmh.h>
  13
  14#include "bcm-voter.h"
  15#include "icc-rpmh.h"
  16
  17static struct qcom_icc_node qhm_a1noc_cfg;
  18static struct qcom_icc_node qhm_qdss_bam;
  19static struct qcom_icc_node qhm_qspi;
  20static struct qcom_icc_node qhm_qup0;
  21static struct qcom_icc_node qhm_qup1;
  22static struct qcom_icc_node qnm_cnoc;
  23static struct qcom_icc_node qxm_crypto;
  24static struct qcom_icc_node qxm_ipa;
  25static struct qcom_icc_node xm_emac_avb;
  26static struct qcom_icc_node xm_pcie;
  27static struct qcom_icc_node xm_qdss_etr;
  28static struct qcom_icc_node xm_sdc1;
  29static struct qcom_icc_node xm_sdc2;
  30static struct qcom_icc_node xm_ufs_mem;
  31static struct qcom_icc_node xm_usb2;
  32static struct qcom_icc_node xm_usb3_0;
  33static struct qcom_icc_node qxm_camnoc_hf0_uncomp;
  34static struct qcom_icc_node qxm_camnoc_hf1_uncomp;
  35static struct qcom_icc_node qxm_camnoc_sf_uncomp;
  36static struct qcom_icc_node qhm_spdm;
  37static struct qcom_icc_node qnm_snoc;
  38static struct qcom_icc_node xm_qdss_dap;
  39static struct qcom_icc_node qhm_cnoc;
  40static struct qcom_icc_node acm_apps;
  41static struct qcom_icc_node acm_gpu_tcu;
  42static struct qcom_icc_node acm_sys_tcu;
  43static struct qcom_icc_node qhm_gemnoc_cfg;
  44static struct qcom_icc_node qnm_gpu;
  45static struct qcom_icc_node qnm_mnoc_hf;
  46static struct qcom_icc_node qnm_mnoc_sf;
  47static struct qcom_icc_node qnm_snoc_gc;
  48static struct qcom_icc_node qnm_snoc_sf;
  49static struct qcom_icc_node llcc_mc;
  50static struct qcom_icc_node qhm_mnoc_cfg;
  51static struct qcom_icc_node qxm_camnoc_hf0;
  52static struct qcom_icc_node qxm_camnoc_hf1;
  53static struct qcom_icc_node qxm_camnoc_sf;
  54static struct qcom_icc_node qxm_mdp0;
  55static struct qcom_icc_node qxm_rot;
  56static struct qcom_icc_node qxm_venus0;
  57static struct qcom_icc_node qxm_venus_arm9;
  58static struct qcom_icc_node qhm_snoc_cfg;
  59static struct qcom_icc_node qnm_aggre1_noc;
  60static struct qcom_icc_node qnm_gemnoc;
  61static struct qcom_icc_node qnm_gemnoc_pcie;
  62static struct qcom_icc_node qnm_lpass_anoc;
  63static struct qcom_icc_node qnm_pcie_anoc;
  64static struct qcom_icc_node qxm_pimem;
  65static struct qcom_icc_node xm_gic;
  66static struct qcom_icc_node qns_a1noc_snoc;
  67static struct qcom_icc_node qns_lpass_snoc;
  68static struct qcom_icc_node qns_pcie_snoc;
  69static struct qcom_icc_node srvc_aggre2_noc;
  70static struct qcom_icc_node qns_camnoc_uncomp;
  71static struct qcom_icc_node qhs_a1_noc_cfg;
  72static struct qcom_icc_node qhs_ahb2phy_east;
  73static struct qcom_icc_node qhs_ahb2phy_west;
  74static struct qcom_icc_node qhs_aop;
  75static struct qcom_icc_node qhs_aoss;
  76static struct qcom_icc_node qhs_camera_cfg;
  77static struct qcom_icc_node qhs_clk_ctl;
  78static struct qcom_icc_node qhs_cpr_cx;
  79static struct qcom_icc_node qhs_cpr_mx;
  80static struct qcom_icc_node qhs_crypto0_cfg;
  81static struct qcom_icc_node qhs_ddrss_cfg;
  82static struct qcom_icc_node qhs_display_cfg;
  83static struct qcom_icc_node qhs_emac_avb_cfg;
  84static struct qcom_icc_node qhs_glm;
  85static struct qcom_icc_node qhs_gpuss_cfg;
  86static struct qcom_icc_node qhs_imem_cfg;
  87static struct qcom_icc_node qhs_ipa;
  88static struct qcom_icc_node qhs_mnoc_cfg;
  89static struct qcom_icc_node qhs_pcie_config;
  90static struct qcom_icc_node qhs_pimem_cfg;
  91static struct qcom_icc_node qhs_prng;
  92static struct qcom_icc_node qhs_qdss_cfg;
  93static struct qcom_icc_node qhs_qspi;
  94static struct qcom_icc_node qhs_qup0;
  95static struct qcom_icc_node qhs_qup1;
  96static struct qcom_icc_node qhs_sdc1;
  97static struct qcom_icc_node qhs_sdc2;
  98static struct qcom_icc_node qhs_snoc_cfg;
  99static struct qcom_icc_node qhs_spdm;
 100static struct qcom_icc_node qhs_tcsr;
 101static struct qcom_icc_node qhs_tlmm_east;
 102static struct qcom_icc_node qhs_tlmm_south;
 103static struct qcom_icc_node qhs_tlmm_west;
 104static struct qcom_icc_node qhs_ufs_mem_cfg;
 105static struct qcom_icc_node qhs_usb2;
 106static struct qcom_icc_node qhs_usb3;
 107static struct qcom_icc_node qhs_venus_cfg;
 108static struct qcom_icc_node qhs_vsense_ctrl_cfg;
 109static struct qcom_icc_node qns_cnoc_a2noc;
 110static struct qcom_icc_node srvc_cnoc;
 111static struct qcom_icc_node qhs_dc_noc_gemnoc;
 112static struct qcom_icc_node qhs_llcc;
 113static struct qcom_icc_node qhs_mdsp_ms_mpu_cfg;
 114static struct qcom_icc_node qns_gem_noc_snoc;
 115static struct qcom_icc_node qns_llcc;
 116static struct qcom_icc_node qns_sys_pcie;
 117static struct qcom_icc_node srvc_gemnoc;
 118static struct qcom_icc_node ebi;
 119static struct qcom_icc_node qns2_mem_noc;
 120static struct qcom_icc_node qns_mem_noc_hf;
 121static struct qcom_icc_node srvc_mnoc;
 122static struct qcom_icc_node qhs_apss;
 123static struct qcom_icc_node qns_cnoc;
 124static struct qcom_icc_node qns_gemnoc_sf;
 125static struct qcom_icc_node qns_memnoc_gc;
 126static struct qcom_icc_node qxs_imem;
 127static struct qcom_icc_node qxs_pimem;
 128static struct qcom_icc_node srvc_snoc;
 129static struct qcom_icc_node xs_pcie;
 130static struct qcom_icc_node xs_qdss_stm;
 131static struct qcom_icc_node xs_sys_tcu_cfg;
 132
 133static struct qcom_icc_node qhm_a1noc_cfg = {
 134	.name = "qhm_a1noc_cfg",
 135	.channels = 1,
 136	.buswidth = 4,
 137	.num_links = 1,
 138	.link_nodes = { &srvc_aggre2_noc },
 139};
 140
 141static struct qcom_icc_node qhm_qdss_bam = {
 142	.name = "qhm_qdss_bam",
 143	.channels = 1,
 144	.buswidth = 4,
 145	.num_links = 1,
 146	.link_nodes = { &qns_a1noc_snoc },
 147};
 148
 149static struct qcom_icc_node qhm_qspi = {
 150	.name = "qhm_qspi",
 151	.channels = 1,
 152	.buswidth = 4,
 153	.num_links = 1,
 154	.link_nodes = { &qns_a1noc_snoc },
 155};
 156
 157static struct qcom_icc_node qhm_qup0 = {
 158	.name = "qhm_qup0",
 159	.channels = 1,
 160	.buswidth = 4,
 161	.num_links = 1,
 162	.link_nodes = { &qns_a1noc_snoc },
 163};
 164
 165static struct qcom_icc_node qhm_qup1 = {
 166	.name = "qhm_qup1",
 167	.channels = 1,
 168	.buswidth = 4,
 169	.num_links = 1,
 170	.link_nodes = { &qns_a1noc_snoc },
 171};
 172
 173static struct qcom_icc_node qnm_cnoc = {
 174	.name = "qnm_cnoc",
 175	.channels = 1,
 176	.buswidth = 8,
 177	.num_links = 1,
 178	.link_nodes = { &qns_a1noc_snoc },
 179};
 180
 181static struct qcom_icc_node qxm_crypto = {
 182	.name = "qxm_crypto",
 183	.channels = 1,
 184	.buswidth = 8,
 185	.num_links = 1,
 186	.link_nodes = { &qns_a1noc_snoc },
 187};
 188
 189static struct qcom_icc_node qxm_ipa = {
 190	.name = "qxm_ipa",
 191	.channels = 1,
 192	.buswidth = 8,
 193	.num_links = 1,
 194	.link_nodes = { &qns_lpass_snoc },
 195};
 196
 197static struct qcom_icc_node xm_emac_avb = {
 198	.name = "xm_emac_avb",
 199	.channels = 1,
 200	.buswidth = 8,
 201	.num_links = 1,
 202	.link_nodes = { &qns_a1noc_snoc },
 203};
 204
 205static struct qcom_icc_node xm_pcie = {
 206	.name = "xm_pcie",
 207	.channels = 1,
 208	.buswidth = 8,
 209	.num_links = 1,
 210	.link_nodes = { &qns_pcie_snoc },
 211};
 212
 213static struct qcom_icc_node xm_qdss_etr = {
 214	.name = "xm_qdss_etr",
 215	.channels = 1,
 216	.buswidth = 8,
 217	.num_links = 1,
 218	.link_nodes = { &qns_a1noc_snoc },
 219};
 220
 221static struct qcom_icc_node xm_sdc1 = {
 222	.name = "xm_sdc1",
 223	.channels = 1,
 224	.buswidth = 8,
 225	.num_links = 1,
 226	.link_nodes = { &qns_a1noc_snoc },
 227};
 228
 229static struct qcom_icc_node xm_sdc2 = {
 230	.name = "xm_sdc2",
 231	.channels = 1,
 232	.buswidth = 8,
 233	.num_links = 1,
 234	.link_nodes = { &qns_a1noc_snoc },
 235};
 236
 237static struct qcom_icc_node xm_ufs_mem = {
 238	.name = "xm_ufs_mem",
 239	.channels = 1,
 240	.buswidth = 8,
 241	.num_links = 1,
 242	.link_nodes = { &qns_a1noc_snoc },
 243};
 244
 245static struct qcom_icc_node xm_usb2 = {
 246	.name = "xm_usb2",
 247	.channels = 1,
 248	.buswidth = 8,
 249	.num_links = 1,
 250	.link_nodes = { &qns_a1noc_snoc },
 251};
 252
 253static struct qcom_icc_node xm_usb3_0 = {
 254	.name = "xm_usb3_0",
 255	.channels = 1,
 256	.buswidth = 8,
 257	.num_links = 1,
 258	.link_nodes = { &qns_a1noc_snoc },
 259};
 260
 261static struct qcom_icc_node qxm_camnoc_hf0_uncomp = {
 262	.name = "qxm_camnoc_hf0_uncomp",
 263	.channels = 1,
 264	.buswidth = 32,
 265	.num_links = 1,
 266	.link_nodes = { &qns_camnoc_uncomp },
 267};
 268
 269static struct qcom_icc_node qxm_camnoc_hf1_uncomp = {
 270	.name = "qxm_camnoc_hf1_uncomp",
 271	.channels = 1,
 272	.buswidth = 32,
 273	.num_links = 1,
 274	.link_nodes = { &qns_camnoc_uncomp },
 275};
 276
 277static struct qcom_icc_node qxm_camnoc_sf_uncomp = {
 278	.name = "qxm_camnoc_sf_uncomp",
 279	.channels = 1,
 280	.buswidth = 32,
 281	.num_links = 1,
 282	.link_nodes = { &qns_camnoc_uncomp },
 283};
 284
 285static struct qcom_icc_node qhm_spdm = {
 286	.name = "qhm_spdm",
 287	.channels = 1,
 288	.buswidth = 4,
 289	.num_links = 1,
 290	.link_nodes = { &qns_cnoc_a2noc },
 291};
 292
 293static struct qcom_icc_node qnm_snoc = {
 294	.name = "qnm_snoc",
 295	.channels = 1,
 296	.buswidth = 8,
 297	.num_links = 39,
 298	.link_nodes = { &qhs_a1_noc_cfg, &qhs_ahb2phy_east,
 299			&qhs_ahb2phy_west, &qhs_aop,
 300			&qhs_aoss, &qhs_camera_cfg,
 301			&qhs_clk_ctl, &qhs_cpr_cx,
 302			&qhs_cpr_mx, &qhs_crypto0_cfg,
 303			&qhs_ddrss_cfg, &qhs_display_cfg,
 304			&qhs_emac_avb_cfg, &qhs_glm,
 305			&qhs_gpuss_cfg, &qhs_imem_cfg,
 306			&qhs_ipa, &qhs_mnoc_cfg,
 307			&qhs_pcie_config, &qhs_pimem_cfg,
 308			&qhs_prng, &qhs_qdss_cfg,
 309			&qhs_qspi, &qhs_qup0,
 310			&qhs_qup1, &qhs_sdc1,
 311			&qhs_sdc2, &qhs_snoc_cfg,
 312			&qhs_spdm, &qhs_tcsr,
 313			&qhs_tlmm_east, &qhs_tlmm_south,
 314			&qhs_tlmm_west, &qhs_ufs_mem_cfg,
 315			&qhs_usb2, &qhs_usb3,
 316			&qhs_venus_cfg, &qhs_vsense_ctrl_cfg,
 317			&srvc_cnoc },
 318};
 319
 320static struct qcom_icc_node xm_qdss_dap = {
 321	.name = "xm_qdss_dap",
 322	.channels = 1,
 323	.buswidth = 8,
 324	.num_links = 40,
 325	.link_nodes = { &qhs_a1_noc_cfg, &qhs_ahb2phy_east,
 326			&qhs_ahb2phy_west, &qhs_aop,
 327			&qhs_aoss, &qhs_camera_cfg,
 328			&qhs_clk_ctl, &qhs_cpr_cx,
 329			&qhs_cpr_mx, &qhs_crypto0_cfg,
 330			&qhs_ddrss_cfg, &qhs_display_cfg,
 331			&qhs_emac_avb_cfg, &qhs_glm,
 332			&qhs_gpuss_cfg, &qhs_imem_cfg,
 333			&qhs_ipa, &qhs_mnoc_cfg,
 334			&qhs_pcie_config, &qhs_pimem_cfg,
 335			&qhs_prng, &qhs_qdss_cfg,
 336			&qhs_qspi, &qhs_qup0,
 337			&qhs_qup1, &qhs_sdc1,
 338			&qhs_sdc2, &qhs_snoc_cfg,
 339			&qhs_spdm, &qhs_tcsr,
 340			&qhs_tlmm_east, &qhs_tlmm_south,
 341			&qhs_tlmm_west, &qhs_ufs_mem_cfg,
 342			&qhs_usb2, &qhs_usb3,
 343			&qhs_venus_cfg, &qhs_vsense_ctrl_cfg,
 344			&qns_cnoc_a2noc, &srvc_cnoc },
 345};
 346
 347static struct qcom_icc_node qhm_cnoc = {
 348	.name = "qhm_cnoc",
 349	.channels = 1,
 350	.buswidth = 4,
 351	.num_links = 2,
 352	.link_nodes = { &qhs_dc_noc_gemnoc, &qhs_llcc },
 353};
 354
 355static struct qcom_icc_node acm_apps = {
 356	.name = "acm_apps",
 357	.channels = 1,
 358	.buswidth = 16,
 359	.num_links = 3,
 360	.link_nodes = { &qns_gem_noc_snoc, &qns_llcc,
 361			&qns_sys_pcie },
 362};
 363
 364static struct qcom_icc_node acm_gpu_tcu = {
 365	.name = "acm_gpu_tcu",
 366	.channels = 1,
 367	.buswidth = 8,
 368	.num_links = 2,
 369	.link_nodes = { &qns_gem_noc_snoc, &qns_llcc },
 370};
 371
 372static struct qcom_icc_node acm_sys_tcu = {
 373	.name = "acm_sys_tcu",
 374	.channels = 1,
 375	.buswidth = 8,
 376	.num_links = 2,
 377	.link_nodes = { &qns_gem_noc_snoc, &qns_llcc },
 378};
 379
 380static struct qcom_icc_node qhm_gemnoc_cfg = {
 381	.name = "qhm_gemnoc_cfg",
 382	.channels = 1,
 383	.buswidth = 4,
 384	.num_links = 2,
 385	.link_nodes = { &qhs_mdsp_ms_mpu_cfg, &srvc_gemnoc },
 386};
 387
 388static struct qcom_icc_node qnm_gpu = {
 389	.name = "qnm_gpu",
 390	.channels = 2,
 391	.buswidth = 32,
 392	.num_links = 2,
 393	.link_nodes = { &qns_gem_noc_snoc, &qns_llcc },
 394};
 395
 396static struct qcom_icc_node qnm_mnoc_hf = {
 397	.name = "qnm_mnoc_hf",
 398	.channels = 1,
 399	.buswidth = 32,
 400	.num_links = 1,
 401	.link_nodes = { &qns_llcc },
 402};
 403
 404static struct qcom_icc_node qnm_mnoc_sf = {
 405	.name = "qnm_mnoc_sf",
 406	.channels = 1,
 407	.buswidth = 32,
 408	.num_links = 2,
 409	.link_nodes = { &qns_gem_noc_snoc, &qns_llcc },
 410};
 411
 412static struct qcom_icc_node qnm_snoc_gc = {
 413	.name = "qnm_snoc_gc",
 414	.channels = 1,
 415	.buswidth = 8,
 416	.num_links = 1,
 417	.link_nodes = { &qns_llcc },
 418};
 419
 420static struct qcom_icc_node qnm_snoc_sf = {
 421	.name = "qnm_snoc_sf",
 422	.channels = 1,
 423	.buswidth = 16,
 424	.num_links = 1,
 425	.link_nodes = { &qns_llcc },
 426};
 427
 428static struct qcom_icc_node llcc_mc = {
 429	.name = "llcc_mc",
 430	.channels = 2,
 431	.buswidth = 4,
 432	.num_links = 1,
 433	.link_nodes = { &ebi },
 434};
 435
 436static struct qcom_icc_node qhm_mnoc_cfg = {
 437	.name = "qhm_mnoc_cfg",
 438	.channels = 1,
 439	.buswidth = 4,
 440	.num_links = 1,
 441	.link_nodes = { &srvc_mnoc },
 442};
 443
 444static struct qcom_icc_node qxm_camnoc_hf0 = {
 445	.name = "qxm_camnoc_hf0",
 446	.channels = 1,
 447	.buswidth = 32,
 448	.num_links = 1,
 449	.link_nodes = { &qns_mem_noc_hf },
 450};
 451
 452static struct qcom_icc_node qxm_camnoc_hf1 = {
 453	.name = "qxm_camnoc_hf1",
 454	.channels = 1,
 455	.buswidth = 32,
 456	.num_links = 1,
 457	.link_nodes = { &qns_mem_noc_hf },
 458};
 459
 460static struct qcom_icc_node qxm_camnoc_sf = {
 461	.name = "qxm_camnoc_sf",
 462	.channels = 1,
 463	.buswidth = 32,
 464	.num_links = 1,
 465	.link_nodes = { &qns2_mem_noc },
 466};
 467
 468static struct qcom_icc_node qxm_mdp0 = {
 469	.name = "qxm_mdp0",
 470	.channels = 1,
 471	.buswidth = 32,
 472	.num_links = 1,
 473	.link_nodes = { &qns_mem_noc_hf },
 474};
 475
 476static struct qcom_icc_node qxm_rot = {
 477	.name = "qxm_rot",
 478	.channels = 1,
 479	.buswidth = 32,
 480	.num_links = 1,
 481	.link_nodes = { &qns2_mem_noc },
 482};
 483
 484static struct qcom_icc_node qxm_venus0 = {
 485	.name = "qxm_venus0",
 486	.channels = 1,
 487	.buswidth = 32,
 488	.num_links = 1,
 489	.link_nodes = { &qns2_mem_noc },
 490};
 491
 492static struct qcom_icc_node qxm_venus_arm9 = {
 493	.name = "qxm_venus_arm9",
 494	.channels = 1,
 495	.buswidth = 8,
 496	.num_links = 1,
 497	.link_nodes = { &qns2_mem_noc },
 498};
 499
 500static struct qcom_icc_node qhm_snoc_cfg = {
 501	.name = "qhm_snoc_cfg",
 502	.channels = 1,
 503	.buswidth = 4,
 504	.num_links = 1,
 505	.link_nodes = { &srvc_snoc },
 506};
 507
 508static struct qcom_icc_node qnm_aggre1_noc = {
 509	.name = "qnm_aggre1_noc",
 510	.channels = 1,
 511	.buswidth = 16,
 512	.num_links = 8,
 513	.link_nodes = { &qhs_apss, &qns_cnoc,
 514			&qns_gemnoc_sf, &qxs_imem,
 515			&qxs_pimem, &xs_pcie,
 516			&xs_qdss_stm, &xs_sys_tcu_cfg },
 517};
 518
 519static struct qcom_icc_node qnm_gemnoc = {
 520	.name = "qnm_gemnoc",
 521	.channels = 1,
 522	.buswidth = 8,
 523	.num_links = 6,
 524	.link_nodes = { &qhs_apss, &qns_cnoc,
 525			&qxs_imem, &qxs_pimem,
 526			&xs_qdss_stm, &xs_sys_tcu_cfg },
 527};
 528
 529static struct qcom_icc_node qnm_gemnoc_pcie = {
 530	.name = "qnm_gemnoc_pcie",
 531	.channels = 1,
 532	.buswidth = 8,
 533	.num_links = 1,
 534	.link_nodes = { &xs_pcie },
 535};
 536
 537static struct qcom_icc_node qnm_lpass_anoc = {
 538	.name = "qnm_lpass_anoc",
 539	.channels = 1,
 540	.buswidth = 8,
 541	.num_links = 7,
 542	.link_nodes = { &qhs_apss, &qns_cnoc,
 543			&qns_gemnoc_sf, &qxs_imem,
 544			&qxs_pimem, &xs_pcie,
 545			&xs_qdss_stm },
 546};
 547
 548static struct qcom_icc_node qnm_pcie_anoc = {
 549	.name = "qnm_pcie_anoc",
 550	.channels = 1,
 551	.buswidth = 8,
 552	.num_links = 5,
 553	.link_nodes = { &qhs_apss, &qns_cnoc,
 554			&qns_gemnoc_sf, &qxs_imem,
 555			&xs_qdss_stm },
 556};
 557
 558static struct qcom_icc_node qxm_pimem = {
 559	.name = "qxm_pimem",
 560	.channels = 1,
 561	.buswidth = 8,
 562	.num_links = 2,
 563	.link_nodes = { &qns_memnoc_gc, &qxs_imem },
 564};
 565
 566static struct qcom_icc_node xm_gic = {
 567	.name = "xm_gic",
 568	.channels = 1,
 569	.buswidth = 8,
 570	.num_links = 2,
 571	.link_nodes = { &qns_memnoc_gc, &qxs_imem },
 572};
 573
 574static struct qcom_icc_node qns_a1noc_snoc = {
 575	.name = "qns_a1noc_snoc",
 576	.channels = 1,
 577	.buswidth = 16,
 578	.num_links = 1,
 579	.link_nodes = { &qnm_aggre1_noc },
 580};
 581
 582static struct qcom_icc_node qns_lpass_snoc = {
 583	.name = "qns_lpass_snoc",
 584	.channels = 1,
 585	.buswidth = 8,
 586	.num_links = 1,
 587	.link_nodes = { &qnm_lpass_anoc },
 588};
 589
 590static struct qcom_icc_node qns_pcie_snoc = {
 591	.name = "qns_pcie_snoc",
 592	.channels = 1,
 593	.buswidth = 8,
 594	.num_links = 1,
 595	.link_nodes = { &qnm_pcie_anoc },
 596};
 597
 598static struct qcom_icc_node srvc_aggre2_noc = {
 599	.name = "srvc_aggre2_noc",
 600	.channels = 1,
 601	.buswidth = 4,
 602};
 603
 604static struct qcom_icc_node qns_camnoc_uncomp = {
 605	.name = "qns_camnoc_uncomp",
 606	.channels = 1,
 607	.buswidth = 32,
 608};
 609
 610static struct qcom_icc_node qhs_a1_noc_cfg = {
 611	.name = "qhs_a1_noc_cfg",
 612	.channels = 1,
 613	.buswidth = 4,
 614	.num_links = 1,
 615	.link_nodes = { &qhm_a1noc_cfg },
 616};
 617
 618static struct qcom_icc_node qhs_ahb2phy_east = {
 619	.name = "qhs_ahb2phy_east",
 620	.channels = 1,
 621	.buswidth = 4,
 622};
 623
 624static struct qcom_icc_node qhs_ahb2phy_west = {
 625	.name = "qhs_ahb2phy_west",
 626	.channels = 1,
 627	.buswidth = 4,
 628};
 629
 630static struct qcom_icc_node qhs_aop = {
 631	.name = "qhs_aop",
 632	.channels = 1,
 633	.buswidth = 4,
 634};
 635
 636static struct qcom_icc_node qhs_aoss = {
 637	.name = "qhs_aoss",
 638	.channels = 1,
 639	.buswidth = 4,
 640};
 641
 642static struct qcom_icc_node qhs_camera_cfg = {
 643	.name = "qhs_camera_cfg",
 644	.channels = 1,
 645	.buswidth = 4,
 646};
 647
 648static struct qcom_icc_node qhs_clk_ctl = {
 649	.name = "qhs_clk_ctl",
 650	.channels = 1,
 651	.buswidth = 4,
 652};
 653
 654static struct qcom_icc_node qhs_cpr_cx = {
 655	.name = "qhs_cpr_cx",
 656	.channels = 1,
 657	.buswidth = 4,
 658};
 659
 660static struct qcom_icc_node qhs_cpr_mx = {
 661	.name = "qhs_cpr_mx",
 662	.channels = 1,
 663	.buswidth = 4,
 664};
 665
 666static struct qcom_icc_node qhs_crypto0_cfg = {
 667	.name = "qhs_crypto0_cfg",
 668	.channels = 1,
 669	.buswidth = 4,
 670};
 671
 672static struct qcom_icc_node qhs_ddrss_cfg = {
 673	.name = "qhs_ddrss_cfg",
 674	.channels = 1,
 675	.buswidth = 4,
 676	.num_links = 1,
 677	.link_nodes = { &qhm_cnoc },
 678};
 679
 680static struct qcom_icc_node qhs_display_cfg = {
 681	.name = "qhs_display_cfg",
 682	.channels = 1,
 683	.buswidth = 4,
 684};
 685
 686static struct qcom_icc_node qhs_emac_avb_cfg = {
 687	.name = "qhs_emac_avb_cfg",
 688	.channels = 1,
 689	.buswidth = 4,
 690};
 691
 692static struct qcom_icc_node qhs_glm = {
 693	.name = "qhs_glm",
 694	.channels = 1,
 695	.buswidth = 4,
 696};
 697
 698static struct qcom_icc_node qhs_gpuss_cfg = {
 699	.name = "qhs_gpuss_cfg",
 700	.channels = 1,
 701	.buswidth = 8,
 702};
 703
 704static struct qcom_icc_node qhs_imem_cfg = {
 705	.name = "qhs_imem_cfg",
 706	.channels = 1,
 707	.buswidth = 4,
 708};
 709
 710static struct qcom_icc_node qhs_ipa = {
 711	.name = "qhs_ipa",
 712	.channels = 1,
 713	.buswidth = 4,
 714};
 715
 716static struct qcom_icc_node qhs_mnoc_cfg = {
 717	.name = "qhs_mnoc_cfg",
 718	.channels = 1,
 719	.buswidth = 4,
 720	.num_links = 1,
 721	.link_nodes = { &qhm_mnoc_cfg },
 722};
 723
 724static struct qcom_icc_node qhs_pcie_config = {
 725	.name = "qhs_pcie_config",
 726	.channels = 1,
 727	.buswidth = 4,
 728};
 729
 730static struct qcom_icc_node qhs_pimem_cfg = {
 731	.name = "qhs_pimem_cfg",
 732	.channels = 1,
 733	.buswidth = 4,
 734};
 735
 736static struct qcom_icc_node qhs_prng = {
 737	.name = "qhs_prng",
 738	.channels = 1,
 739	.buswidth = 4,
 740};
 741
 742static struct qcom_icc_node qhs_qdss_cfg = {
 743	.name = "qhs_qdss_cfg",
 744	.channels = 1,
 745	.buswidth = 4,
 746};
 747
 748static struct qcom_icc_node qhs_qspi = {
 749	.name = "qhs_qspi",
 750	.channels = 1,
 751	.buswidth = 4,
 752};
 753
 754static struct qcom_icc_node qhs_qup0 = {
 755	.name = "qhs_qup0",
 756	.channels = 1,
 757	.buswidth = 4,
 758};
 759
 760static struct qcom_icc_node qhs_qup1 = {
 761	.name = "qhs_qup1",
 762	.channels = 1,
 763	.buswidth = 4,
 764};
 765
 766static struct qcom_icc_node qhs_sdc1 = {
 767	.name = "qhs_sdc1",
 768	.channels = 1,
 769	.buswidth = 4,
 770};
 771
 772static struct qcom_icc_node qhs_sdc2 = {
 773	.name = "qhs_sdc2",
 774	.channels = 1,
 775	.buswidth = 4,
 776};
 777
 778static struct qcom_icc_node qhs_snoc_cfg = {
 779	.name = "qhs_snoc_cfg",
 780	.channels = 1,
 781	.buswidth = 4,
 782	.num_links = 1,
 783	.link_nodes = { &qhm_snoc_cfg },
 784};
 785
 786static struct qcom_icc_node qhs_spdm = {
 787	.name = "qhs_spdm",
 788	.channels = 1,
 789	.buswidth = 4,
 790};
 791
 792static struct qcom_icc_node qhs_tcsr = {
 793	.name = "qhs_tcsr",
 794	.channels = 1,
 795	.buswidth = 4,
 796};
 797
 798static struct qcom_icc_node qhs_tlmm_east = {
 799	.name = "qhs_tlmm_east",
 800	.channels = 1,
 801	.buswidth = 4,
 802};
 803
 804static struct qcom_icc_node qhs_tlmm_south = {
 805	.name = "qhs_tlmm_south",
 806	.channels = 1,
 807	.buswidth = 4,
 808};
 809
 810static struct qcom_icc_node qhs_tlmm_west = {
 811	.name = "qhs_tlmm_west",
 812	.channels = 1,
 813	.buswidth = 4,
 814};
 815
 816static struct qcom_icc_node qhs_ufs_mem_cfg = {
 817	.name = "qhs_ufs_mem_cfg",
 818	.channels = 1,
 819	.buswidth = 4,
 820};
 821
 822static struct qcom_icc_node qhs_usb2 = {
 823	.name = "qhs_usb2",
 824	.channels = 1,
 825	.buswidth = 4,
 826};
 827
 828static struct qcom_icc_node qhs_usb3 = {
 829	.name = "qhs_usb3",
 830	.channels = 1,
 831	.buswidth = 4,
 832};
 833
 834static struct qcom_icc_node qhs_venus_cfg = {
 835	.name = "qhs_venus_cfg",
 836	.channels = 1,
 837	.buswidth = 4,
 838};
 839
 840static struct qcom_icc_node qhs_vsense_ctrl_cfg = {
 841	.name = "qhs_vsense_ctrl_cfg",
 842	.channels = 1,
 843	.buswidth = 4,
 844};
 845
 846static struct qcom_icc_node qns_cnoc_a2noc = {
 847	.name = "qns_cnoc_a2noc",
 848	.channels = 1,
 849	.buswidth = 8,
 850	.num_links = 1,
 851	.link_nodes = { &qnm_cnoc },
 852};
 853
 854static struct qcom_icc_node srvc_cnoc = {
 855	.name = "srvc_cnoc",
 856	.channels = 1,
 857	.buswidth = 4,
 858};
 859
 860static struct qcom_icc_node qhs_dc_noc_gemnoc = {
 861	.name = "qhs_dc_noc_gemnoc",
 862	.channels = 1,
 863	.buswidth = 4,
 864	.num_links = 1,
 865	.link_nodes = { &qhm_gemnoc_cfg },
 866};
 867
 868static struct qcom_icc_node qhs_llcc = {
 869	.name = "qhs_llcc",
 870	.channels = 1,
 871	.buswidth = 4,
 872};
 873
 874static struct qcom_icc_node qhs_mdsp_ms_mpu_cfg = {
 875	.name = "qhs_mdsp_ms_mpu_cfg",
 876	.channels = 1,
 877	.buswidth = 4,
 878};
 879
 880static struct qcom_icc_node qns_gem_noc_snoc = {
 881	.name = "qns_gem_noc_snoc",
 882	.channels = 1,
 883	.buswidth = 8,
 884	.num_links = 1,
 885	.link_nodes = { &qnm_gemnoc },
 886};
 887
 888static struct qcom_icc_node qns_llcc = {
 889	.name = "qns_llcc",
 890	.channels = 1,
 891	.buswidth = 16,
 892	.num_links = 1,
 893	.link_nodes = { &llcc_mc },
 894};
 895
 896static struct qcom_icc_node qns_sys_pcie = {
 897	.name = "qns_sys_pcie",
 898	.channels = 1,
 899	.buswidth = 8,
 900	.num_links = 1,
 901	.link_nodes = { &qnm_gemnoc_pcie },
 902};
 903
 904static struct qcom_icc_node srvc_gemnoc = {
 905	.name = "srvc_gemnoc",
 906	.channels = 1,
 907	.buswidth = 4,
 908};
 909
 910static struct qcom_icc_node ebi = {
 911	.name = "ebi",
 912	.channels = 2,
 913	.buswidth = 4,
 914};
 915
 916static struct qcom_icc_node qns2_mem_noc = {
 917	.name = "qns2_mem_noc",
 918	.channels = 1,
 919	.buswidth = 32,
 920	.num_links = 1,
 921	.link_nodes = { &qnm_mnoc_sf },
 922};
 923
 924static struct qcom_icc_node qns_mem_noc_hf = {
 925	.name = "qns_mem_noc_hf",
 926	.channels = 1,
 927	.buswidth = 32,
 928	.num_links = 1,
 929	.link_nodes = { &qnm_mnoc_hf },
 930};
 931
 932static struct qcom_icc_node srvc_mnoc = {
 933	.name = "srvc_mnoc",
 934	.channels = 1,
 935	.buswidth = 4,
 936};
 937
 938static struct qcom_icc_node qhs_apss = {
 939	.name = "qhs_apss",
 940	.channels = 1,
 941	.buswidth = 8,
 942};
 943
 944static struct qcom_icc_node qns_cnoc = {
 945	.name = "qns_cnoc",
 946	.channels = 1,
 947	.buswidth = 8,
 948	.num_links = 1,
 949	.link_nodes = { &qnm_snoc },
 950};
 951
 952static struct qcom_icc_node qns_gemnoc_sf = {
 953	.name = "qns_gemnoc_sf",
 954	.channels = 1,
 955	.buswidth = 16,
 956	.num_links = 1,
 957	.link_nodes = { &qnm_snoc_sf },
 958};
 959
 960static struct qcom_icc_node qns_memnoc_gc = {
 961	.name = "qns_memnoc_gc",
 962	.channels = 1,
 963	.buswidth = 8,
 964	.num_links = 1,
 965	.link_nodes = { &qnm_snoc_gc },
 966};
 967
 968static struct qcom_icc_node qxs_imem = {
 969	.name = "qxs_imem",
 970	.channels = 1,
 971	.buswidth = 8,
 972};
 973
 974static struct qcom_icc_node qxs_pimem = {
 975	.name = "qxs_pimem",
 976	.channels = 1,
 977	.buswidth = 8,
 978};
 979
 980static struct qcom_icc_node srvc_snoc = {
 981	.name = "srvc_snoc",
 982	.channels = 1,
 983	.buswidth = 4,
 984};
 985
 986static struct qcom_icc_node xs_pcie = {
 987	.name = "xs_pcie",
 988	.channels = 1,
 989	.buswidth = 8,
 990};
 991
 992static struct qcom_icc_node xs_qdss_stm = {
 993	.name = "xs_qdss_stm",
 994	.channels = 1,
 995	.buswidth = 4,
 996};
 997
 998static struct qcom_icc_node xs_sys_tcu_cfg = {
 999	.name = "xs_sys_tcu_cfg",
1000	.channels = 1,
1001	.buswidth = 8,
1002};
1003
1004static struct qcom_icc_bcm bcm_acv = {
1005	.name = "ACV",
1006	.num_nodes = 1,
1007	.nodes = { &ebi },
1008};
1009
1010static struct qcom_icc_bcm bcm_ce0 = {
1011	.name = "CE0",
1012	.num_nodes = 1,
1013	.nodes = { &qxm_crypto },
1014};
1015
1016static struct qcom_icc_bcm bcm_cn0 = {
1017	.name = "CN0",
1018	.keepalive = true,
1019	.num_nodes = 37,
1020	.nodes = { &qhm_spdm, &qnm_snoc,
1021		   &qhs_a1_noc_cfg, &qhs_aop,
1022		   &qhs_aoss, &qhs_camera_cfg,
1023		   &qhs_clk_ctl, &qhs_cpr_cx,
1024		   &qhs_cpr_mx, &qhs_crypto0_cfg,
1025		   &qhs_ddrss_cfg, &qhs_display_cfg,
1026		   &qhs_emac_avb_cfg, &qhs_glm,
1027		   &qhs_gpuss_cfg, &qhs_imem_cfg,
1028		   &qhs_ipa, &qhs_mnoc_cfg,
1029		   &qhs_pcie_config, &qhs_pimem_cfg,
1030		   &qhs_prng, &qhs_qdss_cfg,
1031		   &qhs_qup0, &qhs_qup1,
1032		   &qhs_snoc_cfg, &qhs_spdm,
1033		   &qhs_tcsr, &qhs_tlmm_east,
1034		   &qhs_tlmm_south, &qhs_tlmm_west,
1035		   &qhs_ufs_mem_cfg, &qhs_usb2,
1036		   &qhs_usb3, &qhs_venus_cfg,
1037		   &qhs_vsense_ctrl_cfg, &qns_cnoc_a2noc,
1038		   &srvc_cnoc },
1039};
1040
1041static struct qcom_icc_bcm bcm_cn1 = {
1042	.name = "CN1",
1043	.num_nodes = 8,
1044	.nodes = { &qhm_qspi, &xm_sdc1,
1045		   &xm_sdc2, &qhs_ahb2phy_east,
1046		   &qhs_ahb2phy_west, &qhs_qspi,
1047		   &qhs_sdc1, &qhs_sdc2 },
1048};
1049
1050static struct qcom_icc_bcm bcm_mc0 = {
1051	.name = "MC0",
1052	.keepalive = true,
1053	.num_nodes = 1,
1054	.nodes = { &ebi },
1055};
1056
1057static struct qcom_icc_bcm bcm_mm0 = {
1058	.name = "MM0",
1059	.keepalive = true,
1060	.num_nodes = 1,
1061	.nodes = { &qns_mem_noc_hf },
1062};
1063
1064static struct qcom_icc_bcm bcm_mm1 = {
1065	.name = "MM1",
1066	.num_nodes = 7,
1067	.nodes = { &qxm_camnoc_hf0_uncomp, &qxm_camnoc_hf1_uncomp,
1068		   &qxm_camnoc_sf_uncomp, &qxm_camnoc_hf0,
1069		   &qxm_camnoc_hf1, &qxm_mdp0,
1070		   &qxm_rot },
1071};
1072
1073static struct qcom_icc_bcm bcm_mm2 = {
1074	.name = "MM2",
1075	.num_nodes = 2,
1076	.nodes = { &qxm_camnoc_sf, &qns2_mem_noc },
1077};
1078
1079static struct qcom_icc_bcm bcm_mm3 = {
1080	.name = "MM3",
1081	.num_nodes = 2,
1082	.nodes = { &qxm_venus0, &qxm_venus_arm9 },
1083};
1084
1085static struct qcom_icc_bcm bcm_qup0 = {
1086	.name = "QUP0",
1087	.keepalive = true,
1088	.vote_scale = 1,
1089	.num_nodes = 2,
1090	.nodes = { &qhm_qup0, &qhm_qup1 },
1091};
1092
1093static struct qcom_icc_bcm bcm_sh0 = {
1094	.name = "SH0",
1095	.keepalive = true,
1096	.num_nodes = 1,
1097	.nodes = { &qns_llcc },
1098};
1099
1100static struct qcom_icc_bcm bcm_sh2 = {
1101	.name = "SH2",
1102	.num_nodes = 1,
1103	.nodes = { &acm_apps },
1104};
1105
1106static struct qcom_icc_bcm bcm_sh3 = {
1107	.name = "SH3",
1108	.num_nodes = 1,
1109	.nodes = { &qns_gem_noc_snoc },
1110};
1111
1112static struct qcom_icc_bcm bcm_sn0 = {
1113	.name = "SN0",
1114	.keepalive = true,
1115	.num_nodes = 1,
1116	.nodes = { &qns_gemnoc_sf },
1117};
1118
1119static struct qcom_icc_bcm bcm_sn1 = {
1120	.name = "SN1",
1121	.num_nodes = 1,
1122	.nodes = { &qxs_imem },
1123};
1124
1125static struct qcom_icc_bcm bcm_sn2 = {
1126	.name = "SN2",
1127	.num_nodes = 1,
1128	.nodes = { &qns_memnoc_gc },
1129};
1130
1131static struct qcom_icc_bcm bcm_sn3 = {
1132	.name = "SN3",
1133	.num_nodes = 2,
1134	.nodes = { &srvc_aggre2_noc, &qns_cnoc },
1135};
1136
1137static struct qcom_icc_bcm bcm_sn4 = {
1138	.name = "SN4",
1139	.num_nodes = 1,
1140	.nodes = { &qxs_pimem },
1141};
1142
1143static struct qcom_icc_bcm bcm_sn5 = {
1144	.name = "SN5",
1145	.num_nodes = 1,
1146	.nodes = { &xs_qdss_stm },
1147};
1148
1149static struct qcom_icc_bcm bcm_sn8 = {
1150	.name = "SN8",
1151	.num_nodes = 2,
1152	.nodes = { &qnm_gemnoc_pcie, &xs_pcie },
1153};
1154
1155static struct qcom_icc_bcm bcm_sn9 = {
1156	.name = "SN9",
1157	.num_nodes = 1,
1158	.nodes = { &qnm_aggre1_noc },
1159};
1160
1161static struct qcom_icc_bcm bcm_sn12 = {
1162	.name = "SN12",
1163	.num_nodes = 2,
1164	.nodes = { &qxm_pimem, &xm_gic },
1165};
1166
1167static struct qcom_icc_bcm bcm_sn13 = {
1168	.name = "SN13",
1169	.num_nodes = 1,
1170	.nodes = { &qnm_lpass_anoc },
1171};
1172
1173static struct qcom_icc_bcm bcm_sn14 = {
1174	.name = "SN14",
1175	.num_nodes = 1,
1176	.nodes = { &qns_pcie_snoc },
1177};
1178
1179static struct qcom_icc_bcm bcm_sn15 = {
1180	.name = "SN15",
1181	.num_nodes = 1,
1182	.nodes = { &qnm_gemnoc },
1183};
1184
1185static struct qcom_icc_bcm * const aggre1_noc_bcms[] = {
1186	&bcm_ce0,
1187	&bcm_cn1,
1188	&bcm_qup0,
1189	&bcm_sn3,
1190	&bcm_sn14,
1191};
1192
1193static struct qcom_icc_node * const aggre1_noc_nodes[] = {
1194	[MASTER_A1NOC_CFG] = &qhm_a1noc_cfg,
1195	[MASTER_QDSS_BAM] = &qhm_qdss_bam,
1196	[MASTER_QSPI] = &qhm_qspi,
1197	[MASTER_QUP_0] = &qhm_qup0,
1198	[MASTER_BLSP_1] = &qhm_qup1,
1199	[MASTER_CNOC_A2NOC] = &qnm_cnoc,
1200	[MASTER_CRYPTO] = &qxm_crypto,
1201	[MASTER_IPA] = &qxm_ipa,
1202	[MASTER_EMAC_EVB] = &xm_emac_avb,
1203	[MASTER_PCIE] = &xm_pcie,
1204	[MASTER_QDSS_ETR] = &xm_qdss_etr,
1205	[MASTER_SDCC_1] = &xm_sdc1,
1206	[MASTER_SDCC_2] = &xm_sdc2,
1207	[MASTER_UFS_MEM] = &xm_ufs_mem,
1208	[MASTER_USB2] = &xm_usb2,
1209	[MASTER_USB3_0] = &xm_usb3_0,
1210	[SLAVE_A1NOC_SNOC] = &qns_a1noc_snoc,
1211	[SLAVE_LPASS_SNOC] = &qns_lpass_snoc,
1212	[SLAVE_ANOC_PCIE_SNOC] = &qns_pcie_snoc,
1213	[SLAVE_SERVICE_A2NOC] = &srvc_aggre2_noc,
1214};
1215
1216static const struct qcom_icc_desc qcs615_aggre1_noc = {
1217	.nodes = aggre1_noc_nodes,
1218	.num_nodes = ARRAY_SIZE(aggre1_noc_nodes),
1219	.bcms = aggre1_noc_bcms,
1220	.num_bcms = ARRAY_SIZE(aggre1_noc_bcms),
1221};
1222
1223static struct qcom_icc_bcm * const camnoc_virt_bcms[] = {
1224	&bcm_mm1,
1225};
1226
1227static struct qcom_icc_node * const camnoc_virt_nodes[] = {
1228	[MASTER_CAMNOC_HF0_UNCOMP] = &qxm_camnoc_hf0_uncomp,
1229	[MASTER_CAMNOC_HF1_UNCOMP] = &qxm_camnoc_hf1_uncomp,
1230	[MASTER_CAMNOC_SF_UNCOMP] = &qxm_camnoc_sf_uncomp,
1231	[SLAVE_CAMNOC_UNCOMP] = &qns_camnoc_uncomp,
1232};
1233
1234static const struct qcom_icc_desc qcs615_camnoc_virt = {
1235	.nodes = camnoc_virt_nodes,
1236	.num_nodes = ARRAY_SIZE(camnoc_virt_nodes),
1237	.bcms = camnoc_virt_bcms,
1238	.num_bcms = ARRAY_SIZE(camnoc_virt_bcms),
1239};
1240
1241static struct qcom_icc_bcm * const config_noc_bcms[] = {
1242	&bcm_cn0,
1243	&bcm_cn1,
1244};
1245
1246static struct qcom_icc_node * const config_noc_nodes[] = {
1247	[MASTER_SPDM] = &qhm_spdm,
1248	[MASTER_SNOC_CNOC] = &qnm_snoc,
1249	[MASTER_QDSS_DAP] = &xm_qdss_dap,
1250	[SLAVE_A1NOC_CFG] = &qhs_a1_noc_cfg,
1251	[SLAVE_AHB2PHY_EAST] = &qhs_ahb2phy_east,
1252	[SLAVE_AHB2PHY_WEST] = &qhs_ahb2phy_west,
1253	[SLAVE_AOP] = &qhs_aop,
1254	[SLAVE_AOSS] = &qhs_aoss,
1255	[SLAVE_CAMERA_CFG] = &qhs_camera_cfg,
1256	[SLAVE_CLK_CTL] = &qhs_clk_ctl,
1257	[SLAVE_RBCPR_CX_CFG] = &qhs_cpr_cx,
1258	[SLAVE_RBCPR_MX_CFG] = &qhs_cpr_mx,
1259	[SLAVE_CRYPTO_0_CFG] = &qhs_crypto0_cfg,
1260	[SLAVE_CNOC_DDRSS] = &qhs_ddrss_cfg,
1261	[SLAVE_DISPLAY_CFG] = &qhs_display_cfg,
1262	[SLAVE_EMAC_AVB_CFG] = &qhs_emac_avb_cfg,
1263	[SLAVE_GLM] = &qhs_glm,
1264	[SLAVE_GFX3D_CFG] = &qhs_gpuss_cfg,
1265	[SLAVE_IMEM_CFG] = &qhs_imem_cfg,
1266	[SLAVE_IPA_CFG] = &qhs_ipa,
1267	[SLAVE_CNOC_MNOC_CFG] = &qhs_mnoc_cfg,
1268	[SLAVE_PCIE_CFG] = &qhs_pcie_config,
1269	[SLAVE_PIMEM_CFG] = &qhs_pimem_cfg,
1270	[SLAVE_PRNG] = &qhs_prng,
1271	[SLAVE_QDSS_CFG] = &qhs_qdss_cfg,
1272	[SLAVE_QSPI] = &qhs_qspi,
1273	[SLAVE_QUP_0] = &qhs_qup0,
1274	[SLAVE_QUP_1] = &qhs_qup1,
1275	[SLAVE_SDCC_1] = &qhs_sdc1,
1276	[SLAVE_SDCC_2] = &qhs_sdc2,
1277	[SLAVE_SNOC_CFG] = &qhs_snoc_cfg,
1278	[SLAVE_SPDM_WRAPPER] = &qhs_spdm,
1279	[SLAVE_TCSR] = &qhs_tcsr,
1280	[SLAVE_TLMM_EAST] = &qhs_tlmm_east,
1281	[SLAVE_TLMM_SOUTH] = &qhs_tlmm_south,
1282	[SLAVE_TLMM_WEST] = &qhs_tlmm_west,
1283	[SLAVE_UFS_MEM_CFG] = &qhs_ufs_mem_cfg,
1284	[SLAVE_USB2] = &qhs_usb2,
1285	[SLAVE_USB3] = &qhs_usb3,
1286	[SLAVE_VENUS_CFG] = &qhs_venus_cfg,
1287	[SLAVE_VSENSE_CTRL_CFG] = &qhs_vsense_ctrl_cfg,
1288	[SLAVE_CNOC_A2NOC] = &qns_cnoc_a2noc,
1289	[SLAVE_SERVICE_CNOC] = &srvc_cnoc,
1290};
1291
1292static const struct qcom_icc_desc qcs615_config_noc = {
1293	.nodes = config_noc_nodes,
1294	.num_nodes = ARRAY_SIZE(config_noc_nodes),
1295	.bcms = config_noc_bcms,
1296	.num_bcms = ARRAY_SIZE(config_noc_bcms),
1297};
1298
1299static struct qcom_icc_node * const dc_noc_nodes[] = {
1300	[MASTER_CNOC_DC_NOC] = &qhm_cnoc,
1301	[SLAVE_DC_NOC_GEMNOC] = &qhs_dc_noc_gemnoc,
1302	[SLAVE_LLCC_CFG] = &qhs_llcc,
1303};
1304
1305static const struct qcom_icc_desc qcs615_dc_noc = {
1306	.nodes = dc_noc_nodes,
1307	.num_nodes = ARRAY_SIZE(dc_noc_nodes),
1308};
1309
1310static struct qcom_icc_bcm * const gem_noc_bcms[] = {
1311	&bcm_sh0,
1312	&bcm_sh2,
1313	&bcm_sh3,
1314	&bcm_mm1,
1315};
1316
1317static struct qcom_icc_node * const gem_noc_nodes[] = {
1318	[MASTER_APPSS_PROC] = &acm_apps,
1319	[MASTER_GPU_TCU] = &acm_gpu_tcu,
1320	[MASTER_SYS_TCU] = &acm_sys_tcu,
1321	[MASTER_GEM_NOC_CFG] = &qhm_gemnoc_cfg,
1322	[MASTER_GFX3D] = &qnm_gpu,
1323	[MASTER_MNOC_HF_MEM_NOC] = &qnm_mnoc_hf,
1324	[MASTER_MNOC_SF_MEM_NOC] = &qnm_mnoc_sf,
1325	[MASTER_SNOC_GC_MEM_NOC] = &qnm_snoc_gc,
1326	[MASTER_SNOC_SF_MEM_NOC] = &qnm_snoc_sf,
1327	[SLAVE_MSS_PROC_MS_MPU_CFG] = &qhs_mdsp_ms_mpu_cfg,
1328	[SLAVE_GEM_NOC_SNOC] = &qns_gem_noc_snoc,
1329	[SLAVE_LLCC] = &qns_llcc,
1330	[SLAVE_MEM_NOC_PCIE_SNOC] = &qns_sys_pcie,
1331	[SLAVE_SERVICE_GEM_NOC] = &srvc_gemnoc,
1332};
1333
1334static const struct qcom_icc_desc qcs615_gem_noc = {
1335	.nodes = gem_noc_nodes,
1336	.num_nodes = ARRAY_SIZE(gem_noc_nodes),
1337	.bcms = gem_noc_bcms,
1338	.num_bcms = ARRAY_SIZE(gem_noc_bcms),
1339};
1340
1341static struct qcom_icc_bcm * const mc_virt_bcms[] = {
1342	&bcm_acv,
1343	&bcm_mc0,
1344};
1345
1346static struct qcom_icc_node * const mc_virt_nodes[] = {
1347	[MASTER_LLCC] = &llcc_mc,
1348	[SLAVE_EBI1] = &ebi,
1349};
1350
1351static const struct qcom_icc_desc qcs615_mc_virt = {
1352	.nodes = mc_virt_nodes,
1353	.num_nodes = ARRAY_SIZE(mc_virt_nodes),
1354	.bcms = mc_virt_bcms,
1355	.num_bcms = ARRAY_SIZE(mc_virt_bcms),
1356};
1357
1358static struct qcom_icc_bcm * const mmss_noc_bcms[] = {
1359	&bcm_mm0,
1360	&bcm_mm1,
1361	&bcm_mm2,
1362	&bcm_mm3,
1363};
1364
1365static struct qcom_icc_node * const mmss_noc_nodes[] = {
1366	[MASTER_CNOC_MNOC_CFG] = &qhm_mnoc_cfg,
1367	[MASTER_CAMNOC_HF0] = &qxm_camnoc_hf0,
1368	[MASTER_CAMNOC_HF1] = &qxm_camnoc_hf1,
1369	[MASTER_CAMNOC_SF] = &qxm_camnoc_sf,
1370	[MASTER_MDP0] = &qxm_mdp0,
1371	[MASTER_ROTATOR] = &qxm_rot,
1372	[MASTER_VIDEO_P0] = &qxm_venus0,
1373	[MASTER_VIDEO_PROC] = &qxm_venus_arm9,
1374	[SLAVE_MNOC_SF_MEM_NOC] = &qns2_mem_noc,
1375	[SLAVE_MNOC_HF_MEM_NOC] = &qns_mem_noc_hf,
1376	[SLAVE_SERVICE_MNOC] = &srvc_mnoc,
1377};
1378
1379static const struct qcom_icc_desc qcs615_mmss_noc = {
1380	.nodes = mmss_noc_nodes,
1381	.num_nodes = ARRAY_SIZE(mmss_noc_nodes),
1382	.bcms = mmss_noc_bcms,
1383	.num_bcms = ARRAY_SIZE(mmss_noc_bcms),
1384};
1385
1386static struct qcom_icc_bcm * const system_noc_bcms[] = {
1387	&bcm_sn0,
1388	&bcm_sn1,
1389	&bcm_sn2,
1390	&bcm_sn3,
1391	&bcm_sn4,
1392	&bcm_sn5,
1393	&bcm_sn8,
1394	&bcm_sn9,
1395	&bcm_sn12,
1396	&bcm_sn13,
1397	&bcm_sn15,
1398};
1399
1400static struct qcom_icc_node * const system_noc_nodes[] = {
1401	[MASTER_SNOC_CFG] = &qhm_snoc_cfg,
1402	[MASTER_A1NOC_SNOC] = &qnm_aggre1_noc,
1403	[MASTER_GEM_NOC_SNOC] = &qnm_gemnoc,
1404	[MASTER_GEM_NOC_PCIE_SNOC] = &qnm_gemnoc_pcie,
1405	[MASTER_LPASS_ANOC] = &qnm_lpass_anoc,
1406	[MASTER_ANOC_PCIE_SNOC] = &qnm_pcie_anoc,
1407	[MASTER_PIMEM] = &qxm_pimem,
1408	[MASTER_GIC] = &xm_gic,
1409	[SLAVE_APPSS] = &qhs_apss,
1410	[SLAVE_SNOC_CNOC] = &qns_cnoc,
1411	[SLAVE_SNOC_GEM_NOC_SF] = &qns_gemnoc_sf,
1412	[SLAVE_SNOC_MEM_NOC_GC] = &qns_memnoc_gc,
1413	[SLAVE_IMEM] = &qxs_imem,
1414	[SLAVE_PIMEM] = &qxs_pimem,
1415	[SLAVE_SERVICE_SNOC] = &srvc_snoc,
1416	[SLAVE_PCIE_0] = &xs_pcie,
1417	[SLAVE_QDSS_STM] = &xs_qdss_stm,
1418	[SLAVE_TCU] = &xs_sys_tcu_cfg,
1419};
1420
1421static const struct qcom_icc_desc qcs615_system_noc = {
1422	.nodes = system_noc_nodes,
1423	.num_nodes = ARRAY_SIZE(system_noc_nodes),
1424	.bcms = system_noc_bcms,
1425	.num_bcms = ARRAY_SIZE(system_noc_bcms),
1426};
1427
1428static const struct of_device_id qnoc_of_match[] = {
1429	{ .compatible = "qcom,qcs615-aggre1-noc",
1430	  .data = &qcs615_aggre1_noc},
1431	{ .compatible = "qcom,qcs615-camnoc-virt",
1432	  .data = &qcs615_camnoc_virt},
1433	{ .compatible = "qcom,qcs615-config-noc",
1434	  .data = &qcs615_config_noc},
1435	{ .compatible = "qcom,qcs615-dc-noc",
1436	  .data = &qcs615_dc_noc},
1437	{ .compatible = "qcom,qcs615-gem-noc",
1438	  .data = &qcs615_gem_noc},
1439	{ .compatible = "qcom,qcs615-mc-virt",
1440	  .data = &qcs615_mc_virt},
1441	{ .compatible = "qcom,qcs615-mmss-noc",
1442	  .data = &qcs615_mmss_noc},
1443	{ .compatible = "qcom,qcs615-system-noc",
1444	  .data = &qcs615_system_noc},
1445	{ }
1446};
1447MODULE_DEVICE_TABLE(of, qnoc_of_match);
1448
1449static struct platform_driver qnoc_driver = {
1450	.probe = qcom_icc_rpmh_probe,
1451	.remove = qcom_icc_rpmh_remove,
1452	.driver = {
1453		.name = "qnoc-qcs615",
1454		.of_match_table = qnoc_of_match,
1455		.sync_state = icc_sync_state,
1456	},
1457};
1458
1459static int __init qnoc_driver_init(void)
1460{
1461	return platform_driver_register(&qnoc_driver);
1462}
1463core_initcall(qnoc_driver_init);
1464
1465static void __exit qnoc_driver_exit(void)
1466{
1467	platform_driver_unregister(&qnoc_driver);
1468}
1469module_exit(qnoc_driver_exit);
1470
1471MODULE_DESCRIPTION("qcs615 NoC driver");
1472MODULE_LICENSE("GPL");
~/ Read-only file preview.