cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sm8450.c (46021B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
      4 * Copyright (c) 2021, Linaro Limited
      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,sm8450.h>
     13
     14#include "bcm-voter.h"
     15#include "icc-rpmh.h"
     16#include "sm8450.h"
     17
     18static struct qcom_icc_node qhm_qspi = {
     19	.name = "qhm_qspi",
     20	.id = SM8450_MASTER_QSPI_0,
     21	.channels = 1,
     22	.buswidth = 4,
     23	.num_links = 1,
     24	.links = { SM8450_SLAVE_A1NOC_SNOC },
     25};
     26
     27static struct qcom_icc_node qhm_qup1 = {
     28	.name = "qhm_qup1",
     29	.id = SM8450_MASTER_QUP_1,
     30	.channels = 1,
     31	.buswidth = 4,
     32	.num_links = 1,
     33	.links = { SM8450_SLAVE_A1NOC_SNOC },
     34};
     35
     36static struct qcom_icc_node qnm_a1noc_cfg = {
     37	.name = "qnm_a1noc_cfg",
     38	.id = SM8450_MASTER_A1NOC_CFG,
     39	.channels = 1,
     40	.buswidth = 4,
     41	.num_links = 1,
     42	.links = { SM8450_SLAVE_SERVICE_A1NOC },
     43};
     44
     45static struct qcom_icc_node xm_sdc4 = {
     46	.name = "xm_sdc4",
     47	.id = SM8450_MASTER_SDCC_4,
     48	.channels = 1,
     49	.buswidth = 8,
     50	.num_links = 1,
     51	.links = { SM8450_SLAVE_A1NOC_SNOC },
     52};
     53
     54static struct qcom_icc_node xm_ufs_mem = {
     55	.name = "xm_ufs_mem",
     56	.id = SM8450_MASTER_UFS_MEM,
     57	.channels = 1,
     58	.buswidth = 8,
     59	.num_links = 1,
     60	.links = { SM8450_SLAVE_A1NOC_SNOC },
     61};
     62
     63static struct qcom_icc_node xm_usb3_0 = {
     64	.name = "xm_usb3_0",
     65	.id = SM8450_MASTER_USB3_0,
     66	.channels = 1,
     67	.buswidth = 8,
     68	.num_links = 1,
     69	.links = { SM8450_SLAVE_A1NOC_SNOC },
     70};
     71
     72static struct qcom_icc_node qhm_qdss_bam = {
     73	.name = "qhm_qdss_bam",
     74	.id = SM8450_MASTER_QDSS_BAM,
     75	.channels = 1,
     76	.buswidth = 4,
     77	.num_links = 1,
     78	.links = { SM8450_SLAVE_A2NOC_SNOC },
     79};
     80
     81static struct qcom_icc_node qhm_qup0 = {
     82	.name = "qhm_qup0",
     83	.id = SM8450_MASTER_QUP_0,
     84	.channels = 1,
     85	.buswidth = 4,
     86	.num_links = 1,
     87	.links = { SM8450_SLAVE_A2NOC_SNOC },
     88};
     89
     90static struct qcom_icc_node qhm_qup2 = {
     91	.name = "qhm_qup2",
     92	.id = SM8450_MASTER_QUP_2,
     93	.channels = 1,
     94	.buswidth = 4,
     95	.num_links = 1,
     96	.links = { SM8450_SLAVE_A2NOC_SNOC },
     97};
     98
     99static struct qcom_icc_node qnm_a2noc_cfg = {
    100	.name = "qnm_a2noc_cfg",
    101	.id = SM8450_MASTER_A2NOC_CFG,
    102	.channels = 1,
    103	.buswidth = 4,
    104	.num_links = 1,
    105	.links = { SM8450_SLAVE_SERVICE_A2NOC },
    106};
    107
    108static struct qcom_icc_node qxm_crypto = {
    109	.name = "qxm_crypto",
    110	.id = SM8450_MASTER_CRYPTO,
    111	.channels = 1,
    112	.buswidth = 8,
    113	.num_links = 1,
    114	.links = { SM8450_SLAVE_A2NOC_SNOC },
    115};
    116
    117static struct qcom_icc_node qxm_ipa = {
    118	.name = "qxm_ipa",
    119	.id = SM8450_MASTER_IPA,
    120	.channels = 1,
    121	.buswidth = 8,
    122	.num_links = 1,
    123	.links = { SM8450_SLAVE_A2NOC_SNOC },
    124};
    125
    126static struct qcom_icc_node qxm_sensorss_q6 = {
    127	.name = "qxm_sensorss_q6",
    128	.id = SM8450_MASTER_SENSORS_PROC,
    129	.channels = 1,
    130	.buswidth = 8,
    131	.num_links = 1,
    132	.links = { SM8450_SLAVE_A2NOC_SNOC },
    133};
    134
    135static struct qcom_icc_node qxm_sp = {
    136	.name = "qxm_sp",
    137	.id = SM8450_MASTER_SP,
    138	.channels = 1,
    139	.buswidth = 8,
    140	.num_links = 1,
    141	.links = { SM8450_SLAVE_A2NOC_SNOC },
    142};
    143
    144static struct qcom_icc_node xm_qdss_etr_0 = {
    145	.name = "xm_qdss_etr_0",
    146	.id = SM8450_MASTER_QDSS_ETR,
    147	.channels = 1,
    148	.buswidth = 8,
    149	.num_links = 1,
    150	.links = { SM8450_SLAVE_A2NOC_SNOC },
    151};
    152
    153static struct qcom_icc_node xm_qdss_etr_1 = {
    154	.name = "xm_qdss_etr_1",
    155	.id = SM8450_MASTER_QDSS_ETR_1,
    156	.channels = 1,
    157	.buswidth = 8,
    158	.num_links = 1,
    159	.links = { SM8450_SLAVE_A2NOC_SNOC },
    160};
    161
    162static struct qcom_icc_node xm_sdc2 = {
    163	.name = "xm_sdc2",
    164	.id = SM8450_MASTER_SDCC_2,
    165	.channels = 1,
    166	.buswidth = 8,
    167	.num_links = 1,
    168	.links = { SM8450_SLAVE_A2NOC_SNOC },
    169};
    170
    171static struct qcom_icc_node qup0_core_master = {
    172	.name = "qup0_core_master",
    173	.id = SM8450_MASTER_QUP_CORE_0,
    174	.channels = 1,
    175	.buswidth = 4,
    176	.num_links = 1,
    177	.links = { SM8450_SLAVE_QUP_CORE_0 },
    178};
    179
    180static struct qcom_icc_node qup1_core_master = {
    181	.name = "qup1_core_master",
    182	.id = SM8450_MASTER_QUP_CORE_1,
    183	.channels = 1,
    184	.buswidth = 4,
    185	.num_links = 1,
    186	.links = { SM8450_SLAVE_QUP_CORE_1 },
    187};
    188
    189static struct qcom_icc_node qup2_core_master = {
    190	.name = "qup2_core_master",
    191	.id = SM8450_MASTER_QUP_CORE_2,
    192	.channels = 1,
    193	.buswidth = 4,
    194	.num_links = 1,
    195	.links = { SM8450_SLAVE_QUP_CORE_2 },
    196};
    197
    198static struct qcom_icc_node qnm_gemnoc_cnoc = {
    199	.name = "qnm_gemnoc_cnoc",
    200	.id = SM8450_MASTER_GEM_NOC_CNOC,
    201	.channels = 1,
    202	.buswidth = 16,
    203	.num_links = 51,
    204	.links = { SM8450_SLAVE_AHB2PHY_SOUTH, SM8450_SLAVE_AHB2PHY_NORTH,
    205		   SM8450_SLAVE_AOSS, SM8450_SLAVE_CAMERA_CFG,
    206		   SM8450_SLAVE_CLK_CTL, SM8450_SLAVE_CDSP_CFG,
    207		   SM8450_SLAVE_RBCPR_CX_CFG, SM8450_SLAVE_RBCPR_MMCX_CFG,
    208		   SM8450_SLAVE_RBCPR_MXA_CFG, SM8450_SLAVE_RBCPR_MXC_CFG,
    209		   SM8450_SLAVE_CRYPTO_0_CFG, SM8450_SLAVE_CX_RDPM,
    210		   SM8450_SLAVE_DISPLAY_CFG, SM8450_SLAVE_GFX3D_CFG,
    211		   SM8450_SLAVE_IMEM_CFG, SM8450_SLAVE_IPA_CFG,
    212		   SM8450_SLAVE_IPC_ROUTER_CFG, SM8450_SLAVE_LPASS,
    213		   SM8450_SLAVE_CNOC_MSS, SM8450_SLAVE_MX_RDPM,
    214		   SM8450_SLAVE_PCIE_0_CFG, SM8450_SLAVE_PCIE_1_CFG,
    215		   SM8450_SLAVE_PDM, SM8450_SLAVE_PIMEM_CFG,
    216		   SM8450_SLAVE_PRNG, SM8450_SLAVE_QDSS_CFG,
    217		   SM8450_SLAVE_QSPI_0, SM8450_SLAVE_QUP_0,
    218		   SM8450_SLAVE_QUP_1, SM8450_SLAVE_QUP_2,
    219		   SM8450_SLAVE_SDCC_2, SM8450_SLAVE_SDCC_4,
    220		   SM8450_SLAVE_SPSS_CFG, SM8450_SLAVE_TCSR,
    221		   SM8450_SLAVE_TLMM, SM8450_SLAVE_TME_CFG,
    222		   SM8450_SLAVE_UFS_MEM_CFG, SM8450_SLAVE_USB3_0,
    223		   SM8450_SLAVE_VENUS_CFG, SM8450_SLAVE_VSENSE_CTRL_CFG,
    224		   SM8450_SLAVE_A1NOC_CFG, SM8450_SLAVE_A2NOC_CFG,
    225		   SM8450_SLAVE_DDRSS_CFG, SM8450_SLAVE_CNOC_MNOC_CFG,
    226		   SM8450_SLAVE_PCIE_ANOC_CFG, SM8450_SLAVE_SNOC_CFG,
    227		   SM8450_SLAVE_IMEM, SM8450_SLAVE_PIMEM,
    228		   SM8450_SLAVE_SERVICE_CNOC, SM8450_SLAVE_QDSS_STM,
    229		   SM8450_SLAVE_TCU },
    230};
    231
    232static struct qcom_icc_node qnm_gemnoc_pcie = {
    233	.name = "qnm_gemnoc_pcie",
    234	.id = SM8450_MASTER_GEM_NOC_PCIE_SNOC,
    235	.channels = 1,
    236	.buswidth = 8,
    237	.num_links = 2,
    238	.links = { SM8450_SLAVE_PCIE_0, SM8450_SLAVE_PCIE_1 },
    239};
    240
    241static struct qcom_icc_node alm_gpu_tcu = {
    242	.name = "alm_gpu_tcu",
    243	.id = SM8450_MASTER_GPU_TCU,
    244	.channels = 1,
    245	.buswidth = 8,
    246	.num_links = 2,
    247	.links = { SM8450_SLAVE_GEM_NOC_CNOC, SM8450_SLAVE_LLCC },
    248};
    249
    250static struct qcom_icc_node alm_sys_tcu = {
    251	.name = "alm_sys_tcu",
    252	.id = SM8450_MASTER_SYS_TCU,
    253	.channels = 1,
    254	.buswidth = 8,
    255	.num_links = 2,
    256	.links = { SM8450_SLAVE_GEM_NOC_CNOC, SM8450_SLAVE_LLCC },
    257};
    258
    259static struct qcom_icc_node chm_apps = {
    260	.name = "chm_apps",
    261	.id = SM8450_MASTER_APPSS_PROC,
    262	.channels = 3,
    263	.buswidth = 32,
    264	.num_links = 3,
    265	.links = { SM8450_SLAVE_GEM_NOC_CNOC, SM8450_SLAVE_LLCC,
    266		   SM8450_SLAVE_MEM_NOC_PCIE_SNOC },
    267};
    268
    269static struct qcom_icc_node qnm_gpu = {
    270	.name = "qnm_gpu",
    271	.id = SM8450_MASTER_GFX3D,
    272	.channels = 2,
    273	.buswidth = 32,
    274	.num_links = 2,
    275	.links = { SM8450_SLAVE_GEM_NOC_CNOC, SM8450_SLAVE_LLCC },
    276};
    277
    278static struct qcom_icc_node qnm_mdsp = {
    279	.name = "qnm_mdsp",
    280	.id = SM8450_MASTER_MSS_PROC,
    281	.channels = 1,
    282	.buswidth = 16,
    283	.num_links = 3,
    284	.links = { SM8450_SLAVE_GEM_NOC_CNOC, SM8450_SLAVE_LLCC,
    285		   SM8450_SLAVE_MEM_NOC_PCIE_SNOC },
    286};
    287
    288static struct qcom_icc_node qnm_mnoc_hf = {
    289	.name = "qnm_mnoc_hf",
    290	.id = SM8450_MASTER_MNOC_HF_MEM_NOC,
    291	.channels = 2,
    292	.buswidth = 32,
    293	.num_links = 1,
    294	.links = { SM8450_SLAVE_LLCC },
    295};
    296
    297static struct qcom_icc_node qnm_mnoc_sf = {
    298	.name = "qnm_mnoc_sf",
    299	.id = SM8450_MASTER_MNOC_SF_MEM_NOC,
    300	.channels = 2,
    301	.buswidth = 32,
    302	.num_links = 2,
    303	.links = { SM8450_SLAVE_GEM_NOC_CNOC, SM8450_SLAVE_LLCC },
    304};
    305
    306static struct qcom_icc_node qnm_nsp_gemnoc = {
    307	.name = "qnm_nsp_gemnoc",
    308	.id = SM8450_MASTER_COMPUTE_NOC,
    309	.channels = 2,
    310	.buswidth = 32,
    311	.num_links = 2,
    312	.links = { SM8450_SLAVE_GEM_NOC_CNOC, SM8450_SLAVE_LLCC },
    313};
    314
    315static struct qcom_icc_node qnm_pcie = {
    316	.name = "qnm_pcie",
    317	.id = SM8450_MASTER_ANOC_PCIE_GEM_NOC,
    318	.channels = 1,
    319	.buswidth = 16,
    320	.num_links = 2,
    321	.links = { SM8450_SLAVE_GEM_NOC_CNOC, SM8450_SLAVE_LLCC },
    322};
    323
    324static struct qcom_icc_node qnm_snoc_gc = {
    325	.name = "qnm_snoc_gc",
    326	.id = SM8450_MASTER_SNOC_GC_MEM_NOC,
    327	.channels = 1,
    328	.buswidth = 8,
    329	.num_links = 1,
    330	.links = { SM8450_SLAVE_LLCC },
    331};
    332
    333static struct qcom_icc_node qnm_snoc_sf = {
    334	.name = "qnm_snoc_sf",
    335	.id = SM8450_MASTER_SNOC_SF_MEM_NOC,
    336	.channels = 1,
    337	.buswidth = 16,
    338	.num_links = 3,
    339	.links = { SM8450_SLAVE_GEM_NOC_CNOC, SM8450_SLAVE_LLCC,
    340		   SM8450_SLAVE_MEM_NOC_PCIE_SNOC },
    341};
    342
    343static struct qcom_icc_node qhm_config_noc = {
    344	.name = "qhm_config_noc",
    345	.id = SM8450_MASTER_CNOC_LPASS_AG_NOC,
    346	.channels = 1,
    347	.buswidth = 4,
    348	.num_links = 6,
    349	.links = { SM8450_SLAVE_LPASS_CORE_CFG, SM8450_SLAVE_LPASS_LPI_CFG,
    350		   SM8450_SLAVE_LPASS_MPU_CFG, SM8450_SLAVE_LPASS_TOP_CFG,
    351		   SM8450_SLAVE_SERVICES_LPASS_AML_NOC, SM8450_SLAVE_SERVICE_LPASS_AG_NOC },
    352};
    353
    354static struct qcom_icc_node qxm_lpass_dsp = {
    355	.name = "qxm_lpass_dsp",
    356	.id = SM8450_MASTER_LPASS_PROC,
    357	.channels = 1,
    358	.buswidth = 8,
    359	.num_links = 4,
    360	.links = { SM8450_SLAVE_LPASS_TOP_CFG, SM8450_SLAVE_LPASS_SNOC,
    361		   SM8450_SLAVE_SERVICES_LPASS_AML_NOC, SM8450_SLAVE_SERVICE_LPASS_AG_NOC },
    362};
    363
    364static struct qcom_icc_node llcc_mc = {
    365	.name = "llcc_mc",
    366	.id = SM8450_MASTER_LLCC,
    367	.channels = 4,
    368	.buswidth = 4,
    369	.num_links = 1,
    370	.links = { SM8450_SLAVE_EBI1 },
    371};
    372
    373static struct qcom_icc_node qnm_camnoc_hf = {
    374	.name = "qnm_camnoc_hf",
    375	.id = SM8450_MASTER_CAMNOC_HF,
    376	.channels = 2,
    377	.buswidth = 32,
    378	.num_links = 1,
    379	.links = { SM8450_SLAVE_MNOC_HF_MEM_NOC },
    380};
    381
    382static struct qcom_icc_node qnm_camnoc_icp = {
    383	.name = "qnm_camnoc_icp",
    384	.id = SM8450_MASTER_CAMNOC_ICP,
    385	.channels = 1,
    386	.buswidth = 8,
    387	.num_links = 1,
    388	.links = { SM8450_SLAVE_MNOC_SF_MEM_NOC },
    389};
    390
    391static struct qcom_icc_node qnm_camnoc_sf = {
    392	.name = "qnm_camnoc_sf",
    393	.id = SM8450_MASTER_CAMNOC_SF,
    394	.channels = 2,
    395	.buswidth = 32,
    396	.num_links = 1,
    397	.links = { SM8450_SLAVE_MNOC_SF_MEM_NOC },
    398};
    399
    400static struct qcom_icc_node qnm_mdp = {
    401	.name = "qnm_mdp",
    402	.id = SM8450_MASTER_MDP,
    403	.channels = 2,
    404	.buswidth = 32,
    405	.num_links = 1,
    406	.links = { SM8450_SLAVE_MNOC_HF_MEM_NOC },
    407};
    408
    409static struct qcom_icc_node qnm_mnoc_cfg = {
    410	.name = "qnm_mnoc_cfg",
    411	.id = SM8450_MASTER_CNOC_MNOC_CFG,
    412	.channels = 1,
    413	.buswidth = 4,
    414	.num_links = 1,
    415	.links = { SM8450_SLAVE_SERVICE_MNOC },
    416};
    417
    418static struct qcom_icc_node qnm_rot = {
    419	.name = "qnm_rot",
    420	.id = SM8450_MASTER_ROTATOR,
    421	.channels = 1,
    422	.buswidth = 32,
    423	.num_links = 1,
    424	.links = { SM8450_SLAVE_MNOC_SF_MEM_NOC },
    425};
    426
    427static struct qcom_icc_node qnm_vapss_hcp = {
    428	.name = "qnm_vapss_hcp",
    429	.id = SM8450_MASTER_CDSP_HCP,
    430	.channels = 1,
    431	.buswidth = 32,
    432	.num_links = 1,
    433	.links = { SM8450_SLAVE_MNOC_SF_MEM_NOC },
    434};
    435
    436static struct qcom_icc_node qnm_video = {
    437	.name = "qnm_video",
    438	.id = SM8450_MASTER_VIDEO,
    439	.channels = 2,
    440	.buswidth = 32,
    441	.num_links = 1,
    442	.links = { SM8450_SLAVE_MNOC_SF_MEM_NOC },
    443};
    444
    445static struct qcom_icc_node qnm_video_cv_cpu = {
    446	.name = "qnm_video_cv_cpu",
    447	.id = SM8450_MASTER_VIDEO_CV_PROC,
    448	.channels = 1,
    449	.buswidth = 8,
    450	.num_links = 1,
    451	.links = { SM8450_SLAVE_MNOC_SF_MEM_NOC },
    452};
    453
    454static struct qcom_icc_node qnm_video_cvp = {
    455	.name = "qnm_video_cvp",
    456	.id = SM8450_MASTER_VIDEO_PROC,
    457	.channels = 1,
    458	.buswidth = 32,
    459	.num_links = 1,
    460	.links = { SM8450_SLAVE_MNOC_SF_MEM_NOC },
    461};
    462
    463static struct qcom_icc_node qnm_video_v_cpu = {
    464	.name = "qnm_video_v_cpu",
    465	.id = SM8450_MASTER_VIDEO_V_PROC,
    466	.channels = 1,
    467	.buswidth = 8,
    468	.num_links = 1,
    469	.links = { SM8450_SLAVE_MNOC_SF_MEM_NOC },
    470};
    471
    472static struct qcom_icc_node qhm_nsp_noc_config = {
    473	.name = "qhm_nsp_noc_config",
    474	.id = SM8450_MASTER_CDSP_NOC_CFG,
    475	.channels = 1,
    476	.buswidth = 4,
    477	.num_links = 1,
    478	.links = { SM8450_SLAVE_SERVICE_NSP_NOC },
    479};
    480
    481static struct qcom_icc_node qxm_nsp = {
    482	.name = "qxm_nsp",
    483	.id = SM8450_MASTER_CDSP_PROC,
    484	.channels = 2,
    485	.buswidth = 32,
    486	.num_links = 1,
    487	.links = { SM8450_SLAVE_CDSP_MEM_NOC },
    488};
    489
    490static struct qcom_icc_node qnm_pcie_anoc_cfg = {
    491	.name = "qnm_pcie_anoc_cfg",
    492	.id = SM8450_MASTER_PCIE_ANOC_CFG,
    493	.channels = 1,
    494	.buswidth = 4,
    495	.num_links = 1,
    496	.links = { SM8450_SLAVE_SERVICE_PCIE_ANOC },
    497};
    498
    499static struct qcom_icc_node xm_pcie3_0 = {
    500	.name = "xm_pcie3_0",
    501	.id = SM8450_MASTER_PCIE_0,
    502	.channels = 1,
    503	.buswidth = 8,
    504	.num_links = 1,
    505	.links = { SM8450_SLAVE_ANOC_PCIE_GEM_NOC },
    506};
    507
    508static struct qcom_icc_node xm_pcie3_1 = {
    509	.name = "xm_pcie3_1",
    510	.id = SM8450_MASTER_PCIE_1,
    511	.channels = 1,
    512	.buswidth = 8,
    513	.num_links = 1,
    514	.links = { SM8450_SLAVE_ANOC_PCIE_GEM_NOC },
    515};
    516
    517static struct qcom_icc_node qhm_gic = {
    518	.name = "qhm_gic",
    519	.id = SM8450_MASTER_GIC_AHB,
    520	.channels = 1,
    521	.buswidth = 4,
    522	.num_links = 1,
    523	.links = { SM8450_SLAVE_SNOC_GEM_NOC_SF },
    524};
    525
    526static struct qcom_icc_node qnm_aggre1_noc = {
    527	.name = "qnm_aggre1_noc",
    528	.id = SM8450_MASTER_A1NOC_SNOC,
    529	.channels = 1,
    530	.buswidth = 16,
    531	.num_links = 1,
    532	.links = { SM8450_SLAVE_SNOC_GEM_NOC_SF },
    533};
    534
    535static struct qcom_icc_node qnm_aggre2_noc = {
    536	.name = "qnm_aggre2_noc",
    537	.id = SM8450_MASTER_A2NOC_SNOC,
    538	.channels = 1,
    539	.buswidth = 16,
    540	.num_links = 1,
    541	.links = { SM8450_SLAVE_SNOC_GEM_NOC_SF },
    542};
    543
    544static struct qcom_icc_node qnm_lpass_noc = {
    545	.name = "qnm_lpass_noc",
    546	.id = SM8450_MASTER_LPASS_ANOC,
    547	.channels = 1,
    548	.buswidth = 16,
    549	.num_links = 1,
    550	.links = { SM8450_SLAVE_SNOC_GEM_NOC_SF },
    551};
    552
    553static struct qcom_icc_node qnm_snoc_cfg = {
    554	.name = "qnm_snoc_cfg",
    555	.id = SM8450_MASTER_SNOC_CFG,
    556	.channels = 1,
    557	.buswidth = 4,
    558	.num_links = 1,
    559	.links = { SM8450_SLAVE_SERVICE_SNOC },
    560};
    561
    562static struct qcom_icc_node qxm_pimem = {
    563	.name = "qxm_pimem",
    564	.id = SM8450_MASTER_PIMEM,
    565	.channels = 1,
    566	.buswidth = 8,
    567	.num_links = 1,
    568	.links = { SM8450_SLAVE_SNOC_GEM_NOC_GC },
    569};
    570
    571static struct qcom_icc_node xm_gic = {
    572	.name = "xm_gic",
    573	.id = SM8450_MASTER_GIC,
    574	.channels = 1,
    575	.buswidth = 8,
    576	.num_links = 1,
    577	.links = { SM8450_SLAVE_SNOC_GEM_NOC_GC },
    578};
    579
    580static struct qcom_icc_node qnm_mnoc_hf_disp = {
    581	.name = "qnm_mnoc_hf_disp",
    582	.id = SM8450_MASTER_MNOC_HF_MEM_NOC_DISP,
    583	.channels = 2,
    584	.buswidth = 32,
    585	.num_links = 1,
    586	.links = { SM8450_SLAVE_LLCC_DISP },
    587};
    588
    589static struct qcom_icc_node qnm_mnoc_sf_disp = {
    590	.name = "qnm_mnoc_sf_disp",
    591	.id = SM8450_MASTER_MNOC_SF_MEM_NOC_DISP,
    592	.channels = 2,
    593	.buswidth = 32,
    594	.num_links = 1,
    595	.links = { SM8450_SLAVE_LLCC_DISP },
    596};
    597
    598static struct qcom_icc_node qnm_pcie_disp = {
    599	.name = "qnm_pcie_disp",
    600	.id = SM8450_MASTER_ANOC_PCIE_GEM_NOC_DISP,
    601	.channels = 1,
    602	.buswidth = 16,
    603	.num_links = 1,
    604	.links = { SM8450_SLAVE_LLCC_DISP },
    605};
    606
    607static struct qcom_icc_node llcc_mc_disp = {
    608	.name = "llcc_mc_disp",
    609	.id = SM8450_MASTER_LLCC_DISP,
    610	.channels = 4,
    611	.buswidth = 4,
    612	.num_links = 1,
    613	.links = { SM8450_SLAVE_EBI1_DISP },
    614};
    615
    616static struct qcom_icc_node qnm_mdp_disp = {
    617	.name = "qnm_mdp_disp",
    618	.id = SM8450_MASTER_MDP_DISP,
    619	.channels = 2,
    620	.buswidth = 32,
    621	.num_links = 1,
    622	.links = { SM8450_SLAVE_MNOC_HF_MEM_NOC_DISP },
    623};
    624
    625static struct qcom_icc_node qnm_rot_disp = {
    626	.name = "qnm_rot_disp",
    627	.id = SM8450_MASTER_ROTATOR_DISP,
    628	.channels = 1,
    629	.buswidth = 32,
    630	.num_links = 1,
    631	.links = { SM8450_SLAVE_MNOC_SF_MEM_NOC_DISP },
    632};
    633
    634static struct qcom_icc_node qns_a1noc_snoc = {
    635	.name = "qns_a1noc_snoc",
    636	.id = SM8450_SLAVE_A1NOC_SNOC,
    637	.channels = 1,
    638	.buswidth = 16,
    639	.num_links = 1,
    640	.links = { SM8450_MASTER_A1NOC_SNOC },
    641};
    642
    643static struct qcom_icc_node srvc_aggre1_noc = {
    644	.name = "srvc_aggre1_noc",
    645	.id = SM8450_SLAVE_SERVICE_A1NOC,
    646	.channels = 1,
    647	.buswidth = 4,
    648	.num_links = 0,
    649};
    650
    651static struct qcom_icc_node qns_a2noc_snoc = {
    652	.name = "qns_a2noc_snoc",
    653	.id = SM8450_SLAVE_A2NOC_SNOC,
    654	.channels = 1,
    655	.buswidth = 16,
    656	.num_links = 1,
    657	.links = { SM8450_MASTER_A2NOC_SNOC },
    658};
    659
    660static struct qcom_icc_node srvc_aggre2_noc = {
    661	.name = "srvc_aggre2_noc",
    662	.id = SM8450_SLAVE_SERVICE_A2NOC,
    663	.channels = 1,
    664	.buswidth = 4,
    665	.num_links = 0,
    666};
    667
    668static struct qcom_icc_node qup0_core_slave = {
    669	.name = "qup0_core_slave",
    670	.id = SM8450_SLAVE_QUP_CORE_0,
    671	.channels = 1,
    672	.buswidth = 4,
    673	.num_links = 0,
    674};
    675
    676static struct qcom_icc_node qup1_core_slave = {
    677	.name = "qup1_core_slave",
    678	.id = SM8450_SLAVE_QUP_CORE_1,
    679	.channels = 1,
    680	.buswidth = 4,
    681	.num_links = 0,
    682};
    683
    684static struct qcom_icc_node qup2_core_slave = {
    685	.name = "qup2_core_slave",
    686	.id = SM8450_SLAVE_QUP_CORE_2,
    687	.channels = 1,
    688	.buswidth = 4,
    689	.num_links = 0,
    690};
    691
    692static struct qcom_icc_node qhs_ahb2phy0 = {
    693	.name = "qhs_ahb2phy0",
    694	.id = SM8450_SLAVE_AHB2PHY_SOUTH,
    695	.channels = 1,
    696	.buswidth = 4,
    697	.num_links = 0,
    698};
    699
    700static struct qcom_icc_node qhs_ahb2phy1 = {
    701	.name = "qhs_ahb2phy1",
    702	.id = SM8450_SLAVE_AHB2PHY_NORTH,
    703	.channels = 1,
    704	.buswidth = 4,
    705	.num_links = 0,
    706};
    707
    708static struct qcom_icc_node qhs_aoss = {
    709	.name = "qhs_aoss",
    710	.id = SM8450_SLAVE_AOSS,
    711	.channels = 1,
    712	.buswidth = 4,
    713	.num_links = 0,
    714};
    715
    716static struct qcom_icc_node qhs_camera_cfg = {
    717	.name = "qhs_camera_cfg",
    718	.id = SM8450_SLAVE_CAMERA_CFG,
    719	.channels = 1,
    720	.buswidth = 4,
    721	.num_links = 0,
    722};
    723
    724static struct qcom_icc_node qhs_clk_ctl = {
    725	.name = "qhs_clk_ctl",
    726	.id = SM8450_SLAVE_CLK_CTL,
    727	.channels = 1,
    728	.buswidth = 4,
    729	.num_links = 0,
    730};
    731
    732static struct qcom_icc_node qhs_compute_cfg = {
    733	.name = "qhs_compute_cfg",
    734	.id = SM8450_SLAVE_CDSP_CFG,
    735	.channels = 1,
    736	.buswidth = 4,
    737	.num_links = 1,
    738	.links = { MASTER_CDSP_NOC_CFG },
    739};
    740
    741static struct qcom_icc_node qhs_cpr_cx = {
    742	.name = "qhs_cpr_cx",
    743	.id = SM8450_SLAVE_RBCPR_CX_CFG,
    744	.channels = 1,
    745	.buswidth = 4,
    746	.num_links = 0,
    747};
    748
    749static struct qcom_icc_node qhs_cpr_mmcx = {
    750	.name = "qhs_cpr_mmcx",
    751	.id = SM8450_SLAVE_RBCPR_MMCX_CFG,
    752	.channels = 1,
    753	.buswidth = 4,
    754	.num_links = 0,
    755};
    756
    757static struct qcom_icc_node qhs_cpr_mxa = {
    758	.name = "qhs_cpr_mxa",
    759	.id = SM8450_SLAVE_RBCPR_MXA_CFG,
    760	.channels = 1,
    761	.buswidth = 4,
    762	.num_links = 0,
    763};
    764
    765static struct qcom_icc_node qhs_cpr_mxc = {
    766	.name = "qhs_cpr_mxc",
    767	.id = SM8450_SLAVE_RBCPR_MXC_CFG,
    768	.channels = 1,
    769	.buswidth = 4,
    770	.num_links = 0,
    771};
    772
    773static struct qcom_icc_node qhs_crypto0_cfg = {
    774	.name = "qhs_crypto0_cfg",
    775	.id = SM8450_SLAVE_CRYPTO_0_CFG,
    776	.channels = 1,
    777	.buswidth = 4,
    778	.num_links = 0,
    779};
    780
    781static struct qcom_icc_node qhs_cx_rdpm = {
    782	.name = "qhs_cx_rdpm",
    783	.id = SM8450_SLAVE_CX_RDPM,
    784	.channels = 1,
    785	.buswidth = 4,
    786	.num_links = 0,
    787};
    788
    789static struct qcom_icc_node qhs_display_cfg = {
    790	.name = "qhs_display_cfg",
    791	.id = SM8450_SLAVE_DISPLAY_CFG,
    792	.channels = 1,
    793	.buswidth = 4,
    794	.num_links = 0,
    795};
    796
    797static struct qcom_icc_node qhs_gpuss_cfg = {
    798	.name = "qhs_gpuss_cfg",
    799	.id = SM8450_SLAVE_GFX3D_CFG,
    800	.channels = 1,
    801	.buswidth = 8,
    802	.num_links = 0,
    803};
    804
    805static struct qcom_icc_node qhs_imem_cfg = {
    806	.name = "qhs_imem_cfg",
    807	.id = SM8450_SLAVE_IMEM_CFG,
    808	.channels = 1,
    809	.buswidth = 4,
    810	.num_links = 0,
    811};
    812
    813static struct qcom_icc_node qhs_ipa = {
    814	.name = "qhs_ipa",
    815	.id = SM8450_SLAVE_IPA_CFG,
    816	.channels = 1,
    817	.buswidth = 4,
    818	.num_links = 0,
    819};
    820
    821static struct qcom_icc_node qhs_ipc_router = {
    822	.name = "qhs_ipc_router",
    823	.id = SM8450_SLAVE_IPC_ROUTER_CFG,
    824	.channels = 1,
    825	.buswidth = 4,
    826	.num_links = 0,
    827};
    828
    829static struct qcom_icc_node qhs_lpass_cfg = {
    830	.name = "qhs_lpass_cfg",
    831	.id = SM8450_SLAVE_LPASS,
    832	.channels = 1,
    833	.buswidth = 4,
    834	.num_links = 1,
    835	.links = { MASTER_CNOC_LPASS_AG_NOC },
    836};
    837
    838static struct qcom_icc_node qhs_mss_cfg = {
    839	.name = "qhs_mss_cfg",
    840	.id = SM8450_SLAVE_CNOC_MSS,
    841	.channels = 1,
    842	.buswidth = 4,
    843	.num_links = 0,
    844};
    845
    846static struct qcom_icc_node qhs_mx_rdpm = {
    847	.name = "qhs_mx_rdpm",
    848	.id = SM8450_SLAVE_MX_RDPM,
    849	.channels = 1,
    850	.buswidth = 4,
    851	.num_links = 0,
    852};
    853
    854static struct qcom_icc_node qhs_pcie0_cfg = {
    855	.name = "qhs_pcie0_cfg",
    856	.id = SM8450_SLAVE_PCIE_0_CFG,
    857	.channels = 1,
    858	.buswidth = 4,
    859	.num_links = 0,
    860};
    861
    862static struct qcom_icc_node qhs_pcie1_cfg = {
    863	.name = "qhs_pcie1_cfg",
    864	.id = SM8450_SLAVE_PCIE_1_CFG,
    865	.channels = 1,
    866	.buswidth = 4,
    867	.num_links = 0,
    868};
    869
    870static struct qcom_icc_node qhs_pdm = {
    871	.name = "qhs_pdm",
    872	.id = SM8450_SLAVE_PDM,
    873	.channels = 1,
    874	.buswidth = 4,
    875	.num_links = 0,
    876};
    877
    878static struct qcom_icc_node qhs_pimem_cfg = {
    879	.name = "qhs_pimem_cfg",
    880	.id = SM8450_SLAVE_PIMEM_CFG,
    881	.channels = 1,
    882	.buswidth = 4,
    883	.num_links = 0,
    884};
    885
    886static struct qcom_icc_node qhs_prng = {
    887	.name = "qhs_prng",
    888	.id = SM8450_SLAVE_PRNG,
    889	.channels = 1,
    890	.buswidth = 4,
    891	.num_links = 0,
    892};
    893
    894static struct qcom_icc_node qhs_qdss_cfg = {
    895	.name = "qhs_qdss_cfg",
    896	.id = SM8450_SLAVE_QDSS_CFG,
    897	.channels = 1,
    898	.buswidth = 4,
    899	.num_links = 0,
    900};
    901
    902static struct qcom_icc_node qhs_qspi = {
    903	.name = "qhs_qspi",
    904	.id = SM8450_SLAVE_QSPI_0,
    905	.channels = 1,
    906	.buswidth = 4,
    907	.num_links = 0,
    908};
    909
    910static struct qcom_icc_node qhs_qup0 = {
    911	.name = "qhs_qup0",
    912	.id = SM8450_SLAVE_QUP_0,
    913	.channels = 1,
    914	.buswidth = 4,
    915	.num_links = 0,
    916};
    917
    918static struct qcom_icc_node qhs_qup1 = {
    919	.name = "qhs_qup1",
    920	.id = SM8450_SLAVE_QUP_1,
    921	.channels = 1,
    922	.buswidth = 4,
    923	.num_links = 0,
    924};
    925
    926static struct qcom_icc_node qhs_qup2 = {
    927	.name = "qhs_qup2",
    928	.id = SM8450_SLAVE_QUP_2,
    929	.channels = 1,
    930	.buswidth = 4,
    931	.num_links = 0,
    932};
    933
    934static struct qcom_icc_node qhs_sdc2 = {
    935	.name = "qhs_sdc2",
    936	.id = SM8450_SLAVE_SDCC_2,
    937	.channels = 1,
    938	.buswidth = 4,
    939	.num_links = 0,
    940};
    941
    942static struct qcom_icc_node qhs_sdc4 = {
    943	.name = "qhs_sdc4",
    944	.id = SM8450_SLAVE_SDCC_4,
    945	.channels = 1,
    946	.buswidth = 4,
    947	.num_links = 0,
    948};
    949
    950static struct qcom_icc_node qhs_spss_cfg = {
    951	.name = "qhs_spss_cfg",
    952	.id = SM8450_SLAVE_SPSS_CFG,
    953	.channels = 1,
    954	.buswidth = 4,
    955	.num_links = 0,
    956};
    957
    958static struct qcom_icc_node qhs_tcsr = {
    959	.name = "qhs_tcsr",
    960	.id = SM8450_SLAVE_TCSR,
    961	.channels = 1,
    962	.buswidth = 4,
    963	.num_links = 0,
    964};
    965
    966static struct qcom_icc_node qhs_tlmm = {
    967	.name = "qhs_tlmm",
    968	.id = SM8450_SLAVE_TLMM,
    969	.channels = 1,
    970	.buswidth = 4,
    971	.num_links = 0,
    972};
    973
    974static struct qcom_icc_node qhs_tme_cfg = {
    975	.name = "qhs_tme_cfg",
    976	.id = SM8450_SLAVE_TME_CFG,
    977	.channels = 1,
    978	.buswidth = 4,
    979	.num_links = 0,
    980};
    981
    982static struct qcom_icc_node qhs_ufs_mem_cfg = {
    983	.name = "qhs_ufs_mem_cfg",
    984	.id = SM8450_SLAVE_UFS_MEM_CFG,
    985	.channels = 1,
    986	.buswidth = 4,
    987	.num_links = 0,
    988};
    989
    990static struct qcom_icc_node qhs_usb3_0 = {
    991	.name = "qhs_usb3_0",
    992	.id = SM8450_SLAVE_USB3_0,
    993	.channels = 1,
    994	.buswidth = 4,
    995	.num_links = 0,
    996};
    997
    998static struct qcom_icc_node qhs_venus_cfg = {
    999	.name = "qhs_venus_cfg",
   1000	.id = SM8450_SLAVE_VENUS_CFG,
   1001	.channels = 1,
   1002	.buswidth = 4,
   1003	.num_links = 0,
   1004};
   1005
   1006static struct qcom_icc_node qhs_vsense_ctrl_cfg = {
   1007	.name = "qhs_vsense_ctrl_cfg",
   1008	.id = SM8450_SLAVE_VSENSE_CTRL_CFG,
   1009	.channels = 1,
   1010	.buswidth = 4,
   1011	.num_links = 0,
   1012};
   1013
   1014static struct qcom_icc_node qns_a1_noc_cfg = {
   1015	.name = "qns_a1_noc_cfg",
   1016	.id = SM8450_SLAVE_A1NOC_CFG,
   1017	.channels = 1,
   1018	.buswidth = 4,
   1019	.num_links = 1,
   1020	.links = { SM8450_MASTER_A1NOC_CFG },
   1021};
   1022
   1023static struct qcom_icc_node qns_a2_noc_cfg = {
   1024	.name = "qns_a2_noc_cfg",
   1025	.id = SM8450_SLAVE_A2NOC_CFG,
   1026	.channels = 1,
   1027	.buswidth = 4,
   1028	.num_links = 1,
   1029	.links = { SM8450_MASTER_A2NOC_CFG },
   1030};
   1031
   1032static struct qcom_icc_node qns_ddrss_cfg = {
   1033	.name = "qns_ddrss_cfg",
   1034	.id = SM8450_SLAVE_DDRSS_CFG,
   1035	.channels = 1,
   1036	.buswidth = 4,
   1037	.num_links = 1,
   1038	//FIXME where is link
   1039};
   1040
   1041static struct qcom_icc_node qns_mnoc_cfg = {
   1042	.name = "qns_mnoc_cfg",
   1043	.id = SM8450_SLAVE_CNOC_MNOC_CFG,
   1044	.channels = 1,
   1045	.buswidth = 4,
   1046	.num_links = 1,
   1047	.links = { SM8450_MASTER_CNOC_MNOC_CFG },
   1048};
   1049
   1050static struct qcom_icc_node qns_pcie_anoc_cfg = {
   1051	.name = "qns_pcie_anoc_cfg",
   1052	.id = SM8450_SLAVE_PCIE_ANOC_CFG,
   1053	.channels = 1,
   1054	.buswidth = 4,
   1055	.num_links = 1,
   1056	.links = { SM8450_MASTER_PCIE_ANOC_CFG },
   1057};
   1058
   1059static struct qcom_icc_node qns_snoc_cfg = {
   1060	.name = "qns_snoc_cfg",
   1061	.id = SM8450_SLAVE_SNOC_CFG,
   1062	.channels = 1,
   1063	.buswidth = 4,
   1064	.num_links = 1,
   1065	.links = { SM8450_MASTER_SNOC_CFG },
   1066};
   1067
   1068static struct qcom_icc_node qxs_imem = {
   1069	.name = "qxs_imem",
   1070	.id = SM8450_SLAVE_IMEM,
   1071	.channels = 1,
   1072	.buswidth = 8,
   1073	.num_links = 0,
   1074};
   1075
   1076static struct qcom_icc_node qxs_pimem = {
   1077	.name = "qxs_pimem",
   1078	.id = SM8450_SLAVE_PIMEM,
   1079	.channels = 1,
   1080	.buswidth = 8,
   1081	.num_links = 0,
   1082};
   1083
   1084static struct qcom_icc_node srvc_cnoc = {
   1085	.name = "srvc_cnoc",
   1086	.id = SM8450_SLAVE_SERVICE_CNOC,
   1087	.channels = 1,
   1088	.buswidth = 4,
   1089	.num_links = 0,
   1090};
   1091
   1092static struct qcom_icc_node xs_pcie_0 = {
   1093	.name = "xs_pcie_0",
   1094	.id = SM8450_SLAVE_PCIE_0,
   1095	.channels = 1,
   1096	.buswidth = 8,
   1097	.num_links = 0,
   1098};
   1099
   1100static struct qcom_icc_node xs_pcie_1 = {
   1101	.name = "xs_pcie_1",
   1102	.id = SM8450_SLAVE_PCIE_1,
   1103	.channels = 1,
   1104	.buswidth = 8,
   1105	.num_links = 0,
   1106};
   1107
   1108static struct qcom_icc_node xs_qdss_stm = {
   1109	.name = "xs_qdss_stm",
   1110	.id = SM8450_SLAVE_QDSS_STM,
   1111	.channels = 1,
   1112	.buswidth = 4,
   1113	.num_links = 0,
   1114};
   1115
   1116static struct qcom_icc_node xs_sys_tcu_cfg = {
   1117	.name = "xs_sys_tcu_cfg",
   1118	.id = SM8450_SLAVE_TCU,
   1119	.channels = 1,
   1120	.buswidth = 8,
   1121	.num_links = 0,
   1122};
   1123
   1124static struct qcom_icc_node qns_gem_noc_cnoc = {
   1125	.name = "qns_gem_noc_cnoc",
   1126	.id = SM8450_SLAVE_GEM_NOC_CNOC,
   1127	.channels = 1,
   1128	.buswidth = 16,
   1129	.num_links = 1,
   1130	.links = { SM8450_MASTER_GEM_NOC_CNOC },
   1131};
   1132
   1133static struct qcom_icc_node qns_llcc = {
   1134	.name = "qns_llcc",
   1135	.id = SM8450_SLAVE_LLCC,
   1136	.channels = 4,
   1137	.buswidth = 16,
   1138	.num_links = 1,
   1139	.links = { SM8450_MASTER_LLCC },
   1140};
   1141
   1142static struct qcom_icc_node qns_pcie = {
   1143	.name = "qns_pcie",
   1144	.id = SM8450_SLAVE_MEM_NOC_PCIE_SNOC,
   1145	.channels = 1,
   1146	.buswidth = 8,
   1147	.num_links = 1,
   1148	.links = { SM8450_MASTER_GEM_NOC_PCIE_SNOC },
   1149};
   1150
   1151static struct qcom_icc_node qhs_lpass_core = {
   1152	.name = "qhs_lpass_core",
   1153	.id = SM8450_SLAVE_LPASS_CORE_CFG,
   1154	.channels = 1,
   1155	.buswidth = 4,
   1156	.num_links = 0,
   1157};
   1158
   1159static struct qcom_icc_node qhs_lpass_lpi = {
   1160	.name = "qhs_lpass_lpi",
   1161	.id = SM8450_SLAVE_LPASS_LPI_CFG,
   1162	.channels = 1,
   1163	.buswidth = 4,
   1164	.num_links = 0,
   1165};
   1166
   1167static struct qcom_icc_node qhs_lpass_mpu = {
   1168	.name = "qhs_lpass_mpu",
   1169	.id = SM8450_SLAVE_LPASS_MPU_CFG,
   1170	.channels = 1,
   1171	.buswidth = 4,
   1172	.num_links = 0,
   1173};
   1174
   1175static struct qcom_icc_node qhs_lpass_top = {
   1176	.name = "qhs_lpass_top",
   1177	.id = SM8450_SLAVE_LPASS_TOP_CFG,
   1178	.channels = 1,
   1179	.buswidth = 4,
   1180	.num_links = 0,
   1181};
   1182
   1183static struct qcom_icc_node qns_sysnoc = {
   1184	.name = "qns_sysnoc",
   1185	.id = SM8450_SLAVE_LPASS_SNOC,
   1186	.channels = 1,
   1187	.buswidth = 16,
   1188	.num_links = 1,
   1189	.links = { SM8450_MASTER_LPASS_ANOC },
   1190};
   1191
   1192static struct qcom_icc_node srvc_niu_aml_noc = {
   1193	.name = "srvc_niu_aml_noc",
   1194	.id = SM8450_SLAVE_SERVICES_LPASS_AML_NOC,
   1195	.channels = 1,
   1196	.buswidth = 4,
   1197	.num_links = 0,
   1198};
   1199
   1200static struct qcom_icc_node srvc_niu_lpass_agnoc = {
   1201	.name = "srvc_niu_lpass_agnoc",
   1202	.id = SM8450_SLAVE_SERVICE_LPASS_AG_NOC,
   1203	.channels = 1,
   1204	.buswidth = 4,
   1205	.num_links = 0,
   1206};
   1207
   1208static struct qcom_icc_node ebi = {
   1209	.name = "ebi",
   1210	.id = SM8450_SLAVE_EBI1,
   1211	.channels = 4,
   1212	.buswidth = 4,
   1213	.num_links = 0,
   1214};
   1215
   1216static struct qcom_icc_node qns_mem_noc_hf = {
   1217	.name = "qns_mem_noc_hf",
   1218	.id = SM8450_SLAVE_MNOC_HF_MEM_NOC,
   1219	.channels = 2,
   1220	.buswidth = 32,
   1221	.num_links = 1,
   1222	.links = { SM8450_MASTER_MNOC_HF_MEM_NOC },
   1223};
   1224
   1225static struct qcom_icc_node qns_mem_noc_sf = {
   1226	.name = "qns_mem_noc_sf",
   1227	.id = SM8450_SLAVE_MNOC_SF_MEM_NOC,
   1228	.channels = 2,
   1229	.buswidth = 32,
   1230	.num_links = 1,
   1231	.links = { SM8450_MASTER_MNOC_SF_MEM_NOC },
   1232};
   1233
   1234static struct qcom_icc_node srvc_mnoc = {
   1235	.name = "srvc_mnoc",
   1236	.id = SM8450_SLAVE_SERVICE_MNOC,
   1237	.channels = 1,
   1238	.buswidth = 4,
   1239	.num_links = 0,
   1240};
   1241
   1242static struct qcom_icc_node qns_nsp_gemnoc = {
   1243	.name = "qns_nsp_gemnoc",
   1244	.id = SM8450_SLAVE_CDSP_MEM_NOC,
   1245	.channels = 2,
   1246	.buswidth = 32,
   1247	.num_links = 1,
   1248	.links = { SM8450_MASTER_COMPUTE_NOC },
   1249};
   1250
   1251static struct qcom_icc_node service_nsp_noc = {
   1252	.name = "service_nsp_noc",
   1253	.id = SM8450_SLAVE_SERVICE_NSP_NOC,
   1254	.channels = 1,
   1255	.buswidth = 4,
   1256	.num_links = 0,
   1257};
   1258
   1259static struct qcom_icc_node qns_pcie_mem_noc = {
   1260	.name = "qns_pcie_mem_noc",
   1261	.id = SM8450_SLAVE_ANOC_PCIE_GEM_NOC,
   1262	.channels = 1,
   1263	.buswidth = 16,
   1264	.num_links = 1,
   1265	.links = { SM8450_MASTER_ANOC_PCIE_GEM_NOC },
   1266};
   1267
   1268static struct qcom_icc_node srvc_pcie_aggre_noc = {
   1269	.name = "srvc_pcie_aggre_noc",
   1270	.id = SM8450_SLAVE_SERVICE_PCIE_ANOC,
   1271	.channels = 1,
   1272	.buswidth = 4,
   1273	.num_links = 0,
   1274};
   1275
   1276static struct qcom_icc_node qns_gemnoc_gc = {
   1277	.name = "qns_gemnoc_gc",
   1278	.id = SM8450_SLAVE_SNOC_GEM_NOC_GC,
   1279	.channels = 1,
   1280	.buswidth = 8,
   1281	.num_links = 1,
   1282	.links = { SM8450_MASTER_SNOC_GC_MEM_NOC },
   1283};
   1284
   1285static struct qcom_icc_node qns_gemnoc_sf = {
   1286	.name = "qns_gemnoc_sf",
   1287	.id = SM8450_SLAVE_SNOC_GEM_NOC_SF,
   1288	.channels = 1,
   1289	.buswidth = 16,
   1290	.num_links = 1,
   1291	.links = { SM8450_MASTER_SNOC_SF_MEM_NOC },
   1292};
   1293
   1294static struct qcom_icc_node srvc_snoc = {
   1295	.name = "srvc_snoc",
   1296	.id = SM8450_SLAVE_SERVICE_SNOC,
   1297	.channels = 1,
   1298	.buswidth = 4,
   1299	.num_links = 0,
   1300};
   1301
   1302static struct qcom_icc_node qns_llcc_disp = {
   1303	.name = "qns_llcc_disp",
   1304	.id = SM8450_SLAVE_LLCC_DISP,
   1305	.channels = 4,
   1306	.buswidth = 16,
   1307	.num_links = 1,
   1308	.links = { SM8450_MASTER_LLCC_DISP },
   1309};
   1310
   1311static struct qcom_icc_node ebi_disp = {
   1312	.name = "ebi_disp",
   1313	.id = SM8450_SLAVE_EBI1_DISP,
   1314	.channels = 4,
   1315	.buswidth = 4,
   1316	.num_links = 0,
   1317};
   1318
   1319static struct qcom_icc_node qns_mem_noc_hf_disp = {
   1320	.name = "qns_mem_noc_hf_disp",
   1321	.id = SM8450_SLAVE_MNOC_HF_MEM_NOC_DISP,
   1322	.channels = 2,
   1323	.buswidth = 32,
   1324	.num_links = 1,
   1325	.links = { SM8450_MASTER_MNOC_HF_MEM_NOC_DISP },
   1326};
   1327
   1328static struct qcom_icc_node qns_mem_noc_sf_disp = {
   1329	.name = "qns_mem_noc_sf_disp",
   1330	.id = SM8450_SLAVE_MNOC_SF_MEM_NOC_DISP,
   1331	.channels = 2,
   1332	.buswidth = 32,
   1333	.num_links = 1,
   1334	.links = { SM8450_MASTER_MNOC_SF_MEM_NOC_DISP },
   1335};
   1336
   1337static struct qcom_icc_bcm bcm_acv = {
   1338	.name = "ACV",
   1339	.num_nodes = 1,
   1340	.nodes = { &ebi },
   1341};
   1342
   1343static struct qcom_icc_bcm bcm_ce0 = {
   1344	.name = "CE0",
   1345	.num_nodes = 1,
   1346	.nodes = { &qxm_crypto },
   1347};
   1348
   1349static struct qcom_icc_bcm bcm_cn0 = {
   1350	.name = "CN0",
   1351	.keepalive = true,
   1352	.num_nodes = 55,
   1353	.nodes = { &qnm_gemnoc_cnoc, &qnm_gemnoc_pcie,
   1354		   &qhs_ahb2phy0, &qhs_ahb2phy1,
   1355		   &qhs_aoss, &qhs_camera_cfg,
   1356		   &qhs_clk_ctl, &qhs_compute_cfg,
   1357		   &qhs_cpr_cx, &qhs_cpr_mmcx,
   1358		   &qhs_cpr_mxa, &qhs_cpr_mxc,
   1359		   &qhs_crypto0_cfg, &qhs_cx_rdpm,
   1360		   &qhs_display_cfg, &qhs_gpuss_cfg,
   1361		   &qhs_imem_cfg, &qhs_ipa,
   1362		   &qhs_ipc_router, &qhs_lpass_cfg,
   1363		   &qhs_mss_cfg, &qhs_mx_rdpm,
   1364		   &qhs_pcie0_cfg, &qhs_pcie1_cfg,
   1365		   &qhs_pdm, &qhs_pimem_cfg,
   1366		   &qhs_prng, &qhs_qdss_cfg,
   1367		   &qhs_qspi, &qhs_qup0,
   1368		   &qhs_qup1, &qhs_qup2,
   1369		   &qhs_sdc2, &qhs_sdc4,
   1370		   &qhs_spss_cfg, &qhs_tcsr,
   1371		   &qhs_tlmm, &qhs_tme_cfg,
   1372		   &qhs_ufs_mem_cfg, &qhs_usb3_0,
   1373		   &qhs_venus_cfg, &qhs_vsense_ctrl_cfg,
   1374		   &qns_a1_noc_cfg, &qns_a2_noc_cfg,
   1375		   &qns_ddrss_cfg, &qns_mnoc_cfg,
   1376		   &qns_pcie_anoc_cfg, &qns_snoc_cfg,
   1377		   &qxs_imem, &qxs_pimem,
   1378		   &srvc_cnoc, &xs_pcie_0,
   1379		   &xs_pcie_1, &xs_qdss_stm,
   1380		   &xs_sys_tcu_cfg },
   1381};
   1382
   1383static struct qcom_icc_bcm bcm_co0 = {
   1384	.name = "CO0",
   1385	.num_nodes = 2,
   1386	.nodes = { &qxm_nsp, &qns_nsp_gemnoc },
   1387};
   1388
   1389static struct qcom_icc_bcm bcm_mc0 = {
   1390	.name = "MC0",
   1391	.keepalive = true,
   1392	.num_nodes = 1,
   1393	.nodes = { &ebi },
   1394};
   1395
   1396static struct qcom_icc_bcm bcm_mm0 = {
   1397	.name = "MM0",
   1398	.keepalive = true,
   1399	.num_nodes = 1,
   1400	.nodes = { &qns_mem_noc_hf },
   1401};
   1402
   1403static struct qcom_icc_bcm bcm_mm1 = {
   1404	.name = "MM1",
   1405	.num_nodes = 12,
   1406	.nodes = { &qnm_camnoc_hf, &qnm_camnoc_icp,
   1407		   &qnm_camnoc_sf, &qnm_mdp,
   1408		   &qnm_mnoc_cfg, &qnm_rot,
   1409		   &qnm_vapss_hcp, &qnm_video,
   1410		   &qnm_video_cv_cpu, &qnm_video_cvp,
   1411		   &qnm_video_v_cpu, &qns_mem_noc_sf },
   1412};
   1413
   1414static struct qcom_icc_bcm bcm_qup0 = {
   1415	.name = "QUP0",
   1416	.keepalive = true,
   1417	.vote_scale = 1,
   1418	.num_nodes = 1,
   1419	.nodes = { &qup0_core_slave },
   1420};
   1421
   1422static struct qcom_icc_bcm bcm_qup1 = {
   1423	.name = "QUP1",
   1424	.keepalive = true,
   1425	.vote_scale = 1,
   1426	.num_nodes = 1,
   1427	.nodes = { &qup1_core_slave },
   1428};
   1429
   1430static struct qcom_icc_bcm bcm_qup2 = {
   1431	.name = "QUP2",
   1432	.keepalive = true,
   1433	.vote_scale = 1,
   1434	.num_nodes = 1,
   1435	.nodes = { &qup2_core_slave },
   1436};
   1437
   1438static struct qcom_icc_bcm bcm_sh0 = {
   1439	.name = "SH0",
   1440	.keepalive = true,
   1441	.num_nodes = 1,
   1442	.nodes = { &qns_llcc },
   1443};
   1444
   1445static struct qcom_icc_bcm bcm_sh1 = {
   1446	.name = "SH1",
   1447	.num_nodes = 7,
   1448	.nodes = { &alm_gpu_tcu, &alm_sys_tcu,
   1449		   &qnm_nsp_gemnoc, &qnm_pcie,
   1450		   &qnm_snoc_gc, &qns_gem_noc_cnoc,
   1451		   &qns_pcie },
   1452};
   1453
   1454static struct qcom_icc_bcm bcm_sn0 = {
   1455	.name = "SN0",
   1456	.keepalive = true,
   1457	.num_nodes = 1,
   1458	.nodes = { &qns_gemnoc_sf },
   1459};
   1460
   1461static struct qcom_icc_bcm bcm_sn1 = {
   1462	.name = "SN1",
   1463	.num_nodes = 4,
   1464	.nodes = { &qhm_gic, &qxm_pimem,
   1465		   &xm_gic, &qns_gemnoc_gc },
   1466};
   1467
   1468static struct qcom_icc_bcm bcm_sn2 = {
   1469	.name = "SN2",
   1470	.num_nodes = 1,
   1471	.nodes = { &qnm_aggre1_noc },
   1472};
   1473
   1474static struct qcom_icc_bcm bcm_sn3 = {
   1475	.name = "SN3",
   1476	.num_nodes = 1,
   1477	.nodes = { &qnm_aggre2_noc },
   1478};
   1479
   1480static struct qcom_icc_bcm bcm_sn4 = {
   1481	.name = "SN4",
   1482	.num_nodes = 1,
   1483	.nodes = { &qnm_lpass_noc },
   1484};
   1485
   1486static struct qcom_icc_bcm bcm_sn7 = {
   1487	.name = "SN7",
   1488	.num_nodes = 1,
   1489	.nodes = { &qns_pcie_mem_noc },
   1490};
   1491
   1492static struct qcom_icc_bcm bcm_acv_disp = {
   1493	.name = "ACV",
   1494	.num_nodes = 1,
   1495	.nodes = { &ebi_disp },
   1496};
   1497
   1498static struct qcom_icc_bcm bcm_mc0_disp = {
   1499	.name = "MC0",
   1500	.num_nodes = 1,
   1501	.nodes = { &ebi_disp },
   1502};
   1503
   1504static struct qcom_icc_bcm bcm_mm0_disp = {
   1505	.name = "MM0",
   1506	.num_nodes = 1,
   1507	.nodes = { &qns_mem_noc_hf_disp },
   1508};
   1509
   1510static struct qcom_icc_bcm bcm_mm1_disp = {
   1511	.name = "MM1",
   1512	.num_nodes = 3,
   1513	.nodes = { &qnm_mdp_disp, &qnm_rot_disp,
   1514		   &qns_mem_noc_sf_disp },
   1515};
   1516
   1517static struct qcom_icc_bcm bcm_sh0_disp = {
   1518	.name = "SH0",
   1519	.num_nodes = 1,
   1520	.nodes = { &qns_llcc_disp },
   1521};
   1522
   1523static struct qcom_icc_bcm bcm_sh1_disp = {
   1524	.name = "SH1",
   1525	.num_nodes = 1,
   1526	.nodes = { &qnm_pcie_disp },
   1527};
   1528
   1529static struct qcom_icc_bcm * const aggre1_noc_bcms[] = {
   1530};
   1531
   1532static struct qcom_icc_node * const aggre1_noc_nodes[] = {
   1533	[MASTER_QSPI_0] = &qhm_qspi,
   1534	[MASTER_QUP_1] = &qhm_qup1,
   1535	[MASTER_A1NOC_CFG] = &qnm_a1noc_cfg,
   1536	[MASTER_SDCC_4] = &xm_sdc4,
   1537	[MASTER_UFS_MEM] = &xm_ufs_mem,
   1538	[MASTER_USB3_0] = &xm_usb3_0,
   1539	[SLAVE_A1NOC_SNOC] = &qns_a1noc_snoc,
   1540	[SLAVE_SERVICE_A1NOC] = &srvc_aggre1_noc,
   1541};
   1542
   1543static const struct qcom_icc_desc sm8450_aggre1_noc = {
   1544	.nodes = aggre1_noc_nodes,
   1545	.num_nodes = ARRAY_SIZE(aggre1_noc_nodes),
   1546	.bcms = aggre1_noc_bcms,
   1547	.num_bcms = ARRAY_SIZE(aggre1_noc_bcms),
   1548};
   1549
   1550static struct qcom_icc_bcm * const aggre2_noc_bcms[] = {
   1551	&bcm_ce0,
   1552};
   1553
   1554static struct qcom_icc_node * const aggre2_noc_nodes[] = {
   1555	[MASTER_QDSS_BAM] = &qhm_qdss_bam,
   1556	[MASTER_QUP_0] = &qhm_qup0,
   1557	[MASTER_QUP_2] = &qhm_qup2,
   1558	[MASTER_A2NOC_CFG] = &qnm_a2noc_cfg,
   1559	[MASTER_CRYPTO] = &qxm_crypto,
   1560	[MASTER_IPA] = &qxm_ipa,
   1561	[MASTER_SENSORS_PROC] = &qxm_sensorss_q6,
   1562	[MASTER_SP] = &qxm_sp,
   1563	[MASTER_QDSS_ETR] = &xm_qdss_etr_0,
   1564	[MASTER_QDSS_ETR_1] = &xm_qdss_etr_1,
   1565	[MASTER_SDCC_2] = &xm_sdc2,
   1566	[SLAVE_A2NOC_SNOC] = &qns_a2noc_snoc,
   1567	[SLAVE_SERVICE_A2NOC] = &srvc_aggre2_noc,
   1568};
   1569
   1570static const struct qcom_icc_desc sm8450_aggre2_noc = {
   1571	.nodes = aggre2_noc_nodes,
   1572	.num_nodes = ARRAY_SIZE(aggre2_noc_nodes),
   1573	.bcms = aggre2_noc_bcms,
   1574	.num_bcms = ARRAY_SIZE(aggre2_noc_bcms),
   1575};
   1576
   1577static struct qcom_icc_bcm * const clk_virt_bcms[] = {
   1578	&bcm_qup0,
   1579	&bcm_qup1,
   1580	&bcm_qup2,
   1581};
   1582
   1583static struct qcom_icc_node * const clk_virt_nodes[] = {
   1584	[MASTER_QUP_CORE_0] = &qup0_core_master,
   1585	[MASTER_QUP_CORE_1] = &qup1_core_master,
   1586	[MASTER_QUP_CORE_2] = &qup2_core_master,
   1587	[SLAVE_QUP_CORE_0] = &qup0_core_slave,
   1588	[SLAVE_QUP_CORE_1] = &qup1_core_slave,
   1589	[SLAVE_QUP_CORE_2] = &qup2_core_slave,
   1590};
   1591
   1592static const struct qcom_icc_desc sm8450_clk_virt = {
   1593	.nodes = clk_virt_nodes,
   1594	.num_nodes = ARRAY_SIZE(clk_virt_nodes),
   1595	.bcms = clk_virt_bcms,
   1596	.num_bcms = ARRAY_SIZE(clk_virt_bcms),
   1597};
   1598
   1599static struct qcom_icc_bcm * const config_noc_bcms[] = {
   1600	&bcm_cn0,
   1601};
   1602
   1603static struct qcom_icc_node * const config_noc_nodes[] = {
   1604	[MASTER_GEM_NOC_CNOC] = &qnm_gemnoc_cnoc,
   1605	[MASTER_GEM_NOC_PCIE_SNOC] = &qnm_gemnoc_pcie,
   1606	[SLAVE_AHB2PHY_SOUTH] = &qhs_ahb2phy0,
   1607	[SLAVE_AHB2PHY_NORTH] = &qhs_ahb2phy1,
   1608	[SLAVE_AOSS] = &qhs_aoss,
   1609	[SLAVE_CAMERA_CFG] = &qhs_camera_cfg,
   1610	[SLAVE_CLK_CTL] = &qhs_clk_ctl,
   1611	[SLAVE_CDSP_CFG] = &qhs_compute_cfg,
   1612	[SLAVE_RBCPR_CX_CFG] = &qhs_cpr_cx,
   1613	[SLAVE_RBCPR_MMCX_CFG] = &qhs_cpr_mmcx,
   1614	[SLAVE_RBCPR_MXA_CFG] = &qhs_cpr_mxa,
   1615	[SLAVE_RBCPR_MXC_CFG] = &qhs_cpr_mxc,
   1616	[SLAVE_CRYPTO_0_CFG] = &qhs_crypto0_cfg,
   1617	[SLAVE_CX_RDPM] = &qhs_cx_rdpm,
   1618	[SLAVE_DISPLAY_CFG] = &qhs_display_cfg,
   1619	[SLAVE_GFX3D_CFG] = &qhs_gpuss_cfg,
   1620	[SLAVE_IMEM_CFG] = &qhs_imem_cfg,
   1621	[SLAVE_IPA_CFG] = &qhs_ipa,
   1622	[SLAVE_IPC_ROUTER_CFG] = &qhs_ipc_router,
   1623	[SLAVE_LPASS] = &qhs_lpass_cfg,
   1624	[SLAVE_CNOC_MSS] = &qhs_mss_cfg,
   1625	[SLAVE_MX_RDPM] = &qhs_mx_rdpm,
   1626	[SLAVE_PCIE_0_CFG] = &qhs_pcie0_cfg,
   1627	[SLAVE_PCIE_1_CFG] = &qhs_pcie1_cfg,
   1628	[SLAVE_PDM] = &qhs_pdm,
   1629	[SLAVE_PIMEM_CFG] = &qhs_pimem_cfg,
   1630	[SLAVE_PRNG] = &qhs_prng,
   1631	[SLAVE_QDSS_CFG] = &qhs_qdss_cfg,
   1632	[SLAVE_QSPI_0] = &qhs_qspi,
   1633	[SLAVE_QUP_0] = &qhs_qup0,
   1634	[SLAVE_QUP_1] = &qhs_qup1,
   1635	[SLAVE_QUP_2] = &qhs_qup2,
   1636	[SLAVE_SDCC_2] = &qhs_sdc2,
   1637	[SLAVE_SDCC_4] = &qhs_sdc4,
   1638	[SLAVE_SPSS_CFG] = &qhs_spss_cfg,
   1639	[SLAVE_TCSR] = &qhs_tcsr,
   1640	[SLAVE_TLMM] = &qhs_tlmm,
   1641	[SLAVE_TME_CFG] = &qhs_tme_cfg,
   1642	[SLAVE_UFS_MEM_CFG] = &qhs_ufs_mem_cfg,
   1643	[SLAVE_USB3_0] = &qhs_usb3_0,
   1644	[SLAVE_VENUS_CFG] = &qhs_venus_cfg,
   1645	[SLAVE_VSENSE_CTRL_CFG] = &qhs_vsense_ctrl_cfg,
   1646	[SLAVE_A1NOC_CFG] = &qns_a1_noc_cfg,
   1647	[SLAVE_A2NOC_CFG] = &qns_a2_noc_cfg,
   1648	[SLAVE_DDRSS_CFG] = &qns_ddrss_cfg,
   1649	[SLAVE_CNOC_MNOC_CFG] = &qns_mnoc_cfg,
   1650	[SLAVE_PCIE_ANOC_CFG] = &qns_pcie_anoc_cfg,
   1651	[SLAVE_SNOC_CFG] = &qns_snoc_cfg,
   1652	[SLAVE_IMEM] = &qxs_imem,
   1653	[SLAVE_PIMEM] = &qxs_pimem,
   1654	[SLAVE_SERVICE_CNOC] = &srvc_cnoc,
   1655	[SLAVE_PCIE_0] = &xs_pcie_0,
   1656	[SLAVE_PCIE_1] = &xs_pcie_1,
   1657	[SLAVE_QDSS_STM] = &xs_qdss_stm,
   1658	[SLAVE_TCU] = &xs_sys_tcu_cfg,
   1659};
   1660
   1661static const struct qcom_icc_desc sm8450_config_noc = {
   1662	.nodes = config_noc_nodes,
   1663	.num_nodes = ARRAY_SIZE(config_noc_nodes),
   1664	.bcms = config_noc_bcms,
   1665	.num_bcms = ARRAY_SIZE(config_noc_bcms),
   1666};
   1667
   1668static struct qcom_icc_bcm * const gem_noc_bcms[] = {
   1669	&bcm_sh0,
   1670	&bcm_sh1,
   1671	&bcm_sh0_disp,
   1672	&bcm_sh1_disp,
   1673};
   1674
   1675static struct qcom_icc_node * const gem_noc_nodes[] = {
   1676	[MASTER_GPU_TCU] = &alm_gpu_tcu,
   1677	[MASTER_SYS_TCU] = &alm_sys_tcu,
   1678	[MASTER_APPSS_PROC] = &chm_apps,
   1679	[MASTER_GFX3D] = &qnm_gpu,
   1680	[MASTER_MSS_PROC] = &qnm_mdsp,
   1681	[MASTER_MNOC_HF_MEM_NOC] = &qnm_mnoc_hf,
   1682	[MASTER_MNOC_SF_MEM_NOC] = &qnm_mnoc_sf,
   1683	[MASTER_COMPUTE_NOC] = &qnm_nsp_gemnoc,
   1684	[MASTER_ANOC_PCIE_GEM_NOC] = &qnm_pcie,
   1685	[MASTER_SNOC_GC_MEM_NOC] = &qnm_snoc_gc,
   1686	[MASTER_SNOC_SF_MEM_NOC] = &qnm_snoc_sf,
   1687	[SLAVE_GEM_NOC_CNOC] = &qns_gem_noc_cnoc,
   1688	[SLAVE_LLCC] = &qns_llcc,
   1689	[SLAVE_MEM_NOC_PCIE_SNOC] = &qns_pcie,
   1690	[MASTER_MNOC_HF_MEM_NOC_DISP] = &qnm_mnoc_hf_disp,
   1691	[MASTER_MNOC_SF_MEM_NOC_DISP] = &qnm_mnoc_sf_disp,
   1692	[MASTER_ANOC_PCIE_GEM_NOC_DISP] = &qnm_pcie_disp,
   1693	[SLAVE_LLCC_DISP] = &qns_llcc_disp,
   1694};
   1695
   1696static const struct qcom_icc_desc sm8450_gem_noc = {
   1697	.nodes = gem_noc_nodes,
   1698	.num_nodes = ARRAY_SIZE(gem_noc_nodes),
   1699	.bcms = gem_noc_bcms,
   1700	.num_bcms = ARRAY_SIZE(gem_noc_bcms),
   1701};
   1702
   1703static struct qcom_icc_bcm * const lpass_ag_noc_bcms[] = {
   1704};
   1705
   1706static struct qcom_icc_node * const lpass_ag_noc_nodes[] = {
   1707	[MASTER_CNOC_LPASS_AG_NOC] = &qhm_config_noc,
   1708	[MASTER_LPASS_PROC] = &qxm_lpass_dsp,
   1709	[SLAVE_LPASS_CORE_CFG] = &qhs_lpass_core,
   1710	[SLAVE_LPASS_LPI_CFG] = &qhs_lpass_lpi,
   1711	[SLAVE_LPASS_MPU_CFG] = &qhs_lpass_mpu,
   1712	[SLAVE_LPASS_TOP_CFG] = &qhs_lpass_top,
   1713	[SLAVE_LPASS_SNOC] = &qns_sysnoc,
   1714	[SLAVE_SERVICES_LPASS_AML_NOC] = &srvc_niu_aml_noc,
   1715	[SLAVE_SERVICE_LPASS_AG_NOC] = &srvc_niu_lpass_agnoc,
   1716};
   1717
   1718static const struct qcom_icc_desc sm8450_lpass_ag_noc = {
   1719	.nodes = lpass_ag_noc_nodes,
   1720	.num_nodes = ARRAY_SIZE(lpass_ag_noc_nodes),
   1721	.bcms = lpass_ag_noc_bcms,
   1722	.num_bcms = ARRAY_SIZE(lpass_ag_noc_bcms),
   1723};
   1724
   1725static struct qcom_icc_bcm * const mc_virt_bcms[] = {
   1726	&bcm_acv,
   1727	&bcm_mc0,
   1728	&bcm_acv_disp,
   1729	&bcm_mc0_disp,
   1730};
   1731
   1732static struct qcom_icc_node * const mc_virt_nodes[] = {
   1733	[MASTER_LLCC] = &llcc_mc,
   1734	[SLAVE_EBI1] = &ebi,
   1735	[MASTER_LLCC_DISP] = &llcc_mc_disp,
   1736	[SLAVE_EBI1_DISP] = &ebi_disp,
   1737};
   1738
   1739static const struct qcom_icc_desc sm8450_mc_virt = {
   1740	.nodes = mc_virt_nodes,
   1741	.num_nodes = ARRAY_SIZE(mc_virt_nodes),
   1742	.bcms = mc_virt_bcms,
   1743	.num_bcms = ARRAY_SIZE(mc_virt_bcms),
   1744};
   1745
   1746static struct qcom_icc_bcm * const mmss_noc_bcms[] = {
   1747	&bcm_mm0,
   1748	&bcm_mm1,
   1749	&bcm_mm0_disp,
   1750	&bcm_mm1_disp,
   1751};
   1752
   1753static struct qcom_icc_node * const mmss_noc_nodes[] = {
   1754	[MASTER_CAMNOC_HF] = &qnm_camnoc_hf,
   1755	[MASTER_CAMNOC_ICP] = &qnm_camnoc_icp,
   1756	[MASTER_CAMNOC_SF] = &qnm_camnoc_sf,
   1757	[MASTER_MDP] = &qnm_mdp,
   1758	[MASTER_CNOC_MNOC_CFG] = &qnm_mnoc_cfg,
   1759	[MASTER_ROTATOR] = &qnm_rot,
   1760	[MASTER_CDSP_HCP] = &qnm_vapss_hcp,
   1761	[MASTER_VIDEO] = &qnm_video,
   1762	[MASTER_VIDEO_CV_PROC] = &qnm_video_cv_cpu,
   1763	[MASTER_VIDEO_PROC] = &qnm_video_cvp,
   1764	[MASTER_VIDEO_V_PROC] = &qnm_video_v_cpu,
   1765	[SLAVE_MNOC_HF_MEM_NOC] = &qns_mem_noc_hf,
   1766	[SLAVE_MNOC_SF_MEM_NOC] = &qns_mem_noc_sf,
   1767	[SLAVE_SERVICE_MNOC] = &srvc_mnoc,
   1768	[MASTER_MDP_DISP] = &qnm_mdp_disp,
   1769	[MASTER_ROTATOR_DISP] = &qnm_rot_disp,
   1770	[SLAVE_MNOC_HF_MEM_NOC_DISP] = &qns_mem_noc_hf_disp,
   1771	[SLAVE_MNOC_SF_MEM_NOC_DISP] = &qns_mem_noc_sf_disp,
   1772};
   1773
   1774static const struct qcom_icc_desc sm8450_mmss_noc = {
   1775	.nodes = mmss_noc_nodes,
   1776	.num_nodes = ARRAY_SIZE(mmss_noc_nodes),
   1777	.bcms = mmss_noc_bcms,
   1778	.num_bcms = ARRAY_SIZE(mmss_noc_bcms),
   1779};
   1780
   1781static struct qcom_icc_bcm * const nsp_noc_bcms[] = {
   1782	&bcm_co0,
   1783};
   1784
   1785static struct qcom_icc_node * const nsp_noc_nodes[] = {
   1786	[MASTER_CDSP_NOC_CFG] = &qhm_nsp_noc_config,
   1787	[MASTER_CDSP_PROC] = &qxm_nsp,
   1788	[SLAVE_CDSP_MEM_NOC] = &qns_nsp_gemnoc,
   1789	[SLAVE_SERVICE_NSP_NOC] = &service_nsp_noc,
   1790};
   1791
   1792static const struct qcom_icc_desc sm8450_nsp_noc = {
   1793	.nodes = nsp_noc_nodes,
   1794	.num_nodes = ARRAY_SIZE(nsp_noc_nodes),
   1795	.bcms = nsp_noc_bcms,
   1796	.num_bcms = ARRAY_SIZE(nsp_noc_bcms),
   1797};
   1798
   1799static struct qcom_icc_bcm * const pcie_anoc_bcms[] = {
   1800	&bcm_sn7,
   1801};
   1802
   1803static struct qcom_icc_node * const pcie_anoc_nodes[] = {
   1804	[MASTER_PCIE_ANOC_CFG] = &qnm_pcie_anoc_cfg,
   1805	[MASTER_PCIE_0] = &xm_pcie3_0,
   1806	[MASTER_PCIE_1] = &xm_pcie3_1,
   1807	[SLAVE_ANOC_PCIE_GEM_NOC] = &qns_pcie_mem_noc,
   1808	[SLAVE_SERVICE_PCIE_ANOC] = &srvc_pcie_aggre_noc,
   1809};
   1810
   1811static const struct qcom_icc_desc sm8450_pcie_anoc = {
   1812	.nodes = pcie_anoc_nodes,
   1813	.num_nodes = ARRAY_SIZE(pcie_anoc_nodes),
   1814	.bcms = pcie_anoc_bcms,
   1815	.num_bcms = ARRAY_SIZE(pcie_anoc_bcms),
   1816};
   1817
   1818static struct qcom_icc_bcm * const system_noc_bcms[] = {
   1819	&bcm_sn0,
   1820	&bcm_sn1,
   1821	&bcm_sn2,
   1822	&bcm_sn3,
   1823	&bcm_sn4,
   1824};
   1825
   1826static struct qcom_icc_node * const system_noc_nodes[] = {
   1827	[MASTER_GIC_AHB] = &qhm_gic,
   1828	[MASTER_A1NOC_SNOC] = &qnm_aggre1_noc,
   1829	[MASTER_A2NOC_SNOC] = &qnm_aggre2_noc,
   1830	[MASTER_LPASS_ANOC] = &qnm_lpass_noc,
   1831	[MASTER_SNOC_CFG] = &qnm_snoc_cfg,
   1832	[MASTER_PIMEM] = &qxm_pimem,
   1833	[MASTER_GIC] = &xm_gic,
   1834	[SLAVE_SNOC_GEM_NOC_GC] = &qns_gemnoc_gc,
   1835	[SLAVE_SNOC_GEM_NOC_SF] = &qns_gemnoc_sf,
   1836	[SLAVE_SERVICE_SNOC] = &srvc_snoc,
   1837};
   1838
   1839static const struct qcom_icc_desc sm8450_system_noc = {
   1840	.nodes = system_noc_nodes,
   1841	.num_nodes = ARRAY_SIZE(system_noc_nodes),
   1842	.bcms = system_noc_bcms,
   1843	.num_bcms = ARRAY_SIZE(system_noc_bcms),
   1844};
   1845
   1846static int qnoc_probe(struct platform_device *pdev)
   1847{
   1848	const struct qcom_icc_desc *desc;
   1849	struct icc_onecell_data *data;
   1850	struct icc_provider *provider;
   1851	struct qcom_icc_node * const *qnodes;
   1852	struct qcom_icc_provider *qp;
   1853	struct icc_node *node;
   1854	size_t num_nodes, i;
   1855	int ret;
   1856
   1857	desc = device_get_match_data(&pdev->dev);
   1858	if (!desc)
   1859		return -EINVAL;
   1860
   1861	qnodes = desc->nodes;
   1862	num_nodes = desc->num_nodes;
   1863
   1864	qp = devm_kzalloc(&pdev->dev, sizeof(*qp), GFP_KERNEL);
   1865	if (!qp)
   1866		return -ENOMEM;
   1867
   1868	data = devm_kcalloc(&pdev->dev, num_nodes, sizeof(*node), GFP_KERNEL);
   1869	if (!data)
   1870		return -ENOMEM;
   1871
   1872	provider = &qp->provider;
   1873	provider->dev = &pdev->dev;
   1874	provider->set = qcom_icc_set;
   1875	provider->pre_aggregate = qcom_icc_pre_aggregate;
   1876	provider->aggregate = qcom_icc_aggregate;
   1877	provider->xlate_extended = qcom_icc_xlate_extended;
   1878	INIT_LIST_HEAD(&provider->nodes);
   1879	provider->data = data;
   1880
   1881	qp->dev = &pdev->dev;
   1882	qp->bcms = desc->bcms;
   1883	qp->num_bcms = desc->num_bcms;
   1884
   1885	qp->voter = of_bcm_voter_get(qp->dev, NULL);
   1886	if (IS_ERR(qp->voter))
   1887		return PTR_ERR(qp->voter);
   1888
   1889	ret = icc_provider_add(provider);
   1890	if (ret) {
   1891		dev_err(&pdev->dev, "error adding interconnect provider\n");
   1892		return ret;
   1893	}
   1894
   1895	for (i = 0; i < qp->num_bcms; i++)
   1896		qcom_icc_bcm_init(qp->bcms[i], &pdev->dev);
   1897
   1898	for (i = 0; i < num_nodes; i++) {
   1899		size_t j;
   1900
   1901		if (!qnodes[i])
   1902			continue;
   1903
   1904		node = icc_node_create(qnodes[i]->id);
   1905		if (IS_ERR(node)) {
   1906			ret = PTR_ERR(node);
   1907			goto err;
   1908		}
   1909
   1910		node->name = qnodes[i]->name;
   1911		node->data = qnodes[i];
   1912		icc_node_add(node, provider);
   1913
   1914		for (j = 0; j < qnodes[i]->num_links; j++)
   1915			icc_link_create(node, qnodes[i]->links[j]);
   1916
   1917		data->nodes[i] = node;
   1918	}
   1919	data->num_nodes = num_nodes;
   1920
   1921	platform_set_drvdata(pdev, qp);
   1922
   1923	return 0;
   1924err:
   1925	icc_nodes_remove(provider);
   1926	icc_provider_del(provider);
   1927	return ret;
   1928}
   1929
   1930static int qnoc_remove(struct platform_device *pdev)
   1931{
   1932	struct qcom_icc_provider *qp = platform_get_drvdata(pdev);
   1933
   1934	icc_nodes_remove(&qp->provider);
   1935	return icc_provider_del(&qp->provider);
   1936}
   1937
   1938static const struct of_device_id qnoc_of_match[] = {
   1939	{ .compatible = "qcom,sm8450-aggre1-noc",
   1940	  .data = &sm8450_aggre1_noc},
   1941	{ .compatible = "qcom,sm8450-aggre2-noc",
   1942	  .data = &sm8450_aggre2_noc},
   1943	{ .compatible = "qcom,sm8450-clk-virt",
   1944	  .data = &sm8450_clk_virt},
   1945	{ .compatible = "qcom,sm8450-config-noc",
   1946	  .data = &sm8450_config_noc},
   1947	{ .compatible = "qcom,sm8450-gem-noc",
   1948	  .data = &sm8450_gem_noc},
   1949	{ .compatible = "qcom,sm8450-lpass-ag-noc",
   1950	  .data = &sm8450_lpass_ag_noc},
   1951	{ .compatible = "qcom,sm8450-mc-virt",
   1952	  .data = &sm8450_mc_virt},
   1953	{ .compatible = "qcom,sm8450-mmss-noc",
   1954	  .data = &sm8450_mmss_noc},
   1955	{ .compatible = "qcom,sm8450-nsp-noc",
   1956	  .data = &sm8450_nsp_noc},
   1957	{ .compatible = "qcom,sm8450-pcie-anoc",
   1958	  .data = &sm8450_pcie_anoc},
   1959	{ .compatible = "qcom,sm8450-system-noc",
   1960	  .data = &sm8450_system_noc},
   1961	{ }
   1962};
   1963MODULE_DEVICE_TABLE(of, qnoc_of_match);
   1964
   1965static struct platform_driver qnoc_driver = {
   1966	.probe = qnoc_probe,
   1967	.remove = qnoc_remove,
   1968	.driver = {
   1969		.name = "qnoc-sm8450",
   1970		.of_match_table = qnoc_of_match,
   1971	},
   1972};
   1973
   1974static int __init qnoc_driver_init(void)
   1975{
   1976	return platform_driver_register(&qnoc_driver);
   1977}
   1978core_initcall(qnoc_driver_init);
   1979
   1980static void __exit qnoc_driver_exit(void)
   1981{
   1982	platform_driver_unregister(&qnoc_driver);
   1983}
   1984module_exit(qnoc_driver_exit);
   1985
   1986MODULE_DESCRIPTION("sm8450 NoC driver");
   1987MODULE_LICENSE("GPL v2");