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

qcs404.c (23638B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Copyright (C) 2019 Linaro Ltd
      4 */
      5
      6#include <dt-bindings/interconnect/qcom,qcs404.h>
      7#include <linux/clk.h>
      8#include <linux/device.h>
      9#include <linux/interconnect-provider.h>
     10#include <linux/io.h>
     11#include <linux/module.h>
     12#include <linux/platform_device.h>
     13#include <linux/of_device.h>
     14
     15
     16#include "smd-rpm.h"
     17#include "icc-rpm.h"
     18
     19enum {
     20	QCS404_MASTER_AMPSS_M0 = 1,
     21	QCS404_MASTER_GRAPHICS_3D,
     22	QCS404_MASTER_MDP_PORT0,
     23	QCS404_SNOC_BIMC_1_MAS,
     24	QCS404_MASTER_TCU_0,
     25	QCS404_MASTER_SPDM,
     26	QCS404_MASTER_BLSP_1,
     27	QCS404_MASTER_BLSP_2,
     28	QCS404_MASTER_XM_USB_HS1,
     29	QCS404_MASTER_CRYPTO_CORE0,
     30	QCS404_MASTER_SDCC_1,
     31	QCS404_MASTER_SDCC_2,
     32	QCS404_SNOC_PNOC_MAS,
     33	QCS404_MASTER_QPIC,
     34	QCS404_MASTER_QDSS_BAM,
     35	QCS404_BIMC_SNOC_MAS,
     36	QCS404_PNOC_SNOC_MAS,
     37	QCS404_MASTER_QDSS_ETR,
     38	QCS404_MASTER_EMAC,
     39	QCS404_MASTER_PCIE,
     40	QCS404_MASTER_USB3,
     41	QCS404_PNOC_INT_0,
     42	QCS404_PNOC_INT_2,
     43	QCS404_PNOC_INT_3,
     44	QCS404_PNOC_SLV_0,
     45	QCS404_PNOC_SLV_1,
     46	QCS404_PNOC_SLV_2,
     47	QCS404_PNOC_SLV_3,
     48	QCS404_PNOC_SLV_4,
     49	QCS404_PNOC_SLV_6,
     50	QCS404_PNOC_SLV_7,
     51	QCS404_PNOC_SLV_8,
     52	QCS404_PNOC_SLV_9,
     53	QCS404_PNOC_SLV_10,
     54	QCS404_PNOC_SLV_11,
     55	QCS404_SNOC_QDSS_INT,
     56	QCS404_SNOC_INT_0,
     57	QCS404_SNOC_INT_1,
     58	QCS404_SNOC_INT_2,
     59	QCS404_SLAVE_EBI_CH0,
     60	QCS404_BIMC_SNOC_SLV,
     61	QCS404_SLAVE_SPDM_WRAPPER,
     62	QCS404_SLAVE_PDM,
     63	QCS404_SLAVE_PRNG,
     64	QCS404_SLAVE_TCSR,
     65	QCS404_SLAVE_SNOC_CFG,
     66	QCS404_SLAVE_MESSAGE_RAM,
     67	QCS404_SLAVE_DISPLAY_CFG,
     68	QCS404_SLAVE_GRAPHICS_3D_CFG,
     69	QCS404_SLAVE_BLSP_1,
     70	QCS404_SLAVE_TLMM_NORTH,
     71	QCS404_SLAVE_PCIE_1,
     72	QCS404_SLAVE_EMAC_CFG,
     73	QCS404_SLAVE_BLSP_2,
     74	QCS404_SLAVE_TLMM_EAST,
     75	QCS404_SLAVE_TCU,
     76	QCS404_SLAVE_PMIC_ARB,
     77	QCS404_SLAVE_SDCC_1,
     78	QCS404_SLAVE_SDCC_2,
     79	QCS404_SLAVE_TLMM_SOUTH,
     80	QCS404_SLAVE_USB_HS,
     81	QCS404_SLAVE_USB3,
     82	QCS404_SLAVE_CRYPTO_0_CFG,
     83	QCS404_PNOC_SNOC_SLV,
     84	QCS404_SLAVE_APPSS,
     85	QCS404_SLAVE_WCSS,
     86	QCS404_SNOC_BIMC_1_SLV,
     87	QCS404_SLAVE_OCIMEM,
     88	QCS404_SNOC_PNOC_SLV,
     89	QCS404_SLAVE_QDSS_STM,
     90	QCS404_SLAVE_CATS_128,
     91	QCS404_SLAVE_OCMEM_64,
     92	QCS404_SLAVE_LPASS,
     93};
     94
     95static const u16 mas_apps_proc_links[] = {
     96	QCS404_SLAVE_EBI_CH0,
     97	QCS404_BIMC_SNOC_SLV
     98};
     99
    100static struct qcom_icc_node mas_apps_proc = {
    101	.name = "mas_apps_proc",
    102	.id = QCS404_MASTER_AMPSS_M0,
    103	.buswidth = 8,
    104	.mas_rpm_id = 0,
    105	.slv_rpm_id = -1,
    106	.num_links = ARRAY_SIZE(mas_apps_proc_links),
    107	.links = mas_apps_proc_links,
    108};
    109
    110static const u16 mas_oxili_links[] = {
    111	QCS404_SLAVE_EBI_CH0,
    112	QCS404_BIMC_SNOC_SLV
    113};
    114
    115static struct qcom_icc_node mas_oxili = {
    116	.name = "mas_oxili",
    117	.id = QCS404_MASTER_GRAPHICS_3D,
    118	.buswidth = 8,
    119	.mas_rpm_id = -1,
    120	.slv_rpm_id = -1,
    121	.num_links = ARRAY_SIZE(mas_oxili_links),
    122	.links = mas_oxili_links,
    123};
    124
    125static const u16 mas_mdp_links[] = {
    126	QCS404_SLAVE_EBI_CH0,
    127	QCS404_BIMC_SNOC_SLV
    128};
    129
    130static struct qcom_icc_node mas_mdp = {
    131	.name = "mas_mdp",
    132	.id = QCS404_MASTER_MDP_PORT0,
    133	.buswidth = 8,
    134	.mas_rpm_id = -1,
    135	.slv_rpm_id = -1,
    136	.num_links = ARRAY_SIZE(mas_mdp_links),
    137	.links = mas_mdp_links,
    138};
    139
    140static const u16 mas_snoc_bimc_1_links[] = {
    141	QCS404_SLAVE_EBI_CH0
    142};
    143
    144static struct qcom_icc_node mas_snoc_bimc_1 = {
    145	.name = "mas_snoc_bimc_1",
    146	.id = QCS404_SNOC_BIMC_1_MAS,
    147	.buswidth = 8,
    148	.mas_rpm_id = 76,
    149	.slv_rpm_id = -1,
    150	.num_links = ARRAY_SIZE(mas_snoc_bimc_1_links),
    151	.links = mas_snoc_bimc_1_links,
    152};
    153
    154static const u16 mas_tcu_0_links[] = {
    155	QCS404_SLAVE_EBI_CH0,
    156	QCS404_BIMC_SNOC_SLV
    157};
    158
    159static struct qcom_icc_node mas_tcu_0 = {
    160	.name = "mas_tcu_0",
    161	.id = QCS404_MASTER_TCU_0,
    162	.buswidth = 8,
    163	.mas_rpm_id = -1,
    164	.slv_rpm_id = -1,
    165	.num_links = ARRAY_SIZE(mas_tcu_0_links),
    166	.links = mas_tcu_0_links,
    167};
    168
    169static const u16 mas_spdm_links[] = {
    170	QCS404_PNOC_INT_3
    171};
    172
    173static struct qcom_icc_node mas_spdm = {
    174	.name = "mas_spdm",
    175	.id = QCS404_MASTER_SPDM,
    176	.buswidth = 4,
    177	.mas_rpm_id = -1,
    178	.slv_rpm_id = -1,
    179	.num_links = ARRAY_SIZE(mas_spdm_links),
    180	.links = mas_spdm_links,
    181};
    182
    183static const u16 mas_blsp_1_links[] = {
    184	QCS404_PNOC_INT_3
    185};
    186
    187static struct qcom_icc_node mas_blsp_1 = {
    188	.name = "mas_blsp_1",
    189	.id = QCS404_MASTER_BLSP_1,
    190	.buswidth = 4,
    191	.mas_rpm_id = 41,
    192	.slv_rpm_id = -1,
    193	.num_links = ARRAY_SIZE(mas_blsp_1_links),
    194	.links = mas_blsp_1_links,
    195};
    196
    197static const u16 mas_blsp_2_links[] = {
    198	QCS404_PNOC_INT_3
    199};
    200
    201static struct qcom_icc_node mas_blsp_2 = {
    202	.name = "mas_blsp_2",
    203	.id = QCS404_MASTER_BLSP_2,
    204	.buswidth = 4,
    205	.mas_rpm_id = 39,
    206	.slv_rpm_id = -1,
    207	.num_links = ARRAY_SIZE(mas_blsp_2_links),
    208	.links = mas_blsp_2_links,
    209};
    210
    211static const u16 mas_xi_usb_hs1_links[] = {
    212	QCS404_PNOC_INT_0
    213};
    214
    215static struct qcom_icc_node mas_xi_usb_hs1 = {
    216	.name = "mas_xi_usb_hs1",
    217	.id = QCS404_MASTER_XM_USB_HS1,
    218	.buswidth = 8,
    219	.mas_rpm_id = 138,
    220	.slv_rpm_id = -1,
    221	.num_links = ARRAY_SIZE(mas_xi_usb_hs1_links),
    222	.links = mas_xi_usb_hs1_links,
    223};
    224
    225static const u16 mas_crypto_links[] = {
    226	QCS404_PNOC_SNOC_SLV,
    227	QCS404_PNOC_INT_2
    228};
    229
    230static struct qcom_icc_node mas_crypto = {
    231	.name = "mas_crypto",
    232	.id = QCS404_MASTER_CRYPTO_CORE0,
    233	.buswidth = 8,
    234	.mas_rpm_id = 23,
    235	.slv_rpm_id = -1,
    236	.num_links = ARRAY_SIZE(mas_crypto_links),
    237	.links = mas_crypto_links,
    238};
    239
    240static const u16 mas_sdcc_1_links[] = {
    241	QCS404_PNOC_INT_0
    242};
    243
    244static struct qcom_icc_node mas_sdcc_1 = {
    245	.name = "mas_sdcc_1",
    246	.id = QCS404_MASTER_SDCC_1,
    247	.buswidth = 8,
    248	.mas_rpm_id = 33,
    249	.slv_rpm_id = -1,
    250	.num_links = ARRAY_SIZE(mas_sdcc_1_links),
    251	.links = mas_sdcc_1_links,
    252};
    253
    254static const u16 mas_sdcc_2_links[] = {
    255	QCS404_PNOC_INT_0
    256};
    257
    258static struct qcom_icc_node mas_sdcc_2 = {
    259	.name = "mas_sdcc_2",
    260	.id = QCS404_MASTER_SDCC_2,
    261	.buswidth = 8,
    262	.mas_rpm_id = 35,
    263	.slv_rpm_id = -1,
    264	.num_links = ARRAY_SIZE(mas_sdcc_2_links),
    265	.links = mas_sdcc_2_links,
    266};
    267
    268static const u16 mas_snoc_pcnoc_links[] = {
    269	QCS404_PNOC_INT_2
    270};
    271
    272static struct qcom_icc_node mas_snoc_pcnoc = {
    273	.name = "mas_snoc_pcnoc",
    274	.id = QCS404_SNOC_PNOC_MAS,
    275	.buswidth = 8,
    276	.mas_rpm_id = 77,
    277	.slv_rpm_id = -1,
    278	.num_links = ARRAY_SIZE(mas_snoc_pcnoc_links),
    279	.links = mas_snoc_pcnoc_links,
    280};
    281
    282static const u16 mas_qpic_links[] = {
    283	QCS404_PNOC_INT_0
    284};
    285
    286static struct qcom_icc_node mas_qpic = {
    287	.name = "mas_qpic",
    288	.id = QCS404_MASTER_QPIC,
    289	.buswidth = 4,
    290	.mas_rpm_id = -1,
    291	.slv_rpm_id = -1,
    292	.num_links = ARRAY_SIZE(mas_qpic_links),
    293	.links = mas_qpic_links,
    294};
    295
    296static const u16 mas_qdss_bam_links[] = {
    297	QCS404_SNOC_QDSS_INT
    298};
    299
    300static struct qcom_icc_node mas_qdss_bam = {
    301	.name = "mas_qdss_bam",
    302	.id = QCS404_MASTER_QDSS_BAM,
    303	.buswidth = 4,
    304	.mas_rpm_id = -1,
    305	.slv_rpm_id = -1,
    306	.num_links = ARRAY_SIZE(mas_qdss_bam_links),
    307	.links = mas_qdss_bam_links,
    308};
    309
    310static const u16 mas_bimc_snoc_links[] = {
    311	QCS404_SLAVE_OCMEM_64,
    312	QCS404_SLAVE_CATS_128,
    313	QCS404_SNOC_INT_0,
    314	QCS404_SNOC_INT_1
    315};
    316
    317static struct qcom_icc_node mas_bimc_snoc = {
    318	.name = "mas_bimc_snoc",
    319	.id = QCS404_BIMC_SNOC_MAS,
    320	.buswidth = 8,
    321	.mas_rpm_id = 21,
    322	.slv_rpm_id = -1,
    323	.num_links = ARRAY_SIZE(mas_bimc_snoc_links),
    324	.links = mas_bimc_snoc_links,
    325};
    326
    327static const u16 mas_pcnoc_snoc_links[] = {
    328	QCS404_SNOC_BIMC_1_SLV,
    329	QCS404_SNOC_INT_2,
    330	QCS404_SNOC_INT_0
    331};
    332
    333static struct qcom_icc_node mas_pcnoc_snoc = {
    334	.name = "mas_pcnoc_snoc",
    335	.id = QCS404_PNOC_SNOC_MAS,
    336	.buswidth = 8,
    337	.mas_rpm_id = 29,
    338	.slv_rpm_id = -1,
    339	.num_links = ARRAY_SIZE(mas_pcnoc_snoc_links),
    340	.links = mas_pcnoc_snoc_links,
    341};
    342
    343static const u16 mas_qdss_etr_links[] = {
    344	QCS404_SNOC_QDSS_INT
    345};
    346
    347static struct qcom_icc_node mas_qdss_etr = {
    348	.name = "mas_qdss_etr",
    349	.id = QCS404_MASTER_QDSS_ETR,
    350	.buswidth = 8,
    351	.mas_rpm_id = -1,
    352	.slv_rpm_id = -1,
    353	.num_links = ARRAY_SIZE(mas_qdss_etr_links),
    354	.links = mas_qdss_etr_links,
    355};
    356
    357static const u16 mas_emac_links[] = {
    358	QCS404_SNOC_BIMC_1_SLV,
    359	QCS404_SNOC_INT_1
    360};
    361
    362static struct qcom_icc_node mas_emac = {
    363	.name = "mas_emac",
    364	.id = QCS404_MASTER_EMAC,
    365	.buswidth = 8,
    366	.mas_rpm_id = -1,
    367	.slv_rpm_id = -1,
    368	.num_links = ARRAY_SIZE(mas_emac_links),
    369	.links = mas_emac_links,
    370};
    371
    372static const u16 mas_pcie_links[] = {
    373	QCS404_SNOC_BIMC_1_SLV,
    374	QCS404_SNOC_INT_1
    375};
    376
    377static struct qcom_icc_node mas_pcie = {
    378	.name = "mas_pcie",
    379	.id = QCS404_MASTER_PCIE,
    380	.buswidth = 8,
    381	.mas_rpm_id = -1,
    382	.slv_rpm_id = -1,
    383	.num_links = ARRAY_SIZE(mas_pcie_links),
    384	.links = mas_pcie_links,
    385};
    386
    387static const u16 mas_usb3_links[] = {
    388	QCS404_SNOC_BIMC_1_SLV,
    389	QCS404_SNOC_INT_1
    390};
    391
    392static struct qcom_icc_node mas_usb3 = {
    393	.name = "mas_usb3",
    394	.id = QCS404_MASTER_USB3,
    395	.buswidth = 8,
    396	.mas_rpm_id = -1,
    397	.slv_rpm_id = -1,
    398	.num_links = ARRAY_SIZE(mas_usb3_links),
    399	.links = mas_usb3_links,
    400};
    401
    402static const u16 pcnoc_int_0_links[] = {
    403	QCS404_PNOC_SNOC_SLV,
    404	QCS404_PNOC_INT_2
    405};
    406
    407static struct qcom_icc_node pcnoc_int_0 = {
    408	.name = "pcnoc_int_0",
    409	.id = QCS404_PNOC_INT_0,
    410	.buswidth = 8,
    411	.mas_rpm_id = 85,
    412	.slv_rpm_id = 114,
    413	.num_links = ARRAY_SIZE(pcnoc_int_0_links),
    414	.links = pcnoc_int_0_links,
    415};
    416
    417static const u16 pcnoc_int_2_links[] = {
    418	QCS404_PNOC_SLV_10,
    419	QCS404_SLAVE_TCU,
    420	QCS404_PNOC_SLV_11,
    421	QCS404_PNOC_SLV_2,
    422	QCS404_PNOC_SLV_3,
    423	QCS404_PNOC_SLV_0,
    424	QCS404_PNOC_SLV_1,
    425	QCS404_PNOC_SLV_6,
    426	QCS404_PNOC_SLV_7,
    427	QCS404_PNOC_SLV_4,
    428	QCS404_PNOC_SLV_8,
    429	QCS404_PNOC_SLV_9
    430};
    431
    432static struct qcom_icc_node pcnoc_int_2 = {
    433	.name = "pcnoc_int_2",
    434	.id = QCS404_PNOC_INT_2,
    435	.buswidth = 8,
    436	.mas_rpm_id = 124,
    437	.slv_rpm_id = 184,
    438	.num_links = ARRAY_SIZE(pcnoc_int_2_links),
    439	.links = pcnoc_int_2_links,
    440};
    441
    442static const u16 pcnoc_int_3_links[] = {
    443	QCS404_PNOC_SNOC_SLV
    444};
    445
    446static struct qcom_icc_node pcnoc_int_3 = {
    447	.name = "pcnoc_int_3",
    448	.id = QCS404_PNOC_INT_3,
    449	.buswidth = 8,
    450	.mas_rpm_id = 125,
    451	.slv_rpm_id = 185,
    452	.num_links = ARRAY_SIZE(pcnoc_int_3_links),
    453	.links = pcnoc_int_3_links,
    454};
    455
    456static const u16 pcnoc_s_0_links[] = {
    457	QCS404_SLAVE_PRNG,
    458	QCS404_SLAVE_SPDM_WRAPPER,
    459	QCS404_SLAVE_PDM
    460};
    461
    462static struct qcom_icc_node pcnoc_s_0 = {
    463	.name = "pcnoc_s_0",
    464	.id = QCS404_PNOC_SLV_0,
    465	.buswidth = 4,
    466	.mas_rpm_id = 89,
    467	.slv_rpm_id = 118,
    468	.num_links = ARRAY_SIZE(pcnoc_s_0_links),
    469	.links = pcnoc_s_0_links,
    470};
    471
    472static const u16 pcnoc_s_1_links[] = {
    473	QCS404_SLAVE_TCSR
    474};
    475
    476static struct qcom_icc_node pcnoc_s_1 = {
    477	.name = "pcnoc_s_1",
    478	.id = QCS404_PNOC_SLV_1,
    479	.buswidth = 4,
    480	.mas_rpm_id = 90,
    481	.slv_rpm_id = 119,
    482	.num_links = ARRAY_SIZE(pcnoc_s_1_links),
    483	.links = pcnoc_s_1_links,
    484};
    485
    486static const u16 pcnoc_s_2_links[] = {
    487	QCS404_SLAVE_GRAPHICS_3D_CFG
    488};
    489
    490static struct qcom_icc_node pcnoc_s_2 = {
    491	.name = "pcnoc_s_2",
    492	.id = QCS404_PNOC_SLV_2,
    493	.buswidth = 4,
    494	.mas_rpm_id = -1,
    495	.slv_rpm_id = -1,
    496	.num_links = ARRAY_SIZE(pcnoc_s_2_links),
    497	.links = pcnoc_s_2_links,
    498};
    499
    500static const u16 pcnoc_s_3_links[] = {
    501	QCS404_SLAVE_MESSAGE_RAM
    502};
    503
    504static struct qcom_icc_node pcnoc_s_3 = {
    505	.name = "pcnoc_s_3",
    506	.id = QCS404_PNOC_SLV_3,
    507	.buswidth = 4,
    508	.mas_rpm_id = 92,
    509	.slv_rpm_id = 121,
    510	.num_links = ARRAY_SIZE(pcnoc_s_3_links),
    511	.links = pcnoc_s_3_links,
    512};
    513
    514static const u16 pcnoc_s_4_links[] = {
    515	QCS404_SLAVE_SNOC_CFG
    516};
    517
    518static struct qcom_icc_node pcnoc_s_4 = {
    519	.name = "pcnoc_s_4",
    520	.id = QCS404_PNOC_SLV_4,
    521	.buswidth = 4,
    522	.mas_rpm_id = 93,
    523	.slv_rpm_id = 122,
    524	.num_links = ARRAY_SIZE(pcnoc_s_4_links),
    525	.links = pcnoc_s_4_links,
    526};
    527
    528static const u16 pcnoc_s_6_links[] = {
    529	QCS404_SLAVE_BLSP_1,
    530	QCS404_SLAVE_TLMM_NORTH,
    531	QCS404_SLAVE_EMAC_CFG
    532};
    533
    534static struct qcom_icc_node pcnoc_s_6 = {
    535	.name = "pcnoc_s_6",
    536	.id = QCS404_PNOC_SLV_6,
    537	.buswidth = 4,
    538	.mas_rpm_id = 94,
    539	.slv_rpm_id = 123,
    540	.num_links = ARRAY_SIZE(pcnoc_s_6_links),
    541	.links = pcnoc_s_6_links,
    542};
    543
    544static const u16 pcnoc_s_7_links[] = {
    545	QCS404_SLAVE_TLMM_SOUTH,
    546	QCS404_SLAVE_DISPLAY_CFG,
    547	QCS404_SLAVE_SDCC_1,
    548	QCS404_SLAVE_PCIE_1,
    549	QCS404_SLAVE_SDCC_2
    550};
    551
    552static struct qcom_icc_node pcnoc_s_7 = {
    553	.name = "pcnoc_s_7",
    554	.id = QCS404_PNOC_SLV_7,
    555	.buswidth = 4,
    556	.mas_rpm_id = 95,
    557	.slv_rpm_id = 124,
    558	.num_links = ARRAY_SIZE(pcnoc_s_7_links),
    559	.links = pcnoc_s_7_links,
    560};
    561
    562static const u16 pcnoc_s_8_links[] = {
    563	QCS404_SLAVE_CRYPTO_0_CFG
    564};
    565
    566static struct qcom_icc_node pcnoc_s_8 = {
    567	.name = "pcnoc_s_8",
    568	.id = QCS404_PNOC_SLV_8,
    569	.buswidth = 4,
    570	.mas_rpm_id = 96,
    571	.slv_rpm_id = 125,
    572	.num_links = ARRAY_SIZE(pcnoc_s_8_links),
    573	.links = pcnoc_s_8_links,
    574};
    575
    576static const u16 pcnoc_s_9_links[] = {
    577	QCS404_SLAVE_BLSP_2,
    578	QCS404_SLAVE_TLMM_EAST,
    579	QCS404_SLAVE_PMIC_ARB
    580};
    581
    582static struct qcom_icc_node pcnoc_s_9 = {
    583	.name = "pcnoc_s_9",
    584	.id = QCS404_PNOC_SLV_9,
    585	.buswidth = 4,
    586	.mas_rpm_id = 97,
    587	.slv_rpm_id = 126,
    588	.num_links = ARRAY_SIZE(pcnoc_s_9_links),
    589	.links = pcnoc_s_9_links,
    590};
    591
    592static const u16 pcnoc_s_10_links[] = {
    593	QCS404_SLAVE_USB_HS
    594};
    595
    596static struct qcom_icc_node pcnoc_s_10 = {
    597	.name = "pcnoc_s_10",
    598	.id = QCS404_PNOC_SLV_10,
    599	.buswidth = 4,
    600	.mas_rpm_id = 157,
    601	.slv_rpm_id = -1,
    602	.num_links = ARRAY_SIZE(pcnoc_s_10_links),
    603	.links = pcnoc_s_10_links,
    604};
    605
    606static const u16 pcnoc_s_11_links[] = {
    607	QCS404_SLAVE_USB3
    608};
    609
    610static struct qcom_icc_node pcnoc_s_11 = {
    611	.name = "pcnoc_s_11",
    612	.id = QCS404_PNOC_SLV_11,
    613	.buswidth = 4,
    614	.mas_rpm_id = 158,
    615	.slv_rpm_id = 246,
    616	.num_links = ARRAY_SIZE(pcnoc_s_11_links),
    617	.links = pcnoc_s_11_links,
    618};
    619
    620static const u16 qdss_int_links[] = {
    621	QCS404_SNOC_BIMC_1_SLV,
    622	QCS404_SNOC_INT_1
    623};
    624
    625static struct qcom_icc_node qdss_int = {
    626	.name = "qdss_int",
    627	.id = QCS404_SNOC_QDSS_INT,
    628	.buswidth = 8,
    629	.mas_rpm_id = -1,
    630	.slv_rpm_id = -1,
    631	.num_links = ARRAY_SIZE(qdss_int_links),
    632	.links = qdss_int_links,
    633};
    634
    635static const u16 snoc_int_0_links[] = {
    636	QCS404_SLAVE_LPASS,
    637	QCS404_SLAVE_APPSS,
    638	QCS404_SLAVE_WCSS
    639};
    640
    641static struct qcom_icc_node snoc_int_0 = {
    642	.name = "snoc_int_0",
    643	.id = QCS404_SNOC_INT_0,
    644	.buswidth = 8,
    645	.mas_rpm_id = 99,
    646	.slv_rpm_id = 130,
    647	.num_links = ARRAY_SIZE(snoc_int_0_links),
    648	.links = snoc_int_0_links,
    649};
    650
    651static const u16 snoc_int_1_links[] = {
    652	QCS404_SNOC_PNOC_SLV,
    653	QCS404_SNOC_INT_2
    654};
    655
    656static struct qcom_icc_node snoc_int_1 = {
    657	.name = "snoc_int_1",
    658	.id = QCS404_SNOC_INT_1,
    659	.buswidth = 8,
    660	.mas_rpm_id = 100,
    661	.slv_rpm_id = 131,
    662	.num_links = ARRAY_SIZE(snoc_int_1_links),
    663	.links = snoc_int_1_links,
    664};
    665
    666static const u16 snoc_int_2_links[] = {
    667	QCS404_SLAVE_QDSS_STM,
    668	QCS404_SLAVE_OCIMEM
    669};
    670
    671static struct qcom_icc_node snoc_int_2 = {
    672	.name = "snoc_int_2",
    673	.id = QCS404_SNOC_INT_2,
    674	.buswidth = 8,
    675	.mas_rpm_id = 134,
    676	.slv_rpm_id = 197,
    677	.num_links = ARRAY_SIZE(snoc_int_2_links),
    678	.links = snoc_int_2_links,
    679};
    680
    681static struct qcom_icc_node slv_ebi = {
    682	.name = "slv_ebi",
    683	.id = QCS404_SLAVE_EBI_CH0,
    684	.buswidth = 8,
    685	.mas_rpm_id = -1,
    686	.slv_rpm_id = 0,
    687};
    688
    689static const u16 slv_bimc_snoc_links[] = {
    690	QCS404_BIMC_SNOC_MAS
    691};
    692
    693static struct qcom_icc_node slv_bimc_snoc = {
    694	.name = "slv_bimc_snoc",
    695	.id = QCS404_BIMC_SNOC_SLV,
    696	.buswidth = 8,
    697	.mas_rpm_id = -1,
    698	.slv_rpm_id = 2,
    699	.num_links = ARRAY_SIZE(slv_bimc_snoc_links),
    700	.links = slv_bimc_snoc_links,
    701};
    702
    703static struct qcom_icc_node slv_spdm = {
    704	.name = "slv_spdm",
    705	.id = QCS404_SLAVE_SPDM_WRAPPER,
    706	.buswidth = 4,
    707	.mas_rpm_id = -1,
    708	.slv_rpm_id = -1,
    709};
    710
    711static struct qcom_icc_node slv_pdm = {
    712	.name = "slv_pdm",
    713	.id = QCS404_SLAVE_PDM,
    714	.buswidth = 4,
    715	.mas_rpm_id = -1,
    716	.slv_rpm_id = 41,
    717};
    718
    719static struct qcom_icc_node slv_prng = {
    720	.name = "slv_prng",
    721	.id = QCS404_SLAVE_PRNG,
    722	.buswidth = 4,
    723	.mas_rpm_id = -1,
    724	.slv_rpm_id = 44,
    725};
    726
    727static struct qcom_icc_node slv_tcsr = {
    728	.name = "slv_tcsr",
    729	.id = QCS404_SLAVE_TCSR,
    730	.buswidth = 4,
    731	.mas_rpm_id = -1,
    732	.slv_rpm_id = 50,
    733};
    734
    735static struct qcom_icc_node slv_snoc_cfg = {
    736	.name = "slv_snoc_cfg",
    737	.id = QCS404_SLAVE_SNOC_CFG,
    738	.buswidth = 4,
    739	.mas_rpm_id = -1,
    740	.slv_rpm_id = 70,
    741};
    742
    743static struct qcom_icc_node slv_message_ram = {
    744	.name = "slv_message_ram",
    745	.id = QCS404_SLAVE_MESSAGE_RAM,
    746	.buswidth = 4,
    747	.mas_rpm_id = -1,
    748	.slv_rpm_id = 55,
    749};
    750
    751static struct qcom_icc_node slv_disp_ss_cfg = {
    752	.name = "slv_disp_ss_cfg",
    753	.id = QCS404_SLAVE_DISPLAY_CFG,
    754	.buswidth = 4,
    755	.mas_rpm_id = -1,
    756	.slv_rpm_id = -1,
    757};
    758
    759static struct qcom_icc_node slv_gpu_cfg = {
    760	.name = "slv_gpu_cfg",
    761	.id = QCS404_SLAVE_GRAPHICS_3D_CFG,
    762	.buswidth = 4,
    763	.mas_rpm_id = -1,
    764	.slv_rpm_id = -1,
    765};
    766
    767static struct qcom_icc_node slv_blsp_1 = {
    768	.name = "slv_blsp_1",
    769	.id = QCS404_SLAVE_BLSP_1,
    770	.buswidth = 4,
    771	.mas_rpm_id = -1,
    772	.slv_rpm_id = 39,
    773};
    774
    775static struct qcom_icc_node slv_tlmm_north = {
    776	.name = "slv_tlmm_north",
    777	.id = QCS404_SLAVE_TLMM_NORTH,
    778	.buswidth = 4,
    779	.mas_rpm_id = -1,
    780	.slv_rpm_id = 214,
    781};
    782
    783static struct qcom_icc_node slv_pcie = {
    784	.name = "slv_pcie",
    785	.id = QCS404_SLAVE_PCIE_1,
    786	.buswidth = 4,
    787	.mas_rpm_id = -1,
    788	.slv_rpm_id = -1,
    789};
    790
    791static struct qcom_icc_node slv_ethernet = {
    792	.name = "slv_ethernet",
    793	.id = QCS404_SLAVE_EMAC_CFG,
    794	.buswidth = 4,
    795	.mas_rpm_id = -1,
    796	.slv_rpm_id = -1,
    797};
    798
    799static struct qcom_icc_node slv_blsp_2 = {
    800	.name = "slv_blsp_2",
    801	.id = QCS404_SLAVE_BLSP_2,
    802	.buswidth = 4,
    803	.mas_rpm_id = -1,
    804	.slv_rpm_id = 37,
    805};
    806
    807static struct qcom_icc_node slv_tlmm_east = {
    808	.name = "slv_tlmm_east",
    809	.id = QCS404_SLAVE_TLMM_EAST,
    810	.buswidth = 4,
    811	.mas_rpm_id = -1,
    812	.slv_rpm_id = 213,
    813};
    814
    815static struct qcom_icc_node slv_tcu = {
    816	.name = "slv_tcu",
    817	.id = QCS404_SLAVE_TCU,
    818	.buswidth = 8,
    819	.mas_rpm_id = -1,
    820	.slv_rpm_id = -1,
    821};
    822
    823static struct qcom_icc_node slv_pmic_arb = {
    824	.name = "slv_pmic_arb",
    825	.id = QCS404_SLAVE_PMIC_ARB,
    826	.buswidth = 4,
    827	.mas_rpm_id = -1,
    828	.slv_rpm_id = 59,
    829};
    830
    831static struct qcom_icc_node slv_sdcc_1 = {
    832	.name = "slv_sdcc_1",
    833	.id = QCS404_SLAVE_SDCC_1,
    834	.buswidth = 4,
    835	.mas_rpm_id = -1,
    836	.slv_rpm_id = 31,
    837};
    838
    839static struct qcom_icc_node slv_sdcc_2 = {
    840	.name = "slv_sdcc_2",
    841	.id = QCS404_SLAVE_SDCC_2,
    842	.buswidth = 4,
    843	.mas_rpm_id = -1,
    844	.slv_rpm_id = 33,
    845};
    846
    847static struct qcom_icc_node slv_tlmm_south = {
    848	.name = "slv_tlmm_south",
    849	.id = QCS404_SLAVE_TLMM_SOUTH,
    850	.buswidth = 4,
    851	.mas_rpm_id = -1,
    852	.slv_rpm_id = -1,
    853};
    854
    855static struct qcom_icc_node slv_usb_hs = {
    856	.name = "slv_usb_hs",
    857	.id = QCS404_SLAVE_USB_HS,
    858	.buswidth = 4,
    859	.mas_rpm_id = -1,
    860	.slv_rpm_id = 40,
    861};
    862
    863static struct qcom_icc_node slv_usb3 = {
    864	.name = "slv_usb3",
    865	.id = QCS404_SLAVE_USB3,
    866	.buswidth = 4,
    867	.mas_rpm_id = -1,
    868	.slv_rpm_id = 22,
    869};
    870
    871static struct qcom_icc_node slv_crypto_0_cfg = {
    872	.name = "slv_crypto_0_cfg",
    873	.id = QCS404_SLAVE_CRYPTO_0_CFG,
    874	.buswidth = 4,
    875	.mas_rpm_id = -1,
    876	.slv_rpm_id = 52,
    877};
    878
    879static const u16 slv_pcnoc_snoc_links[] = {
    880	QCS404_PNOC_SNOC_MAS
    881};
    882
    883static struct qcom_icc_node slv_pcnoc_snoc = {
    884	.name = "slv_pcnoc_snoc",
    885	.id = QCS404_PNOC_SNOC_SLV,
    886	.buswidth = 8,
    887	.mas_rpm_id = -1,
    888	.slv_rpm_id = 45,
    889	.num_links = ARRAY_SIZE(slv_pcnoc_snoc_links),
    890	.links = slv_pcnoc_snoc_links,
    891};
    892
    893static struct qcom_icc_node slv_kpss_ahb = {
    894	.name = "slv_kpss_ahb",
    895	.id = QCS404_SLAVE_APPSS,
    896	.buswidth = 4,
    897	.mas_rpm_id = -1,
    898	.slv_rpm_id = -1,
    899};
    900
    901static struct qcom_icc_node slv_wcss = {
    902	.name = "slv_wcss",
    903	.id = QCS404_SLAVE_WCSS,
    904	.buswidth = 4,
    905	.mas_rpm_id = -1,
    906	.slv_rpm_id = 23,
    907};
    908
    909static const u16 slv_snoc_bimc_1_links[] = {
    910	QCS404_SNOC_BIMC_1_MAS
    911};
    912
    913static struct qcom_icc_node slv_snoc_bimc_1 = {
    914	.name = "slv_snoc_bimc_1",
    915	.id = QCS404_SNOC_BIMC_1_SLV,
    916	.buswidth = 8,
    917	.mas_rpm_id = -1,
    918	.slv_rpm_id = 104,
    919	.num_links = ARRAY_SIZE(slv_snoc_bimc_1_links),
    920	.links = slv_snoc_bimc_1_links,
    921};
    922
    923static struct qcom_icc_node slv_imem = {
    924	.name = "slv_imem",
    925	.id = QCS404_SLAVE_OCIMEM,
    926	.buswidth = 8,
    927	.mas_rpm_id = -1,
    928	.slv_rpm_id = 26,
    929};
    930
    931static const u16 slv_snoc_pcnoc_links[] = {
    932	QCS404_SNOC_PNOC_MAS
    933};
    934
    935static struct qcom_icc_node slv_snoc_pcnoc = {
    936	.name = "slv_snoc_pcnoc",
    937	.id = QCS404_SNOC_PNOC_SLV,
    938	.buswidth = 8,
    939	.mas_rpm_id = -1,
    940	.slv_rpm_id = 28,
    941	.num_links = ARRAY_SIZE(slv_snoc_pcnoc_links),
    942	.links = slv_snoc_pcnoc_links,
    943};
    944
    945static struct qcom_icc_node slv_qdss_stm = {
    946	.name = "slv_qdss_stm",
    947	.id = QCS404_SLAVE_QDSS_STM,
    948	.buswidth = 4,
    949	.mas_rpm_id = -1,
    950	.slv_rpm_id = 30,
    951};
    952
    953static struct qcom_icc_node slv_cats_0 = {
    954	.name = "slv_cats_0",
    955	.id = QCS404_SLAVE_CATS_128,
    956	.buswidth = 16,
    957	.mas_rpm_id = -1,
    958	.slv_rpm_id = -1,
    959};
    960
    961static struct qcom_icc_node slv_cats_1 = {
    962	.name = "slv_cats_1",
    963	.id = QCS404_SLAVE_OCMEM_64,
    964	.buswidth = 8,
    965	.mas_rpm_id = -1,
    966	.slv_rpm_id = -1,
    967};
    968
    969static struct qcom_icc_node slv_lpass = {
    970	.name = "slv_lpass",
    971	.id = QCS404_SLAVE_LPASS,
    972	.buswidth = 4,
    973	.mas_rpm_id = -1,
    974	.slv_rpm_id = -1,
    975};
    976
    977static struct qcom_icc_node * const qcs404_bimc_nodes[] = {
    978	[MASTER_AMPSS_M0] = &mas_apps_proc,
    979	[MASTER_OXILI] = &mas_oxili,
    980	[MASTER_MDP_PORT0] = &mas_mdp,
    981	[MASTER_SNOC_BIMC_1] = &mas_snoc_bimc_1,
    982	[MASTER_TCU_0] = &mas_tcu_0,
    983	[SLAVE_EBI_CH0] = &slv_ebi,
    984	[SLAVE_BIMC_SNOC] = &slv_bimc_snoc,
    985};
    986
    987static const struct qcom_icc_desc qcs404_bimc = {
    988	.nodes = qcs404_bimc_nodes,
    989	.num_nodes = ARRAY_SIZE(qcs404_bimc_nodes),
    990};
    991
    992static struct qcom_icc_node * const qcs404_pcnoc_nodes[] = {
    993	[MASTER_SPDM] = &mas_spdm,
    994	[MASTER_BLSP_1] = &mas_blsp_1,
    995	[MASTER_BLSP_2] = &mas_blsp_2,
    996	[MASTER_XI_USB_HS1] = &mas_xi_usb_hs1,
    997	[MASTER_CRYPT0] = &mas_crypto,
    998	[MASTER_SDCC_1] = &mas_sdcc_1,
    999	[MASTER_SDCC_2] = &mas_sdcc_2,
   1000	[MASTER_SNOC_PCNOC] = &mas_snoc_pcnoc,
   1001	[MASTER_QPIC] = &mas_qpic,
   1002	[PCNOC_INT_0] = &pcnoc_int_0,
   1003	[PCNOC_INT_2] = &pcnoc_int_2,
   1004	[PCNOC_INT_3] = &pcnoc_int_3,
   1005	[PCNOC_S_0] = &pcnoc_s_0,
   1006	[PCNOC_S_1] = &pcnoc_s_1,
   1007	[PCNOC_S_2] = &pcnoc_s_2,
   1008	[PCNOC_S_3] = &pcnoc_s_3,
   1009	[PCNOC_S_4] = &pcnoc_s_4,
   1010	[PCNOC_S_6] = &pcnoc_s_6,
   1011	[PCNOC_S_7] = &pcnoc_s_7,
   1012	[PCNOC_S_8] = &pcnoc_s_8,
   1013	[PCNOC_S_9] = &pcnoc_s_9,
   1014	[PCNOC_S_10] = &pcnoc_s_10,
   1015	[PCNOC_S_11] = &pcnoc_s_11,
   1016	[SLAVE_SPDM] = &slv_spdm,
   1017	[SLAVE_PDM] = &slv_pdm,
   1018	[SLAVE_PRNG] = &slv_prng,
   1019	[SLAVE_TCSR] = &slv_tcsr,
   1020	[SLAVE_SNOC_CFG] = &slv_snoc_cfg,
   1021	[SLAVE_MESSAGE_RAM] = &slv_message_ram,
   1022	[SLAVE_DISP_SS_CFG] = &slv_disp_ss_cfg,
   1023	[SLAVE_GPU_CFG] = &slv_gpu_cfg,
   1024	[SLAVE_BLSP_1] = &slv_blsp_1,
   1025	[SLAVE_BLSP_2] = &slv_blsp_2,
   1026	[SLAVE_TLMM_NORTH] = &slv_tlmm_north,
   1027	[SLAVE_PCIE] = &slv_pcie,
   1028	[SLAVE_ETHERNET] = &slv_ethernet,
   1029	[SLAVE_TLMM_EAST] = &slv_tlmm_east,
   1030	[SLAVE_TCU] = &slv_tcu,
   1031	[SLAVE_PMIC_ARB] = &slv_pmic_arb,
   1032	[SLAVE_SDCC_1] = &slv_sdcc_1,
   1033	[SLAVE_SDCC_2] = &slv_sdcc_2,
   1034	[SLAVE_TLMM_SOUTH] = &slv_tlmm_south,
   1035	[SLAVE_USB_HS] = &slv_usb_hs,
   1036	[SLAVE_USB3] = &slv_usb3,
   1037	[SLAVE_CRYPTO_0_CFG] = &slv_crypto_0_cfg,
   1038	[SLAVE_PCNOC_SNOC] = &slv_pcnoc_snoc,
   1039};
   1040
   1041static const struct qcom_icc_desc qcs404_pcnoc = {
   1042	.nodes = qcs404_pcnoc_nodes,
   1043	.num_nodes = ARRAY_SIZE(qcs404_pcnoc_nodes),
   1044};
   1045
   1046static struct qcom_icc_node * const qcs404_snoc_nodes[] = {
   1047	[MASTER_QDSS_BAM] = &mas_qdss_bam,
   1048	[MASTER_BIMC_SNOC] = &mas_bimc_snoc,
   1049	[MASTER_PCNOC_SNOC] = &mas_pcnoc_snoc,
   1050	[MASTER_QDSS_ETR] = &mas_qdss_etr,
   1051	[MASTER_EMAC] = &mas_emac,
   1052	[MASTER_PCIE] = &mas_pcie,
   1053	[MASTER_USB3] = &mas_usb3,
   1054	[QDSS_INT] = &qdss_int,
   1055	[SNOC_INT_0] = &snoc_int_0,
   1056	[SNOC_INT_1] = &snoc_int_1,
   1057	[SNOC_INT_2] = &snoc_int_2,
   1058	[SLAVE_KPSS_AHB] = &slv_kpss_ahb,
   1059	[SLAVE_WCSS] = &slv_wcss,
   1060	[SLAVE_SNOC_BIMC_1] = &slv_snoc_bimc_1,
   1061	[SLAVE_IMEM] = &slv_imem,
   1062	[SLAVE_SNOC_PCNOC] = &slv_snoc_pcnoc,
   1063	[SLAVE_QDSS_STM] = &slv_qdss_stm,
   1064	[SLAVE_CATS_0] = &slv_cats_0,
   1065	[SLAVE_CATS_1] = &slv_cats_1,
   1066	[SLAVE_LPASS] = &slv_lpass,
   1067};
   1068
   1069static const struct qcom_icc_desc qcs404_snoc = {
   1070	.nodes = qcs404_snoc_nodes,
   1071	.num_nodes = ARRAY_SIZE(qcs404_snoc_nodes),
   1072};
   1073
   1074
   1075static const struct of_device_id qcs404_noc_of_match[] = {
   1076	{ .compatible = "qcom,qcs404-bimc", .data = &qcs404_bimc },
   1077	{ .compatible = "qcom,qcs404-pcnoc", .data = &qcs404_pcnoc },
   1078	{ .compatible = "qcom,qcs404-snoc", .data = &qcs404_snoc },
   1079	{ },
   1080};
   1081MODULE_DEVICE_TABLE(of, qcs404_noc_of_match);
   1082
   1083static struct platform_driver qcs404_noc_driver = {
   1084	.probe = qnoc_probe,
   1085	.remove = qnoc_remove,
   1086	.driver = {
   1087		.name = "qnoc-qcs404",
   1088		.of_match_table = qcs404_noc_of_match,
   1089	},
   1090};
   1091module_platform_driver(qcs404_noc_driver);
   1092MODULE_DESCRIPTION("Qualcomm QCS404 NoC driver");
   1093MODULE_LICENSE("GPL v2");