1f80a1d41SAngeloGioacchino Del Regno // SPDX-License-Identifier: GPL-2.0
2f80a1d41SAngeloGioacchino Del Regno /*
3f80a1d41SAngeloGioacchino Del Regno  * Qualcomm SDM630/SDM636/SDM660 Network-on-Chip (NoC) QoS driver
4f80a1d41SAngeloGioacchino Del Regno  * Copyright (C) 2020, AngeloGioacchino Del Regno <kholk11@gmail.com>
5f80a1d41SAngeloGioacchino Del Regno  */
6f80a1d41SAngeloGioacchino Del Regno 
7f80a1d41SAngeloGioacchino Del Regno #include <dt-bindings/interconnect/qcom,sdm660.h>
8f80a1d41SAngeloGioacchino Del Regno #include <linux/clk.h>
9f80a1d41SAngeloGioacchino Del Regno #include <linux/device.h>
10f80a1d41SAngeloGioacchino Del Regno #include <linux/interconnect-provider.h>
11f80a1d41SAngeloGioacchino Del Regno #include <linux/io.h>
12f80a1d41SAngeloGioacchino Del Regno #include <linux/module.h>
13f80a1d41SAngeloGioacchino Del Regno #include <linux/of_device.h>
14f80a1d41SAngeloGioacchino Del Regno #include <linux/of_platform.h>
15f80a1d41SAngeloGioacchino Del Regno #include <linux/platform_device.h>
16f80a1d41SAngeloGioacchino Del Regno #include <linux/regmap.h>
17f80a1d41SAngeloGioacchino Del Regno #include <linux/slab.h>
18f80a1d41SAngeloGioacchino Del Regno 
19f80a1d41SAngeloGioacchino Del Regno #include "smd-rpm.h"
20f80a1d41SAngeloGioacchino Del Regno 
21f80a1d41SAngeloGioacchino Del Regno #define RPM_BUS_MASTER_REQ	0x73616d62
22f80a1d41SAngeloGioacchino Del Regno #define RPM_BUS_SLAVE_REQ	0x766c7362
23f80a1d41SAngeloGioacchino Del Regno 
24f80a1d41SAngeloGioacchino Del Regno /* BIMC QoS */
25f80a1d41SAngeloGioacchino Del Regno #define M_BKE_REG_BASE(n)		(0x300 + (0x4000 * n))
26f80a1d41SAngeloGioacchino Del Regno #define M_BKE_EN_ADDR(n)		(M_BKE_REG_BASE(n))
27f80a1d41SAngeloGioacchino Del Regno #define M_BKE_HEALTH_CFG_ADDR(i, n)	(M_BKE_REG_BASE(n) + 0x40 + (0x4 * i))
28f80a1d41SAngeloGioacchino Del Regno 
29f80a1d41SAngeloGioacchino Del Regno #define M_BKE_HEALTH_CFG_LIMITCMDS_MASK	0x80000000
30f80a1d41SAngeloGioacchino Del Regno #define M_BKE_HEALTH_CFG_AREQPRIO_MASK	0x300
31f80a1d41SAngeloGioacchino Del Regno #define M_BKE_HEALTH_CFG_PRIOLVL_MASK	0x3
32f80a1d41SAngeloGioacchino Del Regno #define M_BKE_HEALTH_CFG_AREQPRIO_SHIFT	0x8
33f80a1d41SAngeloGioacchino Del Regno #define M_BKE_HEALTH_CFG_LIMITCMDS_SHIFT 0x1f
34f80a1d41SAngeloGioacchino Del Regno 
35f80a1d41SAngeloGioacchino Del Regno #define M_BKE_EN_EN_BMASK		0x1
36f80a1d41SAngeloGioacchino Del Regno 
37f80a1d41SAngeloGioacchino Del Regno /* Valid for both NoC and BIMC */
38*656ba110SDmitry Baryshkov #define NOC_QOS_MODE_INVALID		-1
39f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_MODE_FIXED		0x0
40f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_MODE_LIMITER		0x1
41f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_MODE_BYPASS		0x2
42f80a1d41SAngeloGioacchino Del Regno 
43f80a1d41SAngeloGioacchino Del Regno /* NoC QoS */
44f80a1d41SAngeloGioacchino Del Regno #define NOC_PERM_MODE_FIXED		1
45f80a1d41SAngeloGioacchino Del Regno #define NOC_PERM_MODE_BYPASS		(1 << NOC_QOS_MODE_BYPASS)
46f80a1d41SAngeloGioacchino Del Regno 
47f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_PRIORITYn_ADDR(n)	(0x8 + (n * 0x1000))
485833c9b8SShawn Guo #define NOC_QOS_PRIORITY_P1_MASK	0xc
495833c9b8SShawn Guo #define NOC_QOS_PRIORITY_P0_MASK	0x3
50f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_PRIORITY_P1_SHIFT	0x2
51f80a1d41SAngeloGioacchino Del Regno 
52f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_MODEn_ADDR(n)		(0xc + (n * 0x1000))
53f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_MODEn_MASK		0x3
54f80a1d41SAngeloGioacchino Del Regno 
55f80a1d41SAngeloGioacchino Del Regno enum {
56f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_IPA = 1,
57f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_CNOC_A2NOC,
58f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_SDCC_1,
59f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_SDCC_2,
60f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_BLSP_1,
61f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_BLSP_2,
62f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_UFS,
63f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_USB_HS,
64f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_USB3,
65f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_CRYPTO_C0,
66f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_GNOC_BIMC,
67f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_OXILI,
68f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_MNOC_BIMC,
69f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_SNOC_BIMC,
70f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_PIMEM,
71f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_SNOC_CNOC,
72f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_QDSS_DAP,
73f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_APPS_PROC,
74f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_CNOC_MNOC_MMSS_CFG,
75f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_CNOC_MNOC_CFG,
76f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_CPP,
77f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_JPEG,
78f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_MDP_P0,
79f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_MDP_P1,
80f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_VENUS,
81f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_VFE,
82f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_QDSS_ETR,
83f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_QDSS_BAM,
84f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_SNOC_CFG,
85f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_BIMC_SNOC,
86f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_A2NOC_SNOC,
87f80a1d41SAngeloGioacchino Del Regno 	SDM660_MASTER_GNOC_SNOC,
88f80a1d41SAngeloGioacchino Del Regno 
89f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_A2NOC_SNOC,
90f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_EBI,
91f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_HMSS_L3,
92f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_BIMC_SNOC,
93f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_CNOC_A2NOC,
94f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_MPM,
95f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_PMIC_ARB,
96f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_TLMM_NORTH,
97f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_TCSR,
98f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_PIMEM_CFG,
99f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_IMEM_CFG,
100f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_MESSAGE_RAM,
101f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_GLM,
102f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_BIMC_CFG,
103f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_PRNG,
104f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_SPDM,
105f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_QDSS_CFG,
106f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_CNOC_MNOC_CFG,
107f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_SNOC_CFG,
108f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_QM_CFG,
109f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_CLK_CTL,
110f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_MSS_CFG,
111f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_TLMM_SOUTH,
112f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_UFS_CFG,
113f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_A2NOC_CFG,
114f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_A2NOC_SMMU_CFG,
115f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_GPUSS_CFG,
116f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_AHB2PHY,
117f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_BLSP_1,
118f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_SDCC_1,
119f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_SDCC_2,
120f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_TLMM_CENTER,
121f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_BLSP_2,
122f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_PDM,
123f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_CNOC_MNOC_MMSS_CFG,
124f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_USB_HS,
125f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_USB3_0,
126f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_SRVC_CNOC,
127f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_GNOC_BIMC,
128f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_GNOC_SNOC,
129f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_CAMERA_CFG,
130f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_CAMERA_THROTTLE_CFG,
131f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_MISC_CFG,
132f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_VENUS_THROTTLE_CFG,
133f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_VENUS_CFG,
134f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_MMSS_CLK_XPU_CFG,
135f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_MMSS_CLK_CFG,
136f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_MNOC_MPU_CFG,
137f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_DISPLAY_CFG,
138f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_CSI_PHY_CFG,
139f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_DISPLAY_THROTTLE_CFG,
140f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_SMMU_CFG,
141f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_MNOC_BIMC,
142f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_SRVC_MNOC,
143f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_HMSS,
144f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_LPASS,
145f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_WLAN,
146f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_CDSP,
147f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_IPA,
148f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_SNOC_BIMC,
149f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_SNOC_CNOC,
150f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_IMEM,
151f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_PIMEM,
152f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_QDSS_STM,
153f80a1d41SAngeloGioacchino Del Regno 	SDM660_SLAVE_SRVC_SNOC,
154f80a1d41SAngeloGioacchino Del Regno 
155f80a1d41SAngeloGioacchino Del Regno 	SDM660_A2NOC,
156f80a1d41SAngeloGioacchino Del Regno 	SDM660_BIMC,
157f80a1d41SAngeloGioacchino Del Regno 	SDM660_CNOC,
158f80a1d41SAngeloGioacchino Del Regno 	SDM660_GNOC,
159f80a1d41SAngeloGioacchino Del Regno 	SDM660_MNOC,
160f80a1d41SAngeloGioacchino Del Regno 	SDM660_SNOC,
161f80a1d41SAngeloGioacchino Del Regno };
162f80a1d41SAngeloGioacchino Del Regno 
163f80a1d41SAngeloGioacchino Del Regno #define to_qcom_provider(_provider) \
164f80a1d41SAngeloGioacchino Del Regno 	container_of(_provider, struct qcom_icc_provider, provider)
165f80a1d41SAngeloGioacchino Del Regno 
166f80a1d41SAngeloGioacchino Del Regno static const struct clk_bulk_data bus_clocks[] = {
167f80a1d41SAngeloGioacchino Del Regno 	{ .id = "bus" },
168f80a1d41SAngeloGioacchino Del Regno 	{ .id = "bus_a" },
169f80a1d41SAngeloGioacchino Del Regno };
170f80a1d41SAngeloGioacchino Del Regno 
171f80a1d41SAngeloGioacchino Del Regno static const struct clk_bulk_data bus_mm_clocks[] = {
172f80a1d41SAngeloGioacchino Del Regno 	{ .id = "bus" },
173f80a1d41SAngeloGioacchino Del Regno 	{ .id = "bus_a" },
174f80a1d41SAngeloGioacchino Del Regno 	{ .id = "iface" },
175f80a1d41SAngeloGioacchino Del Regno };
176f80a1d41SAngeloGioacchino Del Regno 
17713404ac8SShawn Guo static const struct clk_bulk_data bus_a2noc_clocks[] = {
17813404ac8SShawn Guo 	{ .id = "bus" },
17913404ac8SShawn Guo 	{ .id = "bus_a" },
18013404ac8SShawn Guo 	{ .id = "ipa" },
18113404ac8SShawn Guo 	{ .id = "ufs_axi" },
18213404ac8SShawn Guo 	{ .id = "aggre2_ufs_axi" },
18313404ac8SShawn Guo 	{ .id = "aggre2_usb3_axi" },
18413404ac8SShawn Guo 	{ .id = "cfg_noc_usb2_axi" },
18513404ac8SShawn Guo };
18613404ac8SShawn Guo 
187f80a1d41SAngeloGioacchino Del Regno /**
188f80a1d41SAngeloGioacchino Del Regno  * struct qcom_icc_provider - Qualcomm specific interconnect provider
189f80a1d41SAngeloGioacchino Del Regno  * @provider: generic interconnect provider
190f80a1d41SAngeloGioacchino Del Regno  * @bus_clks: the clk_bulk_data table of bus clocks
191f80a1d41SAngeloGioacchino Del Regno  * @num_clks: the total number of clk_bulk_data entries
192f80a1d41SAngeloGioacchino Del Regno  * @is_bimc_node: indicates whether to use bimc specific setting
1937014dfeeSGeorgi Djakov  * @regmap: regmap for QoS registers read/write access
194f80a1d41SAngeloGioacchino Del Regno  * @mmio: NoC base iospace
195f80a1d41SAngeloGioacchino Del Regno  */
196f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_provider {
197f80a1d41SAngeloGioacchino Del Regno 	struct icc_provider provider;
198f80a1d41SAngeloGioacchino Del Regno 	struct clk_bulk_data *bus_clks;
199f80a1d41SAngeloGioacchino Del Regno 	int num_clks;
200f80a1d41SAngeloGioacchino Del Regno 	bool is_bimc_node;
201f80a1d41SAngeloGioacchino Del Regno 	struct regmap *regmap;
202f80a1d41SAngeloGioacchino Del Regno 	void __iomem *mmio;
203f80a1d41SAngeloGioacchino Del Regno };
204f80a1d41SAngeloGioacchino Del Regno 
205f80a1d41SAngeloGioacchino Del Regno /**
206f80a1d41SAngeloGioacchino Del Regno  * struct qcom_icc_qos - Qualcomm specific interconnect QoS parameters
207f80a1d41SAngeloGioacchino Del Regno  * @areq_prio: node requests priority
208f80a1d41SAngeloGioacchino Del Regno  * @prio_level: priority level for bus communication
209f80a1d41SAngeloGioacchino Del Regno  * @limit_commands: activate/deactivate limiter mode during runtime
210f80a1d41SAngeloGioacchino Del Regno  * @ap_owned: indicates if the node is owned by the AP or by the RPM
211f80a1d41SAngeloGioacchino Del Regno  * @qos_mode: default qos mode for this node
212f80a1d41SAngeloGioacchino Del Regno  * @qos_port: qos port number for finding qos registers of this node
213f80a1d41SAngeloGioacchino Del Regno  */
214f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_qos {
215f80a1d41SAngeloGioacchino Del Regno 	u32 areq_prio;
216f80a1d41SAngeloGioacchino Del Regno 	u32 prio_level;
217f80a1d41SAngeloGioacchino Del Regno 	bool limit_commands;
218f80a1d41SAngeloGioacchino Del Regno 	bool ap_owned;
219f80a1d41SAngeloGioacchino Del Regno 	int qos_mode;
220f80a1d41SAngeloGioacchino Del Regno 	int qos_port;
221f80a1d41SAngeloGioacchino Del Regno };
222f80a1d41SAngeloGioacchino Del Regno 
223f80a1d41SAngeloGioacchino Del Regno /**
224f80a1d41SAngeloGioacchino Del Regno  * struct qcom_icc_node - Qualcomm specific interconnect nodes
225f80a1d41SAngeloGioacchino Del Regno  * @name: the node name used in debugfs
226f80a1d41SAngeloGioacchino Del Regno  * @id: a unique node identifier
227f80a1d41SAngeloGioacchino Del Regno  * @links: an array of nodes where we can go next while traversing
228f80a1d41SAngeloGioacchino Del Regno  * @num_links: the total number of @links
229f80a1d41SAngeloGioacchino Del Regno  * @buswidth: width of the interconnect between a node and the bus (bytes)
230f80a1d41SAngeloGioacchino Del Regno  * @mas_rpm_id: RPM id for devices that are bus masters
231f80a1d41SAngeloGioacchino Del Regno  * @slv_rpm_id: RPM id for devices that are bus slaves
232f80a1d41SAngeloGioacchino Del Regno  * @qos: NoC QoS setting parameters
233f80a1d41SAngeloGioacchino Del Regno  * @rate: current bus clock rate in Hz
234f80a1d41SAngeloGioacchino Del Regno  */
235f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_node {
236f80a1d41SAngeloGioacchino Del Regno 	unsigned char *name;
237f80a1d41SAngeloGioacchino Del Regno 	u16 id;
2387ae77e60SDmitry Baryshkov 	const u16 *links;
239f80a1d41SAngeloGioacchino Del Regno 	u16 num_links;
240f80a1d41SAngeloGioacchino Del Regno 	u16 buswidth;
241f80a1d41SAngeloGioacchino Del Regno 	int mas_rpm_id;
242f80a1d41SAngeloGioacchino Del Regno 	int slv_rpm_id;
243f80a1d41SAngeloGioacchino Del Regno 	struct qcom_icc_qos qos;
244f80a1d41SAngeloGioacchino Del Regno 	u64 rate;
245f80a1d41SAngeloGioacchino Del Regno };
246f80a1d41SAngeloGioacchino Del Regno 
247f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_desc {
248f80a1d41SAngeloGioacchino Del Regno 	struct qcom_icc_node **nodes;
249f80a1d41SAngeloGioacchino Del Regno 	size_t num_nodes;
250f80a1d41SAngeloGioacchino Del Regno 	const struct regmap_config *regmap_cfg;
251f80a1d41SAngeloGioacchino Del Regno };
252f80a1d41SAngeloGioacchino Del Regno 
2537ae77e60SDmitry Baryshkov static const u16 mas_ipa_links[] = {
2547ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_SNOC
2557ae77e60SDmitry Baryshkov };
256f80a1d41SAngeloGioacchino Del Regno 
2577ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_ipa = {
2587ae77e60SDmitry Baryshkov 	.name = "mas_ipa",
2597ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_IPA,
2607ae77e60SDmitry Baryshkov 	.buswidth = 8,
2617ae77e60SDmitry Baryshkov 	.mas_rpm_id = 59,
2627ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
2637ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
2647ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
2657ae77e60SDmitry Baryshkov 	.qos.areq_prio = 1,
2667ae77e60SDmitry Baryshkov 	.qos.prio_level = 1,
2677ae77e60SDmitry Baryshkov 	.qos.qos_port = 3,
2687ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_ipa_links),
2697ae77e60SDmitry Baryshkov 	.links = mas_ipa_links,
2707ae77e60SDmitry Baryshkov };
2717ae77e60SDmitry Baryshkov 
2727ae77e60SDmitry Baryshkov static const u16 mas_cnoc_a2noc_links[] = {
2737ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_SNOC
2747ae77e60SDmitry Baryshkov };
2757ae77e60SDmitry Baryshkov 
2767ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_cnoc_a2noc = {
2777ae77e60SDmitry Baryshkov 	.name = "mas_cnoc_a2noc",
2787ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_CNOC_A2NOC,
2797ae77e60SDmitry Baryshkov 	.buswidth = 8,
2807ae77e60SDmitry Baryshkov 	.mas_rpm_id = 146,
2817ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
2827ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
283*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
2847ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_cnoc_a2noc_links),
2857ae77e60SDmitry Baryshkov 	.links = mas_cnoc_a2noc_links,
2867ae77e60SDmitry Baryshkov };
2877ae77e60SDmitry Baryshkov 
2887ae77e60SDmitry Baryshkov static const u16 mas_sdcc_1_links[] = {
2897ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_SNOC
2907ae77e60SDmitry Baryshkov };
2917ae77e60SDmitry Baryshkov 
2927ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_sdcc_1 = {
2937ae77e60SDmitry Baryshkov 	.name = "mas_sdcc_1",
2947ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_SDCC_1,
2957ae77e60SDmitry Baryshkov 	.buswidth = 8,
2967ae77e60SDmitry Baryshkov 	.mas_rpm_id = 33,
2977ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
2987ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_sdcc_1_links),
2997ae77e60SDmitry Baryshkov 	.links = mas_sdcc_1_links,
3007ae77e60SDmitry Baryshkov };
3017ae77e60SDmitry Baryshkov 
3027ae77e60SDmitry Baryshkov static const u16 mas_sdcc_2_links[] = {
3037ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_SNOC
3047ae77e60SDmitry Baryshkov };
3057ae77e60SDmitry Baryshkov 
3067ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_sdcc_2 = {
3077ae77e60SDmitry Baryshkov 	.name = "mas_sdcc_2",
3087ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_SDCC_2,
3097ae77e60SDmitry Baryshkov 	.buswidth = 8,
3107ae77e60SDmitry Baryshkov 	.mas_rpm_id = 35,
3117ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
3127ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_sdcc_2_links),
3137ae77e60SDmitry Baryshkov 	.links = mas_sdcc_2_links,
3147ae77e60SDmitry Baryshkov };
3157ae77e60SDmitry Baryshkov 
3167ae77e60SDmitry Baryshkov static const u16 mas_blsp_1_links[] = {
3177ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_SNOC
3187ae77e60SDmitry Baryshkov };
3197ae77e60SDmitry Baryshkov 
3207ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_blsp_1 = {
3217ae77e60SDmitry Baryshkov 	.name = "mas_blsp_1",
3227ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_BLSP_1,
3237ae77e60SDmitry Baryshkov 	.buswidth = 4,
3247ae77e60SDmitry Baryshkov 	.mas_rpm_id = 41,
3257ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
3267ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_blsp_1_links),
3277ae77e60SDmitry Baryshkov 	.links = mas_blsp_1_links,
3287ae77e60SDmitry Baryshkov };
3297ae77e60SDmitry Baryshkov 
3307ae77e60SDmitry Baryshkov static const u16 mas_blsp_2_links[] = {
3317ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_SNOC
3327ae77e60SDmitry Baryshkov };
3337ae77e60SDmitry Baryshkov 
3347ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_blsp_2 = {
3357ae77e60SDmitry Baryshkov 	.name = "mas_blsp_2",
3367ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_BLSP_2,
3377ae77e60SDmitry Baryshkov 	.buswidth = 4,
3387ae77e60SDmitry Baryshkov 	.mas_rpm_id = 39,
3397ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
3407ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_blsp_2_links),
3417ae77e60SDmitry Baryshkov 	.links = mas_blsp_2_links,
3427ae77e60SDmitry Baryshkov };
3437ae77e60SDmitry Baryshkov 
3447ae77e60SDmitry Baryshkov static const u16 mas_ufs_links[] = {
3457ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_SNOC
3467ae77e60SDmitry Baryshkov };
3477ae77e60SDmitry Baryshkov 
3487ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_ufs = {
3497ae77e60SDmitry Baryshkov 	.name = "mas_ufs",
3507ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_UFS,
3517ae77e60SDmitry Baryshkov 	.buswidth = 8,
3527ae77e60SDmitry Baryshkov 	.mas_rpm_id = 68,
3537ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
3547ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
3557ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
3567ae77e60SDmitry Baryshkov 	.qos.areq_prio = 1,
3577ae77e60SDmitry Baryshkov 	.qos.prio_level = 1,
3587ae77e60SDmitry Baryshkov 	.qos.qos_port = 4,
3597ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_ufs_links),
3607ae77e60SDmitry Baryshkov 	.links = mas_ufs_links,
3617ae77e60SDmitry Baryshkov };
3627ae77e60SDmitry Baryshkov 
3637ae77e60SDmitry Baryshkov static const u16 mas_usb_hs_links[] = {
3647ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_SNOC
3657ae77e60SDmitry Baryshkov };
3667ae77e60SDmitry Baryshkov 
3677ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_usb_hs = {
3687ae77e60SDmitry Baryshkov 	.name = "mas_usb_hs",
3697ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_USB_HS,
3707ae77e60SDmitry Baryshkov 	.buswidth = 8,
3717ae77e60SDmitry Baryshkov 	.mas_rpm_id = 42,
3727ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
3737ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
3747ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
3757ae77e60SDmitry Baryshkov 	.qos.areq_prio = 1,
3767ae77e60SDmitry Baryshkov 	.qos.prio_level = 1,
3777ae77e60SDmitry Baryshkov 	.qos.qos_port = 1,
3787ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_usb_hs_links),
3797ae77e60SDmitry Baryshkov 	.links = mas_usb_hs_links,
3807ae77e60SDmitry Baryshkov };
3817ae77e60SDmitry Baryshkov 
3827ae77e60SDmitry Baryshkov static const u16 mas_usb3_links[] = {
3837ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_SNOC
3847ae77e60SDmitry Baryshkov };
3857ae77e60SDmitry Baryshkov 
3867ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_usb3 = {
3877ae77e60SDmitry Baryshkov 	.name = "mas_usb3",
3887ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_USB3,
3897ae77e60SDmitry Baryshkov 	.buswidth = 8,
3907ae77e60SDmitry Baryshkov 	.mas_rpm_id = 32,
3917ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
3927ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
3937ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
3947ae77e60SDmitry Baryshkov 	.qos.areq_prio = 1,
3957ae77e60SDmitry Baryshkov 	.qos.prio_level = 1,
3967ae77e60SDmitry Baryshkov 	.qos.qos_port = 2,
3977ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_usb3_links),
3987ae77e60SDmitry Baryshkov 	.links = mas_usb3_links,
3997ae77e60SDmitry Baryshkov };
4007ae77e60SDmitry Baryshkov 
4017ae77e60SDmitry Baryshkov static const u16 mas_crypto_links[] = {
4027ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_SNOC
4037ae77e60SDmitry Baryshkov };
4047ae77e60SDmitry Baryshkov 
4057ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_crypto = {
4067ae77e60SDmitry Baryshkov 	.name = "mas_crypto",
4077ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_CRYPTO_C0,
4087ae77e60SDmitry Baryshkov 	.buswidth = 8,
4097ae77e60SDmitry Baryshkov 	.mas_rpm_id = 23,
4107ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
4117ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
4127ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
4137ae77e60SDmitry Baryshkov 	.qos.areq_prio = 1,
4147ae77e60SDmitry Baryshkov 	.qos.prio_level = 1,
4157ae77e60SDmitry Baryshkov 	.qos.qos_port = 11,
4167ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_crypto_links),
4177ae77e60SDmitry Baryshkov 	.links = mas_crypto_links,
4187ae77e60SDmitry Baryshkov };
4197ae77e60SDmitry Baryshkov 
4207ae77e60SDmitry Baryshkov static const u16 mas_gnoc_bimc_links[] = {
4217ae77e60SDmitry Baryshkov 	SDM660_SLAVE_EBI
4227ae77e60SDmitry Baryshkov };
4237ae77e60SDmitry Baryshkov 
4247ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_gnoc_bimc = {
4257ae77e60SDmitry Baryshkov 	.name = "mas_gnoc_bimc",
4267ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_GNOC_BIMC,
4277ae77e60SDmitry Baryshkov 	.buswidth = 4,
4287ae77e60SDmitry Baryshkov 	.mas_rpm_id = 144,
4297ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
4307ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
4317ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
4327ae77e60SDmitry Baryshkov 	.qos.areq_prio = 0,
4337ae77e60SDmitry Baryshkov 	.qos.prio_level = 0,
4347ae77e60SDmitry Baryshkov 	.qos.qos_port = 0,
4357ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_gnoc_bimc_links),
4367ae77e60SDmitry Baryshkov 	.links = mas_gnoc_bimc_links,
4377ae77e60SDmitry Baryshkov };
4387ae77e60SDmitry Baryshkov 
4397ae77e60SDmitry Baryshkov static const u16 mas_oxili_links[] = {
4407ae77e60SDmitry Baryshkov 	SDM660_SLAVE_HMSS_L3,
4417ae77e60SDmitry Baryshkov 	SDM660_SLAVE_EBI,
4427ae77e60SDmitry Baryshkov 	SDM660_SLAVE_BIMC_SNOC
4437ae77e60SDmitry Baryshkov };
4447ae77e60SDmitry Baryshkov 
4457ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_oxili = {
4467ae77e60SDmitry Baryshkov 	.name = "mas_oxili",
4477ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_OXILI,
4487ae77e60SDmitry Baryshkov 	.buswidth = 4,
4497ae77e60SDmitry Baryshkov 	.mas_rpm_id = 6,
4507ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
4517ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
4527ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_BYPASS,
4537ae77e60SDmitry Baryshkov 	.qos.areq_prio = 0,
4547ae77e60SDmitry Baryshkov 	.qos.prio_level = 0,
4557ae77e60SDmitry Baryshkov 	.qos.qos_port = 1,
4567ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_oxili_links),
4577ae77e60SDmitry Baryshkov 	.links = mas_oxili_links,
4587ae77e60SDmitry Baryshkov };
4597ae77e60SDmitry Baryshkov 
4607ae77e60SDmitry Baryshkov static const u16 mas_mnoc_bimc_links[] = {
4617ae77e60SDmitry Baryshkov 	SDM660_SLAVE_HMSS_L3,
4627ae77e60SDmitry Baryshkov 	SDM660_SLAVE_EBI,
4637ae77e60SDmitry Baryshkov 	SDM660_SLAVE_BIMC_SNOC
4647ae77e60SDmitry Baryshkov };
4657ae77e60SDmitry Baryshkov 
4667ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_mnoc_bimc = {
4677ae77e60SDmitry Baryshkov 	.name = "mas_mnoc_bimc",
4687ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_MNOC_BIMC,
4697ae77e60SDmitry Baryshkov 	.buswidth = 4,
4707ae77e60SDmitry Baryshkov 	.mas_rpm_id = 2,
4717ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
4727ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
4737ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_BYPASS,
4747ae77e60SDmitry Baryshkov 	.qos.areq_prio = 0,
4757ae77e60SDmitry Baryshkov 	.qos.prio_level = 0,
4767ae77e60SDmitry Baryshkov 	.qos.qos_port = 2,
4777ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_mnoc_bimc_links),
4787ae77e60SDmitry Baryshkov 	.links = mas_mnoc_bimc_links,
4797ae77e60SDmitry Baryshkov };
4807ae77e60SDmitry Baryshkov 
4817ae77e60SDmitry Baryshkov static const u16 mas_snoc_bimc_links[] = {
4827ae77e60SDmitry Baryshkov 	SDM660_SLAVE_HMSS_L3,
4837ae77e60SDmitry Baryshkov 	SDM660_SLAVE_EBI
4847ae77e60SDmitry Baryshkov };
4857ae77e60SDmitry Baryshkov 
4867ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_snoc_bimc = {
4877ae77e60SDmitry Baryshkov 	.name = "mas_snoc_bimc",
4887ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_SNOC_BIMC,
4897ae77e60SDmitry Baryshkov 	.buswidth = 4,
4907ae77e60SDmitry Baryshkov 	.mas_rpm_id = 3,
4917ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
4927ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_snoc_bimc_links),
4937ae77e60SDmitry Baryshkov 	.links = mas_snoc_bimc_links,
4947ae77e60SDmitry Baryshkov };
4957ae77e60SDmitry Baryshkov 
4967ae77e60SDmitry Baryshkov static const u16 mas_pimem_links[] = {
4977ae77e60SDmitry Baryshkov 	SDM660_SLAVE_HMSS_L3,
4987ae77e60SDmitry Baryshkov 	SDM660_SLAVE_EBI
4997ae77e60SDmitry Baryshkov };
5007ae77e60SDmitry Baryshkov 
5017ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_pimem = {
5027ae77e60SDmitry Baryshkov 	.name = "mas_pimem",
5037ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_PIMEM,
5047ae77e60SDmitry Baryshkov 	.buswidth = 4,
5057ae77e60SDmitry Baryshkov 	.mas_rpm_id = 113,
5067ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
5077ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
5087ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
5097ae77e60SDmitry Baryshkov 	.qos.areq_prio = 1,
5107ae77e60SDmitry Baryshkov 	.qos.prio_level = 1,
5117ae77e60SDmitry Baryshkov 	.qos.qos_port = 4,
5127ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_pimem_links),
5137ae77e60SDmitry Baryshkov 	.links = mas_pimem_links,
5147ae77e60SDmitry Baryshkov };
5157ae77e60SDmitry Baryshkov 
5167ae77e60SDmitry Baryshkov static const u16 mas_snoc_cnoc_links[] = {
5177ae77e60SDmitry Baryshkov 	SDM660_SLAVE_CLK_CTL,
5187ae77e60SDmitry Baryshkov 	SDM660_SLAVE_QDSS_CFG,
5197ae77e60SDmitry Baryshkov 	SDM660_SLAVE_QM_CFG,
5207ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SRVC_CNOC,
5217ae77e60SDmitry Baryshkov 	SDM660_SLAVE_UFS_CFG,
5227ae77e60SDmitry Baryshkov 	SDM660_SLAVE_TCSR,
5237ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_SMMU_CFG,
5247ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SNOC_CFG,
5257ae77e60SDmitry Baryshkov 	SDM660_SLAVE_TLMM_SOUTH,
5267ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MPM,
5277ae77e60SDmitry Baryshkov 	SDM660_SLAVE_CNOC_MNOC_MMSS_CFG,
5287ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SDCC_2,
5297ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SDCC_1,
5307ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SPDM,
5317ae77e60SDmitry Baryshkov 	SDM660_SLAVE_PMIC_ARB,
5327ae77e60SDmitry Baryshkov 	SDM660_SLAVE_PRNG,
5337ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MSS_CFG,
5347ae77e60SDmitry Baryshkov 	SDM660_SLAVE_GPUSS_CFG,
5357ae77e60SDmitry Baryshkov 	SDM660_SLAVE_IMEM_CFG,
5367ae77e60SDmitry Baryshkov 	SDM660_SLAVE_USB3_0,
5377ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_CFG,
5387ae77e60SDmitry Baryshkov 	SDM660_SLAVE_TLMM_NORTH,
5397ae77e60SDmitry Baryshkov 	SDM660_SLAVE_USB_HS,
5407ae77e60SDmitry Baryshkov 	SDM660_SLAVE_PDM,
5417ae77e60SDmitry Baryshkov 	SDM660_SLAVE_TLMM_CENTER,
5427ae77e60SDmitry Baryshkov 	SDM660_SLAVE_AHB2PHY,
5437ae77e60SDmitry Baryshkov 	SDM660_SLAVE_BLSP_2,
5447ae77e60SDmitry Baryshkov 	SDM660_SLAVE_BLSP_1,
5457ae77e60SDmitry Baryshkov 	SDM660_SLAVE_PIMEM_CFG,
5467ae77e60SDmitry Baryshkov 	SDM660_SLAVE_GLM,
5477ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MESSAGE_RAM,
5487ae77e60SDmitry Baryshkov 	SDM660_SLAVE_BIMC_CFG,
5497ae77e60SDmitry Baryshkov 	SDM660_SLAVE_CNOC_MNOC_CFG
5507ae77e60SDmitry Baryshkov };
5517ae77e60SDmitry Baryshkov 
5527ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_snoc_cnoc = {
5537ae77e60SDmitry Baryshkov 	.name = "mas_snoc_cnoc",
5547ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_SNOC_CNOC,
5557ae77e60SDmitry Baryshkov 	.buswidth = 8,
5567ae77e60SDmitry Baryshkov 	.mas_rpm_id = 52,
5577ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
5587ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
559*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
5607ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_snoc_cnoc_links),
5617ae77e60SDmitry Baryshkov 	.links = mas_snoc_cnoc_links,
5627ae77e60SDmitry Baryshkov };
5637ae77e60SDmitry Baryshkov 
5647ae77e60SDmitry Baryshkov static const u16 mas_qdss_dap_links[] = {
5657ae77e60SDmitry Baryshkov 	SDM660_SLAVE_CLK_CTL,
5667ae77e60SDmitry Baryshkov 	SDM660_SLAVE_QDSS_CFG,
5677ae77e60SDmitry Baryshkov 	SDM660_SLAVE_QM_CFG,
5687ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SRVC_CNOC,
5697ae77e60SDmitry Baryshkov 	SDM660_SLAVE_UFS_CFG,
5707ae77e60SDmitry Baryshkov 	SDM660_SLAVE_TCSR,
5717ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_SMMU_CFG,
5727ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SNOC_CFG,
5737ae77e60SDmitry Baryshkov 	SDM660_SLAVE_TLMM_SOUTH,
5747ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MPM,
5757ae77e60SDmitry Baryshkov 	SDM660_SLAVE_CNOC_MNOC_MMSS_CFG,
5767ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SDCC_2,
5777ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SDCC_1,
5787ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SPDM,
5797ae77e60SDmitry Baryshkov 	SDM660_SLAVE_PMIC_ARB,
5807ae77e60SDmitry Baryshkov 	SDM660_SLAVE_PRNG,
5817ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MSS_CFG,
5827ae77e60SDmitry Baryshkov 	SDM660_SLAVE_GPUSS_CFG,
5837ae77e60SDmitry Baryshkov 	SDM660_SLAVE_IMEM_CFG,
5847ae77e60SDmitry Baryshkov 	SDM660_SLAVE_USB3_0,
5857ae77e60SDmitry Baryshkov 	SDM660_SLAVE_A2NOC_CFG,
5867ae77e60SDmitry Baryshkov 	SDM660_SLAVE_TLMM_NORTH,
5877ae77e60SDmitry Baryshkov 	SDM660_SLAVE_USB_HS,
5887ae77e60SDmitry Baryshkov 	SDM660_SLAVE_PDM,
5897ae77e60SDmitry Baryshkov 	SDM660_SLAVE_TLMM_CENTER,
5907ae77e60SDmitry Baryshkov 	SDM660_SLAVE_AHB2PHY,
5917ae77e60SDmitry Baryshkov 	SDM660_SLAVE_BLSP_2,
5927ae77e60SDmitry Baryshkov 	SDM660_SLAVE_BLSP_1,
5937ae77e60SDmitry Baryshkov 	SDM660_SLAVE_PIMEM_CFG,
5947ae77e60SDmitry Baryshkov 	SDM660_SLAVE_GLM,
5957ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MESSAGE_RAM,
5967ae77e60SDmitry Baryshkov 	SDM660_SLAVE_CNOC_A2NOC,
5977ae77e60SDmitry Baryshkov 	SDM660_SLAVE_BIMC_CFG,
5987ae77e60SDmitry Baryshkov 	SDM660_SLAVE_CNOC_MNOC_CFG
5997ae77e60SDmitry Baryshkov };
6007ae77e60SDmitry Baryshkov 
6017ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_qdss_dap = {
6027ae77e60SDmitry Baryshkov 	.name = "mas_qdss_dap",
6037ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_QDSS_DAP,
6047ae77e60SDmitry Baryshkov 	.buswidth = 8,
6057ae77e60SDmitry Baryshkov 	.mas_rpm_id = 49,
6067ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
6077ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
608*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
6097ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_qdss_dap_links),
6107ae77e60SDmitry Baryshkov 	.links = mas_qdss_dap_links,
6117ae77e60SDmitry Baryshkov };
6127ae77e60SDmitry Baryshkov 
6137ae77e60SDmitry Baryshkov static const u16 mas_apss_proc_links[] = {
6147ae77e60SDmitry Baryshkov 	SDM660_SLAVE_GNOC_SNOC,
6157ae77e60SDmitry Baryshkov 	SDM660_SLAVE_GNOC_BIMC
6167ae77e60SDmitry Baryshkov };
6177ae77e60SDmitry Baryshkov 
6187ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_apss_proc = {
6197ae77e60SDmitry Baryshkov 	.name = "mas_apss_proc",
6207ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_APPS_PROC,
6217ae77e60SDmitry Baryshkov 	.buswidth = 16,
6227ae77e60SDmitry Baryshkov 	.mas_rpm_id = 0,
6237ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
6247ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
625*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
6267ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_apss_proc_links),
6277ae77e60SDmitry Baryshkov 	.links = mas_apss_proc_links,
6287ae77e60SDmitry Baryshkov };
6297ae77e60SDmitry Baryshkov 
6307ae77e60SDmitry Baryshkov static const u16 mas_cnoc_mnoc_mmss_cfg_links[] = {
6317ae77e60SDmitry Baryshkov 	SDM660_SLAVE_VENUS_THROTTLE_CFG,
6327ae77e60SDmitry Baryshkov 	SDM660_SLAVE_VENUS_CFG,
6337ae77e60SDmitry Baryshkov 	SDM660_SLAVE_CAMERA_THROTTLE_CFG,
6347ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SMMU_CFG,
6357ae77e60SDmitry Baryshkov 	SDM660_SLAVE_CAMERA_CFG,
6367ae77e60SDmitry Baryshkov 	SDM660_SLAVE_CSI_PHY_CFG,
6377ae77e60SDmitry Baryshkov 	SDM660_SLAVE_DISPLAY_THROTTLE_CFG,
6387ae77e60SDmitry Baryshkov 	SDM660_SLAVE_DISPLAY_CFG,
6397ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MMSS_CLK_CFG,
6407ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MNOC_MPU_CFG,
6417ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MISC_CFG,
6427ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MMSS_CLK_XPU_CFG
6437ae77e60SDmitry Baryshkov };
6447ae77e60SDmitry Baryshkov 
6457ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_cnoc_mnoc_mmss_cfg = {
6467ae77e60SDmitry Baryshkov 	.name = "mas_cnoc_mnoc_mmss_cfg",
6477ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_CNOC_MNOC_MMSS_CFG,
6487ae77e60SDmitry Baryshkov 	.buswidth = 8,
6497ae77e60SDmitry Baryshkov 	.mas_rpm_id = 4,
6507ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
6517ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
652*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
6537ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_cnoc_mnoc_mmss_cfg_links),
6547ae77e60SDmitry Baryshkov 	.links = mas_cnoc_mnoc_mmss_cfg_links,
6557ae77e60SDmitry Baryshkov };
6567ae77e60SDmitry Baryshkov 
6577ae77e60SDmitry Baryshkov static const u16 mas_cnoc_mnoc_cfg_links[] = {
6587ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SRVC_MNOC
6597ae77e60SDmitry Baryshkov };
6607ae77e60SDmitry Baryshkov 
6617ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_cnoc_mnoc_cfg = {
6627ae77e60SDmitry Baryshkov 	.name = "mas_cnoc_mnoc_cfg",
6637ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_CNOC_MNOC_CFG,
6647ae77e60SDmitry Baryshkov 	.buswidth = 4,
6657ae77e60SDmitry Baryshkov 	.mas_rpm_id = 5,
6667ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
6677ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
668*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
6697ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_cnoc_mnoc_cfg_links),
6707ae77e60SDmitry Baryshkov 	.links = mas_cnoc_mnoc_cfg_links,
6717ae77e60SDmitry Baryshkov };
6727ae77e60SDmitry Baryshkov 
6737ae77e60SDmitry Baryshkov static const u16 mas_cpp_links[] = {
6747ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MNOC_BIMC
6757ae77e60SDmitry Baryshkov };
6767ae77e60SDmitry Baryshkov 
6777ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_cpp = {
6787ae77e60SDmitry Baryshkov 	.name = "mas_cpp",
6797ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_CPP,
6807ae77e60SDmitry Baryshkov 	.buswidth = 16,
6817ae77e60SDmitry Baryshkov 	.mas_rpm_id = 115,
6827ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
6837ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
6847ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_BYPASS,
6857ae77e60SDmitry Baryshkov 	.qos.areq_prio = 0,
6867ae77e60SDmitry Baryshkov 	.qos.prio_level = 0,
6877ae77e60SDmitry Baryshkov 	.qos.qos_port = 4,
6887ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_cpp_links),
6897ae77e60SDmitry Baryshkov 	.links = mas_cpp_links,
6907ae77e60SDmitry Baryshkov };
6917ae77e60SDmitry Baryshkov 
6927ae77e60SDmitry Baryshkov static const u16 mas_jpeg_links[] = {
6937ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MNOC_BIMC
6947ae77e60SDmitry Baryshkov };
6957ae77e60SDmitry Baryshkov 
6967ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_jpeg = {
6977ae77e60SDmitry Baryshkov 	.name = "mas_jpeg",
6987ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_JPEG,
6997ae77e60SDmitry Baryshkov 	.buswidth = 16,
7007ae77e60SDmitry Baryshkov 	.mas_rpm_id = 7,
7017ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
7027ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
7037ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_BYPASS,
7047ae77e60SDmitry Baryshkov 	.qos.areq_prio = 0,
7057ae77e60SDmitry Baryshkov 	.qos.prio_level = 0,
7067ae77e60SDmitry Baryshkov 	.qos.qos_port = 6,
7077ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_jpeg_links),
7087ae77e60SDmitry Baryshkov 	.links = mas_jpeg_links,
7097ae77e60SDmitry Baryshkov };
7107ae77e60SDmitry Baryshkov 
7117ae77e60SDmitry Baryshkov static const u16 mas_mdp_p0_links[] = {
7127ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MNOC_BIMC
7137ae77e60SDmitry Baryshkov };
7147ae77e60SDmitry Baryshkov 
7157ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_mdp_p0 = {
7167ae77e60SDmitry Baryshkov 	.name = "mas_mdp_p0",
7177ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_MDP_P0,
7187ae77e60SDmitry Baryshkov 	.buswidth = 16,
7197ae77e60SDmitry Baryshkov 	.mas_rpm_id = 8,
7207ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
7217ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
7227ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_BYPASS,
7237ae77e60SDmitry Baryshkov 	.qos.areq_prio = 0,
7247ae77e60SDmitry Baryshkov 	.qos.prio_level = 0,
7257ae77e60SDmitry Baryshkov 	.qos.qos_port = 0,
7267ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_mdp_p0_links),
7277ae77e60SDmitry Baryshkov 	.links = mas_mdp_p0_links,
7287ae77e60SDmitry Baryshkov };
7297ae77e60SDmitry Baryshkov 
7307ae77e60SDmitry Baryshkov static const u16 mas_mdp_p1_links[] = {
7317ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MNOC_BIMC
7327ae77e60SDmitry Baryshkov };
7337ae77e60SDmitry Baryshkov 
7347ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_mdp_p1 = {
7357ae77e60SDmitry Baryshkov 	.name = "mas_mdp_p1",
7367ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_MDP_P1,
7377ae77e60SDmitry Baryshkov 	.buswidth = 16,
7387ae77e60SDmitry Baryshkov 	.mas_rpm_id = 61,
7397ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
7407ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
7417ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_BYPASS,
7427ae77e60SDmitry Baryshkov 	.qos.areq_prio = 0,
7437ae77e60SDmitry Baryshkov 	.qos.prio_level = 0,
7447ae77e60SDmitry Baryshkov 	.qos.qos_port = 1,
7457ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_mdp_p1_links),
7467ae77e60SDmitry Baryshkov 	.links = mas_mdp_p1_links,
7477ae77e60SDmitry Baryshkov };
7487ae77e60SDmitry Baryshkov 
7497ae77e60SDmitry Baryshkov static const u16 mas_venus_links[] = {
7507ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MNOC_BIMC
7517ae77e60SDmitry Baryshkov };
7527ae77e60SDmitry Baryshkov 
7537ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_venus = {
7547ae77e60SDmitry Baryshkov 	.name = "mas_venus",
7557ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_VENUS,
7567ae77e60SDmitry Baryshkov 	.buswidth = 16,
7577ae77e60SDmitry Baryshkov 	.mas_rpm_id = 9,
7587ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
7597ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
7607ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_BYPASS,
7617ae77e60SDmitry Baryshkov 	.qos.areq_prio = 0,
7627ae77e60SDmitry Baryshkov 	.qos.prio_level = 0,
7637ae77e60SDmitry Baryshkov 	.qos.qos_port = 1,
7647ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_venus_links),
7657ae77e60SDmitry Baryshkov 	.links = mas_venus_links,
7667ae77e60SDmitry Baryshkov };
7677ae77e60SDmitry Baryshkov 
7687ae77e60SDmitry Baryshkov static const u16 mas_vfe_links[] = {
7697ae77e60SDmitry Baryshkov 	SDM660_SLAVE_MNOC_BIMC
7707ae77e60SDmitry Baryshkov };
7717ae77e60SDmitry Baryshkov 
7727ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_vfe = {
7737ae77e60SDmitry Baryshkov 	.name = "mas_vfe",
7747ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_VFE,
7757ae77e60SDmitry Baryshkov 	.buswidth = 16,
7767ae77e60SDmitry Baryshkov 	.mas_rpm_id = 11,
7777ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
7787ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
7797ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_BYPASS,
7807ae77e60SDmitry Baryshkov 	.qos.areq_prio = 0,
7817ae77e60SDmitry Baryshkov 	.qos.prio_level = 0,
7827ae77e60SDmitry Baryshkov 	.qos.qos_port = 5,
7837ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_vfe_links),
7847ae77e60SDmitry Baryshkov 	.links = mas_vfe_links,
7857ae77e60SDmitry Baryshkov };
7867ae77e60SDmitry Baryshkov 
7877ae77e60SDmitry Baryshkov static const u16 mas_qdss_etr_links[] = {
7887ae77e60SDmitry Baryshkov 	SDM660_SLAVE_PIMEM,
7897ae77e60SDmitry Baryshkov 	SDM660_SLAVE_IMEM,
7907ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SNOC_CNOC,
7917ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SNOC_BIMC
7927ae77e60SDmitry Baryshkov };
7937ae77e60SDmitry Baryshkov 
7947ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_qdss_etr = {
7957ae77e60SDmitry Baryshkov 	.name = "mas_qdss_etr",
7967ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_QDSS_ETR,
7977ae77e60SDmitry Baryshkov 	.buswidth = 8,
7987ae77e60SDmitry Baryshkov 	.mas_rpm_id = 31,
7997ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
8007ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
8017ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
8027ae77e60SDmitry Baryshkov 	.qos.areq_prio = 1,
8037ae77e60SDmitry Baryshkov 	.qos.prio_level = 1,
8047ae77e60SDmitry Baryshkov 	.qos.qos_port = 1,
8057ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_qdss_etr_links),
8067ae77e60SDmitry Baryshkov 	.links = mas_qdss_etr_links,
8077ae77e60SDmitry Baryshkov };
8087ae77e60SDmitry Baryshkov 
8097ae77e60SDmitry Baryshkov static const u16 mas_qdss_bam_links[] = {
8107ae77e60SDmitry Baryshkov 	SDM660_SLAVE_PIMEM,
8117ae77e60SDmitry Baryshkov 	SDM660_SLAVE_IMEM,
8127ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SNOC_CNOC,
8137ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SNOC_BIMC
8147ae77e60SDmitry Baryshkov };
8157ae77e60SDmitry Baryshkov 
8167ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_qdss_bam = {
8177ae77e60SDmitry Baryshkov 	.name = "mas_qdss_bam",
8187ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_QDSS_BAM,
8197ae77e60SDmitry Baryshkov 	.buswidth = 4,
8207ae77e60SDmitry Baryshkov 	.mas_rpm_id = 19,
8217ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
8227ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
8237ae77e60SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
8247ae77e60SDmitry Baryshkov 	.qos.areq_prio = 1,
8257ae77e60SDmitry Baryshkov 	.qos.prio_level = 1,
8267ae77e60SDmitry Baryshkov 	.qos.qos_port = 0,
8277ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_qdss_bam_links),
8287ae77e60SDmitry Baryshkov 	.links = mas_qdss_bam_links,
8297ae77e60SDmitry Baryshkov };
8307ae77e60SDmitry Baryshkov 
8317ae77e60SDmitry Baryshkov static const u16 mas_snoc_cfg_links[] = {
8327ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SRVC_SNOC
8337ae77e60SDmitry Baryshkov };
8347ae77e60SDmitry Baryshkov 
8357ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_snoc_cfg = {
8367ae77e60SDmitry Baryshkov 	.name = "mas_snoc_cfg",
8377ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_SNOC_CFG,
8387ae77e60SDmitry Baryshkov 	.buswidth = 4,
8397ae77e60SDmitry Baryshkov 	.mas_rpm_id = 20,
8407ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
8417ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_snoc_cfg_links),
8427ae77e60SDmitry Baryshkov 	.links = mas_snoc_cfg_links,
8437ae77e60SDmitry Baryshkov };
8447ae77e60SDmitry Baryshkov 
8457ae77e60SDmitry Baryshkov static const u16 mas_bimc_snoc_links[] = {
8467ae77e60SDmitry Baryshkov 	SDM660_SLAVE_PIMEM,
8477ae77e60SDmitry Baryshkov 	SDM660_SLAVE_IPA,
8487ae77e60SDmitry Baryshkov 	SDM660_SLAVE_QDSS_STM,
8497ae77e60SDmitry Baryshkov 	SDM660_SLAVE_LPASS,
8507ae77e60SDmitry Baryshkov 	SDM660_SLAVE_HMSS,
8517ae77e60SDmitry Baryshkov 	SDM660_SLAVE_CDSP,
8527ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SNOC_CNOC,
8537ae77e60SDmitry Baryshkov 	SDM660_SLAVE_WLAN,
8547ae77e60SDmitry Baryshkov 	SDM660_SLAVE_IMEM
8557ae77e60SDmitry Baryshkov };
8567ae77e60SDmitry Baryshkov 
8577ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_bimc_snoc = {
8587ae77e60SDmitry Baryshkov 	.name = "mas_bimc_snoc",
8597ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_BIMC_SNOC,
8607ae77e60SDmitry Baryshkov 	.buswidth = 8,
8617ae77e60SDmitry Baryshkov 	.mas_rpm_id = 21,
8627ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
8637ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_bimc_snoc_links),
8647ae77e60SDmitry Baryshkov 	.links = mas_bimc_snoc_links,
8657ae77e60SDmitry Baryshkov };
8667ae77e60SDmitry Baryshkov 
8677ae77e60SDmitry Baryshkov static const u16 mas_gnoc_snoc_links[] = {
8687ae77e60SDmitry Baryshkov 	SDM660_SLAVE_PIMEM,
8697ae77e60SDmitry Baryshkov 	SDM660_SLAVE_IPA,
8707ae77e60SDmitry Baryshkov 	SDM660_SLAVE_QDSS_STM,
8717ae77e60SDmitry Baryshkov 	SDM660_SLAVE_LPASS,
8727ae77e60SDmitry Baryshkov 	SDM660_SLAVE_HMSS,
8737ae77e60SDmitry Baryshkov 	SDM660_SLAVE_CDSP,
8747ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SNOC_CNOC,
8757ae77e60SDmitry Baryshkov 	SDM660_SLAVE_WLAN,
8767ae77e60SDmitry Baryshkov 	SDM660_SLAVE_IMEM
8777ae77e60SDmitry Baryshkov };
8787ae77e60SDmitry Baryshkov 
8797ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_gnoc_snoc = {
8807ae77e60SDmitry Baryshkov 	.name = "mas_gnoc_snoc",
8817ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_GNOC_SNOC,
8827ae77e60SDmitry Baryshkov 	.buswidth = 8,
8837ae77e60SDmitry Baryshkov 	.mas_rpm_id = 150,
8847ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
8857ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_gnoc_snoc_links),
8867ae77e60SDmitry Baryshkov 	.links = mas_gnoc_snoc_links,
8877ae77e60SDmitry Baryshkov };
8887ae77e60SDmitry Baryshkov 
8897ae77e60SDmitry Baryshkov static const u16 mas_a2noc_snoc_links[] = {
8907ae77e60SDmitry Baryshkov 	SDM660_SLAVE_PIMEM,
8917ae77e60SDmitry Baryshkov 	SDM660_SLAVE_IPA,
8927ae77e60SDmitry Baryshkov 	SDM660_SLAVE_QDSS_STM,
8937ae77e60SDmitry Baryshkov 	SDM660_SLAVE_LPASS,
8947ae77e60SDmitry Baryshkov 	SDM660_SLAVE_HMSS,
8957ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SNOC_BIMC,
8967ae77e60SDmitry Baryshkov 	SDM660_SLAVE_CDSP,
8977ae77e60SDmitry Baryshkov 	SDM660_SLAVE_SNOC_CNOC,
8987ae77e60SDmitry Baryshkov 	SDM660_SLAVE_WLAN,
8997ae77e60SDmitry Baryshkov 	SDM660_SLAVE_IMEM
9007ae77e60SDmitry Baryshkov };
9017ae77e60SDmitry Baryshkov 
9027ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_a2noc_snoc = {
9037ae77e60SDmitry Baryshkov 	.name = "mas_a2noc_snoc",
9047ae77e60SDmitry Baryshkov 	.id = SDM660_MASTER_A2NOC_SNOC,
9057ae77e60SDmitry Baryshkov 	.buswidth = 16,
9067ae77e60SDmitry Baryshkov 	.mas_rpm_id = 112,
9077ae77e60SDmitry Baryshkov 	.slv_rpm_id = -1,
9087ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(mas_a2noc_snoc_links),
9097ae77e60SDmitry Baryshkov 	.links = mas_a2noc_snoc_links,
9107ae77e60SDmitry Baryshkov };
9117ae77e60SDmitry Baryshkov 
9127ae77e60SDmitry Baryshkov static const u16 slv_a2noc_snoc_links[] = {
9137ae77e60SDmitry Baryshkov 	SDM660_MASTER_A2NOC_SNOC
9147ae77e60SDmitry Baryshkov };
9157ae77e60SDmitry Baryshkov 
9167ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_a2noc_snoc = {
9177ae77e60SDmitry Baryshkov 	.name = "slv_a2noc_snoc",
9187ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_A2NOC_SNOC,
9197ae77e60SDmitry Baryshkov 	.buswidth = 16,
9207ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
9217ae77e60SDmitry Baryshkov 	.slv_rpm_id = 143,
9227ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(slv_a2noc_snoc_links),
9237ae77e60SDmitry Baryshkov 	.links = slv_a2noc_snoc_links,
9247ae77e60SDmitry Baryshkov };
9257ae77e60SDmitry Baryshkov 
9267ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_ebi = {
9277ae77e60SDmitry Baryshkov 	.name = "slv_ebi",
9287ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_EBI,
9297ae77e60SDmitry Baryshkov 	.buswidth = 4,
9307ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
9317ae77e60SDmitry Baryshkov 	.slv_rpm_id = 0,
9327ae77e60SDmitry Baryshkov };
9337ae77e60SDmitry Baryshkov 
9347ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_hmss_l3 = {
9357ae77e60SDmitry Baryshkov 	.name = "slv_hmss_l3",
9367ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_HMSS_L3,
9377ae77e60SDmitry Baryshkov 	.buswidth = 4,
9387ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
9397ae77e60SDmitry Baryshkov 	.slv_rpm_id = 160,
9407ae77e60SDmitry Baryshkov };
9417ae77e60SDmitry Baryshkov 
9427ae77e60SDmitry Baryshkov static const u16 slv_bimc_snoc_links[] = {
9437ae77e60SDmitry Baryshkov 	SDM660_MASTER_BIMC_SNOC
9447ae77e60SDmitry Baryshkov };
9457ae77e60SDmitry Baryshkov 
9467ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_bimc_snoc = {
9477ae77e60SDmitry Baryshkov 	.name = "slv_bimc_snoc",
9487ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_BIMC_SNOC,
9497ae77e60SDmitry Baryshkov 	.buswidth = 4,
9507ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
9517ae77e60SDmitry Baryshkov 	.slv_rpm_id = 2,
9527ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(slv_bimc_snoc_links),
9537ae77e60SDmitry Baryshkov 	.links = slv_bimc_snoc_links,
9547ae77e60SDmitry Baryshkov };
9557ae77e60SDmitry Baryshkov 
9567ae77e60SDmitry Baryshkov static const u16 slv_cnoc_a2noc_links[] = {
9577ae77e60SDmitry Baryshkov 	SDM660_MASTER_CNOC_A2NOC
9587ae77e60SDmitry Baryshkov };
9597ae77e60SDmitry Baryshkov 
9607ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_cnoc_a2noc = {
9617ae77e60SDmitry Baryshkov 	.name = "slv_cnoc_a2noc",
9627ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_CNOC_A2NOC,
9637ae77e60SDmitry Baryshkov 	.buswidth = 8,
9647ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
9657ae77e60SDmitry Baryshkov 	.slv_rpm_id = 208,
9667ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
967*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
9687ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(slv_cnoc_a2noc_links),
9697ae77e60SDmitry Baryshkov 	.links = slv_cnoc_a2noc_links,
9707ae77e60SDmitry Baryshkov };
9717ae77e60SDmitry Baryshkov 
9727ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_mpm = {
9737ae77e60SDmitry Baryshkov 	.name = "slv_mpm",
9747ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_MPM,
9757ae77e60SDmitry Baryshkov 	.buswidth = 4,
9767ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
9777ae77e60SDmitry Baryshkov 	.slv_rpm_id = 62,
9787ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
979*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
9807ae77e60SDmitry Baryshkov };
9817ae77e60SDmitry Baryshkov 
9827ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_pmic_arb = {
9837ae77e60SDmitry Baryshkov 	.name = "slv_pmic_arb",
9847ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_PMIC_ARB,
9857ae77e60SDmitry Baryshkov 	.buswidth = 4,
9867ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
9877ae77e60SDmitry Baryshkov 	.slv_rpm_id = 59,
9887ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
989*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
9907ae77e60SDmitry Baryshkov };
9917ae77e60SDmitry Baryshkov 
9927ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_tlmm_north = {
9937ae77e60SDmitry Baryshkov 	.name = "slv_tlmm_north",
9947ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_TLMM_NORTH,
9957ae77e60SDmitry Baryshkov 	.buswidth = 8,
9967ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
9977ae77e60SDmitry Baryshkov 	.slv_rpm_id = 214,
9987ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
999*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
10007ae77e60SDmitry Baryshkov };
10017ae77e60SDmitry Baryshkov 
10027ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_tcsr = {
10037ae77e60SDmitry Baryshkov 	.name = "slv_tcsr",
10047ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_TCSR,
10057ae77e60SDmitry Baryshkov 	.buswidth = 4,
10067ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
10077ae77e60SDmitry Baryshkov 	.slv_rpm_id = 50,
10087ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1009*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
10107ae77e60SDmitry Baryshkov };
10117ae77e60SDmitry Baryshkov 
10127ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_pimem_cfg = {
10137ae77e60SDmitry Baryshkov 	.name = "slv_pimem_cfg",
10147ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_PIMEM_CFG,
10157ae77e60SDmitry Baryshkov 	.buswidth = 4,
10167ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
10177ae77e60SDmitry Baryshkov 	.slv_rpm_id = 167,
10187ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1019*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
10207ae77e60SDmitry Baryshkov };
10217ae77e60SDmitry Baryshkov 
10227ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_imem_cfg = {
10237ae77e60SDmitry Baryshkov 	.name = "slv_imem_cfg",
10247ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_IMEM_CFG,
10257ae77e60SDmitry Baryshkov 	.buswidth = 4,
10267ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
10277ae77e60SDmitry Baryshkov 	.slv_rpm_id = 54,
10287ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1029*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
10307ae77e60SDmitry Baryshkov };
10317ae77e60SDmitry Baryshkov 
10327ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_message_ram = {
10337ae77e60SDmitry Baryshkov 	.name = "slv_message_ram",
10347ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_MESSAGE_RAM,
10357ae77e60SDmitry Baryshkov 	.buswidth = 4,
10367ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
10377ae77e60SDmitry Baryshkov 	.slv_rpm_id = 55,
10387ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1039*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
10407ae77e60SDmitry Baryshkov };
10417ae77e60SDmitry Baryshkov 
10427ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_glm = {
10437ae77e60SDmitry Baryshkov 	.name = "slv_glm",
10447ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_GLM,
10457ae77e60SDmitry Baryshkov 	.buswidth = 4,
10467ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
10477ae77e60SDmitry Baryshkov 	.slv_rpm_id = 209,
10487ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1049*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
10507ae77e60SDmitry Baryshkov };
10517ae77e60SDmitry Baryshkov 
10527ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_bimc_cfg = {
10537ae77e60SDmitry Baryshkov 	.name = "slv_bimc_cfg",
10547ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_BIMC_CFG,
10557ae77e60SDmitry Baryshkov 	.buswidth = 4,
10567ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
10577ae77e60SDmitry Baryshkov 	.slv_rpm_id = 56,
10587ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1059*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
10607ae77e60SDmitry Baryshkov };
10617ae77e60SDmitry Baryshkov 
10627ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_prng = {
10637ae77e60SDmitry Baryshkov 	.name = "slv_prng",
10647ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_PRNG,
10657ae77e60SDmitry Baryshkov 	.buswidth = 4,
10667ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
10677ae77e60SDmitry Baryshkov 	.slv_rpm_id = 44,
10687ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1069*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
10707ae77e60SDmitry Baryshkov };
10717ae77e60SDmitry Baryshkov 
10727ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_spdm = {
10737ae77e60SDmitry Baryshkov 	.name = "slv_spdm",
10747ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_SPDM,
10757ae77e60SDmitry Baryshkov 	.buswidth = 4,
10767ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
10777ae77e60SDmitry Baryshkov 	.slv_rpm_id = 60,
10787ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1079*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
10807ae77e60SDmitry Baryshkov };
10817ae77e60SDmitry Baryshkov 
10827ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_qdss_cfg = {
10837ae77e60SDmitry Baryshkov 	.name = "slv_qdss_cfg",
10847ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_QDSS_CFG,
10857ae77e60SDmitry Baryshkov 	.buswidth = 4,
10867ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
10877ae77e60SDmitry Baryshkov 	.slv_rpm_id = 63,
10887ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1089*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
10907ae77e60SDmitry Baryshkov };
10917ae77e60SDmitry Baryshkov 
10927ae77e60SDmitry Baryshkov static const u16 slv_cnoc_mnoc_cfg_links[] = {
10937ae77e60SDmitry Baryshkov 	SDM660_MASTER_CNOC_MNOC_CFG
10947ae77e60SDmitry Baryshkov };
10957ae77e60SDmitry Baryshkov 
10967ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_cnoc_mnoc_cfg = {
10977ae77e60SDmitry Baryshkov 	.name = "slv_cnoc_mnoc_cfg",
10987ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_CNOC_MNOC_CFG,
10997ae77e60SDmitry Baryshkov 	.buswidth = 4,
11007ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
11017ae77e60SDmitry Baryshkov 	.slv_rpm_id = 66,
11027ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1103*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
11047ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(slv_cnoc_mnoc_cfg_links),
11057ae77e60SDmitry Baryshkov 	.links = slv_cnoc_mnoc_cfg_links,
11067ae77e60SDmitry Baryshkov };
11077ae77e60SDmitry Baryshkov 
11087ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_snoc_cfg = {
11097ae77e60SDmitry Baryshkov 	.name = "slv_snoc_cfg",
11107ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_SNOC_CFG,
11117ae77e60SDmitry Baryshkov 	.buswidth = 4,
11127ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
11137ae77e60SDmitry Baryshkov 	.slv_rpm_id = 70,
11147ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1115*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
11167ae77e60SDmitry Baryshkov };
11177ae77e60SDmitry Baryshkov 
11187ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_qm_cfg = {
11197ae77e60SDmitry Baryshkov 	.name = "slv_qm_cfg",
11207ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_QM_CFG,
11217ae77e60SDmitry Baryshkov 	.buswidth = 4,
11227ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
11237ae77e60SDmitry Baryshkov 	.slv_rpm_id = 212,
11247ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1125*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
11267ae77e60SDmitry Baryshkov };
11277ae77e60SDmitry Baryshkov 
11287ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_clk_ctl = {
11297ae77e60SDmitry Baryshkov 	.name = "slv_clk_ctl",
11307ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_CLK_CTL,
11317ae77e60SDmitry Baryshkov 	.buswidth = 4,
11327ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
11337ae77e60SDmitry Baryshkov 	.slv_rpm_id = 47,
11347ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1135*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
11367ae77e60SDmitry Baryshkov };
11377ae77e60SDmitry Baryshkov 
11387ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_mss_cfg = {
11397ae77e60SDmitry Baryshkov 	.name = "slv_mss_cfg",
11407ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_MSS_CFG,
11417ae77e60SDmitry Baryshkov 	.buswidth = 4,
11427ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
11437ae77e60SDmitry Baryshkov 	.slv_rpm_id = 48,
11447ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1145*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
11467ae77e60SDmitry Baryshkov };
11477ae77e60SDmitry Baryshkov 
11487ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_tlmm_south = {
11497ae77e60SDmitry Baryshkov 	.name = "slv_tlmm_south",
11507ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_TLMM_SOUTH,
11517ae77e60SDmitry Baryshkov 	.buswidth = 4,
11527ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
11537ae77e60SDmitry Baryshkov 	.slv_rpm_id = 217,
11547ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1155*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
11567ae77e60SDmitry Baryshkov };
11577ae77e60SDmitry Baryshkov 
11587ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_ufs_cfg = {
11597ae77e60SDmitry Baryshkov 	.name = "slv_ufs_cfg",
11607ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_UFS_CFG,
11617ae77e60SDmitry Baryshkov 	.buswidth = 4,
11627ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
11637ae77e60SDmitry Baryshkov 	.slv_rpm_id = 92,
11647ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1165*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
11667ae77e60SDmitry Baryshkov };
11677ae77e60SDmitry Baryshkov 
11687ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_a2noc_cfg = {
11697ae77e60SDmitry Baryshkov 	.name = "slv_a2noc_cfg",
11707ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_A2NOC_CFG,
11717ae77e60SDmitry Baryshkov 	.buswidth = 4,
11727ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
11737ae77e60SDmitry Baryshkov 	.slv_rpm_id = 150,
11747ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1175*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
11767ae77e60SDmitry Baryshkov };
11777ae77e60SDmitry Baryshkov 
11787ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_a2noc_smmu_cfg = {
11797ae77e60SDmitry Baryshkov 	.name = "slv_a2noc_smmu_cfg",
11807ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_A2NOC_SMMU_CFG,
11817ae77e60SDmitry Baryshkov 	.buswidth = 8,
11827ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
11837ae77e60SDmitry Baryshkov 	.slv_rpm_id = 152,
11847ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1185*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
11867ae77e60SDmitry Baryshkov };
11877ae77e60SDmitry Baryshkov 
11887ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_gpuss_cfg = {
11897ae77e60SDmitry Baryshkov 	.name = "slv_gpuss_cfg",
11907ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_GPUSS_CFG,
11917ae77e60SDmitry Baryshkov 	.buswidth = 8,
11927ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
11937ae77e60SDmitry Baryshkov 	.slv_rpm_id = 11,
11947ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1195*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
11967ae77e60SDmitry Baryshkov };
11977ae77e60SDmitry Baryshkov 
11987ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_ahb2phy = {
11997ae77e60SDmitry Baryshkov 	.name = "slv_ahb2phy",
12007ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_AHB2PHY,
12017ae77e60SDmitry Baryshkov 	.buswidth = 4,
12027ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
12037ae77e60SDmitry Baryshkov 	.slv_rpm_id = 163,
12047ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1205*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
12067ae77e60SDmitry Baryshkov };
12077ae77e60SDmitry Baryshkov 
12087ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_blsp_1 = {
12097ae77e60SDmitry Baryshkov 	.name = "slv_blsp_1",
12107ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_BLSP_1,
12117ae77e60SDmitry Baryshkov 	.buswidth = 4,
12127ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
12137ae77e60SDmitry Baryshkov 	.slv_rpm_id = 39,
12147ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1215*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
12167ae77e60SDmitry Baryshkov };
12177ae77e60SDmitry Baryshkov 
12187ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_sdcc_1 = {
12197ae77e60SDmitry Baryshkov 	.name = "slv_sdcc_1",
12207ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_SDCC_1,
12217ae77e60SDmitry Baryshkov 	.buswidth = 4,
12227ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
12237ae77e60SDmitry Baryshkov 	.slv_rpm_id = 31,
12247ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1225*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
12267ae77e60SDmitry Baryshkov };
12277ae77e60SDmitry Baryshkov 
12287ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_sdcc_2 = {
12297ae77e60SDmitry Baryshkov 	.name = "slv_sdcc_2",
12307ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_SDCC_2,
12317ae77e60SDmitry Baryshkov 	.buswidth = 4,
12327ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
12337ae77e60SDmitry Baryshkov 	.slv_rpm_id = 33,
12347ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1235*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
12367ae77e60SDmitry Baryshkov };
12377ae77e60SDmitry Baryshkov 
12387ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_tlmm_center = {
12397ae77e60SDmitry Baryshkov 	.name = "slv_tlmm_center",
12407ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_TLMM_CENTER,
12417ae77e60SDmitry Baryshkov 	.buswidth = 4,
12427ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
12437ae77e60SDmitry Baryshkov 	.slv_rpm_id = 218,
12447ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1245*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
12467ae77e60SDmitry Baryshkov };
12477ae77e60SDmitry Baryshkov 
12487ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_blsp_2 = {
12497ae77e60SDmitry Baryshkov 	.name = "slv_blsp_2",
12507ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_BLSP_2,
12517ae77e60SDmitry Baryshkov 	.buswidth = 4,
12527ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
12537ae77e60SDmitry Baryshkov 	.slv_rpm_id = 37,
12547ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1255*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
12567ae77e60SDmitry Baryshkov };
12577ae77e60SDmitry Baryshkov 
12587ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_pdm = {
12597ae77e60SDmitry Baryshkov 	.name = "slv_pdm",
12607ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_PDM,
12617ae77e60SDmitry Baryshkov 	.buswidth = 4,
12627ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
12637ae77e60SDmitry Baryshkov 	.slv_rpm_id = 41,
12647ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1265*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
12667ae77e60SDmitry Baryshkov };
12677ae77e60SDmitry Baryshkov 
12687ae77e60SDmitry Baryshkov static const u16 slv_cnoc_mnoc_mmss_cfg_links[] = {
12697ae77e60SDmitry Baryshkov 	SDM660_MASTER_CNOC_MNOC_MMSS_CFG
12707ae77e60SDmitry Baryshkov };
12717ae77e60SDmitry Baryshkov 
12727ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_cnoc_mnoc_mmss_cfg = {
12737ae77e60SDmitry Baryshkov 	.name = "slv_cnoc_mnoc_mmss_cfg",
12747ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_CNOC_MNOC_MMSS_CFG,
12757ae77e60SDmitry Baryshkov 	.buswidth = 8,
12767ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
12777ae77e60SDmitry Baryshkov 	.slv_rpm_id = 58,
12787ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1279*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
12807ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(slv_cnoc_mnoc_mmss_cfg_links),
12817ae77e60SDmitry Baryshkov 	.links = slv_cnoc_mnoc_mmss_cfg_links,
12827ae77e60SDmitry Baryshkov };
12837ae77e60SDmitry Baryshkov 
12847ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_usb_hs = {
12857ae77e60SDmitry Baryshkov 	.name = "slv_usb_hs",
12867ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_USB_HS,
12877ae77e60SDmitry Baryshkov 	.buswidth = 4,
12887ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
12897ae77e60SDmitry Baryshkov 	.slv_rpm_id = 40,
12907ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1291*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
12927ae77e60SDmitry Baryshkov };
12937ae77e60SDmitry Baryshkov 
12947ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_usb3_0 = {
12957ae77e60SDmitry Baryshkov 	.name = "slv_usb3_0",
12967ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_USB3_0,
12977ae77e60SDmitry Baryshkov 	.buswidth = 4,
12987ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
12997ae77e60SDmitry Baryshkov 	.slv_rpm_id = 22,
13007ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1301*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
13027ae77e60SDmitry Baryshkov };
13037ae77e60SDmitry Baryshkov 
13047ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_srvc_cnoc = {
13057ae77e60SDmitry Baryshkov 	.name = "slv_srvc_cnoc",
13067ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_SRVC_CNOC,
13077ae77e60SDmitry Baryshkov 	.buswidth = 4,
13087ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
13097ae77e60SDmitry Baryshkov 	.slv_rpm_id = 76,
13107ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1311*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
13127ae77e60SDmitry Baryshkov };
13137ae77e60SDmitry Baryshkov 
13147ae77e60SDmitry Baryshkov static const u16 slv_gnoc_bimc_links[] = {
13157ae77e60SDmitry Baryshkov 	SDM660_MASTER_GNOC_BIMC
13167ae77e60SDmitry Baryshkov };
13177ae77e60SDmitry Baryshkov 
13187ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_gnoc_bimc = {
13197ae77e60SDmitry Baryshkov 	.name = "slv_gnoc_bimc",
13207ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_GNOC_BIMC,
13217ae77e60SDmitry Baryshkov 	.buswidth = 16,
13227ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
13237ae77e60SDmitry Baryshkov 	.slv_rpm_id = 210,
13247ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1325*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
13267ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(slv_gnoc_bimc_links),
13277ae77e60SDmitry Baryshkov 	.links = slv_gnoc_bimc_links,
13287ae77e60SDmitry Baryshkov };
13297ae77e60SDmitry Baryshkov 
13307ae77e60SDmitry Baryshkov static const u16 slv_gnoc_snoc_links[] = {
13317ae77e60SDmitry Baryshkov 	SDM660_MASTER_GNOC_SNOC
13327ae77e60SDmitry Baryshkov };
13337ae77e60SDmitry Baryshkov 
13347ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_gnoc_snoc = {
13357ae77e60SDmitry Baryshkov 	.name = "slv_gnoc_snoc",
13367ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_GNOC_SNOC,
13377ae77e60SDmitry Baryshkov 	.buswidth = 8,
13387ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
13397ae77e60SDmitry Baryshkov 	.slv_rpm_id = 211,
13407ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1341*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
13427ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(slv_gnoc_snoc_links),
13437ae77e60SDmitry Baryshkov 	.links = slv_gnoc_snoc_links,
13447ae77e60SDmitry Baryshkov };
13457ae77e60SDmitry Baryshkov 
13467ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_camera_cfg = {
13477ae77e60SDmitry Baryshkov 	.name = "slv_camera_cfg",
13487ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_CAMERA_CFG,
13497ae77e60SDmitry Baryshkov 	.buswidth = 4,
13507ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
13517ae77e60SDmitry Baryshkov 	.slv_rpm_id = 3,
13527ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1353*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
13547ae77e60SDmitry Baryshkov };
13557ae77e60SDmitry Baryshkov 
13567ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_camera_throttle_cfg = {
13577ae77e60SDmitry Baryshkov 	.name = "slv_camera_throttle_cfg",
13587ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_CAMERA_THROTTLE_CFG,
13597ae77e60SDmitry Baryshkov 	.buswidth = 4,
13607ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
13617ae77e60SDmitry Baryshkov 	.slv_rpm_id = 154,
13627ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1363*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
13647ae77e60SDmitry Baryshkov };
13657ae77e60SDmitry Baryshkov 
13667ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_misc_cfg = {
13677ae77e60SDmitry Baryshkov 	.name = "slv_misc_cfg",
13687ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_MISC_CFG,
13697ae77e60SDmitry Baryshkov 	.buswidth = 4,
13707ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
13717ae77e60SDmitry Baryshkov 	.slv_rpm_id = 8,
13727ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1373*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
13747ae77e60SDmitry Baryshkov };
13757ae77e60SDmitry Baryshkov 
13767ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_venus_throttle_cfg = {
13777ae77e60SDmitry Baryshkov 	.name = "slv_venus_throttle_cfg",
13787ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_VENUS_THROTTLE_CFG,
13797ae77e60SDmitry Baryshkov 	.buswidth = 4,
13807ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
13817ae77e60SDmitry Baryshkov 	.slv_rpm_id = 178,
13827ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1383*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
13847ae77e60SDmitry Baryshkov };
13857ae77e60SDmitry Baryshkov 
13867ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_venus_cfg = {
13877ae77e60SDmitry Baryshkov 	.name = "slv_venus_cfg",
13887ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_VENUS_CFG,
13897ae77e60SDmitry Baryshkov 	.buswidth = 4,
13907ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
13917ae77e60SDmitry Baryshkov 	.slv_rpm_id = 10,
13927ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1393*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
13947ae77e60SDmitry Baryshkov };
13957ae77e60SDmitry Baryshkov 
13967ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_mmss_clk_xpu_cfg = {
13977ae77e60SDmitry Baryshkov 	.name = "slv_mmss_clk_xpu_cfg",
13987ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_MMSS_CLK_XPU_CFG,
13997ae77e60SDmitry Baryshkov 	.buswidth = 4,
14007ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
14017ae77e60SDmitry Baryshkov 	.slv_rpm_id = 13,
14027ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1403*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
14047ae77e60SDmitry Baryshkov };
14057ae77e60SDmitry Baryshkov 
14067ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_mmss_clk_cfg = {
14077ae77e60SDmitry Baryshkov 	.name = "slv_mmss_clk_cfg",
14087ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_MMSS_CLK_CFG,
14097ae77e60SDmitry Baryshkov 	.buswidth = 4,
14107ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
14117ae77e60SDmitry Baryshkov 	.slv_rpm_id = 12,
14127ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1413*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
14147ae77e60SDmitry Baryshkov };
14157ae77e60SDmitry Baryshkov 
14167ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_mnoc_mpu_cfg = {
14177ae77e60SDmitry Baryshkov 	.name = "slv_mnoc_mpu_cfg",
14187ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_MNOC_MPU_CFG,
14197ae77e60SDmitry Baryshkov 	.buswidth = 4,
14207ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
14217ae77e60SDmitry Baryshkov 	.slv_rpm_id = 14,
14227ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1423*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
14247ae77e60SDmitry Baryshkov };
14257ae77e60SDmitry Baryshkov 
14267ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_display_cfg = {
14277ae77e60SDmitry Baryshkov 	.name = "slv_display_cfg",
14287ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_DISPLAY_CFG,
14297ae77e60SDmitry Baryshkov 	.buswidth = 4,
14307ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
14317ae77e60SDmitry Baryshkov 	.slv_rpm_id = 4,
14327ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1433*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
14347ae77e60SDmitry Baryshkov };
14357ae77e60SDmitry Baryshkov 
14367ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_csi_phy_cfg = {
14377ae77e60SDmitry Baryshkov 	.name = "slv_csi_phy_cfg",
14387ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_CSI_PHY_CFG,
14397ae77e60SDmitry Baryshkov 	.buswidth = 4,
14407ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
14417ae77e60SDmitry Baryshkov 	.slv_rpm_id = 224,
14427ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1443*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
14447ae77e60SDmitry Baryshkov };
14457ae77e60SDmitry Baryshkov 
14467ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_display_throttle_cfg = {
14477ae77e60SDmitry Baryshkov 	.name = "slv_display_throttle_cfg",
14487ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_DISPLAY_THROTTLE_CFG,
14497ae77e60SDmitry Baryshkov 	.buswidth = 4,
14507ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
14517ae77e60SDmitry Baryshkov 	.slv_rpm_id = 156,
14527ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1453*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
14547ae77e60SDmitry Baryshkov };
14557ae77e60SDmitry Baryshkov 
14567ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_smmu_cfg = {
14577ae77e60SDmitry Baryshkov 	.name = "slv_smmu_cfg",
14587ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_SMMU_CFG,
14597ae77e60SDmitry Baryshkov 	.buswidth = 8,
14607ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
14617ae77e60SDmitry Baryshkov 	.slv_rpm_id = 205,
14627ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1463*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
14647ae77e60SDmitry Baryshkov };
14657ae77e60SDmitry Baryshkov 
14667ae77e60SDmitry Baryshkov static const u16 slv_mnoc_bimc_links[] = {
14677ae77e60SDmitry Baryshkov 	SDM660_MASTER_MNOC_BIMC
14687ae77e60SDmitry Baryshkov };
14697ae77e60SDmitry Baryshkov 
14707ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_mnoc_bimc = {
14717ae77e60SDmitry Baryshkov 	.name = "slv_mnoc_bimc",
14727ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_MNOC_BIMC,
14737ae77e60SDmitry Baryshkov 	.buswidth = 16,
14747ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
14757ae77e60SDmitry Baryshkov 	.slv_rpm_id = 16,
14767ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1477*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
14787ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(slv_mnoc_bimc_links),
14797ae77e60SDmitry Baryshkov 	.links = slv_mnoc_bimc_links,
14807ae77e60SDmitry Baryshkov };
14817ae77e60SDmitry Baryshkov 
14827ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_srvc_mnoc = {
14837ae77e60SDmitry Baryshkov 	.name = "slv_srvc_mnoc",
14847ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_SRVC_MNOC,
14857ae77e60SDmitry Baryshkov 	.buswidth = 8,
14867ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
14877ae77e60SDmitry Baryshkov 	.slv_rpm_id = 17,
14887ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1489*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
14907ae77e60SDmitry Baryshkov };
14917ae77e60SDmitry Baryshkov 
14927ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_hmss = {
14937ae77e60SDmitry Baryshkov 	.name = "slv_hmss",
14947ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_HMSS,
14957ae77e60SDmitry Baryshkov 	.buswidth = 8,
14967ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
14977ae77e60SDmitry Baryshkov 	.slv_rpm_id = 20,
14987ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1499*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
15007ae77e60SDmitry Baryshkov };
15017ae77e60SDmitry Baryshkov 
15027ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_lpass = {
15037ae77e60SDmitry Baryshkov 	.name = "slv_lpass",
15047ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_LPASS,
15057ae77e60SDmitry Baryshkov 	.buswidth = 4,
15067ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
15077ae77e60SDmitry Baryshkov 	.slv_rpm_id = 21,
15087ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1509*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
15107ae77e60SDmitry Baryshkov };
15117ae77e60SDmitry Baryshkov 
15127ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_wlan = {
15137ae77e60SDmitry Baryshkov 	.name = "slv_wlan",
15147ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_WLAN,
15157ae77e60SDmitry Baryshkov 	.buswidth = 4,
15167ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
15177ae77e60SDmitry Baryshkov 	.slv_rpm_id = 206,
15187ae77e60SDmitry Baryshkov };
15197ae77e60SDmitry Baryshkov 
15207ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_cdsp = {
15217ae77e60SDmitry Baryshkov 	.name = "slv_cdsp",
15227ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_CDSP,
15237ae77e60SDmitry Baryshkov 	.buswidth = 4,
15247ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
15257ae77e60SDmitry Baryshkov 	.slv_rpm_id = 221,
15267ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1527*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
15287ae77e60SDmitry Baryshkov };
15297ae77e60SDmitry Baryshkov 
15307ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_ipa = {
15317ae77e60SDmitry Baryshkov 	.name = "slv_ipa",
15327ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_IPA,
15337ae77e60SDmitry Baryshkov 	.buswidth = 4,
15347ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
15357ae77e60SDmitry Baryshkov 	.slv_rpm_id = 183,
15367ae77e60SDmitry Baryshkov 	.qos.ap_owned = true,
1537*656ba110SDmitry Baryshkov 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
15387ae77e60SDmitry Baryshkov };
15397ae77e60SDmitry Baryshkov 
15407ae77e60SDmitry Baryshkov static const u16 slv_snoc_bimc_links[] = {
15417ae77e60SDmitry Baryshkov 	SDM660_MASTER_SNOC_BIMC
15427ae77e60SDmitry Baryshkov };
15437ae77e60SDmitry Baryshkov 
15447ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_snoc_bimc = {
15457ae77e60SDmitry Baryshkov 	.name = "slv_snoc_bimc",
15467ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_SNOC_BIMC,
15477ae77e60SDmitry Baryshkov 	.buswidth = 16,
15487ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
15497ae77e60SDmitry Baryshkov 	.slv_rpm_id = 24,
15507ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(slv_snoc_bimc_links),
15517ae77e60SDmitry Baryshkov 	.links = slv_snoc_bimc_links,
15527ae77e60SDmitry Baryshkov };
15537ae77e60SDmitry Baryshkov 
15547ae77e60SDmitry Baryshkov static const u16 slv_snoc_cnoc_links[] = {
15557ae77e60SDmitry Baryshkov 	SDM660_MASTER_SNOC_CNOC
15567ae77e60SDmitry Baryshkov };
15577ae77e60SDmitry Baryshkov 
15587ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_snoc_cnoc = {
15597ae77e60SDmitry Baryshkov 	.name = "slv_snoc_cnoc",
15607ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_SNOC_CNOC,
15617ae77e60SDmitry Baryshkov 	.buswidth = 8,
15627ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
15637ae77e60SDmitry Baryshkov 	.slv_rpm_id = 25,
15647ae77e60SDmitry Baryshkov 	.num_links = ARRAY_SIZE(slv_snoc_cnoc_links),
15657ae77e60SDmitry Baryshkov 	.links = slv_snoc_cnoc_links,
15667ae77e60SDmitry Baryshkov };
15677ae77e60SDmitry Baryshkov 
15687ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_imem = {
15697ae77e60SDmitry Baryshkov 	.name = "slv_imem",
15707ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_IMEM,
15717ae77e60SDmitry Baryshkov 	.buswidth = 8,
15727ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
15737ae77e60SDmitry Baryshkov 	.slv_rpm_id = 26,
15747ae77e60SDmitry Baryshkov };
15757ae77e60SDmitry Baryshkov 
15767ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_pimem = {
15777ae77e60SDmitry Baryshkov 	.name = "slv_pimem",
15787ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_PIMEM,
15797ae77e60SDmitry Baryshkov 	.buswidth = 8,
15807ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
15817ae77e60SDmitry Baryshkov 	.slv_rpm_id = 166,
15827ae77e60SDmitry Baryshkov };
15837ae77e60SDmitry Baryshkov 
15847ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_qdss_stm = {
15857ae77e60SDmitry Baryshkov 	.name = "slv_qdss_stm",
15867ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_QDSS_STM,
15877ae77e60SDmitry Baryshkov 	.buswidth = 4,
15887ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
15897ae77e60SDmitry Baryshkov 	.slv_rpm_id = 30,
15907ae77e60SDmitry Baryshkov };
15917ae77e60SDmitry Baryshkov 
15927ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_srvc_snoc = {
15937ae77e60SDmitry Baryshkov 	.name = "slv_srvc_snoc",
15947ae77e60SDmitry Baryshkov 	.id = SDM660_SLAVE_SRVC_SNOC,
15957ae77e60SDmitry Baryshkov 	.buswidth = 16,
15967ae77e60SDmitry Baryshkov 	.mas_rpm_id = -1,
15977ae77e60SDmitry Baryshkov 	.slv_rpm_id = 29,
15987ae77e60SDmitry Baryshkov };
1599f80a1d41SAngeloGioacchino Del Regno 
1600f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_node *sdm660_a2noc_nodes[] = {
1601f80a1d41SAngeloGioacchino Del Regno 	[MASTER_IPA] = &mas_ipa,
1602f80a1d41SAngeloGioacchino Del Regno 	[MASTER_CNOC_A2NOC] = &mas_cnoc_a2noc,
1603f80a1d41SAngeloGioacchino Del Regno 	[MASTER_SDCC_1] = &mas_sdcc_1,
1604f80a1d41SAngeloGioacchino Del Regno 	[MASTER_SDCC_2] = &mas_sdcc_2,
1605f80a1d41SAngeloGioacchino Del Regno 	[MASTER_BLSP_1] = &mas_blsp_1,
1606f80a1d41SAngeloGioacchino Del Regno 	[MASTER_BLSP_2] = &mas_blsp_2,
1607f80a1d41SAngeloGioacchino Del Regno 	[MASTER_UFS] = &mas_ufs,
1608f80a1d41SAngeloGioacchino Del Regno 	[MASTER_USB_HS] = &mas_usb_hs,
1609f80a1d41SAngeloGioacchino Del Regno 	[MASTER_USB3] = &mas_usb3,
1610f80a1d41SAngeloGioacchino Del Regno 	[MASTER_CRYPTO_C0] = &mas_crypto,
1611f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_A2NOC_SNOC] = &slv_a2noc_snoc,
1612f80a1d41SAngeloGioacchino Del Regno };
1613f80a1d41SAngeloGioacchino Del Regno 
1614f80a1d41SAngeloGioacchino Del Regno static const struct regmap_config sdm660_a2noc_regmap_config = {
1615f80a1d41SAngeloGioacchino Del Regno 	.reg_bits	= 32,
1616f80a1d41SAngeloGioacchino Del Regno 	.reg_stride	= 4,
1617f80a1d41SAngeloGioacchino Del Regno 	.val_bits	= 32,
1618f80a1d41SAngeloGioacchino Del Regno 	.max_register	= 0x20000,
1619f80a1d41SAngeloGioacchino Del Regno 	.fast_io	= true,
1620f80a1d41SAngeloGioacchino Del Regno };
1621f80a1d41SAngeloGioacchino Del Regno 
1622f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_desc sdm660_a2noc = {
1623f80a1d41SAngeloGioacchino Del Regno 	.nodes = sdm660_a2noc_nodes,
1624f80a1d41SAngeloGioacchino Del Regno 	.num_nodes = ARRAY_SIZE(sdm660_a2noc_nodes),
1625f80a1d41SAngeloGioacchino Del Regno 	.regmap_cfg = &sdm660_a2noc_regmap_config,
1626f80a1d41SAngeloGioacchino Del Regno };
1627f80a1d41SAngeloGioacchino Del Regno 
1628f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_node *sdm660_bimc_nodes[] = {
1629f80a1d41SAngeloGioacchino Del Regno 	[MASTER_GNOC_BIMC] = &mas_gnoc_bimc,
1630f80a1d41SAngeloGioacchino Del Regno 	[MASTER_OXILI] = &mas_oxili,
1631f80a1d41SAngeloGioacchino Del Regno 	[MASTER_MNOC_BIMC] = &mas_mnoc_bimc,
1632f80a1d41SAngeloGioacchino Del Regno 	[MASTER_SNOC_BIMC] = &mas_snoc_bimc,
1633f80a1d41SAngeloGioacchino Del Regno 	[MASTER_PIMEM] = &mas_pimem,
1634f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_EBI] = &slv_ebi,
1635f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_HMSS_L3] = &slv_hmss_l3,
1636f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_BIMC_SNOC] = &slv_bimc_snoc,
1637f80a1d41SAngeloGioacchino Del Regno };
1638f80a1d41SAngeloGioacchino Del Regno 
1639f80a1d41SAngeloGioacchino Del Regno static const struct regmap_config sdm660_bimc_regmap_config = {
1640f80a1d41SAngeloGioacchino Del Regno 	.reg_bits	= 32,
1641f80a1d41SAngeloGioacchino Del Regno 	.reg_stride	= 4,
1642f80a1d41SAngeloGioacchino Del Regno 	.val_bits	= 32,
1643f80a1d41SAngeloGioacchino Del Regno 	.max_register	= 0x80000,
1644f80a1d41SAngeloGioacchino Del Regno 	.fast_io	= true,
1645f80a1d41SAngeloGioacchino Del Regno };
1646f80a1d41SAngeloGioacchino Del Regno 
1647f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_desc sdm660_bimc = {
1648f80a1d41SAngeloGioacchino Del Regno 	.nodes = sdm660_bimc_nodes,
1649f80a1d41SAngeloGioacchino Del Regno 	.num_nodes = ARRAY_SIZE(sdm660_bimc_nodes),
1650f80a1d41SAngeloGioacchino Del Regno 	.regmap_cfg = &sdm660_bimc_regmap_config,
1651f80a1d41SAngeloGioacchino Del Regno };
1652f80a1d41SAngeloGioacchino Del Regno 
1653f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_node *sdm660_cnoc_nodes[] = {
1654f80a1d41SAngeloGioacchino Del Regno 	[MASTER_SNOC_CNOC] = &mas_snoc_cnoc,
1655f80a1d41SAngeloGioacchino Del Regno 	[MASTER_QDSS_DAP] = &mas_qdss_dap,
1656f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_CNOC_A2NOC] = &slv_cnoc_a2noc,
1657f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_MPM] = &slv_mpm,
1658f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_PMIC_ARB] = &slv_pmic_arb,
1659f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_TLMM_NORTH] = &slv_tlmm_north,
1660f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_TCSR] = &slv_tcsr,
1661f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_PIMEM_CFG] = &slv_pimem_cfg,
1662f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_IMEM_CFG] = &slv_imem_cfg,
1663f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_MESSAGE_RAM] = &slv_message_ram,
1664f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_GLM] = &slv_glm,
1665f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_BIMC_CFG] = &slv_bimc_cfg,
1666f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_PRNG] = &slv_prng,
1667f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_SPDM] = &slv_spdm,
1668f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_QDSS_CFG] = &slv_qdss_cfg,
1669f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_CNOC_MNOC_CFG] = &slv_cnoc_mnoc_cfg,
1670f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_SNOC_CFG] = &slv_snoc_cfg,
1671f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_QM_CFG] = &slv_qm_cfg,
1672f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_CLK_CTL] = &slv_clk_ctl,
1673f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_MSS_CFG] = &slv_mss_cfg,
1674f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_TLMM_SOUTH] = &slv_tlmm_south,
1675f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_UFS_CFG] = &slv_ufs_cfg,
1676f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_A2NOC_CFG] = &slv_a2noc_cfg,
1677f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_A2NOC_SMMU_CFG] = &slv_a2noc_smmu_cfg,
1678f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_GPUSS_CFG] = &slv_gpuss_cfg,
1679f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_AHB2PHY] = &slv_ahb2phy,
1680f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_BLSP_1] = &slv_blsp_1,
1681f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_SDCC_1] = &slv_sdcc_1,
1682f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_SDCC_2] = &slv_sdcc_2,
1683f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_TLMM_CENTER] = &slv_tlmm_center,
1684f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_BLSP_2] = &slv_blsp_2,
1685f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_PDM] = &slv_pdm,
1686f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_CNOC_MNOC_MMSS_CFG] = &slv_cnoc_mnoc_mmss_cfg,
1687f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_USB_HS] = &slv_usb_hs,
1688f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_USB3_0] = &slv_usb3_0,
1689f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_SRVC_CNOC] = &slv_srvc_cnoc,
1690f80a1d41SAngeloGioacchino Del Regno };
1691f80a1d41SAngeloGioacchino Del Regno 
1692f80a1d41SAngeloGioacchino Del Regno static const struct regmap_config sdm660_cnoc_regmap_config = {
1693f80a1d41SAngeloGioacchino Del Regno 	.reg_bits	= 32,
1694f80a1d41SAngeloGioacchino Del Regno 	.reg_stride	= 4,
1695f80a1d41SAngeloGioacchino Del Regno 	.val_bits	= 32,
1696f80a1d41SAngeloGioacchino Del Regno 	.max_register	= 0x10000,
1697f80a1d41SAngeloGioacchino Del Regno 	.fast_io	= true,
1698f80a1d41SAngeloGioacchino Del Regno };
1699f80a1d41SAngeloGioacchino Del Regno 
1700f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_desc sdm660_cnoc = {
1701f80a1d41SAngeloGioacchino Del Regno 	.nodes = sdm660_cnoc_nodes,
1702f80a1d41SAngeloGioacchino Del Regno 	.num_nodes = ARRAY_SIZE(sdm660_cnoc_nodes),
1703f80a1d41SAngeloGioacchino Del Regno 	.regmap_cfg = &sdm660_cnoc_regmap_config,
1704f80a1d41SAngeloGioacchino Del Regno };
1705f80a1d41SAngeloGioacchino Del Regno 
1706f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_node *sdm660_gnoc_nodes[] = {
1707f80a1d41SAngeloGioacchino Del Regno 	[MASTER_APSS_PROC] = &mas_apss_proc,
1708f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_GNOC_BIMC] = &slv_gnoc_bimc,
1709f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_GNOC_SNOC] = &slv_gnoc_snoc,
1710f80a1d41SAngeloGioacchino Del Regno };
1711f80a1d41SAngeloGioacchino Del Regno 
1712f80a1d41SAngeloGioacchino Del Regno static const struct regmap_config sdm660_gnoc_regmap_config = {
1713f80a1d41SAngeloGioacchino Del Regno 	.reg_bits	= 32,
1714f80a1d41SAngeloGioacchino Del Regno 	.reg_stride	= 4,
1715f80a1d41SAngeloGioacchino Del Regno 	.val_bits	= 32,
1716f80a1d41SAngeloGioacchino Del Regno 	.max_register	= 0xe000,
1717f80a1d41SAngeloGioacchino Del Regno 	.fast_io	= true,
1718f80a1d41SAngeloGioacchino Del Regno };
1719f80a1d41SAngeloGioacchino Del Regno 
1720f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_desc sdm660_gnoc = {
1721f80a1d41SAngeloGioacchino Del Regno 	.nodes = sdm660_gnoc_nodes,
1722f80a1d41SAngeloGioacchino Del Regno 	.num_nodes = ARRAY_SIZE(sdm660_gnoc_nodes),
1723f80a1d41SAngeloGioacchino Del Regno 	.regmap_cfg = &sdm660_gnoc_regmap_config,
1724f80a1d41SAngeloGioacchino Del Regno };
1725f80a1d41SAngeloGioacchino Del Regno 
1726f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_node *sdm660_mnoc_nodes[] = {
1727f80a1d41SAngeloGioacchino Del Regno 	[MASTER_CPP] = &mas_cpp,
1728f80a1d41SAngeloGioacchino Del Regno 	[MASTER_JPEG] = &mas_jpeg,
1729f80a1d41SAngeloGioacchino Del Regno 	[MASTER_MDP_P0] = &mas_mdp_p0,
1730f80a1d41SAngeloGioacchino Del Regno 	[MASTER_MDP_P1] = &mas_mdp_p1,
1731f80a1d41SAngeloGioacchino Del Regno 	[MASTER_VENUS] = &mas_venus,
1732f80a1d41SAngeloGioacchino Del Regno 	[MASTER_VFE] = &mas_vfe,
1733f80a1d41SAngeloGioacchino Del Regno 	[MASTER_CNOC_MNOC_MMSS_CFG] = &mas_cnoc_mnoc_mmss_cfg,
1734f80a1d41SAngeloGioacchino Del Regno 	[MASTER_CNOC_MNOC_CFG] = &mas_cnoc_mnoc_cfg,
1735f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_CAMERA_CFG] = &slv_camera_cfg,
1736f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_CAMERA_THROTTLE_CFG] = &slv_camera_throttle_cfg,
1737f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_MISC_CFG] = &slv_misc_cfg,
1738f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_VENUS_THROTTLE_CFG] = &slv_venus_throttle_cfg,
1739f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_VENUS_CFG] = &slv_venus_cfg,
1740f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_MMSS_CLK_XPU_CFG] = &slv_mmss_clk_xpu_cfg,
1741f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_MMSS_CLK_CFG] = &slv_mmss_clk_cfg,
1742f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_MNOC_MPU_CFG] = &slv_mnoc_mpu_cfg,
1743f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_DISPLAY_CFG] = &slv_display_cfg,
1744f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_CSI_PHY_CFG] = &slv_csi_phy_cfg,
1745f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_DISPLAY_THROTTLE_CFG] = &slv_display_throttle_cfg,
1746f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_SMMU_CFG] = &slv_smmu_cfg,
1747f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_SRVC_MNOC] = &slv_srvc_mnoc,
1748f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_MNOC_BIMC] = &slv_mnoc_bimc,
1749f80a1d41SAngeloGioacchino Del Regno };
1750f80a1d41SAngeloGioacchino Del Regno 
1751f80a1d41SAngeloGioacchino Del Regno static const struct regmap_config sdm660_mnoc_regmap_config = {
1752f80a1d41SAngeloGioacchino Del Regno 	.reg_bits	= 32,
1753f80a1d41SAngeloGioacchino Del Regno 	.reg_stride	= 4,
1754f80a1d41SAngeloGioacchino Del Regno 	.val_bits	= 32,
1755f80a1d41SAngeloGioacchino Del Regno 	.max_register	= 0x10000,
1756f80a1d41SAngeloGioacchino Del Regno 	.fast_io	= true,
1757f80a1d41SAngeloGioacchino Del Regno };
1758f80a1d41SAngeloGioacchino Del Regno 
1759f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_desc sdm660_mnoc = {
1760f80a1d41SAngeloGioacchino Del Regno 	.nodes = sdm660_mnoc_nodes,
1761f80a1d41SAngeloGioacchino Del Regno 	.num_nodes = ARRAY_SIZE(sdm660_mnoc_nodes),
1762f80a1d41SAngeloGioacchino Del Regno 	.regmap_cfg = &sdm660_mnoc_regmap_config,
1763f80a1d41SAngeloGioacchino Del Regno };
1764f80a1d41SAngeloGioacchino Del Regno 
1765f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_node *sdm660_snoc_nodes[] = {
1766f80a1d41SAngeloGioacchino Del Regno 	[MASTER_QDSS_ETR] = &mas_qdss_etr,
1767f80a1d41SAngeloGioacchino Del Regno 	[MASTER_QDSS_BAM] = &mas_qdss_bam,
1768f80a1d41SAngeloGioacchino Del Regno 	[MASTER_SNOC_CFG] = &mas_snoc_cfg,
1769f80a1d41SAngeloGioacchino Del Regno 	[MASTER_BIMC_SNOC] = &mas_bimc_snoc,
1770f80a1d41SAngeloGioacchino Del Regno 	[MASTER_A2NOC_SNOC] = &mas_a2noc_snoc,
1771f80a1d41SAngeloGioacchino Del Regno 	[MASTER_GNOC_SNOC] = &mas_gnoc_snoc,
1772f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_HMSS] = &slv_hmss,
1773f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_LPASS] = &slv_lpass,
1774f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_WLAN] = &slv_wlan,
1775f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_CDSP] = &slv_cdsp,
1776f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_IPA] = &slv_ipa,
1777f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_SNOC_BIMC] = &slv_snoc_bimc,
1778f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_SNOC_CNOC] = &slv_snoc_cnoc,
1779f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_IMEM] = &slv_imem,
1780f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_PIMEM] = &slv_pimem,
1781f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_QDSS_STM] = &slv_qdss_stm,
1782f80a1d41SAngeloGioacchino Del Regno 	[SLAVE_SRVC_SNOC] = &slv_srvc_snoc,
1783f80a1d41SAngeloGioacchino Del Regno };
1784f80a1d41SAngeloGioacchino Del Regno 
1785f80a1d41SAngeloGioacchino Del Regno static const struct regmap_config sdm660_snoc_regmap_config = {
1786f80a1d41SAngeloGioacchino Del Regno 	.reg_bits	= 32,
1787f80a1d41SAngeloGioacchino Del Regno 	.reg_stride	= 4,
1788f80a1d41SAngeloGioacchino Del Regno 	.val_bits	= 32,
1789f80a1d41SAngeloGioacchino Del Regno 	.max_register	= 0x20000,
1790f80a1d41SAngeloGioacchino Del Regno 	.fast_io	= true,
1791f80a1d41SAngeloGioacchino Del Regno };
1792f80a1d41SAngeloGioacchino Del Regno 
1793f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_desc sdm660_snoc = {
1794f80a1d41SAngeloGioacchino Del Regno 	.nodes = sdm660_snoc_nodes,
1795f80a1d41SAngeloGioacchino Del Regno 	.num_nodes = ARRAY_SIZE(sdm660_snoc_nodes),
1796f80a1d41SAngeloGioacchino Del Regno 	.regmap_cfg = &sdm660_snoc_regmap_config,
1797f80a1d41SAngeloGioacchino Del Regno };
1798f80a1d41SAngeloGioacchino Del Regno 
1799f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_bimc_set_qos_health(struct regmap *rmap,
1800f80a1d41SAngeloGioacchino Del Regno 					struct qcom_icc_qos *qos,
1801f80a1d41SAngeloGioacchino Del Regno 					int regnum)
1802f80a1d41SAngeloGioacchino Del Regno {
1803f80a1d41SAngeloGioacchino Del Regno 	u32 val;
1804f80a1d41SAngeloGioacchino Del Regno 	u32 mask;
1805f80a1d41SAngeloGioacchino Del Regno 
1806f80a1d41SAngeloGioacchino Del Regno 	val = qos->prio_level;
1807f80a1d41SAngeloGioacchino Del Regno 	mask = M_BKE_HEALTH_CFG_PRIOLVL_MASK;
1808f80a1d41SAngeloGioacchino Del Regno 
1809f80a1d41SAngeloGioacchino Del Regno 	val |= qos->areq_prio << M_BKE_HEALTH_CFG_AREQPRIO_SHIFT;
1810f80a1d41SAngeloGioacchino Del Regno 	mask |= M_BKE_HEALTH_CFG_AREQPRIO_MASK;
1811f80a1d41SAngeloGioacchino Del Regno 
1812f80a1d41SAngeloGioacchino Del Regno 	/* LIMITCMDS is not present on M_BKE_HEALTH_3 */
1813f80a1d41SAngeloGioacchino Del Regno 	if (regnum != 3) {
1814f80a1d41SAngeloGioacchino Del Regno 		val |= qos->limit_commands << M_BKE_HEALTH_CFG_LIMITCMDS_SHIFT;
1815f80a1d41SAngeloGioacchino Del Regno 		mask |= M_BKE_HEALTH_CFG_LIMITCMDS_MASK;
1816f80a1d41SAngeloGioacchino Del Regno 	}
1817f80a1d41SAngeloGioacchino Del Regno 
1818f80a1d41SAngeloGioacchino Del Regno 	return regmap_update_bits(rmap,
1819f80a1d41SAngeloGioacchino Del Regno 				  M_BKE_HEALTH_CFG_ADDR(regnum, qos->qos_port),
1820f80a1d41SAngeloGioacchino Del Regno 				  mask, val);
1821f80a1d41SAngeloGioacchino Del Regno }
1822f80a1d41SAngeloGioacchino Del Regno 
1823f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_set_bimc_qos(struct icc_node *src, u64 max_bw,
1824f80a1d41SAngeloGioacchino Del Regno 				 bool bypass_mode)
1825f80a1d41SAngeloGioacchino Del Regno {
1826f80a1d41SAngeloGioacchino Del Regno 	struct qcom_icc_provider *qp;
1827f80a1d41SAngeloGioacchino Del Regno 	struct qcom_icc_node *qn;
1828f80a1d41SAngeloGioacchino Del Regno 	struct icc_provider *provider;
1829f80a1d41SAngeloGioacchino Del Regno 	u32 mode = NOC_QOS_MODE_BYPASS;
1830f80a1d41SAngeloGioacchino Del Regno 	u32 val = 0;
1831f80a1d41SAngeloGioacchino Del Regno 	int i, rc = 0;
1832f80a1d41SAngeloGioacchino Del Regno 
1833f80a1d41SAngeloGioacchino Del Regno 	qn = src->data;
1834f80a1d41SAngeloGioacchino Del Regno 	provider = src->provider;
1835f80a1d41SAngeloGioacchino Del Regno 	qp = to_qcom_provider(provider);
1836f80a1d41SAngeloGioacchino Del Regno 
1837*656ba110SDmitry Baryshkov 	if (qn->qos.qos_mode != NOC_QOS_MODE_INVALID)
1838f80a1d41SAngeloGioacchino Del Regno 		mode = qn->qos.qos_mode;
1839f80a1d41SAngeloGioacchino Del Regno 
1840f80a1d41SAngeloGioacchino Del Regno 	/* QoS Priority: The QoS Health parameters are getting considered
1841f80a1d41SAngeloGioacchino Del Regno 	 * only if we are NOT in Bypass Mode.
1842f80a1d41SAngeloGioacchino Del Regno 	 */
1843f80a1d41SAngeloGioacchino Del Regno 	if (mode != NOC_QOS_MODE_BYPASS) {
1844f80a1d41SAngeloGioacchino Del Regno 		for (i = 3; i >= 0; i--) {
1845f80a1d41SAngeloGioacchino Del Regno 			rc = qcom_icc_bimc_set_qos_health(qp->regmap,
1846f80a1d41SAngeloGioacchino Del Regno 							  &qn->qos, i);
1847f80a1d41SAngeloGioacchino Del Regno 			if (rc)
1848f80a1d41SAngeloGioacchino Del Regno 				return rc;
1849f80a1d41SAngeloGioacchino Del Regno 		}
1850f80a1d41SAngeloGioacchino Del Regno 
1851f80a1d41SAngeloGioacchino Del Regno 		/* Set BKE_EN to 1 when Fixed, Regulator or Limiter Mode */
1852f80a1d41SAngeloGioacchino Del Regno 		val = 1;
1853f80a1d41SAngeloGioacchino Del Regno 	}
1854f80a1d41SAngeloGioacchino Del Regno 
1855f80a1d41SAngeloGioacchino Del Regno 	return regmap_update_bits(qp->regmap, M_BKE_EN_ADDR(qn->qos.qos_port),
1856f80a1d41SAngeloGioacchino Del Regno 				  M_BKE_EN_EN_BMASK, val);
1857f80a1d41SAngeloGioacchino Del Regno }
1858f80a1d41SAngeloGioacchino Del Regno 
1859f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_noc_set_qos_priority(struct regmap *rmap,
1860f80a1d41SAngeloGioacchino Del Regno 					 struct qcom_icc_qos *qos)
1861f80a1d41SAngeloGioacchino Del Regno {
1862f80a1d41SAngeloGioacchino Del Regno 	u32 val;
1863f80a1d41SAngeloGioacchino Del Regno 	int rc;
1864f80a1d41SAngeloGioacchino Del Regno 
1865f80a1d41SAngeloGioacchino Del Regno 	/* Must be updated one at a time, P1 first, P0 last */
1866f80a1d41SAngeloGioacchino Del Regno 	val = qos->areq_prio << NOC_QOS_PRIORITY_P1_SHIFT;
1867f80a1d41SAngeloGioacchino Del Regno 	rc = regmap_update_bits(rmap, NOC_QOS_PRIORITYn_ADDR(qos->qos_port),
18685833c9b8SShawn Guo 				NOC_QOS_PRIORITY_P1_MASK, val);
1869f80a1d41SAngeloGioacchino Del Regno 	if (rc)
1870f80a1d41SAngeloGioacchino Del Regno 		return rc;
1871f80a1d41SAngeloGioacchino Del Regno 
1872f80a1d41SAngeloGioacchino Del Regno 	return regmap_update_bits(rmap, NOC_QOS_PRIORITYn_ADDR(qos->qos_port),
18735833c9b8SShawn Guo 				  NOC_QOS_PRIORITY_P0_MASK, qos->prio_level);
1874f80a1d41SAngeloGioacchino Del Regno }
1875f80a1d41SAngeloGioacchino Del Regno 
1876f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_set_noc_qos(struct icc_node *src, u64 max_bw)
1877f80a1d41SAngeloGioacchino Del Regno {
1878f80a1d41SAngeloGioacchino Del Regno 	struct qcom_icc_provider *qp;
1879f80a1d41SAngeloGioacchino Del Regno 	struct qcom_icc_node *qn;
1880f80a1d41SAngeloGioacchino Del Regno 	struct icc_provider *provider;
1881f80a1d41SAngeloGioacchino Del Regno 	u32 mode = NOC_QOS_MODE_BYPASS;
1882f80a1d41SAngeloGioacchino Del Regno 	int rc = 0;
1883f80a1d41SAngeloGioacchino Del Regno 
1884f80a1d41SAngeloGioacchino Del Regno 	qn = src->data;
1885f80a1d41SAngeloGioacchino Del Regno 	provider = src->provider;
1886f80a1d41SAngeloGioacchino Del Regno 	qp = to_qcom_provider(provider);
1887f80a1d41SAngeloGioacchino Del Regno 
1888f80a1d41SAngeloGioacchino Del Regno 	if (qn->qos.qos_port < 0) {
1889f80a1d41SAngeloGioacchino Del Regno 		dev_dbg(src->provider->dev,
1890f80a1d41SAngeloGioacchino Del Regno 			"NoC QoS: Skipping %s: vote aggregated on parent.\n",
1891f80a1d41SAngeloGioacchino Del Regno 			qn->name);
1892f80a1d41SAngeloGioacchino Del Regno 		return 0;
1893f80a1d41SAngeloGioacchino Del Regno 	}
1894f80a1d41SAngeloGioacchino Del Regno 
1895*656ba110SDmitry Baryshkov 	if (qn->qos.qos_mode != NOC_QOS_MODE_INVALID)
1896f80a1d41SAngeloGioacchino Del Regno 		mode = qn->qos.qos_mode;
1897f80a1d41SAngeloGioacchino Del Regno 
1898f80a1d41SAngeloGioacchino Del Regno 	if (mode == NOC_QOS_MODE_FIXED) {
1899f80a1d41SAngeloGioacchino Del Regno 		dev_dbg(src->provider->dev, "NoC QoS: %s: Set Fixed mode\n",
1900f80a1d41SAngeloGioacchino Del Regno 			qn->name);
1901f80a1d41SAngeloGioacchino Del Regno 		rc = qcom_icc_noc_set_qos_priority(qp->regmap, &qn->qos);
1902f80a1d41SAngeloGioacchino Del Regno 		if (rc)
1903f80a1d41SAngeloGioacchino Del Regno 			return rc;
1904f80a1d41SAngeloGioacchino Del Regno 	} else if (mode == NOC_QOS_MODE_BYPASS) {
1905f80a1d41SAngeloGioacchino Del Regno 		dev_dbg(src->provider->dev, "NoC QoS: %s: Set Bypass mode\n",
1906f80a1d41SAngeloGioacchino Del Regno 			qn->name);
1907f80a1d41SAngeloGioacchino Del Regno 	}
1908f80a1d41SAngeloGioacchino Del Regno 
1909f80a1d41SAngeloGioacchino Del Regno 	return regmap_update_bits(qp->regmap,
1910f80a1d41SAngeloGioacchino Del Regno 				  NOC_QOS_MODEn_ADDR(qn->qos.qos_port),
1911f80a1d41SAngeloGioacchino Del Regno 				  NOC_QOS_MODEn_MASK, mode);
1912f80a1d41SAngeloGioacchino Del Regno }
1913f80a1d41SAngeloGioacchino Del Regno 
1914f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_qos_set(struct icc_node *node, u64 sum_bw)
1915f80a1d41SAngeloGioacchino Del Regno {
1916f80a1d41SAngeloGioacchino Del Regno 	struct qcom_icc_provider *qp = to_qcom_provider(node->provider);
1917f80a1d41SAngeloGioacchino Del Regno 	struct qcom_icc_node *qn = node->data;
1918f80a1d41SAngeloGioacchino Del Regno 
1919f80a1d41SAngeloGioacchino Del Regno 	dev_dbg(node->provider->dev, "Setting QoS for %s\n", qn->name);
1920f80a1d41SAngeloGioacchino Del Regno 
1921f80a1d41SAngeloGioacchino Del Regno 	if (qp->is_bimc_node)
1922f80a1d41SAngeloGioacchino Del Regno 		return qcom_icc_set_bimc_qos(node, sum_bw,
1923f80a1d41SAngeloGioacchino Del Regno 				(qn->qos.qos_mode == NOC_QOS_MODE_BYPASS));
1924f80a1d41SAngeloGioacchino Del Regno 
1925f80a1d41SAngeloGioacchino Del Regno 	return qcom_icc_set_noc_qos(node, sum_bw);
1926f80a1d41SAngeloGioacchino Del Regno }
1927f80a1d41SAngeloGioacchino Del Regno 
1928f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_rpm_set(int mas_rpm_id, int slv_rpm_id, u64 sum_bw)
1929f80a1d41SAngeloGioacchino Del Regno {
1930f80a1d41SAngeloGioacchino Del Regno 	int ret = 0;
1931f80a1d41SAngeloGioacchino Del Regno 
1932f80a1d41SAngeloGioacchino Del Regno 	if (mas_rpm_id != -1) {
1933f80a1d41SAngeloGioacchino Del Regno 		ret = qcom_icc_rpm_smd_send(QCOM_SMD_RPM_ACTIVE_STATE,
1934f80a1d41SAngeloGioacchino Del Regno 					    RPM_BUS_MASTER_REQ,
1935f80a1d41SAngeloGioacchino Del Regno 					    mas_rpm_id,
1936f80a1d41SAngeloGioacchino Del Regno 					    sum_bw);
1937f80a1d41SAngeloGioacchino Del Regno 		if (ret) {
1938f80a1d41SAngeloGioacchino Del Regno 			pr_err("qcom_icc_rpm_smd_send mas %d error %d\n",
1939f80a1d41SAngeloGioacchino Del Regno 			       mas_rpm_id, ret);
1940f80a1d41SAngeloGioacchino Del Regno 			return ret;
1941f80a1d41SAngeloGioacchino Del Regno 		}
1942f80a1d41SAngeloGioacchino Del Regno 	}
1943f80a1d41SAngeloGioacchino Del Regno 
1944f80a1d41SAngeloGioacchino Del Regno 	if (slv_rpm_id != -1) {
1945f80a1d41SAngeloGioacchino Del Regno 		ret = qcom_icc_rpm_smd_send(QCOM_SMD_RPM_ACTIVE_STATE,
1946f80a1d41SAngeloGioacchino Del Regno 					    RPM_BUS_SLAVE_REQ,
1947f80a1d41SAngeloGioacchino Del Regno 					    slv_rpm_id,
1948f80a1d41SAngeloGioacchino Del Regno 					    sum_bw);
1949f80a1d41SAngeloGioacchino Del Regno 		if (ret) {
1950f80a1d41SAngeloGioacchino Del Regno 			pr_err("qcom_icc_rpm_smd_send slv %d error %d\n",
1951f80a1d41SAngeloGioacchino Del Regno 			       slv_rpm_id, ret);
1952f80a1d41SAngeloGioacchino Del Regno 			return ret;
1953f80a1d41SAngeloGioacchino Del Regno 		}
1954f80a1d41SAngeloGioacchino Del Regno 	}
1955f80a1d41SAngeloGioacchino Del Regno 
1956f80a1d41SAngeloGioacchino Del Regno 	return ret;
1957f80a1d41SAngeloGioacchino Del Regno }
1958f80a1d41SAngeloGioacchino Del Regno 
1959f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_set(struct icc_node *src, struct icc_node *dst)
1960f80a1d41SAngeloGioacchino Del Regno {
1961f80a1d41SAngeloGioacchino Del Regno 	struct qcom_icc_provider *qp;
1962f80a1d41SAngeloGioacchino Del Regno 	struct qcom_icc_node *qn;
1963f80a1d41SAngeloGioacchino Del Regno 	struct icc_provider *provider;
1964f80a1d41SAngeloGioacchino Del Regno 	struct icc_node *n;
1965f80a1d41SAngeloGioacchino Del Regno 	u64 sum_bw;
1966f80a1d41SAngeloGioacchino Del Regno 	u64 max_peak_bw;
1967f80a1d41SAngeloGioacchino Del Regno 	u64 rate;
1968f80a1d41SAngeloGioacchino Del Regno 	u32 agg_avg = 0;
1969f80a1d41SAngeloGioacchino Del Regno 	u32 agg_peak = 0;
1970f80a1d41SAngeloGioacchino Del Regno 	int ret, i;
1971f80a1d41SAngeloGioacchino Del Regno 
1972f80a1d41SAngeloGioacchino Del Regno 	qn = src->data;
1973f80a1d41SAngeloGioacchino Del Regno 	provider = src->provider;
1974f80a1d41SAngeloGioacchino Del Regno 	qp = to_qcom_provider(provider);
1975f80a1d41SAngeloGioacchino Del Regno 
1976f80a1d41SAngeloGioacchino Del Regno 	list_for_each_entry(n, &provider->nodes, node_list)
1977f80a1d41SAngeloGioacchino Del Regno 		provider->aggregate(n, 0, n->avg_bw, n->peak_bw,
1978f80a1d41SAngeloGioacchino Del Regno 				    &agg_avg, &agg_peak);
1979f80a1d41SAngeloGioacchino Del Regno 
1980f80a1d41SAngeloGioacchino Del Regno 	sum_bw = icc_units_to_bps(agg_avg);
1981f80a1d41SAngeloGioacchino Del Regno 	max_peak_bw = icc_units_to_bps(agg_peak);
1982f80a1d41SAngeloGioacchino Del Regno 
1983f80a1d41SAngeloGioacchino Del Regno 	if (!qn->qos.ap_owned) {
1984f80a1d41SAngeloGioacchino Del Regno 		/* send bandwidth request message to the RPM processor */
1985f80a1d41SAngeloGioacchino Del Regno 		ret = qcom_icc_rpm_set(qn->mas_rpm_id, qn->slv_rpm_id, sum_bw);
1986f80a1d41SAngeloGioacchino Del Regno 		if (ret)
1987f80a1d41SAngeloGioacchino Del Regno 			return ret;
1988*656ba110SDmitry Baryshkov 	} else if (qn->qos.qos_mode != NOC_QOS_MODE_INVALID) {
1989f80a1d41SAngeloGioacchino Del Regno 		/* set bandwidth directly from the AP */
1990f80a1d41SAngeloGioacchino Del Regno 		ret = qcom_icc_qos_set(src, sum_bw);
1991f80a1d41SAngeloGioacchino Del Regno 		if (ret)
1992f80a1d41SAngeloGioacchino Del Regno 			return ret;
1993f80a1d41SAngeloGioacchino Del Regno 	}
1994f80a1d41SAngeloGioacchino Del Regno 
1995f80a1d41SAngeloGioacchino Del Regno 	rate = max(sum_bw, max_peak_bw);
1996f80a1d41SAngeloGioacchino Del Regno 
1997f80a1d41SAngeloGioacchino Del Regno 	do_div(rate, qn->buswidth);
1998f80a1d41SAngeloGioacchino Del Regno 
1999f80a1d41SAngeloGioacchino Del Regno 	if (qn->rate == rate)
2000f80a1d41SAngeloGioacchino Del Regno 		return 0;
2001f80a1d41SAngeloGioacchino Del Regno 
2002f80a1d41SAngeloGioacchino Del Regno 	for (i = 0; i < qp->num_clks; i++) {
2003f80a1d41SAngeloGioacchino Del Regno 		ret = clk_set_rate(qp->bus_clks[i].clk, rate);
2004f80a1d41SAngeloGioacchino Del Regno 		if (ret) {
2005f80a1d41SAngeloGioacchino Del Regno 			pr_err("%s clk_set_rate error: %d\n",
2006f80a1d41SAngeloGioacchino Del Regno 			       qp->bus_clks[i].id, ret);
2007f80a1d41SAngeloGioacchino Del Regno 			return ret;
2008f80a1d41SAngeloGioacchino Del Regno 		}
2009f80a1d41SAngeloGioacchino Del Regno 	}
2010f80a1d41SAngeloGioacchino Del Regno 
2011f80a1d41SAngeloGioacchino Del Regno 	qn->rate = rate;
2012f80a1d41SAngeloGioacchino Del Regno 
2013f80a1d41SAngeloGioacchino Del Regno 	return 0;
2014f80a1d41SAngeloGioacchino Del Regno }
2015f80a1d41SAngeloGioacchino Del Regno 
2016f80a1d41SAngeloGioacchino Del Regno static int qnoc_probe(struct platform_device *pdev)
2017f80a1d41SAngeloGioacchino Del Regno {
2018f80a1d41SAngeloGioacchino Del Regno 	struct device *dev = &pdev->dev;
2019f80a1d41SAngeloGioacchino Del Regno 	const struct qcom_icc_desc *desc;
2020f80a1d41SAngeloGioacchino Del Regno 	struct icc_onecell_data *data;
2021f80a1d41SAngeloGioacchino Del Regno 	struct icc_provider *provider;
2022f80a1d41SAngeloGioacchino Del Regno 	struct qcom_icc_node **qnodes;
2023f80a1d41SAngeloGioacchino Del Regno 	struct qcom_icc_provider *qp;
2024f80a1d41SAngeloGioacchino Del Regno 	struct icc_node *node;
2025f80a1d41SAngeloGioacchino Del Regno 	struct resource *res;
2026f80a1d41SAngeloGioacchino Del Regno 	size_t num_nodes, i;
2027f80a1d41SAngeloGioacchino Del Regno 	int ret;
2028f80a1d41SAngeloGioacchino Del Regno 
2029f80a1d41SAngeloGioacchino Del Regno 	/* wait for the RPM proxy */
2030f80a1d41SAngeloGioacchino Del Regno 	if (!qcom_icc_rpm_smd_available())
2031f80a1d41SAngeloGioacchino Del Regno 		return -EPROBE_DEFER;
2032f80a1d41SAngeloGioacchino Del Regno 
2033f80a1d41SAngeloGioacchino Del Regno 	desc = of_device_get_match_data(dev);
2034f80a1d41SAngeloGioacchino Del Regno 	if (!desc)
2035f80a1d41SAngeloGioacchino Del Regno 		return -EINVAL;
2036f80a1d41SAngeloGioacchino Del Regno 
2037f80a1d41SAngeloGioacchino Del Regno 	qnodes = desc->nodes;
2038f80a1d41SAngeloGioacchino Del Regno 	num_nodes = desc->num_nodes;
2039f80a1d41SAngeloGioacchino Del Regno 
2040f80a1d41SAngeloGioacchino Del Regno 	qp = devm_kzalloc(dev, sizeof(*qp), GFP_KERNEL);
2041f80a1d41SAngeloGioacchino Del Regno 	if (!qp)
2042f80a1d41SAngeloGioacchino Del Regno 		return -ENOMEM;
2043f80a1d41SAngeloGioacchino Del Regno 
2044f80a1d41SAngeloGioacchino Del Regno 	data = devm_kzalloc(dev, struct_size(data, nodes, num_nodes),
2045f80a1d41SAngeloGioacchino Del Regno 			    GFP_KERNEL);
2046f80a1d41SAngeloGioacchino Del Regno 	if (!data)
2047f80a1d41SAngeloGioacchino Del Regno 		return -ENOMEM;
2048f80a1d41SAngeloGioacchino Del Regno 
2049f80a1d41SAngeloGioacchino Del Regno 	if (of_device_is_compatible(dev->of_node, "qcom,sdm660-mnoc")) {
2050f80a1d41SAngeloGioacchino Del Regno 		qp->bus_clks = devm_kmemdup(dev, bus_mm_clocks,
2051f80a1d41SAngeloGioacchino Del Regno 					    sizeof(bus_mm_clocks), GFP_KERNEL);
2052f80a1d41SAngeloGioacchino Del Regno 		qp->num_clks = ARRAY_SIZE(bus_mm_clocks);
205313404ac8SShawn Guo 	} else if (of_device_is_compatible(dev->of_node, "qcom,sdm660-a2noc")) {
205413404ac8SShawn Guo 		qp->bus_clks = devm_kmemdup(dev, bus_a2noc_clocks,
205513404ac8SShawn Guo 					    sizeof(bus_a2noc_clocks), GFP_KERNEL);
205613404ac8SShawn Guo 		qp->num_clks = ARRAY_SIZE(bus_a2noc_clocks);
2057f80a1d41SAngeloGioacchino Del Regno 	} else {
2058f80a1d41SAngeloGioacchino Del Regno 		if (of_device_is_compatible(dev->of_node, "qcom,sdm660-bimc"))
2059f80a1d41SAngeloGioacchino Del Regno 			qp->is_bimc_node = true;
2060f80a1d41SAngeloGioacchino Del Regno 
2061f80a1d41SAngeloGioacchino Del Regno 		qp->bus_clks = devm_kmemdup(dev, bus_clocks, sizeof(bus_clocks),
2062f80a1d41SAngeloGioacchino Del Regno 					    GFP_KERNEL);
2063f80a1d41SAngeloGioacchino Del Regno 		qp->num_clks = ARRAY_SIZE(bus_clocks);
2064f80a1d41SAngeloGioacchino Del Regno 	}
2065f80a1d41SAngeloGioacchino Del Regno 	if (!qp->bus_clks)
2066f80a1d41SAngeloGioacchino Del Regno 		return -ENOMEM;
2067f80a1d41SAngeloGioacchino Del Regno 
2068f80a1d41SAngeloGioacchino Del Regno 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2069f80a1d41SAngeloGioacchino Del Regno 	if (!res)
2070f80a1d41SAngeloGioacchino Del Regno 		return -ENODEV;
2071f80a1d41SAngeloGioacchino Del Regno 
2072f80a1d41SAngeloGioacchino Del Regno 	qp->mmio = devm_ioremap_resource(dev, res);
2073f80a1d41SAngeloGioacchino Del Regno 	if (IS_ERR(qp->mmio)) {
2074f80a1d41SAngeloGioacchino Del Regno 		dev_err(dev, "Cannot ioremap interconnect bus resource\n");
2075f80a1d41SAngeloGioacchino Del Regno 		return PTR_ERR(qp->mmio);
2076f80a1d41SAngeloGioacchino Del Regno 	}
2077f80a1d41SAngeloGioacchino Del Regno 
2078f80a1d41SAngeloGioacchino Del Regno 	qp->regmap = devm_regmap_init_mmio(dev, qp->mmio, desc->regmap_cfg);
2079f80a1d41SAngeloGioacchino Del Regno 	if (IS_ERR(qp->regmap)) {
2080f80a1d41SAngeloGioacchino Del Regno 		dev_err(dev, "Cannot regmap interconnect bus resource\n");
2081f80a1d41SAngeloGioacchino Del Regno 		return PTR_ERR(qp->regmap);
2082f80a1d41SAngeloGioacchino Del Regno 	}
2083f80a1d41SAngeloGioacchino Del Regno 
2084f80a1d41SAngeloGioacchino Del Regno 	ret = devm_clk_bulk_get(dev, qp->num_clks, qp->bus_clks);
2085f80a1d41SAngeloGioacchino Del Regno 	if (ret)
2086f80a1d41SAngeloGioacchino Del Regno 		return ret;
2087f80a1d41SAngeloGioacchino Del Regno 
2088f80a1d41SAngeloGioacchino Del Regno 	ret = clk_bulk_prepare_enable(qp->num_clks, qp->bus_clks);
2089f80a1d41SAngeloGioacchino Del Regno 	if (ret)
2090f80a1d41SAngeloGioacchino Del Regno 		return ret;
2091f80a1d41SAngeloGioacchino Del Regno 
2092f80a1d41SAngeloGioacchino Del Regno 	provider = &qp->provider;
2093f80a1d41SAngeloGioacchino Del Regno 	INIT_LIST_HEAD(&provider->nodes);
2094f80a1d41SAngeloGioacchino Del Regno 	provider->dev = dev;
2095f80a1d41SAngeloGioacchino Del Regno 	provider->set = qcom_icc_set;
2096f80a1d41SAngeloGioacchino Del Regno 	provider->aggregate = icc_std_aggregate;
2097f80a1d41SAngeloGioacchino Del Regno 	provider->xlate = of_icc_xlate_onecell;
2098f80a1d41SAngeloGioacchino Del Regno 	provider->data = data;
2099f80a1d41SAngeloGioacchino Del Regno 
2100f80a1d41SAngeloGioacchino Del Regno 	ret = icc_provider_add(provider);
2101f80a1d41SAngeloGioacchino Del Regno 	if (ret) {
2102f80a1d41SAngeloGioacchino Del Regno 		dev_err(dev, "error adding interconnect provider: %d\n", ret);
2103f80a1d41SAngeloGioacchino Del Regno 		clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks);
2104f80a1d41SAngeloGioacchino Del Regno 		return ret;
2105f80a1d41SAngeloGioacchino Del Regno 	}
2106f80a1d41SAngeloGioacchino Del Regno 
2107f80a1d41SAngeloGioacchino Del Regno 	for (i = 0; i < num_nodes; i++) {
2108f80a1d41SAngeloGioacchino Del Regno 		size_t j;
2109f80a1d41SAngeloGioacchino Del Regno 
2110f80a1d41SAngeloGioacchino Del Regno 		node = icc_node_create(qnodes[i]->id);
2111f80a1d41SAngeloGioacchino Del Regno 		if (IS_ERR(node)) {
2112f80a1d41SAngeloGioacchino Del Regno 			ret = PTR_ERR(node);
2113f80a1d41SAngeloGioacchino Del Regno 			goto err;
2114f80a1d41SAngeloGioacchino Del Regno 		}
2115f80a1d41SAngeloGioacchino Del Regno 
2116f80a1d41SAngeloGioacchino Del Regno 		node->name = qnodes[i]->name;
2117f80a1d41SAngeloGioacchino Del Regno 		node->data = qnodes[i];
2118f80a1d41SAngeloGioacchino Del Regno 		icc_node_add(node, provider);
2119f80a1d41SAngeloGioacchino Del Regno 
2120f80a1d41SAngeloGioacchino Del Regno 		for (j = 0; j < qnodes[i]->num_links; j++)
2121f80a1d41SAngeloGioacchino Del Regno 			icc_link_create(node, qnodes[i]->links[j]);
2122f80a1d41SAngeloGioacchino Del Regno 
2123f80a1d41SAngeloGioacchino Del Regno 		data->nodes[i] = node;
2124f80a1d41SAngeloGioacchino Del Regno 	}
2125f80a1d41SAngeloGioacchino Del Regno 	data->num_nodes = num_nodes;
2126f80a1d41SAngeloGioacchino Del Regno 	platform_set_drvdata(pdev, qp);
2127f80a1d41SAngeloGioacchino Del Regno 
2128f80a1d41SAngeloGioacchino Del Regno 	return 0;
2129f80a1d41SAngeloGioacchino Del Regno err:
2130f80a1d41SAngeloGioacchino Del Regno 	icc_nodes_remove(provider);
2131f80a1d41SAngeloGioacchino Del Regno 	clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks);
2132f80a1d41SAngeloGioacchino Del Regno 	icc_provider_del(provider);
2133f80a1d41SAngeloGioacchino Del Regno 
2134f80a1d41SAngeloGioacchino Del Regno 	return ret;
2135f80a1d41SAngeloGioacchino Del Regno }
2136f80a1d41SAngeloGioacchino Del Regno 
2137f80a1d41SAngeloGioacchino Del Regno static int qnoc_remove(struct platform_device *pdev)
2138f80a1d41SAngeloGioacchino Del Regno {
2139f80a1d41SAngeloGioacchino Del Regno 	struct qcom_icc_provider *qp = platform_get_drvdata(pdev);
2140f80a1d41SAngeloGioacchino Del Regno 
2141f80a1d41SAngeloGioacchino Del Regno 	icc_nodes_remove(&qp->provider);
2142f80a1d41SAngeloGioacchino Del Regno 	clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks);
2143f80a1d41SAngeloGioacchino Del Regno 	return icc_provider_del(&qp->provider);
2144f80a1d41SAngeloGioacchino Del Regno }
2145f80a1d41SAngeloGioacchino Del Regno 
2146f80a1d41SAngeloGioacchino Del Regno static const struct of_device_id sdm660_noc_of_match[] = {
2147f80a1d41SAngeloGioacchino Del Regno 	{ .compatible = "qcom,sdm660-a2noc", .data = &sdm660_a2noc },
2148f80a1d41SAngeloGioacchino Del Regno 	{ .compatible = "qcom,sdm660-bimc", .data = &sdm660_bimc },
2149f80a1d41SAngeloGioacchino Del Regno 	{ .compatible = "qcom,sdm660-cnoc", .data = &sdm660_cnoc },
2150f80a1d41SAngeloGioacchino Del Regno 	{ .compatible = "qcom,sdm660-gnoc", .data = &sdm660_gnoc },
2151f80a1d41SAngeloGioacchino Del Regno 	{ .compatible = "qcom,sdm660-mnoc", .data = &sdm660_mnoc },
2152f80a1d41SAngeloGioacchino Del Regno 	{ .compatible = "qcom,sdm660-snoc", .data = &sdm660_snoc },
2153f80a1d41SAngeloGioacchino Del Regno 	{ },
2154f80a1d41SAngeloGioacchino Del Regno };
2155f80a1d41SAngeloGioacchino Del Regno MODULE_DEVICE_TABLE(of, sdm660_noc_of_match);
2156f80a1d41SAngeloGioacchino Del Regno 
2157f80a1d41SAngeloGioacchino Del Regno static struct platform_driver sdm660_noc_driver = {
2158f80a1d41SAngeloGioacchino Del Regno 	.probe = qnoc_probe,
2159f80a1d41SAngeloGioacchino Del Regno 	.remove = qnoc_remove,
2160f80a1d41SAngeloGioacchino Del Regno 	.driver = {
2161f80a1d41SAngeloGioacchino Del Regno 		.name = "qnoc-sdm660",
2162f80a1d41SAngeloGioacchino Del Regno 		.of_match_table = sdm660_noc_of_match,
2163f80a1d41SAngeloGioacchino Del Regno 	},
2164f80a1d41SAngeloGioacchino Del Regno };
2165f80a1d41SAngeloGioacchino Del Regno module_platform_driver(sdm660_noc_driver);
2166f80a1d41SAngeloGioacchino Del Regno MODULE_DESCRIPTION("Qualcomm sdm660 NoC driver");
2167f80a1d41SAngeloGioacchino Del Regno MODULE_LICENSE("GPL v2");
2168