Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'icc-qcm2290' into icc-next

Add support for QCM2290 including a few prep changes.

* icc-qcm2290
interconnect: icc-rpm: Define ICC device type
interconnect: icc-rpm: Add QNOC type QoS support
interconnect: icc-rpm: Support child NoC device probe
dt-bindings: interconnect: Add Qualcomm QCM2290 NoC support
interconnect: qcom: Add QCM2290 driver support

Link: https://lore.kernel.org/r/20211215002324.1727-1-shawn.guo@linaro.org
Signed-off-by: Georgi Djakov <djakov@kernel.org>

+1684 -12
+137
Documentation/devicetree/bindings/interconnect/qcom,qcm2290.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/interconnect/qcom,qcm2290.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Qualcomm QCM2290 Network-On-Chip interconnect 8 + 9 + maintainers: 10 + - Shawn Guo <shawn.guo@linaro.org> 11 + 12 + description: | 13 + The Qualcomm QCM2290 interconnect providers support adjusting the 14 + bandwidth requirements between the various NoC fabrics. 15 + 16 + properties: 17 + reg: 18 + maxItems: 1 19 + 20 + compatible: 21 + enum: 22 + - qcom,qcm2290-bimc 23 + - qcom,qcm2290-cnoc 24 + - qcom,qcm2290-snoc 25 + 26 + '#interconnect-cells': 27 + const: 1 28 + 29 + clock-names: 30 + items: 31 + - const: bus 32 + - const: bus_a 33 + 34 + clocks: 35 + items: 36 + - description: Bus Clock 37 + - description: Bus A Clock 38 + 39 + # Child node's properties 40 + patternProperties: 41 + '^interconnect-[a-z0-9]+$': 42 + type: object 43 + description: 44 + The interconnect providers do not have a separate QoS register space, 45 + but share parent's space. 46 + 47 + properties: 48 + compatible: 49 + enum: 50 + - qcom,qcm2290-qup-virt 51 + - qcom,qcm2290-mmrt-virt 52 + - qcom,qcm2290-mmnrt-virt 53 + 54 + '#interconnect-cells': 55 + const: 1 56 + 57 + clock-names: 58 + items: 59 + - const: bus 60 + - const: bus_a 61 + 62 + clocks: 63 + items: 64 + - description: Bus Clock 65 + - description: Bus A Clock 66 + 67 + required: 68 + - compatible 69 + - '#interconnect-cells' 70 + - clock-names 71 + - clocks 72 + 73 + additionalProperties: false 74 + 75 + required: 76 + - compatible 77 + - reg 78 + - '#interconnect-cells' 79 + - clock-names 80 + - clocks 81 + 82 + additionalProperties: false 83 + 84 + examples: 85 + - | 86 + #include <dt-bindings/clock/qcom,rpmcc.h> 87 + 88 + snoc: interconnect@1880000 { 89 + compatible = "qcom,qcm2290-snoc"; 90 + reg = <0x01880000 0x60200>; 91 + #interconnect-cells = <1>; 92 + clock-names = "bus", "bus_a"; 93 + clocks = <&rpmcc RPM_SMD_SNOC_CLK>, 94 + <&rpmcc RPM_SMD_SNOC_A_CLK>; 95 + 96 + qup_virt: interconnect-qup { 97 + compatible = "qcom,qcm2290-qup-virt"; 98 + #interconnect-cells = <1>; 99 + clock-names = "bus", "bus_a"; 100 + clocks = <&rpmcc RPM_SMD_QUP_CLK>, 101 + <&rpmcc RPM_SMD_QUP_A_CLK>; 102 + }; 103 + 104 + mmnrt_virt: interconnect-mmnrt { 105 + compatible = "qcom,qcm2290-mmnrt-virt"; 106 + #interconnect-cells = <1>; 107 + clock-names = "bus", "bus_a"; 108 + clocks = <&rpmcc RPM_SMD_MMNRT_CLK>, 109 + <&rpmcc RPM_SMD_MMNRT_A_CLK>; 110 + }; 111 + 112 + mmrt_virt: interconnect-mmrt { 113 + compatible = "qcom,qcm2290-mmrt-virt"; 114 + #interconnect-cells = <1>; 115 + clock-names = "bus", "bus_a"; 116 + clocks = <&rpmcc RPM_SMD_MMRT_CLK>, 117 + <&rpmcc RPM_SMD_MMRT_A_CLK>; 118 + }; 119 + }; 120 + 121 + cnoc: interconnect@1900000 { 122 + compatible = "qcom,qcm2290-cnoc"; 123 + reg = <0x01900000 0x8200>; 124 + #interconnect-cells = <1>; 125 + clock-names = "bus", "bus_a"; 126 + clocks = <&rpmcc RPM_SMD_CNOC_CLK>, 127 + <&rpmcc RPM_SMD_CNOC_A_CLK>; 128 + }; 129 + 130 + bimc: interconnect@4480000 { 131 + compatible = "qcom,qcm2290-bimc"; 132 + reg = <0x04480000 0x80000>; 133 + #interconnect-cells = <1>; 134 + clock-names = "bus", "bus_a"; 135 + clocks = <&rpmcc RPM_SMD_BIMC_CLK>, 136 + <&rpmcc RPM_SMD_BIMC_A_CLK>; 137 + };
+9
drivers/interconnect/qcom/Kconfig
··· 51 51 Say y here to support the Operating State Manager (OSM) interconnect 52 52 driver which controls the scaling of L3 caches on Qualcomm SoCs. 53 53 54 + config INTERCONNECT_QCOM_QCM2290 55 + tristate "Qualcomm QCM2290 interconnect driver" 56 + depends on INTERCONNECT_QCOM 57 + depends on QCOM_SMD_RPM 58 + select INTERCONNECT_QCOM_SMD_RPM 59 + help 60 + This is a driver for the Qualcomm Network-on-Chip on qcm2290-based 61 + platforms. 62 + 54 63 config INTERCONNECT_QCOM_QCS404 55 64 tristate "Qualcomm QCS404 interconnect driver" 56 65 depends on INTERCONNECT_QCOM
+2
drivers/interconnect/qcom/Makefile
··· 6 6 qnoc-msm8974-objs := msm8974.o 7 7 qnoc-msm8996-objs := msm8996.o 8 8 icc-osm-l3-objs := osm-l3.o 9 + qnoc-qcm2290-objs := qcm2290.o 9 10 qnoc-qcs404-objs := qcs404.o 10 11 icc-rpmh-obj := icc-rpmh.o 11 12 qnoc-sc7180-objs := sc7180.o ··· 27 26 obj-$(CONFIG_INTERCONNECT_QCOM_MSM8974) += qnoc-msm8974.o 28 27 obj-$(CONFIG_INTERCONNECT_QCOM_MSM8996) += qnoc-msm8996.o 29 28 obj-$(CONFIG_INTERCONNECT_QCOM_OSM_L3) += icc-osm-l3.o 29 + obj-$(CONFIG_INTERCONNECT_QCOM_QCM2290) += qnoc-qcm2290.o 30 30 obj-$(CONFIG_INTERCONNECT_QCOM_QCS404) += qnoc-qcs404.o 31 31 obj-$(CONFIG_INTERCONNECT_QCOM_RPMH) += icc-rpmh.o 32 32 obj-$(CONFIG_INTERCONNECT_QCOM_SC7180) += qnoc-sc7180.o
+47 -5
drivers/interconnect/qcom/icc-rpm.c
··· 18 18 #include "smd-rpm.h" 19 19 #include "icc-rpm.h" 20 20 21 + /* QNOC QoS */ 22 + #define QNOC_QOS_MCTL_LOWn_ADDR(n) (0x8 + (n * 0x1000)) 23 + #define QNOC_QOS_MCTL_DFLT_PRIO_MASK 0x70 24 + #define QNOC_QOS_MCTL_DFLT_PRIO_SHIFT 4 25 + #define QNOC_QOS_MCTL_URGFWD_EN_MASK 0x8 26 + #define QNOC_QOS_MCTL_URGFWD_EN_SHIFT 3 27 + 21 28 /* BIMC QoS */ 22 29 #define M_BKE_REG_BASE(n) (0x300 + (0x4000 * n)) 23 30 #define M_BKE_EN_ADDR(n) (M_BKE_REG_BASE(n)) ··· 46 39 47 40 #define NOC_QOS_MODEn_ADDR(n) (0xc + (n * 0x1000)) 48 41 #define NOC_QOS_MODEn_MASK 0x3 42 + 43 + static int qcom_icc_set_qnoc_qos(struct icc_node *src, u64 max_bw) 44 + { 45 + struct icc_provider *provider = src->provider; 46 + struct qcom_icc_provider *qp = to_qcom_provider(provider); 47 + struct qcom_icc_node *qn = src->data; 48 + struct qcom_icc_qos *qos = &qn->qos; 49 + int rc; 50 + 51 + rc = regmap_update_bits(qp->regmap, 52 + qp->qos_offset + QNOC_QOS_MCTL_LOWn_ADDR(qos->qos_port), 53 + QNOC_QOS_MCTL_DFLT_PRIO_MASK, 54 + qos->areq_prio << QNOC_QOS_MCTL_DFLT_PRIO_SHIFT); 55 + if (rc) 56 + return rc; 57 + 58 + return regmap_update_bits(qp->regmap, 59 + qp->qos_offset + QNOC_QOS_MCTL_LOWn_ADDR(qos->qos_port), 60 + QNOC_QOS_MCTL_URGFWD_EN_MASK, 61 + !!qos->urg_fwd_en << QNOC_QOS_MCTL_URGFWD_EN_SHIFT); 62 + } 49 63 50 64 static int qcom_icc_bimc_set_qos_health(struct qcom_icc_provider *qp, 51 65 struct qcom_icc_qos *qos, ··· 192 164 193 165 dev_dbg(node->provider->dev, "Setting QoS for %s\n", qn->name); 194 166 195 - if (qp->is_bimc_node) 167 + switch (qp->type) { 168 + case QCOM_ICC_BIMC: 196 169 return qcom_icc_set_bimc_qos(node, sum_bw); 197 - 198 - return qcom_icc_set_noc_qos(node, sum_bw); 170 + case QCOM_ICC_QNOC: 171 + return qcom_icc_set_qnoc_qos(node, sum_bw); 172 + default: 173 + return qcom_icc_set_noc_qos(node, sum_bw); 174 + } 199 175 } 200 176 201 177 static int qcom_icc_rpm_set(int mas_rpm_id, int slv_rpm_id, u64 sum_bw) ··· 341 309 qp->bus_clks[i].id = cds[i]; 342 310 qp->num_clks = cd_num; 343 311 344 - qp->is_bimc_node = desc->is_bimc_node; 312 + qp->type = desc->type; 345 313 qp->qos_offset = desc->qos_offset; 346 314 347 315 if (desc->regmap_cfg) { ··· 349 317 void __iomem *mmio; 350 318 351 319 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 352 - if (!res) 320 + if (!res) { 321 + /* Try parent's regmap */ 322 + qp->regmap = dev_get_regmap(dev->parent, NULL); 323 + if (qp->regmap) 324 + goto regmap_done; 353 325 return -ENODEV; 326 + } 354 327 355 328 mmio = devm_ioremap_resource(dev, res); 356 329 ··· 371 334 } 372 335 } 373 336 337 + regmap_done: 374 338 ret = devm_clk_bulk_get(dev, qp->num_clks, qp->bus_clks); 375 339 if (ret) 376 340 return ret; ··· 422 384 data->num_nodes = num_nodes; 423 385 424 386 platform_set_drvdata(pdev, qp); 387 + 388 + /* Populate child NoC devices if any */ 389 + if (of_get_child_count(dev->of_node) > 0) 390 + return of_platform_populate(dev->of_node, NULL, NULL, dev); 425 391 426 392 return 0; 427 393 err:
+11 -3
drivers/interconnect/qcom/icc-rpm.h
··· 12 12 #define to_qcom_provider(_provider) \ 13 13 container_of(_provider, struct qcom_icc_provider, provider) 14 14 15 + enum qcom_icc_type { 16 + QCOM_ICC_NOC, 17 + QCOM_ICC_BIMC, 18 + QCOM_ICC_QNOC, 19 + }; 20 + 15 21 /** 16 22 * struct qcom_icc_provider - Qualcomm specific interconnect provider 17 23 * @provider: generic interconnect provider 18 24 * @bus_clks: the clk_bulk_data table of bus clocks 19 25 * @num_clks: the total number of clk_bulk_data entries 20 - * @is_bimc_node: indicates whether to use bimc specific setting 26 + * @type: the ICC provider type 21 27 * @qos_offset: offset to QoS registers 22 28 * @regmap: regmap for QoS registers read/write access 23 29 */ 24 30 struct qcom_icc_provider { 25 31 struct icc_provider provider; 26 32 int num_clks; 27 - bool is_bimc_node; 33 + enum qcom_icc_type type; 28 34 struct regmap *regmap; 29 35 unsigned int qos_offset; 30 36 struct clk_bulk_data bus_clks[]; ··· 44 38 * @ap_owned: indicates if the node is owned by the AP or by the RPM 45 39 * @qos_mode: default qos mode for this node 46 40 * @qos_port: qos port number for finding qos registers of this node 41 + * @urg_fwd_en: enable urgent forwarding 47 42 */ 48 43 struct qcom_icc_qos { 49 44 u32 areq_prio; ··· 53 46 bool ap_owned; 54 47 int qos_mode; 55 48 int qos_port; 49 + bool urg_fwd_en; 56 50 }; 57 51 58 52 /** ··· 86 78 const char * const *clocks; 87 79 size_t num_clocks; 88 80 bool has_bus_pd; 89 - bool is_bimc_node; 81 + enum qcom_icc_type type; 90 82 const struct regmap_config *regmap_cfg; 91 83 unsigned int qos_offset; 92 84 };
+3 -1
drivers/interconnect/qcom/msm8916.c
··· 1229 1229 }; 1230 1230 1231 1231 static struct qcom_icc_desc msm8916_snoc = { 1232 + .type = QCOM_ICC_NOC, 1232 1233 .nodes = msm8916_snoc_nodes, 1233 1234 .num_nodes = ARRAY_SIZE(msm8916_snoc_nodes), 1234 1235 .regmap_cfg = &msm8916_snoc_regmap_config, ··· 1257 1256 }; 1258 1257 1259 1258 static struct qcom_icc_desc msm8916_bimc = { 1259 + .type = QCOM_ICC_BIMC, 1260 1260 .nodes = msm8916_bimc_nodes, 1261 1261 .num_nodes = ARRAY_SIZE(msm8916_bimc_nodes), 1262 - .is_bimc_node = true, 1263 1262 .regmap_cfg = &msm8916_bimc_regmap_config, 1264 1263 .qos_offset = 0x8000, 1265 1264 }; ··· 1326 1325 }; 1327 1326 1328 1327 static struct qcom_icc_desc msm8916_pcnoc = { 1328 + .type = QCOM_ICC_NOC, 1329 1329 .nodes = msm8916_pcnoc_nodes, 1330 1330 .num_nodes = ARRAY_SIZE(msm8916_pcnoc_nodes), 1331 1331 .regmap_cfg = &msm8916_pcnoc_regmap_config,
+4 -1
drivers/interconnect/qcom/msm8939.c
··· 1282 1282 }; 1283 1283 1284 1284 static struct qcom_icc_desc msm8939_snoc = { 1285 + .type = QCOM_ICC_NOC, 1285 1286 .nodes = msm8939_snoc_nodes, 1286 1287 .num_nodes = ARRAY_SIZE(msm8939_snoc_nodes), 1287 1288 .regmap_cfg = &msm8939_snoc_regmap_config, ··· 1310 1309 }; 1311 1310 1312 1311 static struct qcom_icc_desc msm8939_snoc_mm = { 1312 + .type = QCOM_ICC_NOC, 1313 1313 .nodes = msm8939_snoc_mm_nodes, 1314 1314 .num_nodes = ARRAY_SIZE(msm8939_snoc_mm_nodes), 1315 1315 .regmap_cfg = &msm8939_snoc_mm_regmap_config, ··· 1338 1336 }; 1339 1337 1340 1338 static struct qcom_icc_desc msm8939_bimc = { 1339 + .type = QCOM_ICC_BIMC, 1341 1340 .nodes = msm8939_bimc_nodes, 1342 1341 .num_nodes = ARRAY_SIZE(msm8939_bimc_nodes), 1343 - .is_bimc_node = true, 1344 1342 .regmap_cfg = &msm8939_bimc_regmap_config, 1345 1343 .qos_offset = 0x8000, 1346 1344 }; ··· 1409 1407 }; 1410 1408 1411 1409 static struct qcom_icc_desc msm8939_pcnoc = { 1410 + .type = QCOM_ICC_NOC, 1412 1411 .nodes = msm8939_pcnoc_nodes, 1413 1412 .num_nodes = ARRAY_SIZE(msm8939_pcnoc_nodes), 1414 1413 .regmap_cfg = &msm8939_pcnoc_regmap_config,
+8 -1
drivers/interconnect/qcom/msm8996.c
··· 1811 1811 }; 1812 1812 1813 1813 static const struct qcom_icc_desc msm8996_a0noc = { 1814 + .type = QCOM_ICC_NOC, 1814 1815 .nodes = a0noc_nodes, 1815 1816 .num_nodes = ARRAY_SIZE(a0noc_nodes), 1816 1817 .clocks = bus_a0noc_clocks, ··· 1835 1834 }; 1836 1835 1837 1836 static const struct qcom_icc_desc msm8996_a1noc = { 1837 + .type = QCOM_ICC_NOC, 1838 1838 .nodes = a1noc_nodes, 1839 1839 .num_nodes = ARRAY_SIZE(a1noc_nodes), 1840 1840 .regmap_cfg = &msm8996_a1noc_regmap_config ··· 1856 1854 }; 1857 1855 1858 1856 static const struct qcom_icc_desc msm8996_a2noc = { 1857 + .type = QCOM_ICC_NOC, 1859 1858 .nodes = a2noc_nodes, 1860 1859 .num_nodes = ARRAY_SIZE(a2noc_nodes), 1861 1860 .regmap_cfg = &msm8996_a2noc_regmap_config ··· 1882 1879 }; 1883 1880 1884 1881 static const struct qcom_icc_desc msm8996_bimc = { 1882 + .type = QCOM_ICC_BIMC, 1885 1883 .nodes = bimc_nodes, 1886 1884 .num_nodes = ARRAY_SIZE(bimc_nodes), 1887 - .is_bimc_node = true, 1888 1885 .regmap_cfg = &msm8996_bimc_regmap_config 1889 1886 }; 1890 1887 ··· 1940 1937 }; 1941 1938 1942 1939 static const struct qcom_icc_desc msm8996_cnoc = { 1940 + .type = QCOM_ICC_NOC, 1943 1941 .nodes = cnoc_nodes, 1944 1942 .num_nodes = ARRAY_SIZE(cnoc_nodes), 1945 1943 .regmap_cfg = &msm8996_cnoc_regmap_config ··· 1993 1989 }; 1994 1990 1995 1991 static const struct qcom_icc_desc msm8996_mnoc = { 1992 + .type = QCOM_ICC_NOC, 1996 1993 .nodes = mnoc_nodes, 1997 1994 .num_nodes = ARRAY_SIZE(mnoc_nodes), 1998 1995 .clocks = bus_mm_clocks, ··· 2031 2026 }; 2032 2027 2033 2028 static const struct qcom_icc_desc msm8996_pnoc = { 2029 + .type = QCOM_ICC_NOC, 2034 2030 .nodes = pnoc_nodes, 2035 2031 .num_nodes = ARRAY_SIZE(pnoc_nodes), 2036 2032 .regmap_cfg = &msm8996_pnoc_regmap_config ··· 2075 2069 }; 2076 2070 2077 2071 static const struct qcom_icc_desc msm8996_snoc = { 2072 + .type = QCOM_ICC_NOC, 2078 2073 .nodes = snoc_nodes, 2079 2074 .num_nodes = ARRAY_SIZE(snoc_nodes), 2080 2075 .regmap_cfg = &msm8996_snoc_regmap_config
+1363
drivers/interconnect/qcom/qcm2290.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * Qualcomm QCM2290 Network-on-Chip (NoC) QoS driver 4 + * 5 + * Copyright (c) 2021, Linaro Ltd. 6 + * 7 + */ 8 + 9 + #include <dt-bindings/interconnect/qcom,qcm2290.h> 10 + #include <linux/clk.h> 11 + #include <linux/device.h> 12 + #include <linux/interconnect-provider.h> 13 + #include <linux/io.h> 14 + #include <linux/module.h> 15 + #include <linux/of_device.h> 16 + #include <linux/of_platform.h> 17 + #include <linux/platform_device.h> 18 + #include <linux/regmap.h> 19 + #include <linux/slab.h> 20 + 21 + #include "icc-rpm.h" 22 + #include "smd-rpm.h" 23 + 24 + enum { 25 + QCM2290_MASTER_APPSS_PROC = 1, 26 + QCM2290_MASTER_SNOC_BIMC_RT, 27 + QCM2290_MASTER_SNOC_BIMC_NRT, 28 + QCM2290_MASTER_SNOC_BIMC, 29 + QCM2290_MASTER_TCU_0, 30 + QCM2290_MASTER_GFX3D, 31 + QCM2290_MASTER_SNOC_CNOC, 32 + QCM2290_MASTER_QDSS_DAP, 33 + QCM2290_MASTER_CRYPTO_CORE0, 34 + QCM2290_MASTER_SNOC_CFG, 35 + QCM2290_MASTER_TIC, 36 + QCM2290_MASTER_ANOC_SNOC, 37 + QCM2290_MASTER_BIMC_SNOC, 38 + QCM2290_MASTER_PIMEM, 39 + QCM2290_MASTER_QDSS_BAM, 40 + QCM2290_MASTER_QUP_0, 41 + QCM2290_MASTER_IPA, 42 + QCM2290_MASTER_QDSS_ETR, 43 + QCM2290_MASTER_SDCC_1, 44 + QCM2290_MASTER_SDCC_2, 45 + QCM2290_MASTER_QPIC, 46 + QCM2290_MASTER_USB3_0, 47 + QCM2290_MASTER_QUP_CORE_0, 48 + QCM2290_MASTER_CAMNOC_SF, 49 + QCM2290_MASTER_VIDEO_P0, 50 + QCM2290_MASTER_VIDEO_PROC, 51 + QCM2290_MASTER_CAMNOC_HF, 52 + QCM2290_MASTER_MDP0, 53 + 54 + QCM2290_SLAVE_EBI1, 55 + QCM2290_SLAVE_BIMC_SNOC, 56 + QCM2290_SLAVE_BIMC_CFG, 57 + QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG, 58 + QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG, 59 + QCM2290_SLAVE_CAMERA_CFG, 60 + QCM2290_SLAVE_CLK_CTL, 61 + QCM2290_SLAVE_CRYPTO_0_CFG, 62 + QCM2290_SLAVE_DISPLAY_CFG, 63 + QCM2290_SLAVE_DISPLAY_THROTTLE_CFG, 64 + QCM2290_SLAVE_GPU_CFG, 65 + QCM2290_SLAVE_HWKM, 66 + QCM2290_SLAVE_IMEM_CFG, 67 + QCM2290_SLAVE_IPA_CFG, 68 + QCM2290_SLAVE_LPASS, 69 + QCM2290_SLAVE_MESSAGE_RAM, 70 + QCM2290_SLAVE_PDM, 71 + QCM2290_SLAVE_PIMEM_CFG, 72 + QCM2290_SLAVE_PKA_WRAPPER, 73 + QCM2290_SLAVE_PMIC_ARB, 74 + QCM2290_SLAVE_PRNG, 75 + QCM2290_SLAVE_QDSS_CFG, 76 + QCM2290_SLAVE_QM_CFG, 77 + QCM2290_SLAVE_QM_MPU_CFG, 78 + QCM2290_SLAVE_QPIC, 79 + QCM2290_SLAVE_QUP_0, 80 + QCM2290_SLAVE_SDCC_1, 81 + QCM2290_SLAVE_SDCC_2, 82 + QCM2290_SLAVE_SNOC_CFG, 83 + QCM2290_SLAVE_TCSR, 84 + QCM2290_SLAVE_USB3, 85 + QCM2290_SLAVE_VENUS_CFG, 86 + QCM2290_SLAVE_VENUS_THROTTLE_CFG, 87 + QCM2290_SLAVE_VSENSE_CTRL_CFG, 88 + QCM2290_SLAVE_SERVICE_CNOC, 89 + QCM2290_SLAVE_APPSS, 90 + QCM2290_SLAVE_SNOC_CNOC, 91 + QCM2290_SLAVE_IMEM, 92 + QCM2290_SLAVE_PIMEM, 93 + QCM2290_SLAVE_SNOC_BIMC, 94 + QCM2290_SLAVE_SERVICE_SNOC, 95 + QCM2290_SLAVE_QDSS_STM, 96 + QCM2290_SLAVE_TCU, 97 + QCM2290_SLAVE_ANOC_SNOC, 98 + QCM2290_SLAVE_QUP_CORE_0, 99 + QCM2290_SLAVE_SNOC_BIMC_NRT, 100 + QCM2290_SLAVE_SNOC_BIMC_RT, 101 + }; 102 + 103 + /* Master nodes */ 104 + static const u16 mas_appss_proc_links[] = { 105 + QCM2290_SLAVE_EBI1, 106 + QCM2290_SLAVE_BIMC_SNOC, 107 + }; 108 + 109 + static struct qcom_icc_node mas_appss_proc = { 110 + .id = QCM2290_MASTER_APPSS_PROC, 111 + .name = "mas_apps_proc", 112 + .buswidth = 16, 113 + .qos.ap_owned = true, 114 + .qos.qos_port = 0, 115 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 116 + .qos.prio_level = 0, 117 + .qos.areq_prio = 0, 118 + .mas_rpm_id = 0, 119 + .slv_rpm_id = -1, 120 + .num_links = ARRAY_SIZE(mas_appss_proc_links), 121 + .links = mas_appss_proc_links, 122 + }; 123 + 124 + static const u16 mas_snoc_bimc_rt_links[] = { 125 + QCM2290_SLAVE_EBI1, 126 + }; 127 + 128 + static struct qcom_icc_node mas_snoc_bimc_rt = { 129 + .id = QCM2290_MASTER_SNOC_BIMC_RT, 130 + .name = "mas_snoc_bimc_rt", 131 + .buswidth = 16, 132 + .qos.ap_owned = true, 133 + .qos.qos_port = 2, 134 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 135 + .mas_rpm_id = 163, 136 + .slv_rpm_id = -1, 137 + .num_links = ARRAY_SIZE(mas_snoc_bimc_rt_links), 138 + .links = mas_snoc_bimc_rt_links, 139 + }; 140 + 141 + static const u16 mas_snoc_bimc_nrt_links[] = { 142 + QCM2290_SLAVE_EBI1, 143 + }; 144 + 145 + static struct qcom_icc_node mas_snoc_bimc_nrt = { 146 + .id = QCM2290_MASTER_SNOC_BIMC_NRT, 147 + .name = "mas_snoc_bimc_nrt", 148 + .buswidth = 16, 149 + .qos.ap_owned = true, 150 + .qos.qos_port = 2, 151 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 152 + .mas_rpm_id = 163, 153 + .slv_rpm_id = -1, 154 + .num_links = ARRAY_SIZE(mas_snoc_bimc_nrt_links), 155 + .links = mas_snoc_bimc_nrt_links, 156 + }; 157 + 158 + static const u16 mas_snoc_bimc_links[] = { 159 + QCM2290_SLAVE_EBI1, 160 + }; 161 + 162 + static struct qcom_icc_node mas_snoc_bimc = { 163 + .id = QCM2290_MASTER_SNOC_BIMC, 164 + .name = "mas_snoc_bimc", 165 + .buswidth = 16, 166 + .qos.ap_owned = true, 167 + .qos.qos_port = 2, 168 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 169 + .mas_rpm_id = 164, 170 + .slv_rpm_id = -1, 171 + .num_links = ARRAY_SIZE(mas_snoc_bimc_links), 172 + .links = mas_snoc_bimc_links, 173 + }; 174 + 175 + static const u16 mas_tcu_0_links[] = { 176 + QCM2290_SLAVE_EBI1, 177 + QCM2290_SLAVE_BIMC_SNOC, 178 + }; 179 + 180 + static struct qcom_icc_node mas_tcu_0 = { 181 + .id = QCM2290_MASTER_TCU_0, 182 + .name = "mas_tcu_0", 183 + .buswidth = 8, 184 + .qos.ap_owned = true, 185 + .qos.qos_port = 4, 186 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 187 + .qos.prio_level = 6, 188 + .qos.areq_prio = 6, 189 + .mas_rpm_id = 102, 190 + .slv_rpm_id = -1, 191 + .num_links = ARRAY_SIZE(mas_tcu_0_links), 192 + .links = mas_tcu_0_links, 193 + }; 194 + 195 + static const u16 mas_snoc_cnoc_links[] = { 196 + QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG, 197 + QCM2290_SLAVE_SDCC_2, 198 + QCM2290_SLAVE_SDCC_1, 199 + QCM2290_SLAVE_QM_CFG, 200 + QCM2290_SLAVE_BIMC_CFG, 201 + QCM2290_SLAVE_USB3, 202 + QCM2290_SLAVE_QM_MPU_CFG, 203 + QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG, 204 + QCM2290_SLAVE_QDSS_CFG, 205 + QCM2290_SLAVE_PDM, 206 + QCM2290_SLAVE_IPA_CFG, 207 + QCM2290_SLAVE_DISPLAY_THROTTLE_CFG, 208 + QCM2290_SLAVE_TCSR, 209 + QCM2290_SLAVE_MESSAGE_RAM, 210 + QCM2290_SLAVE_PMIC_ARB, 211 + QCM2290_SLAVE_LPASS, 212 + QCM2290_SLAVE_DISPLAY_CFG, 213 + QCM2290_SLAVE_VENUS_CFG, 214 + QCM2290_SLAVE_GPU_CFG, 215 + QCM2290_SLAVE_IMEM_CFG, 216 + QCM2290_SLAVE_SNOC_CFG, 217 + QCM2290_SLAVE_SERVICE_CNOC, 218 + QCM2290_SLAVE_VENUS_THROTTLE_CFG, 219 + QCM2290_SLAVE_PKA_WRAPPER, 220 + QCM2290_SLAVE_HWKM, 221 + QCM2290_SLAVE_PRNG, 222 + QCM2290_SLAVE_VSENSE_CTRL_CFG, 223 + QCM2290_SLAVE_CRYPTO_0_CFG, 224 + QCM2290_SLAVE_PIMEM_CFG, 225 + QCM2290_SLAVE_QUP_0, 226 + QCM2290_SLAVE_CAMERA_CFG, 227 + QCM2290_SLAVE_CLK_CTL, 228 + QCM2290_SLAVE_QPIC, 229 + }; 230 + 231 + static struct qcom_icc_node mas_snoc_cnoc = { 232 + .id = QCM2290_MASTER_SNOC_CNOC, 233 + .name = "mas_snoc_cnoc", 234 + .buswidth = 8, 235 + .qos.ap_owned = true, 236 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 237 + .mas_rpm_id = 52, 238 + .slv_rpm_id = -1, 239 + .num_links = ARRAY_SIZE(mas_snoc_cnoc_links), 240 + .links = mas_snoc_cnoc_links, 241 + }; 242 + 243 + static const u16 mas_qdss_dap_links[] = { 244 + QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG, 245 + QCM2290_SLAVE_SDCC_2, 246 + QCM2290_SLAVE_SDCC_1, 247 + QCM2290_SLAVE_QM_CFG, 248 + QCM2290_SLAVE_BIMC_CFG, 249 + QCM2290_SLAVE_USB3, 250 + QCM2290_SLAVE_QM_MPU_CFG, 251 + QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG, 252 + QCM2290_SLAVE_QDSS_CFG, 253 + QCM2290_SLAVE_PDM, 254 + QCM2290_SLAVE_IPA_CFG, 255 + QCM2290_SLAVE_DISPLAY_THROTTLE_CFG, 256 + QCM2290_SLAVE_TCSR, 257 + QCM2290_SLAVE_MESSAGE_RAM, 258 + QCM2290_SLAVE_PMIC_ARB, 259 + QCM2290_SLAVE_LPASS, 260 + QCM2290_SLAVE_DISPLAY_CFG, 261 + QCM2290_SLAVE_VENUS_CFG, 262 + QCM2290_SLAVE_GPU_CFG, 263 + QCM2290_SLAVE_IMEM_CFG, 264 + QCM2290_SLAVE_SNOC_CFG, 265 + QCM2290_SLAVE_SERVICE_CNOC, 266 + QCM2290_SLAVE_VENUS_THROTTLE_CFG, 267 + QCM2290_SLAVE_PKA_WRAPPER, 268 + QCM2290_SLAVE_HWKM, 269 + QCM2290_SLAVE_PRNG, 270 + QCM2290_SLAVE_VSENSE_CTRL_CFG, 271 + QCM2290_SLAVE_CRYPTO_0_CFG, 272 + QCM2290_SLAVE_PIMEM_CFG, 273 + QCM2290_SLAVE_QUP_0, 274 + QCM2290_SLAVE_CAMERA_CFG, 275 + QCM2290_SLAVE_CLK_CTL, 276 + QCM2290_SLAVE_QPIC, 277 + }; 278 + 279 + static struct qcom_icc_node mas_qdss_dap = { 280 + .id = QCM2290_MASTER_QDSS_DAP, 281 + .name = "mas_qdss_dap", 282 + .buswidth = 8, 283 + .qos.ap_owned = true, 284 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 285 + .mas_rpm_id = 49, 286 + .slv_rpm_id = -1, 287 + .num_links = ARRAY_SIZE(mas_qdss_dap_links), 288 + .links = mas_qdss_dap_links, 289 + }; 290 + 291 + static const u16 mas_crypto_core0_links[] = { 292 + QCM2290_SLAVE_ANOC_SNOC 293 + }; 294 + 295 + static struct qcom_icc_node mas_crypto_core0 = { 296 + .id = QCM2290_MASTER_CRYPTO_CORE0, 297 + .name = "mas_crypto_core0", 298 + .buswidth = 8, 299 + .qos.ap_owned = true, 300 + .qos.qos_port = 22, 301 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 302 + .qos.areq_prio = 2, 303 + .mas_rpm_id = 23, 304 + .slv_rpm_id = -1, 305 + .num_links = ARRAY_SIZE(mas_crypto_core0_links), 306 + .links = mas_crypto_core0_links, 307 + }; 308 + 309 + static const u16 mas_qup_core_0_links[] = { 310 + QCM2290_SLAVE_QUP_CORE_0, 311 + }; 312 + 313 + static struct qcom_icc_node mas_qup_core_0 = { 314 + .id = QCM2290_MASTER_QUP_CORE_0, 315 + .name = "mas_qup_core_0", 316 + .buswidth = 4, 317 + .mas_rpm_id = 170, 318 + .slv_rpm_id = -1, 319 + .num_links = ARRAY_SIZE(mas_qup_core_0_links), 320 + .links = mas_qup_core_0_links, 321 + }; 322 + 323 + static const u16 mas_camnoc_sf_links[] = { 324 + QCM2290_SLAVE_SNOC_BIMC_NRT, 325 + }; 326 + 327 + static struct qcom_icc_node mas_camnoc_sf = { 328 + .id = QCM2290_MASTER_CAMNOC_SF, 329 + .name = "mas_camnoc_sf", 330 + .buswidth = 32, 331 + .qos.ap_owned = true, 332 + .qos.qos_port = 4, 333 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 334 + .qos.areq_prio = 3, 335 + .mas_rpm_id = 172, 336 + .slv_rpm_id = -1, 337 + .num_links = ARRAY_SIZE(mas_camnoc_sf_links), 338 + .links = mas_camnoc_sf_links, 339 + }; 340 + 341 + static const u16 mas_camnoc_hf_links[] = { 342 + QCM2290_SLAVE_SNOC_BIMC_RT, 343 + }; 344 + 345 + static struct qcom_icc_node mas_camnoc_hf = { 346 + .id = QCM2290_MASTER_CAMNOC_HF, 347 + .name = "mas_camnoc_hf", 348 + .buswidth = 32, 349 + .qos.ap_owned = true, 350 + .qos.qos_port = 10, 351 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 352 + .qos.areq_prio = 3, 353 + .qos.urg_fwd_en = true, 354 + .mas_rpm_id = 173, 355 + .slv_rpm_id = -1, 356 + .num_links = ARRAY_SIZE(mas_camnoc_hf_links), 357 + .links = mas_camnoc_hf_links, 358 + }; 359 + 360 + static const u16 mas_mdp0_links[] = { 361 + QCM2290_SLAVE_SNOC_BIMC_RT, 362 + }; 363 + 364 + static struct qcom_icc_node mas_mdp0 = { 365 + .id = QCM2290_MASTER_MDP0, 366 + .name = "mas_mdp0", 367 + .buswidth = 16, 368 + .qos.ap_owned = true, 369 + .qos.qos_port = 5, 370 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 371 + .qos.areq_prio = 3, 372 + .qos.urg_fwd_en = true, 373 + .mas_rpm_id = 8, 374 + .slv_rpm_id = -1, 375 + .num_links = ARRAY_SIZE(mas_mdp0_links), 376 + .links = mas_mdp0_links, 377 + }; 378 + 379 + static const u16 mas_video_p0_links[] = { 380 + QCM2290_SLAVE_SNOC_BIMC_NRT, 381 + }; 382 + 383 + static struct qcom_icc_node mas_video_p0 = { 384 + .id = QCM2290_MASTER_VIDEO_P0, 385 + .name = "mas_video_p0", 386 + .buswidth = 16, 387 + .qos.ap_owned = true, 388 + .qos.qos_port = 9, 389 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 390 + .qos.areq_prio = 3, 391 + .qos.urg_fwd_en = true, 392 + .mas_rpm_id = 9, 393 + .slv_rpm_id = -1, 394 + .num_links = ARRAY_SIZE(mas_video_p0_links), 395 + .links = mas_video_p0_links, 396 + }; 397 + 398 + static const u16 mas_video_proc_links[] = { 399 + QCM2290_SLAVE_SNOC_BIMC_NRT, 400 + }; 401 + 402 + static struct qcom_icc_node mas_video_proc = { 403 + .id = QCM2290_MASTER_VIDEO_PROC, 404 + .name = "mas_video_proc", 405 + .buswidth = 8, 406 + .qos.ap_owned = true, 407 + .qos.qos_port = 13, 408 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 409 + .qos.areq_prio = 4, 410 + .mas_rpm_id = 168, 411 + .slv_rpm_id = -1, 412 + .num_links = ARRAY_SIZE(mas_video_proc_links), 413 + .links = mas_video_proc_links, 414 + }; 415 + 416 + static const u16 mas_snoc_cfg_links[] = { 417 + QCM2290_SLAVE_SERVICE_SNOC, 418 + }; 419 + 420 + static struct qcom_icc_node mas_snoc_cfg = { 421 + .id = QCM2290_MASTER_SNOC_CFG, 422 + .name = "mas_snoc_cfg", 423 + .buswidth = 4, 424 + .qos.ap_owned = true, 425 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 426 + .mas_rpm_id = 20, 427 + .slv_rpm_id = -1, 428 + .num_links = ARRAY_SIZE(mas_snoc_cfg_links), 429 + .links = mas_snoc_cfg_links, 430 + }; 431 + 432 + static const u16 mas_tic_links[] = { 433 + QCM2290_SLAVE_PIMEM, 434 + QCM2290_SLAVE_IMEM, 435 + QCM2290_SLAVE_APPSS, 436 + QCM2290_SLAVE_SNOC_BIMC, 437 + QCM2290_SLAVE_SNOC_CNOC, 438 + QCM2290_SLAVE_TCU, 439 + QCM2290_SLAVE_QDSS_STM, 440 + }; 441 + 442 + static struct qcom_icc_node mas_tic = { 443 + .id = QCM2290_MASTER_TIC, 444 + .name = "mas_tic", 445 + .buswidth = 4, 446 + .qos.ap_owned = true, 447 + .qos.qos_port = 8, 448 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 449 + .qos.areq_prio = 2, 450 + .mas_rpm_id = 51, 451 + .slv_rpm_id = -1, 452 + .num_links = ARRAY_SIZE(mas_tic_links), 453 + .links = mas_tic_links, 454 + }; 455 + 456 + static const u16 mas_anoc_snoc_links[] = { 457 + QCM2290_SLAVE_PIMEM, 458 + QCM2290_SLAVE_IMEM, 459 + QCM2290_SLAVE_APPSS, 460 + QCM2290_SLAVE_SNOC_BIMC, 461 + QCM2290_SLAVE_SNOC_CNOC, 462 + QCM2290_SLAVE_TCU, 463 + QCM2290_SLAVE_QDSS_STM, 464 + }; 465 + 466 + static struct qcom_icc_node mas_anoc_snoc = { 467 + .id = QCM2290_MASTER_ANOC_SNOC, 468 + .name = "mas_anoc_snoc", 469 + .buswidth = 16, 470 + .mas_rpm_id = 110, 471 + .slv_rpm_id = -1, 472 + .num_links = ARRAY_SIZE(mas_anoc_snoc_links), 473 + .links = mas_anoc_snoc_links, 474 + }; 475 + 476 + static const u16 mas_bimc_snoc_links[] = { 477 + QCM2290_SLAVE_PIMEM, 478 + QCM2290_SLAVE_IMEM, 479 + QCM2290_SLAVE_APPSS, 480 + QCM2290_SLAVE_SNOC_CNOC, 481 + QCM2290_SLAVE_TCU, 482 + QCM2290_SLAVE_QDSS_STM, 483 + }; 484 + 485 + static struct qcom_icc_node mas_bimc_snoc = { 486 + .id = QCM2290_MASTER_BIMC_SNOC, 487 + .name = "mas_bimc_snoc", 488 + .buswidth = 8, 489 + .mas_rpm_id = 21, 490 + .slv_rpm_id = -1, 491 + .num_links = ARRAY_SIZE(mas_bimc_snoc_links), 492 + .links = mas_bimc_snoc_links, 493 + }; 494 + 495 + static const u16 mas_pimem_links[] = { 496 + QCM2290_SLAVE_IMEM, 497 + QCM2290_SLAVE_SNOC_BIMC, 498 + }; 499 + 500 + static struct qcom_icc_node mas_pimem = { 501 + .id = QCM2290_MASTER_PIMEM, 502 + .name = "mas_pimem", 503 + .buswidth = 8, 504 + .qos.ap_owned = true, 505 + .qos.qos_port = 20, 506 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 507 + .qos.areq_prio = 2, 508 + .mas_rpm_id = 113, 509 + .slv_rpm_id = -1, 510 + .num_links = ARRAY_SIZE(mas_pimem_links), 511 + .links = mas_pimem_links, 512 + }; 513 + 514 + static const u16 mas_qdss_bam_links[] = { 515 + QCM2290_SLAVE_ANOC_SNOC, 516 + }; 517 + 518 + static struct qcom_icc_node mas_qdss_bam = { 519 + .id = QCM2290_MASTER_QDSS_BAM, 520 + .name = "mas_qdss_bam", 521 + .buswidth = 4, 522 + .qos.ap_owned = true, 523 + .qos.qos_port = 2, 524 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 525 + .qos.areq_prio = 2, 526 + .mas_rpm_id = 19, 527 + .slv_rpm_id = -1, 528 + .num_links = ARRAY_SIZE(mas_qdss_bam_links), 529 + .links = mas_qdss_bam_links, 530 + }; 531 + 532 + static const u16 mas_qup_0_links[] = { 533 + QCM2290_SLAVE_ANOC_SNOC, 534 + }; 535 + 536 + static struct qcom_icc_node mas_qup_0 = { 537 + .id = QCM2290_MASTER_QUP_0, 538 + .name = "mas_qup_0", 539 + .buswidth = 4, 540 + .qos.ap_owned = true, 541 + .qos.qos_port = 0, 542 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 543 + .qos.areq_prio = 2, 544 + .mas_rpm_id = 166, 545 + .slv_rpm_id = -1, 546 + .num_links = ARRAY_SIZE(mas_qup_0_links), 547 + .links = mas_qup_0_links, 548 + }; 549 + 550 + static const u16 mas_ipa_links[] = { 551 + QCM2290_SLAVE_ANOC_SNOC, 552 + }; 553 + 554 + static struct qcom_icc_node mas_ipa = { 555 + .id = QCM2290_MASTER_IPA, 556 + .name = "mas_ipa", 557 + .buswidth = 8, 558 + .qos.ap_owned = true, 559 + .qos.qos_port = 3, 560 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 561 + .qos.areq_prio = 2, 562 + .mas_rpm_id = 59, 563 + .slv_rpm_id = -1, 564 + .num_links = ARRAY_SIZE(mas_ipa_links), 565 + .links = mas_ipa_links, 566 + }; 567 + 568 + static const u16 mas_qdss_etr_links[] = { 569 + QCM2290_SLAVE_ANOC_SNOC, 570 + }; 571 + 572 + static struct qcom_icc_node mas_qdss_etr = { 573 + .id = QCM2290_MASTER_QDSS_ETR, 574 + .name = "mas_qdss_etr", 575 + .buswidth = 8, 576 + .qos.ap_owned = true, 577 + .qos.qos_port = 12, 578 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 579 + .qos.areq_prio = 2, 580 + .mas_rpm_id = 31, 581 + .slv_rpm_id = -1, 582 + .num_links = ARRAY_SIZE(mas_qdss_etr_links), 583 + .links = mas_qdss_etr_links, 584 + }; 585 + 586 + static const u16 mas_sdcc_1_links[] = { 587 + QCM2290_SLAVE_ANOC_SNOC, 588 + }; 589 + 590 + static struct qcom_icc_node mas_sdcc_1 = { 591 + .id = QCM2290_MASTER_SDCC_1, 592 + .name = "mas_sdcc_1", 593 + .buswidth = 8, 594 + .qos.ap_owned = true, 595 + .qos.qos_port = 17, 596 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 597 + .qos.areq_prio = 2, 598 + .mas_rpm_id = 33, 599 + .slv_rpm_id = -1, 600 + .num_links = ARRAY_SIZE(mas_sdcc_1_links), 601 + .links = mas_sdcc_1_links, 602 + }; 603 + 604 + static const u16 mas_sdcc_2_links[] = { 605 + QCM2290_SLAVE_ANOC_SNOC, 606 + }; 607 + 608 + static struct qcom_icc_node mas_sdcc_2 = { 609 + .id = QCM2290_MASTER_SDCC_2, 610 + .name = "mas_sdcc_2", 611 + .buswidth = 8, 612 + .qos.ap_owned = true, 613 + .qos.qos_port = 23, 614 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 615 + .qos.areq_prio = 2, 616 + .mas_rpm_id = 35, 617 + .slv_rpm_id = -1, 618 + .num_links = ARRAY_SIZE(mas_sdcc_2_links), 619 + .links = mas_sdcc_2_links, 620 + }; 621 + 622 + static const u16 mas_qpic_links[] = { 623 + QCM2290_SLAVE_ANOC_SNOC, 624 + }; 625 + 626 + static struct qcom_icc_node mas_qpic = { 627 + .id = QCM2290_MASTER_QPIC, 628 + .name = "mas_qpic", 629 + .buswidth = 4, 630 + .qos.ap_owned = true, 631 + .qos.qos_port = 1, 632 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 633 + .qos.areq_prio = 2, 634 + .mas_rpm_id = 58, 635 + .slv_rpm_id = -1, 636 + .num_links = ARRAY_SIZE(mas_qpic_links), 637 + .links = mas_qpic_links, 638 + }; 639 + 640 + static const u16 mas_usb3_0_links[] = { 641 + QCM2290_SLAVE_ANOC_SNOC, 642 + }; 643 + 644 + static struct qcom_icc_node mas_usb3_0 = { 645 + .id = QCM2290_MASTER_USB3_0, 646 + .name = "mas_usb3_0", 647 + .buswidth = 8, 648 + .qos.ap_owned = true, 649 + .qos.qos_port = 24, 650 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 651 + .qos.areq_prio = 2, 652 + .mas_rpm_id = 32, 653 + .slv_rpm_id = -1, 654 + .num_links = ARRAY_SIZE(mas_usb3_0_links), 655 + .links = mas_usb3_0_links, 656 + }; 657 + 658 + static const u16 mas_gfx3d_links[] = { 659 + QCM2290_SLAVE_EBI1, 660 + }; 661 + 662 + static struct qcom_icc_node mas_gfx3d = { 663 + .id = QCM2290_MASTER_GFX3D, 664 + .name = "mas_gfx3d", 665 + .buswidth = 32, 666 + .qos.ap_owned = true, 667 + .qos.qos_port = 1, 668 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 669 + .qos.prio_level = 0, 670 + .qos.areq_prio = 0, 671 + .mas_rpm_id = 6, 672 + .slv_rpm_id = -1, 673 + .num_links = ARRAY_SIZE(mas_gfx3d_links), 674 + .links = mas_gfx3d_links, 675 + }; 676 + 677 + /* Slave nodes */ 678 + static struct qcom_icc_node slv_ebi1 = { 679 + .name = "slv_ebi1", 680 + .id = QCM2290_SLAVE_EBI1, 681 + .buswidth = 8, 682 + .mas_rpm_id = -1, 683 + .slv_rpm_id = 0, 684 + }; 685 + 686 + static const u16 slv_bimc_snoc_links[] = { 687 + QCM2290_MASTER_BIMC_SNOC, 688 + }; 689 + 690 + static struct qcom_icc_node slv_bimc_snoc = { 691 + .name = "slv_bimc_snoc", 692 + .id = QCM2290_SLAVE_BIMC_SNOC, 693 + .buswidth = 8, 694 + .mas_rpm_id = -1, 695 + .slv_rpm_id = 2, 696 + .num_links = ARRAY_SIZE(slv_bimc_snoc_links), 697 + .links = slv_bimc_snoc_links, 698 + }; 699 + 700 + static struct qcom_icc_node slv_bimc_cfg = { 701 + .name = "slv_bimc_cfg", 702 + .id = QCM2290_SLAVE_BIMC_CFG, 703 + .buswidth = 4, 704 + .qos.ap_owned = true, 705 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 706 + .mas_rpm_id = -1, 707 + .slv_rpm_id = 56, 708 + }; 709 + 710 + static struct qcom_icc_node slv_camera_nrt_throttle_cfg = { 711 + .name = "slv_camera_nrt_throttle_cfg", 712 + .id = QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG, 713 + .buswidth = 4, 714 + .qos.ap_owned = true, 715 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 716 + .mas_rpm_id = -1, 717 + .slv_rpm_id = 271, 718 + }; 719 + 720 + static struct qcom_icc_node slv_camera_rt_throttle_cfg = { 721 + .name = "slv_camera_rt_throttle_cfg", 722 + .id = QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG, 723 + .buswidth = 4, 724 + .qos.ap_owned = true, 725 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 726 + .mas_rpm_id = -1, 727 + .slv_rpm_id = 279, 728 + }; 729 + 730 + static struct qcom_icc_node slv_camera_cfg = { 731 + .name = "slv_camera_cfg", 732 + .id = QCM2290_SLAVE_CAMERA_CFG, 733 + .buswidth = 4, 734 + .qos.ap_owned = true, 735 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 736 + .mas_rpm_id = -1, 737 + .slv_rpm_id = 3, 738 + }; 739 + 740 + static struct qcom_icc_node slv_clk_ctl = { 741 + .name = "slv_clk_ctl", 742 + .id = QCM2290_SLAVE_CLK_CTL, 743 + .buswidth = 4, 744 + .qos.ap_owned = true, 745 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 746 + .mas_rpm_id = -1, 747 + .slv_rpm_id = 47, 748 + }; 749 + 750 + static struct qcom_icc_node slv_crypto_0_cfg = { 751 + .name = "slv_crypto_0_cfg", 752 + .id = QCM2290_SLAVE_CRYPTO_0_CFG, 753 + .buswidth = 4, 754 + .qos.ap_owned = true, 755 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 756 + .mas_rpm_id = -1, 757 + .slv_rpm_id = 52, 758 + }; 759 + 760 + static struct qcom_icc_node slv_display_cfg = { 761 + .name = "slv_display_cfg", 762 + .id = QCM2290_SLAVE_DISPLAY_CFG, 763 + .buswidth = 4, 764 + .qos.ap_owned = true, 765 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 766 + .mas_rpm_id = -1, 767 + .slv_rpm_id = 4, 768 + }; 769 + 770 + static struct qcom_icc_node slv_display_throttle_cfg = { 771 + .name = "slv_display_throttle_cfg", 772 + .id = QCM2290_SLAVE_DISPLAY_THROTTLE_CFG, 773 + .buswidth = 4, 774 + .qos.ap_owned = true, 775 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 776 + .mas_rpm_id = -1, 777 + .slv_rpm_id = 156, 778 + }; 779 + 780 + static struct qcom_icc_node slv_gpu_cfg = { 781 + .name = "slv_gpu_cfg", 782 + .id = QCM2290_SLAVE_GPU_CFG, 783 + .buswidth = 8, 784 + .qos.ap_owned = true, 785 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 786 + .mas_rpm_id = -1, 787 + .slv_rpm_id = 275, 788 + }; 789 + 790 + static struct qcom_icc_node slv_hwkm = { 791 + .name = "slv_hwkm", 792 + .id = QCM2290_SLAVE_HWKM, 793 + .buswidth = 4, 794 + .qos.ap_owned = true, 795 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 796 + .mas_rpm_id = -1, 797 + .slv_rpm_id = 280, 798 + }; 799 + 800 + static struct qcom_icc_node slv_imem_cfg = { 801 + .name = "slv_imem_cfg", 802 + .id = QCM2290_SLAVE_IMEM_CFG, 803 + .buswidth = 4, 804 + .qos.ap_owned = true, 805 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 806 + .mas_rpm_id = -1, 807 + .slv_rpm_id = 54, 808 + }; 809 + 810 + static struct qcom_icc_node slv_ipa_cfg = { 811 + .name = "slv_ipa_cfg", 812 + .id = QCM2290_SLAVE_IPA_CFG, 813 + .buswidth = 4, 814 + .qos.ap_owned = true, 815 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 816 + .mas_rpm_id = -1, 817 + .slv_rpm_id = 183, 818 + }; 819 + 820 + static struct qcom_icc_node slv_lpass = { 821 + .name = "slv_lpass", 822 + .id = QCM2290_SLAVE_LPASS, 823 + .buswidth = 4, 824 + .qos.ap_owned = true, 825 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 826 + .mas_rpm_id = -1, 827 + .slv_rpm_id = 21, 828 + }; 829 + 830 + static struct qcom_icc_node slv_message_ram = { 831 + .name = "slv_message_ram", 832 + .id = QCM2290_SLAVE_MESSAGE_RAM, 833 + .buswidth = 4, 834 + .qos.ap_owned = true, 835 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 836 + .mas_rpm_id = -1, 837 + .slv_rpm_id = 55, 838 + }; 839 + 840 + static struct qcom_icc_node slv_pdm = { 841 + .name = "slv_pdm", 842 + .id = QCM2290_SLAVE_PDM, 843 + .buswidth = 4, 844 + .qos.ap_owned = true, 845 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 846 + .mas_rpm_id = -1, 847 + .slv_rpm_id = 41, 848 + }; 849 + 850 + static struct qcom_icc_node slv_pimem_cfg = { 851 + .name = "slv_pimem_cfg", 852 + .id = QCM2290_SLAVE_PIMEM_CFG, 853 + .buswidth = 4, 854 + .qos.ap_owned = true, 855 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 856 + .mas_rpm_id = -1, 857 + .slv_rpm_id = 167, 858 + }; 859 + 860 + static struct qcom_icc_node slv_pka_wrapper = { 861 + .name = "slv_pka_wrapper", 862 + .id = QCM2290_SLAVE_PKA_WRAPPER, 863 + .buswidth = 4, 864 + .qos.ap_owned = true, 865 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 866 + .mas_rpm_id = -1, 867 + .slv_rpm_id = 281, 868 + }; 869 + 870 + static struct qcom_icc_node slv_pmic_arb = { 871 + .name = "slv_pmic_arb", 872 + .id = QCM2290_SLAVE_PMIC_ARB, 873 + .buswidth = 4, 874 + .qos.ap_owned = true, 875 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 876 + .mas_rpm_id = -1, 877 + .slv_rpm_id = 59, 878 + }; 879 + 880 + static struct qcom_icc_node slv_prng = { 881 + .name = "slv_prng", 882 + .id = QCM2290_SLAVE_PRNG, 883 + .buswidth = 4, 884 + .qos.ap_owned = true, 885 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 886 + .mas_rpm_id = -1, 887 + .slv_rpm_id = 44, 888 + }; 889 + 890 + static struct qcom_icc_node slv_qdss_cfg = { 891 + .name = "slv_qdss_cfg", 892 + .id = QCM2290_SLAVE_QDSS_CFG, 893 + .buswidth = 4, 894 + .qos.ap_owned = true, 895 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 896 + .mas_rpm_id = -1, 897 + .slv_rpm_id = 63, 898 + }; 899 + 900 + static struct qcom_icc_node slv_qm_cfg = { 901 + .name = "slv_qm_cfg", 902 + .id = QCM2290_SLAVE_QM_CFG, 903 + .buswidth = 4, 904 + .qos.ap_owned = true, 905 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 906 + .mas_rpm_id = -1, 907 + .slv_rpm_id = 212, 908 + }; 909 + 910 + static struct qcom_icc_node slv_qm_mpu_cfg = { 911 + .name = "slv_qm_mpu_cfg", 912 + .id = QCM2290_SLAVE_QM_MPU_CFG, 913 + .buswidth = 4, 914 + .qos.ap_owned = true, 915 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 916 + .mas_rpm_id = -1, 917 + .slv_rpm_id = 231, 918 + }; 919 + 920 + static struct qcom_icc_node slv_qpic = { 921 + .name = "slv_qpic", 922 + .id = QCM2290_SLAVE_QPIC, 923 + .buswidth = 4, 924 + .qos.ap_owned = true, 925 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 926 + .mas_rpm_id = -1, 927 + .slv_rpm_id = 80, 928 + }; 929 + 930 + static struct qcom_icc_node slv_qup_0 = { 931 + .name = "slv_qup_0", 932 + .id = QCM2290_SLAVE_QUP_0, 933 + .buswidth = 4, 934 + .qos.ap_owned = true, 935 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 936 + .mas_rpm_id = -1, 937 + .slv_rpm_id = 261, 938 + }; 939 + 940 + static struct qcom_icc_node slv_sdcc_1 = { 941 + .name = "slv_sdcc_1", 942 + .id = QCM2290_SLAVE_SDCC_1, 943 + .buswidth = 4, 944 + .qos.ap_owned = true, 945 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 946 + .mas_rpm_id = -1, 947 + .slv_rpm_id = 31, 948 + }; 949 + 950 + static struct qcom_icc_node slv_sdcc_2 = { 951 + .name = "slv_sdcc_2", 952 + .id = QCM2290_SLAVE_SDCC_2, 953 + .buswidth = 4, 954 + .qos.ap_owned = true, 955 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 956 + .mas_rpm_id = -1, 957 + .slv_rpm_id = 33, 958 + }; 959 + 960 + static const u16 slv_snoc_cfg_links[] = { 961 + QCM2290_MASTER_SNOC_CFG, 962 + }; 963 + 964 + static struct qcom_icc_node slv_snoc_cfg = { 965 + .name = "slv_snoc_cfg", 966 + .id = QCM2290_SLAVE_SNOC_CFG, 967 + .buswidth = 4, 968 + .qos.ap_owned = true, 969 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 970 + .mas_rpm_id = -1, 971 + .slv_rpm_id = 70, 972 + .num_links = ARRAY_SIZE(slv_snoc_cfg_links), 973 + .links = slv_snoc_cfg_links, 974 + }; 975 + 976 + static struct qcom_icc_node slv_tcsr = { 977 + .name = "slv_tcsr", 978 + .id = QCM2290_SLAVE_TCSR, 979 + .buswidth = 4, 980 + .qos.ap_owned = true, 981 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 982 + .mas_rpm_id = -1, 983 + .slv_rpm_id = 50, 984 + }; 985 + 986 + static struct qcom_icc_node slv_usb3 = { 987 + .name = "slv_usb3", 988 + .id = QCM2290_SLAVE_USB3, 989 + .buswidth = 4, 990 + .qos.ap_owned = true, 991 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 992 + .mas_rpm_id = -1, 993 + .slv_rpm_id = 22, 994 + }; 995 + 996 + static struct qcom_icc_node slv_venus_cfg = { 997 + .name = "slv_venus_cfg", 998 + .id = QCM2290_SLAVE_VENUS_CFG, 999 + .buswidth = 4, 1000 + .qos.ap_owned = true, 1001 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1002 + .mas_rpm_id = -1, 1003 + .slv_rpm_id = 10, 1004 + }; 1005 + 1006 + static struct qcom_icc_node slv_venus_throttle_cfg = { 1007 + .name = "slv_venus_throttle_cfg", 1008 + .id = QCM2290_SLAVE_VENUS_THROTTLE_CFG, 1009 + .buswidth = 4, 1010 + .qos.ap_owned = true, 1011 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1012 + .mas_rpm_id = -1, 1013 + .slv_rpm_id = 178, 1014 + }; 1015 + 1016 + static struct qcom_icc_node slv_vsense_ctrl_cfg = { 1017 + .name = "slv_vsense_ctrl_cfg", 1018 + .id = QCM2290_SLAVE_VSENSE_CTRL_CFG, 1019 + .buswidth = 4, 1020 + .qos.ap_owned = true, 1021 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1022 + .mas_rpm_id = -1, 1023 + .slv_rpm_id = 263, 1024 + }; 1025 + 1026 + static struct qcom_icc_node slv_service_cnoc = { 1027 + .name = "slv_service_cnoc", 1028 + .id = QCM2290_SLAVE_SERVICE_CNOC, 1029 + .buswidth = 4, 1030 + .qos.ap_owned = true, 1031 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1032 + .mas_rpm_id = -1, 1033 + .slv_rpm_id = 76, 1034 + }; 1035 + 1036 + static struct qcom_icc_node slv_qup_core_0 = { 1037 + .name = "slv_qup_core_0", 1038 + .id = QCM2290_SLAVE_QUP_CORE_0, 1039 + .buswidth = 4, 1040 + .qos.ap_owned = true, 1041 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1042 + .mas_rpm_id = -1, 1043 + .slv_rpm_id = 264, 1044 + }; 1045 + 1046 + static const u16 slv_snoc_bimc_nrt_links[] = { 1047 + QCM2290_MASTER_SNOC_BIMC_NRT, 1048 + }; 1049 + 1050 + static struct qcom_icc_node slv_snoc_bimc_nrt = { 1051 + .name = "slv_snoc_bimc_nrt", 1052 + .id = QCM2290_SLAVE_SNOC_BIMC_NRT, 1053 + .buswidth = 16, 1054 + .qos.ap_owned = true, 1055 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1056 + .mas_rpm_id = -1, 1057 + .slv_rpm_id = 259, 1058 + .num_links = ARRAY_SIZE(slv_snoc_bimc_nrt_links), 1059 + .links = slv_snoc_bimc_nrt_links, 1060 + }; 1061 + 1062 + static const u16 slv_snoc_bimc_rt_links[] = { 1063 + QCM2290_MASTER_SNOC_BIMC_RT, 1064 + }; 1065 + 1066 + static struct qcom_icc_node slv_snoc_bimc_rt = { 1067 + .name = "slv_snoc_bimc_rt", 1068 + .id = QCM2290_SLAVE_SNOC_BIMC_RT, 1069 + .buswidth = 16, 1070 + .qos.ap_owned = true, 1071 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1072 + .mas_rpm_id = -1, 1073 + .slv_rpm_id = 260, 1074 + .num_links = ARRAY_SIZE(slv_snoc_bimc_rt_links), 1075 + .links = slv_snoc_bimc_rt_links, 1076 + }; 1077 + 1078 + static struct qcom_icc_node slv_appss = { 1079 + .name = "slv_appss", 1080 + .id = QCM2290_SLAVE_APPSS, 1081 + .buswidth = 8, 1082 + .qos.ap_owned = true, 1083 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1084 + .mas_rpm_id = -1, 1085 + .slv_rpm_id = 20, 1086 + }; 1087 + 1088 + static const u16 slv_snoc_cnoc_links[] = { 1089 + QCM2290_MASTER_SNOC_CNOC, 1090 + }; 1091 + 1092 + static struct qcom_icc_node slv_snoc_cnoc = { 1093 + .name = "slv_snoc_cnoc", 1094 + .id = QCM2290_SLAVE_SNOC_CNOC, 1095 + .buswidth = 8, 1096 + .mas_rpm_id = -1, 1097 + .slv_rpm_id = 25, 1098 + .num_links = ARRAY_SIZE(slv_snoc_cnoc_links), 1099 + .links = slv_snoc_cnoc_links, 1100 + }; 1101 + 1102 + static struct qcom_icc_node slv_imem = { 1103 + .name = "slv_imem", 1104 + .id = QCM2290_SLAVE_IMEM, 1105 + .buswidth = 8, 1106 + .mas_rpm_id = -1, 1107 + .slv_rpm_id = 26, 1108 + }; 1109 + 1110 + static struct qcom_icc_node slv_pimem = { 1111 + .name = "slv_pimem", 1112 + .id = QCM2290_SLAVE_PIMEM, 1113 + .buswidth = 8, 1114 + .qos.ap_owned = true, 1115 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1116 + .mas_rpm_id = -1, 1117 + .slv_rpm_id = 166, 1118 + }; 1119 + 1120 + static const u16 slv_snoc_bimc_links[] = { 1121 + QCM2290_MASTER_SNOC_BIMC, 1122 + }; 1123 + 1124 + static struct qcom_icc_node slv_snoc_bimc = { 1125 + .name = "slv_snoc_bimc", 1126 + .id = QCM2290_SLAVE_SNOC_BIMC, 1127 + .buswidth = 16, 1128 + .mas_rpm_id = -1, 1129 + .slv_rpm_id = 24, 1130 + .num_links = ARRAY_SIZE(slv_snoc_bimc_links), 1131 + .links = slv_snoc_bimc_links, 1132 + }; 1133 + 1134 + static struct qcom_icc_node slv_service_snoc = { 1135 + .name = "slv_service_snoc", 1136 + .id = QCM2290_SLAVE_SERVICE_SNOC, 1137 + .buswidth = 4, 1138 + .qos.ap_owned = true, 1139 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1140 + .mas_rpm_id = -1, 1141 + .slv_rpm_id = 29, 1142 + }; 1143 + 1144 + static struct qcom_icc_node slv_qdss_stm = { 1145 + .name = "slv_qdss_stm", 1146 + .id = QCM2290_SLAVE_QDSS_STM, 1147 + .buswidth = 4, 1148 + .mas_rpm_id = -1, 1149 + .slv_rpm_id = 30, 1150 + }; 1151 + 1152 + static struct qcom_icc_node slv_tcu = { 1153 + .name = "slv_tcu", 1154 + .id = QCM2290_SLAVE_TCU, 1155 + .buswidth = 8, 1156 + .qos.ap_owned = true, 1157 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1158 + .mas_rpm_id = -1, 1159 + .slv_rpm_id = 133, 1160 + }; 1161 + 1162 + static const u16 slv_anoc_snoc_links[] = { 1163 + QCM2290_MASTER_ANOC_SNOC, 1164 + }; 1165 + 1166 + static struct qcom_icc_node slv_anoc_snoc = { 1167 + .name = "slv_anoc_snoc", 1168 + .id = QCM2290_SLAVE_ANOC_SNOC, 1169 + .buswidth = 16, 1170 + .mas_rpm_id = -1, 1171 + .slv_rpm_id = 141, 1172 + .num_links = ARRAY_SIZE(slv_anoc_snoc_links), 1173 + .links = slv_anoc_snoc_links, 1174 + }; 1175 + 1176 + /* NoC descriptors */ 1177 + static struct qcom_icc_node *qcm2290_bimc_nodes[] = { 1178 + [MASTER_APPSS_PROC] = &mas_appss_proc, 1179 + [MASTER_SNOC_BIMC_RT] = &mas_snoc_bimc_rt, 1180 + [MASTER_SNOC_BIMC_NRT] = &mas_snoc_bimc_nrt, 1181 + [MASTER_SNOC_BIMC] = &mas_snoc_bimc, 1182 + [MASTER_TCU_0] = &mas_tcu_0, 1183 + [MASTER_GFX3D] = &mas_gfx3d, 1184 + [SLAVE_EBI1] = &slv_ebi1, 1185 + [SLAVE_BIMC_SNOC] = &slv_bimc_snoc, 1186 + }; 1187 + 1188 + static const struct regmap_config qcm2290_bimc_regmap_config = { 1189 + .reg_bits = 32, 1190 + .reg_stride = 4, 1191 + .val_bits = 32, 1192 + .max_register = 0x80000, 1193 + .fast_io = true, 1194 + }; 1195 + 1196 + static struct qcom_icc_desc qcm2290_bimc = { 1197 + .type = QCOM_ICC_BIMC, 1198 + .nodes = qcm2290_bimc_nodes, 1199 + .num_nodes = ARRAY_SIZE(qcm2290_bimc_nodes), 1200 + .regmap_cfg = &qcm2290_bimc_regmap_config, 1201 + /* M_REG_BASE() in vendor msm_bus_bimc_adhoc driver */ 1202 + .qos_offset = 0x8000, 1203 + }; 1204 + 1205 + static struct qcom_icc_node *qcm2290_cnoc_nodes[] = { 1206 + [MASTER_SNOC_CNOC] = &mas_snoc_cnoc, 1207 + [MASTER_QDSS_DAP] = &mas_qdss_dap, 1208 + [SLAVE_BIMC_CFG] = &slv_bimc_cfg, 1209 + [SLAVE_CAMERA_NRT_THROTTLE_CFG] = &slv_camera_nrt_throttle_cfg, 1210 + [SLAVE_CAMERA_RT_THROTTLE_CFG] = &slv_camera_rt_throttle_cfg, 1211 + [SLAVE_CAMERA_CFG] = &slv_camera_cfg, 1212 + [SLAVE_CLK_CTL] = &slv_clk_ctl, 1213 + [SLAVE_CRYPTO_0_CFG] = &slv_crypto_0_cfg, 1214 + [SLAVE_DISPLAY_CFG] = &slv_display_cfg, 1215 + [SLAVE_DISPLAY_THROTTLE_CFG] = &slv_display_throttle_cfg, 1216 + [SLAVE_GPU_CFG] = &slv_gpu_cfg, 1217 + [SLAVE_HWKM] = &slv_hwkm, 1218 + [SLAVE_IMEM_CFG] = &slv_imem_cfg, 1219 + [SLAVE_IPA_CFG] = &slv_ipa_cfg, 1220 + [SLAVE_LPASS] = &slv_lpass, 1221 + [SLAVE_MESSAGE_RAM] = &slv_message_ram, 1222 + [SLAVE_PDM] = &slv_pdm, 1223 + [SLAVE_PIMEM_CFG] = &slv_pimem_cfg, 1224 + [SLAVE_PKA_WRAPPER] = &slv_pka_wrapper, 1225 + [SLAVE_PMIC_ARB] = &slv_pmic_arb, 1226 + [SLAVE_PRNG] = &slv_prng, 1227 + [SLAVE_QDSS_CFG] = &slv_qdss_cfg, 1228 + [SLAVE_QM_CFG] = &slv_qm_cfg, 1229 + [SLAVE_QM_MPU_CFG] = &slv_qm_mpu_cfg, 1230 + [SLAVE_QPIC] = &slv_qpic, 1231 + [SLAVE_QUP_0] = &slv_qup_0, 1232 + [SLAVE_SDCC_1] = &slv_sdcc_1, 1233 + [SLAVE_SDCC_2] = &slv_sdcc_2, 1234 + [SLAVE_SNOC_CFG] = &slv_snoc_cfg, 1235 + [SLAVE_TCSR] = &slv_tcsr, 1236 + [SLAVE_USB3] = &slv_usb3, 1237 + [SLAVE_VENUS_CFG] = &slv_venus_cfg, 1238 + [SLAVE_VENUS_THROTTLE_CFG] = &slv_venus_throttle_cfg, 1239 + [SLAVE_VSENSE_CTRL_CFG] = &slv_vsense_ctrl_cfg, 1240 + [SLAVE_SERVICE_CNOC] = &slv_service_cnoc, 1241 + }; 1242 + 1243 + static const struct regmap_config qcm2290_cnoc_regmap_config = { 1244 + .reg_bits = 32, 1245 + .reg_stride = 4, 1246 + .val_bits = 32, 1247 + .max_register = 0x8200, 1248 + .fast_io = true, 1249 + }; 1250 + 1251 + static struct qcom_icc_desc qcm2290_cnoc = { 1252 + .type = QCOM_ICC_NOC, 1253 + .nodes = qcm2290_cnoc_nodes, 1254 + .num_nodes = ARRAY_SIZE(qcm2290_cnoc_nodes), 1255 + .regmap_cfg = &qcm2290_cnoc_regmap_config, 1256 + }; 1257 + 1258 + static struct qcom_icc_node *qcm2290_snoc_nodes[] = { 1259 + [MASTER_CRYPTO_CORE0] = &mas_crypto_core0, 1260 + [MASTER_SNOC_CFG] = &mas_snoc_cfg, 1261 + [MASTER_TIC] = &mas_tic, 1262 + [MASTER_ANOC_SNOC] = &mas_anoc_snoc, 1263 + [MASTER_BIMC_SNOC] = &mas_bimc_snoc, 1264 + [MASTER_PIMEM] = &mas_pimem, 1265 + [MASTER_QDSS_BAM] = &mas_qdss_bam, 1266 + [MASTER_QUP_0] = &mas_qup_0, 1267 + [MASTER_IPA] = &mas_ipa, 1268 + [MASTER_QDSS_ETR] = &mas_qdss_etr, 1269 + [MASTER_SDCC_1] = &mas_sdcc_1, 1270 + [MASTER_SDCC_2] = &mas_sdcc_2, 1271 + [MASTER_QPIC] = &mas_qpic, 1272 + [MASTER_USB3_0] = &mas_usb3_0, 1273 + [SLAVE_APPSS] = &slv_appss, 1274 + [SLAVE_SNOC_CNOC] = &slv_snoc_cnoc, 1275 + [SLAVE_IMEM] = &slv_imem, 1276 + [SLAVE_PIMEM] = &slv_pimem, 1277 + [SLAVE_SNOC_BIMC] = &slv_snoc_bimc, 1278 + [SLAVE_SERVICE_SNOC] = &slv_service_snoc, 1279 + [SLAVE_QDSS_STM] = &slv_qdss_stm, 1280 + [SLAVE_TCU] = &slv_tcu, 1281 + [SLAVE_ANOC_SNOC] = &slv_anoc_snoc, 1282 + }; 1283 + 1284 + static const struct regmap_config qcm2290_snoc_regmap_config = { 1285 + .reg_bits = 32, 1286 + .reg_stride = 4, 1287 + .val_bits = 32, 1288 + .max_register = 0x60200, 1289 + .fast_io = true, 1290 + }; 1291 + 1292 + static struct qcom_icc_desc qcm2290_snoc = { 1293 + .type = QCOM_ICC_QNOC, 1294 + .nodes = qcm2290_snoc_nodes, 1295 + .num_nodes = ARRAY_SIZE(qcm2290_snoc_nodes), 1296 + .regmap_cfg = &qcm2290_snoc_regmap_config, 1297 + /* Vendor DT node fab-sys_noc property 'qcom,base-offset' */ 1298 + .qos_offset = 0x15000, 1299 + }; 1300 + 1301 + static struct qcom_icc_node *qcm2290_qup_virt_nodes[] = { 1302 + [MASTER_QUP_CORE_0] = &mas_qup_core_0, 1303 + [SLAVE_QUP_CORE_0] = &slv_qup_core_0 1304 + }; 1305 + 1306 + static struct qcom_icc_desc qcm2290_qup_virt = { 1307 + .type = QCOM_ICC_QNOC, 1308 + .nodes = qcm2290_qup_virt_nodes, 1309 + .num_nodes = ARRAY_SIZE(qcm2290_qup_virt_nodes), 1310 + }; 1311 + 1312 + static struct qcom_icc_node *qcm2290_mmnrt_virt_nodes[] = { 1313 + [MASTER_CAMNOC_SF] = &mas_camnoc_sf, 1314 + [MASTER_VIDEO_P0] = &mas_video_p0, 1315 + [MASTER_VIDEO_PROC] = &mas_video_proc, 1316 + [SLAVE_SNOC_BIMC_NRT] = &slv_snoc_bimc_nrt, 1317 + }; 1318 + 1319 + static struct qcom_icc_desc qcm2290_mmnrt_virt = { 1320 + .type = QCOM_ICC_QNOC, 1321 + .nodes = qcm2290_mmnrt_virt_nodes, 1322 + .num_nodes = ARRAY_SIZE(qcm2290_mmnrt_virt_nodes), 1323 + .regmap_cfg = &qcm2290_snoc_regmap_config, 1324 + .qos_offset = 0x15000, 1325 + }; 1326 + 1327 + static struct qcom_icc_node *qcm2290_mmrt_virt_nodes[] = { 1328 + [MASTER_CAMNOC_HF] = &mas_camnoc_hf, 1329 + [MASTER_MDP0] = &mas_mdp0, 1330 + [SLAVE_SNOC_BIMC_RT] = &slv_snoc_bimc_rt, 1331 + }; 1332 + 1333 + static struct qcom_icc_desc qcm2290_mmrt_virt = { 1334 + .type = QCOM_ICC_QNOC, 1335 + .nodes = qcm2290_mmrt_virt_nodes, 1336 + .num_nodes = ARRAY_SIZE(qcm2290_mmrt_virt_nodes), 1337 + .regmap_cfg = &qcm2290_snoc_regmap_config, 1338 + .qos_offset = 0x15000, 1339 + }; 1340 + 1341 + static const struct of_device_id qcm2290_noc_of_match[] = { 1342 + { .compatible = "qcom,qcm2290-bimc", .data = &qcm2290_bimc }, 1343 + { .compatible = "qcom,qcm2290-cnoc", .data = &qcm2290_cnoc }, 1344 + { .compatible = "qcom,qcm2290-snoc", .data = &qcm2290_snoc }, 1345 + { .compatible = "qcom,qcm2290-qup-virt", .data = &qcm2290_qup_virt }, 1346 + { .compatible = "qcom,qcm2290-mmrt-virt", .data = &qcm2290_mmrt_virt }, 1347 + { .compatible = "qcom,qcm2290-mmnrt-virt", .data = &qcm2290_mmnrt_virt }, 1348 + { }, 1349 + }; 1350 + MODULE_DEVICE_TABLE(of, qcm2290_noc_of_match); 1351 + 1352 + static struct platform_driver qcm2290_noc_driver = { 1353 + .probe = qnoc_probe, 1354 + .remove = qnoc_remove, 1355 + .driver = { 1356 + .name = "qnoc-qcm2290", 1357 + .of_match_table = qcm2290_noc_of_match, 1358 + }, 1359 + }; 1360 + module_platform_driver(qcm2290_noc_driver); 1361 + 1362 + MODULE_DESCRIPTION("Qualcomm QCM2290 NoC driver"); 1363 + MODULE_LICENSE("GPL v2");
+6 -1
drivers/interconnect/qcom/sdm660.c
··· 1513 1513 }; 1514 1514 1515 1515 static struct qcom_icc_desc sdm660_a2noc = { 1516 + .type = QCOM_ICC_NOC, 1516 1517 .nodes = sdm660_a2noc_nodes, 1517 1518 .num_nodes = ARRAY_SIZE(sdm660_a2noc_nodes), 1518 1519 .clocks = bus_a2noc_clocks, ··· 1541 1540 }; 1542 1541 1543 1542 static struct qcom_icc_desc sdm660_bimc = { 1543 + .type = QCOM_ICC_BIMC, 1544 1544 .nodes = sdm660_bimc_nodes, 1545 1545 .num_nodes = ARRAY_SIZE(sdm660_bimc_nodes), 1546 - .is_bimc_node = true, 1547 1546 .regmap_cfg = &sdm660_bimc_regmap_config, 1548 1547 }; 1549 1548 ··· 1595 1594 }; 1596 1595 1597 1596 static struct qcom_icc_desc sdm660_cnoc = { 1597 + .type = QCOM_ICC_NOC, 1598 1598 .nodes = sdm660_cnoc_nodes, 1599 1599 .num_nodes = ARRAY_SIZE(sdm660_cnoc_nodes), 1600 1600 .regmap_cfg = &sdm660_cnoc_regmap_config, ··· 1616 1614 }; 1617 1615 1618 1616 static struct qcom_icc_desc sdm660_gnoc = { 1617 + .type = QCOM_ICC_NOC, 1619 1618 .nodes = sdm660_gnoc_nodes, 1620 1619 .num_nodes = ARRAY_SIZE(sdm660_gnoc_nodes), 1621 1620 .regmap_cfg = &sdm660_gnoc_regmap_config, ··· 1656 1653 }; 1657 1654 1658 1655 static struct qcom_icc_desc sdm660_mnoc = { 1656 + .type = QCOM_ICC_NOC, 1659 1657 .nodes = sdm660_mnoc_nodes, 1660 1658 .num_nodes = ARRAY_SIZE(sdm660_mnoc_nodes), 1661 1659 .clocks = bus_mm_clocks, ··· 1693 1689 }; 1694 1690 1695 1691 static struct qcom_icc_desc sdm660_snoc = { 1692 + .type = QCOM_ICC_NOC, 1696 1693 .nodes = sdm660_snoc_nodes, 1697 1694 .num_nodes = ARRAY_SIZE(sdm660_snoc_nodes), 1698 1695 .regmap_cfg = &sdm660_snoc_regmap_config,
+94
include/dt-bindings/interconnect/qcom,qcm2290.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* QCM2290 interconnect IDs */ 3 + 4 + #ifndef __DT_BINDINGS_INTERCONNECT_QCOM_QCM2290_H 5 + #define __DT_BINDINGS_INTERCONNECT_QCOM_QCM2290_H 6 + 7 + /* BIMC */ 8 + #define MASTER_APPSS_PROC 0 9 + #define MASTER_SNOC_BIMC_RT 1 10 + #define MASTER_SNOC_BIMC_NRT 2 11 + #define MASTER_SNOC_BIMC 3 12 + #define MASTER_TCU_0 4 13 + #define MASTER_GFX3D 5 14 + #define SLAVE_EBI1 6 15 + #define SLAVE_BIMC_SNOC 7 16 + 17 + /* CNOC */ 18 + #define MASTER_SNOC_CNOC 0 19 + #define MASTER_QDSS_DAP 1 20 + #define SLAVE_BIMC_CFG 2 21 + #define SLAVE_CAMERA_NRT_THROTTLE_CFG 3 22 + #define SLAVE_CAMERA_RT_THROTTLE_CFG 4 23 + #define SLAVE_CAMERA_CFG 5 24 + #define SLAVE_CLK_CTL 6 25 + #define SLAVE_CRYPTO_0_CFG 7 26 + #define SLAVE_DISPLAY_CFG 8 27 + #define SLAVE_DISPLAY_THROTTLE_CFG 9 28 + #define SLAVE_GPU_CFG 10 29 + #define SLAVE_HWKM 11 30 + #define SLAVE_IMEM_CFG 12 31 + #define SLAVE_IPA_CFG 13 32 + #define SLAVE_LPASS 14 33 + #define SLAVE_MESSAGE_RAM 15 34 + #define SLAVE_PDM 16 35 + #define SLAVE_PIMEM_CFG 17 36 + #define SLAVE_PKA_WRAPPER 18 37 + #define SLAVE_PMIC_ARB 19 38 + #define SLAVE_PRNG 20 39 + #define SLAVE_QDSS_CFG 21 40 + #define SLAVE_QM_CFG 22 41 + #define SLAVE_QM_MPU_CFG 23 42 + #define SLAVE_QPIC 24 43 + #define SLAVE_QUP_0 25 44 + #define SLAVE_SDCC_1 26 45 + #define SLAVE_SDCC_2 27 46 + #define SLAVE_SNOC_CFG 28 47 + #define SLAVE_TCSR 29 48 + #define SLAVE_USB3 30 49 + #define SLAVE_VENUS_CFG 31 50 + #define SLAVE_VENUS_THROTTLE_CFG 32 51 + #define SLAVE_VSENSE_CTRL_CFG 33 52 + #define SLAVE_SERVICE_CNOC 34 53 + 54 + /* SNOC */ 55 + #define MASTER_CRYPTO_CORE0 0 56 + #define MASTER_SNOC_CFG 1 57 + #define MASTER_TIC 2 58 + #define MASTER_ANOC_SNOC 3 59 + #define MASTER_BIMC_SNOC 4 60 + #define MASTER_PIMEM 5 61 + #define MASTER_QDSS_BAM 6 62 + #define MASTER_QUP_0 7 63 + #define MASTER_IPA 8 64 + #define MASTER_QDSS_ETR 9 65 + #define MASTER_SDCC_1 10 66 + #define MASTER_SDCC_2 11 67 + #define MASTER_QPIC 12 68 + #define MASTER_USB3_0 13 69 + #define SLAVE_APPSS 14 70 + #define SLAVE_SNOC_CNOC 15 71 + #define SLAVE_IMEM 16 72 + #define SLAVE_PIMEM 17 73 + #define SLAVE_SNOC_BIMC 18 74 + #define SLAVE_SERVICE_SNOC 19 75 + #define SLAVE_QDSS_STM 20 76 + #define SLAVE_TCU 21 77 + #define SLAVE_ANOC_SNOC 22 78 + 79 + /* QUP Virtual */ 80 + #define MASTER_QUP_CORE_0 0 81 + #define SLAVE_QUP_CORE_0 1 82 + 83 + /* MMNRT Virtual */ 84 + #define MASTER_CAMNOC_SF 0 85 + #define MASTER_VIDEO_P0 1 86 + #define MASTER_VIDEO_PROC 2 87 + #define SLAVE_SNOC_BIMC_NRT 3 88 + 89 + /* MMRT Virtual */ 90 + #define MASTER_CAMNOC_HF 0 91 + #define MASTER_MDP0 1 92 + #define SLAVE_SNOC_BIMC_RT 2 93 + 94 + #endif