xref: /linux/drivers/interconnect/qcom/qcm2290.c (revision 594ce0b8a998aa4d05827cd7c0d0dcec9a1e3ae2)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Qualcomm QCM2290 Network-on-Chip (NoC) QoS driver
4  *
5  * Copyright (c) 2021, Linaro Ltd.
6  *
7  */
8 
9 #include <dt-bindings/interconnect/qcom,qcm2290.h>
10 #include <linux/device.h>
11 #include <linux/interconnect-provider.h>
12 #include <linux/io.h>
13 #include <linux/mod_devicetable.h>
14 #include <linux/module.h>
15 #include <linux/platform_device.h>
16 #include <linux/regmap.h>
17 #include <linux/slab.h>
18 
19 #include "icc-rpm.h"
20 
21 enum {
22 	QCM2290_MASTER_APPSS_PROC = 1,
23 	QCM2290_MASTER_SNOC_BIMC_RT,
24 	QCM2290_MASTER_SNOC_BIMC_NRT,
25 	QCM2290_MASTER_SNOC_BIMC,
26 	QCM2290_MASTER_TCU_0,
27 	QCM2290_MASTER_GFX3D,
28 	QCM2290_MASTER_SNOC_CNOC,
29 	QCM2290_MASTER_QDSS_DAP,
30 	QCM2290_MASTER_CRYPTO_CORE0,
31 	QCM2290_MASTER_SNOC_CFG,
32 	QCM2290_MASTER_TIC,
33 	QCM2290_MASTER_ANOC_SNOC,
34 	QCM2290_MASTER_BIMC_SNOC,
35 	QCM2290_MASTER_PIMEM,
36 	QCM2290_MASTER_QDSS_BAM,
37 	QCM2290_MASTER_QUP_0,
38 	QCM2290_MASTER_IPA,
39 	QCM2290_MASTER_QDSS_ETR,
40 	QCM2290_MASTER_SDCC_1,
41 	QCM2290_MASTER_SDCC_2,
42 	QCM2290_MASTER_QPIC,
43 	QCM2290_MASTER_USB3_0,
44 	QCM2290_MASTER_QUP_CORE_0,
45 	QCM2290_MASTER_CAMNOC_SF,
46 	QCM2290_MASTER_VIDEO_P0,
47 	QCM2290_MASTER_VIDEO_PROC,
48 	QCM2290_MASTER_CAMNOC_HF,
49 	QCM2290_MASTER_MDP0,
50 
51 	QCM2290_SLAVE_EBI1,
52 	QCM2290_SLAVE_BIMC_SNOC,
53 	QCM2290_SLAVE_BIMC_CFG,
54 	QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG,
55 	QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG,
56 	QCM2290_SLAVE_CAMERA_CFG,
57 	QCM2290_SLAVE_CLK_CTL,
58 	QCM2290_SLAVE_CRYPTO_0_CFG,
59 	QCM2290_SLAVE_DISPLAY_CFG,
60 	QCM2290_SLAVE_DISPLAY_THROTTLE_CFG,
61 	QCM2290_SLAVE_GPU_CFG,
62 	QCM2290_SLAVE_HWKM,
63 	QCM2290_SLAVE_IMEM_CFG,
64 	QCM2290_SLAVE_IPA_CFG,
65 	QCM2290_SLAVE_LPASS,
66 	QCM2290_SLAVE_MESSAGE_RAM,
67 	QCM2290_SLAVE_PDM,
68 	QCM2290_SLAVE_PIMEM_CFG,
69 	QCM2290_SLAVE_PKA_WRAPPER,
70 	QCM2290_SLAVE_PMIC_ARB,
71 	QCM2290_SLAVE_PRNG,
72 	QCM2290_SLAVE_QDSS_CFG,
73 	QCM2290_SLAVE_QM_CFG,
74 	QCM2290_SLAVE_QM_MPU_CFG,
75 	QCM2290_SLAVE_QPIC,
76 	QCM2290_SLAVE_QUP_0,
77 	QCM2290_SLAVE_SDCC_1,
78 	QCM2290_SLAVE_SDCC_2,
79 	QCM2290_SLAVE_SNOC_CFG,
80 	QCM2290_SLAVE_TCSR,
81 	QCM2290_SLAVE_USB3,
82 	QCM2290_SLAVE_VENUS_CFG,
83 	QCM2290_SLAVE_VENUS_THROTTLE_CFG,
84 	QCM2290_SLAVE_VSENSE_CTRL_CFG,
85 	QCM2290_SLAVE_SERVICE_CNOC,
86 	QCM2290_SLAVE_APPSS,
87 	QCM2290_SLAVE_SNOC_CNOC,
88 	QCM2290_SLAVE_IMEM,
89 	QCM2290_SLAVE_PIMEM,
90 	QCM2290_SLAVE_SNOC_BIMC,
91 	QCM2290_SLAVE_SERVICE_SNOC,
92 	QCM2290_SLAVE_QDSS_STM,
93 	QCM2290_SLAVE_TCU,
94 	QCM2290_SLAVE_ANOC_SNOC,
95 	QCM2290_SLAVE_QUP_CORE_0,
96 	QCM2290_SLAVE_SNOC_BIMC_NRT,
97 	QCM2290_SLAVE_SNOC_BIMC_RT,
98 };
99 
100 /* Master nodes */
101 static const u16 mas_appss_proc_links[] = {
102 	QCM2290_SLAVE_EBI1,
103 	QCM2290_SLAVE_BIMC_SNOC,
104 };
105 
106 static struct qcom_icc_node mas_appss_proc = {
107 	.id = QCM2290_MASTER_APPSS_PROC,
108 	.name = "mas_apps_proc",
109 	.buswidth = 16,
110 	.qos.ap_owned = true,
111 	.qos.qos_port = 0,
112 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
113 	.qos.prio_level = 0,
114 	.qos.areq_prio = 0,
115 	.bus_clk_desc = &mem_1_clk,
116 	.ab_coeff = 159,
117 	.ib_coeff = 96,
118 	.mas_rpm_id = 0,
119 	.slv_rpm_id = -1,
120 	.num_links = ARRAY_SIZE(mas_appss_proc_links),
121 	.links = mas_appss_proc_links,
122 };
123 
124 static const u16 mas_snoc_bimc_rt_links[] = {
125 	QCM2290_SLAVE_EBI1,
126 };
127 
128 static struct qcom_icc_node mas_snoc_bimc_rt = {
129 	.id = QCM2290_MASTER_SNOC_BIMC_RT,
130 	.name = "mas_snoc_bimc_rt",
131 	.buswidth = 16,
132 	.qos.ap_owned = true,
133 	.qos.qos_port = 2,
134 	.qos.qos_mode = NOC_QOS_MODE_BYPASS,
135 	.mas_rpm_id = 163,
136 	.slv_rpm_id = -1,
137 	.num_links = ARRAY_SIZE(mas_snoc_bimc_rt_links),
138 	.links = mas_snoc_bimc_rt_links,
139 };
140 
141 static const u16 mas_snoc_bimc_nrt_links[] = {
142 	QCM2290_SLAVE_EBI1,
143 };
144 
145 static struct qcom_icc_node mas_snoc_bimc_nrt = {
146 	.id = QCM2290_MASTER_SNOC_BIMC_NRT,
147 	.name = "mas_snoc_bimc_nrt",
148 	.buswidth = 16,
149 	.qos.ap_owned = true,
150 	.qos.qos_port = 3,
151 	.qos.qos_mode = NOC_QOS_MODE_BYPASS,
152 	.mas_rpm_id = 164,
153 	.slv_rpm_id = -1,
154 	.num_links = ARRAY_SIZE(mas_snoc_bimc_nrt_links),
155 	.links = mas_snoc_bimc_nrt_links,
156 };
157 
158 static const u16 mas_snoc_bimc_links[] = {
159 	QCM2290_SLAVE_EBI1,
160 };
161 
162 static struct qcom_icc_node mas_snoc_bimc = {
163 	.id = QCM2290_MASTER_SNOC_BIMC,
164 	.name = "mas_snoc_bimc",
165 	.buswidth = 16,
166 	.qos.ap_owned = true,
167 	.qos.qos_port = 6,
168 	.qos.qos_mode = NOC_QOS_MODE_BYPASS,
169 	.mas_rpm_id = 164,
170 	.slv_rpm_id = -1,
171 	.num_links = ARRAY_SIZE(mas_snoc_bimc_links),
172 	.links = mas_snoc_bimc_links,
173 };
174 
175 static const u16 mas_tcu_0_links[] = {
176 	QCM2290_SLAVE_EBI1,
177 	QCM2290_SLAVE_BIMC_SNOC,
178 };
179 
180 static struct qcom_icc_node mas_tcu_0 = {
181 	.id = QCM2290_MASTER_TCU_0,
182 	.name = "mas_tcu_0",
183 	.buswidth = 8,
184 	.qos.ap_owned = true,
185 	.qos.qos_port = 4,
186 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
187 	.qos.prio_level = 6,
188 	.qos.areq_prio = 6,
189 	.mas_rpm_id = 102,
190 	.slv_rpm_id = -1,
191 	.num_links = ARRAY_SIZE(mas_tcu_0_links),
192 	.links = mas_tcu_0_links,
193 };
194 
195 static const u16 mas_snoc_cnoc_links[] = {
196 	QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG,
197 	QCM2290_SLAVE_SDCC_2,
198 	QCM2290_SLAVE_SDCC_1,
199 	QCM2290_SLAVE_QM_CFG,
200 	QCM2290_SLAVE_BIMC_CFG,
201 	QCM2290_SLAVE_USB3,
202 	QCM2290_SLAVE_QM_MPU_CFG,
203 	QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG,
204 	QCM2290_SLAVE_QDSS_CFG,
205 	QCM2290_SLAVE_PDM,
206 	QCM2290_SLAVE_IPA_CFG,
207 	QCM2290_SLAVE_DISPLAY_THROTTLE_CFG,
208 	QCM2290_SLAVE_TCSR,
209 	QCM2290_SLAVE_MESSAGE_RAM,
210 	QCM2290_SLAVE_PMIC_ARB,
211 	QCM2290_SLAVE_LPASS,
212 	QCM2290_SLAVE_DISPLAY_CFG,
213 	QCM2290_SLAVE_VENUS_CFG,
214 	QCM2290_SLAVE_GPU_CFG,
215 	QCM2290_SLAVE_IMEM_CFG,
216 	QCM2290_SLAVE_SNOC_CFG,
217 	QCM2290_SLAVE_SERVICE_CNOC,
218 	QCM2290_SLAVE_VENUS_THROTTLE_CFG,
219 	QCM2290_SLAVE_PKA_WRAPPER,
220 	QCM2290_SLAVE_HWKM,
221 	QCM2290_SLAVE_PRNG,
222 	QCM2290_SLAVE_VSENSE_CTRL_CFG,
223 	QCM2290_SLAVE_CRYPTO_0_CFG,
224 	QCM2290_SLAVE_PIMEM_CFG,
225 	QCM2290_SLAVE_QUP_0,
226 	QCM2290_SLAVE_CAMERA_CFG,
227 	QCM2290_SLAVE_CLK_CTL,
228 	QCM2290_SLAVE_QPIC,
229 };
230 
231 static struct qcom_icc_node mas_snoc_cnoc = {
232 	.id = QCM2290_MASTER_SNOC_CNOC,
233 	.name = "mas_snoc_cnoc",
234 	.buswidth = 8,
235 	.qos.ap_owned = true,
236 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
237 	.mas_rpm_id = 52,
238 	.slv_rpm_id = -1,
239 	.num_links = ARRAY_SIZE(mas_snoc_cnoc_links),
240 	.links = mas_snoc_cnoc_links,
241 };
242 
243 static const u16 mas_qdss_dap_links[] = {
244 	QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG,
245 	QCM2290_SLAVE_SDCC_2,
246 	QCM2290_SLAVE_SDCC_1,
247 	QCM2290_SLAVE_QM_CFG,
248 	QCM2290_SLAVE_BIMC_CFG,
249 	QCM2290_SLAVE_USB3,
250 	QCM2290_SLAVE_QM_MPU_CFG,
251 	QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG,
252 	QCM2290_SLAVE_QDSS_CFG,
253 	QCM2290_SLAVE_PDM,
254 	QCM2290_SLAVE_IPA_CFG,
255 	QCM2290_SLAVE_DISPLAY_THROTTLE_CFG,
256 	QCM2290_SLAVE_TCSR,
257 	QCM2290_SLAVE_MESSAGE_RAM,
258 	QCM2290_SLAVE_PMIC_ARB,
259 	QCM2290_SLAVE_LPASS,
260 	QCM2290_SLAVE_DISPLAY_CFG,
261 	QCM2290_SLAVE_VENUS_CFG,
262 	QCM2290_SLAVE_GPU_CFG,
263 	QCM2290_SLAVE_IMEM_CFG,
264 	QCM2290_SLAVE_SNOC_CFG,
265 	QCM2290_SLAVE_SERVICE_CNOC,
266 	QCM2290_SLAVE_VENUS_THROTTLE_CFG,
267 	QCM2290_SLAVE_PKA_WRAPPER,
268 	QCM2290_SLAVE_HWKM,
269 	QCM2290_SLAVE_PRNG,
270 	QCM2290_SLAVE_VSENSE_CTRL_CFG,
271 	QCM2290_SLAVE_CRYPTO_0_CFG,
272 	QCM2290_SLAVE_PIMEM_CFG,
273 	QCM2290_SLAVE_QUP_0,
274 	QCM2290_SLAVE_CAMERA_CFG,
275 	QCM2290_SLAVE_CLK_CTL,
276 	QCM2290_SLAVE_QPIC,
277 };
278 
279 static struct qcom_icc_node mas_qdss_dap = {
280 	.id = QCM2290_MASTER_QDSS_DAP,
281 	.name = "mas_qdss_dap",
282 	.buswidth = 8,
283 	.qos.ap_owned = true,
284 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
285 	.mas_rpm_id = 49,
286 	.slv_rpm_id = -1,
287 	.num_links = ARRAY_SIZE(mas_qdss_dap_links),
288 	.links = mas_qdss_dap_links,
289 };
290 
291 static const u16 mas_crypto_core0_links[] = {
292 	QCM2290_SLAVE_ANOC_SNOC
293 };
294 
295 static struct qcom_icc_node mas_crypto_core0 = {
296 	.id = QCM2290_MASTER_CRYPTO_CORE0,
297 	.name = "mas_crypto_core0",
298 	.buswidth = 8,
299 	.qos.ap_owned = true,
300 	.qos.qos_port = 22,
301 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
302 	.qos.areq_prio = 2,
303 	.mas_rpm_id = 23,
304 	.slv_rpm_id = -1,
305 	.num_links = ARRAY_SIZE(mas_crypto_core0_links),
306 	.links = mas_crypto_core0_links,
307 };
308 
309 static const u16 mas_qup_core_0_links[] = {
310 	QCM2290_SLAVE_QUP_CORE_0,
311 };
312 
313 static struct qcom_icc_node mas_qup_core_0 = {
314 	.id = QCM2290_MASTER_QUP_CORE_0,
315 	.name = "mas_qup_core_0",
316 	.buswidth = 4,
317 	.mas_rpm_id = 170,
318 	.slv_rpm_id = -1,
319 	.num_links = ARRAY_SIZE(mas_qup_core_0_links),
320 	.links = mas_qup_core_0_links,
321 };
322 
323 static const u16 mas_camnoc_sf_links[] = {
324 	QCM2290_SLAVE_SNOC_BIMC_NRT,
325 };
326 
327 static struct qcom_icc_node mas_camnoc_sf = {
328 	.id = QCM2290_MASTER_CAMNOC_SF,
329 	.name = "mas_camnoc_sf",
330 	.buswidth = 32,
331 	.qos.ap_owned = true,
332 	.qos.qos_port = 4,
333 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
334 	.qos.areq_prio = 3,
335 	.mas_rpm_id = 172,
336 	.slv_rpm_id = -1,
337 	.num_links = ARRAY_SIZE(mas_camnoc_sf_links),
338 	.links = mas_camnoc_sf_links,
339 };
340 
341 static const u16 mas_camnoc_hf_links[] = {
342 	QCM2290_SLAVE_SNOC_BIMC_RT,
343 };
344 
345 static struct qcom_icc_node mas_camnoc_hf = {
346 	.id = QCM2290_MASTER_CAMNOC_HF,
347 	.name = "mas_camnoc_hf",
348 	.buswidth = 32,
349 	.qos.ap_owned = true,
350 	.qos.qos_port = 10,
351 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
352 	.qos.areq_prio = 3,
353 	.qos.urg_fwd_en = true,
354 	.mas_rpm_id = 173,
355 	.slv_rpm_id = -1,
356 	.num_links = ARRAY_SIZE(mas_camnoc_hf_links),
357 	.links = mas_camnoc_hf_links,
358 };
359 
360 static const u16 mas_mdp0_links[] = {
361 	QCM2290_SLAVE_SNOC_BIMC_RT,
362 };
363 
364 static struct qcom_icc_node mas_mdp0 = {
365 	.id = QCM2290_MASTER_MDP0,
366 	.name = "mas_mdp0",
367 	.buswidth = 16,
368 	.qos.ap_owned = true,
369 	.qos.qos_port = 5,
370 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
371 	.qos.areq_prio = 3,
372 	.qos.urg_fwd_en = true,
373 	.mas_rpm_id = 8,
374 	.slv_rpm_id = -1,
375 	.num_links = ARRAY_SIZE(mas_mdp0_links),
376 	.links = mas_mdp0_links,
377 };
378 
379 static const u16 mas_video_p0_links[] = {
380 	QCM2290_SLAVE_SNOC_BIMC_NRT,
381 };
382 
383 static struct qcom_icc_node mas_video_p0 = {
384 	.id = QCM2290_MASTER_VIDEO_P0,
385 	.name = "mas_video_p0",
386 	.buswidth = 16,
387 	.qos.ap_owned = true,
388 	.qos.qos_port = 9,
389 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
390 	.qos.areq_prio = 3,
391 	.qos.urg_fwd_en = true,
392 	.mas_rpm_id = 9,
393 	.slv_rpm_id = -1,
394 	.num_links = ARRAY_SIZE(mas_video_p0_links),
395 	.links = mas_video_p0_links,
396 };
397 
398 static const u16 mas_video_proc_links[] = {
399 	QCM2290_SLAVE_SNOC_BIMC_NRT,
400 };
401 
402 static struct qcom_icc_node mas_video_proc = {
403 	.id = QCM2290_MASTER_VIDEO_PROC,
404 	.name = "mas_video_proc",
405 	.buswidth = 8,
406 	.qos.ap_owned = true,
407 	.qos.qos_port = 13,
408 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
409 	.qos.areq_prio = 4,
410 	.mas_rpm_id = 168,
411 	.slv_rpm_id = -1,
412 	.num_links = ARRAY_SIZE(mas_video_proc_links),
413 	.links = mas_video_proc_links,
414 };
415 
416 static const u16 mas_snoc_cfg_links[] = {
417 	QCM2290_SLAVE_SERVICE_SNOC,
418 };
419 
420 static struct qcom_icc_node mas_snoc_cfg = {
421 	.id = QCM2290_MASTER_SNOC_CFG,
422 	.name = "mas_snoc_cfg",
423 	.buswidth = 4,
424 	.qos.ap_owned = true,
425 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
426 	.mas_rpm_id = 20,
427 	.slv_rpm_id = -1,
428 	.num_links = ARRAY_SIZE(mas_snoc_cfg_links),
429 	.links = mas_snoc_cfg_links,
430 };
431 
432 static const u16 mas_tic_links[] = {
433 	QCM2290_SLAVE_PIMEM,
434 	QCM2290_SLAVE_IMEM,
435 	QCM2290_SLAVE_APPSS,
436 	QCM2290_SLAVE_SNOC_BIMC,
437 	QCM2290_SLAVE_SNOC_CNOC,
438 	QCM2290_SLAVE_TCU,
439 	QCM2290_SLAVE_QDSS_STM,
440 };
441 
442 static struct qcom_icc_node mas_tic = {
443 	.id = QCM2290_MASTER_TIC,
444 	.name = "mas_tic",
445 	.buswidth = 4,
446 	.qos.ap_owned = true,
447 	.qos.qos_port = 8,
448 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
449 	.qos.areq_prio = 2,
450 	.mas_rpm_id = 51,
451 	.slv_rpm_id = -1,
452 	.num_links = ARRAY_SIZE(mas_tic_links),
453 	.links = mas_tic_links,
454 };
455 
456 static const u16 mas_anoc_snoc_links[] = {
457 	QCM2290_SLAVE_PIMEM,
458 	QCM2290_SLAVE_IMEM,
459 	QCM2290_SLAVE_APPSS,
460 	QCM2290_SLAVE_SNOC_BIMC,
461 	QCM2290_SLAVE_SNOC_CNOC,
462 	QCM2290_SLAVE_TCU,
463 	QCM2290_SLAVE_QDSS_STM,
464 };
465 
466 static struct qcom_icc_node mas_anoc_snoc = {
467 	.id = QCM2290_MASTER_ANOC_SNOC,
468 	.name = "mas_anoc_snoc",
469 	.buswidth = 16,
470 	.mas_rpm_id = 110,
471 	.slv_rpm_id = -1,
472 	.num_links = ARRAY_SIZE(mas_anoc_snoc_links),
473 	.links = mas_anoc_snoc_links,
474 };
475 
476 static const u16 mas_bimc_snoc_links[] = {
477 	QCM2290_SLAVE_PIMEM,
478 	QCM2290_SLAVE_IMEM,
479 	QCM2290_SLAVE_APPSS,
480 	QCM2290_SLAVE_SNOC_CNOC,
481 	QCM2290_SLAVE_TCU,
482 	QCM2290_SLAVE_QDSS_STM,
483 };
484 
485 static struct qcom_icc_node mas_bimc_snoc = {
486 	.id = QCM2290_MASTER_BIMC_SNOC,
487 	.name = "mas_bimc_snoc",
488 	.buswidth = 8,
489 	.mas_rpm_id = 21,
490 	.slv_rpm_id = -1,
491 	.num_links = ARRAY_SIZE(mas_bimc_snoc_links),
492 	.links = mas_bimc_snoc_links,
493 };
494 
495 static const u16 mas_pimem_links[] = {
496 	QCM2290_SLAVE_IMEM,
497 	QCM2290_SLAVE_SNOC_BIMC,
498 };
499 
500 static struct qcom_icc_node mas_pimem = {
501 	.id = QCM2290_MASTER_PIMEM,
502 	.name = "mas_pimem",
503 	.buswidth = 8,
504 	.qos.ap_owned = true,
505 	.qos.qos_port = 20,
506 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
507 	.qos.areq_prio = 2,
508 	.mas_rpm_id = 113,
509 	.slv_rpm_id = -1,
510 	.num_links = ARRAY_SIZE(mas_pimem_links),
511 	.links = mas_pimem_links,
512 };
513 
514 static const u16 mas_qdss_bam_links[] = {
515 	QCM2290_SLAVE_ANOC_SNOC,
516 };
517 
518 static struct qcom_icc_node mas_qdss_bam = {
519 	.id = QCM2290_MASTER_QDSS_BAM,
520 	.name = "mas_qdss_bam",
521 	.buswidth = 4,
522 	.qos.ap_owned = true,
523 	.qos.qos_port = 2,
524 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
525 	.qos.areq_prio = 2,
526 	.mas_rpm_id = 19,
527 	.slv_rpm_id = -1,
528 	.num_links = ARRAY_SIZE(mas_qdss_bam_links),
529 	.links = mas_qdss_bam_links,
530 };
531 
532 static const u16 mas_qup_0_links[] = {
533 	QCM2290_SLAVE_ANOC_SNOC,
534 };
535 
536 static struct qcom_icc_node mas_qup_0 = {
537 	.id = QCM2290_MASTER_QUP_0,
538 	.name = "mas_qup_0",
539 	.buswidth = 4,
540 	.qos.ap_owned = true,
541 	.qos.qos_port = 0,
542 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
543 	.qos.areq_prio = 2,
544 	.mas_rpm_id = 166,
545 	.slv_rpm_id = -1,
546 	.num_links = ARRAY_SIZE(mas_qup_0_links),
547 	.links = mas_qup_0_links,
548 };
549 
550 static const u16 mas_ipa_links[] = {
551 	QCM2290_SLAVE_ANOC_SNOC,
552 };
553 
554 static struct qcom_icc_node mas_ipa = {
555 	.id = QCM2290_MASTER_IPA,
556 	.name = "mas_ipa",
557 	.buswidth = 8,
558 	.qos.ap_owned = true,
559 	.qos.qos_port = 3,
560 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
561 	.qos.areq_prio = 2,
562 	.mas_rpm_id = 59,
563 	.slv_rpm_id = -1,
564 	.num_links = ARRAY_SIZE(mas_ipa_links),
565 	.links = mas_ipa_links,
566 };
567 
568 static const u16 mas_qdss_etr_links[] = {
569 	QCM2290_SLAVE_ANOC_SNOC,
570 };
571 
572 static struct qcom_icc_node mas_qdss_etr = {
573 	.id = QCM2290_MASTER_QDSS_ETR,
574 	.name = "mas_qdss_etr",
575 	.buswidth = 8,
576 	.qos.ap_owned = true,
577 	.qos.qos_port = 12,
578 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
579 	.qos.areq_prio = 2,
580 	.mas_rpm_id = 31,
581 	.slv_rpm_id = -1,
582 	.num_links = ARRAY_SIZE(mas_qdss_etr_links),
583 	.links = mas_qdss_etr_links,
584 };
585 
586 static const u16 mas_sdcc_1_links[] = {
587 	QCM2290_SLAVE_ANOC_SNOC,
588 };
589 
590 static struct qcom_icc_node mas_sdcc_1 = {
591 	.id = QCM2290_MASTER_SDCC_1,
592 	.name = "mas_sdcc_1",
593 	.buswidth = 8,
594 	.qos.ap_owned = true,
595 	.qos.qos_port = 17,
596 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
597 	.qos.areq_prio = 2,
598 	.mas_rpm_id = 33,
599 	.slv_rpm_id = -1,
600 	.num_links = ARRAY_SIZE(mas_sdcc_1_links),
601 	.links = mas_sdcc_1_links,
602 };
603 
604 static const u16 mas_sdcc_2_links[] = {
605 	QCM2290_SLAVE_ANOC_SNOC,
606 };
607 
608 static struct qcom_icc_node mas_sdcc_2 = {
609 	.id = QCM2290_MASTER_SDCC_2,
610 	.name = "mas_sdcc_2",
611 	.buswidth = 8,
612 	.qos.ap_owned = true,
613 	.qos.qos_port = 23,
614 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
615 	.qos.areq_prio = 2,
616 	.mas_rpm_id = 35,
617 	.slv_rpm_id = -1,
618 	.num_links = ARRAY_SIZE(mas_sdcc_2_links),
619 	.links = mas_sdcc_2_links,
620 };
621 
622 static const u16 mas_qpic_links[] = {
623 	QCM2290_SLAVE_ANOC_SNOC,
624 };
625 
626 static struct qcom_icc_node mas_qpic = {
627 	.id = QCM2290_MASTER_QPIC,
628 	.name = "mas_qpic",
629 	.buswidth = 4,
630 	.qos.ap_owned = true,
631 	.qos.qos_port = 1,
632 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
633 	.qos.areq_prio = 2,
634 	.mas_rpm_id = 58,
635 	.slv_rpm_id = -1,
636 	.num_links = ARRAY_SIZE(mas_qpic_links),
637 	.links = mas_qpic_links,
638 };
639 
640 static const u16 mas_usb3_0_links[] = {
641 	QCM2290_SLAVE_ANOC_SNOC,
642 };
643 
644 static struct qcom_icc_node mas_usb3_0 = {
645 	.id = QCM2290_MASTER_USB3_0,
646 	.name = "mas_usb3_0",
647 	.buswidth = 8,
648 	.qos.ap_owned = true,
649 	.qos.qos_port = 24,
650 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
651 	.qos.areq_prio = 2,
652 	.mas_rpm_id = 32,
653 	.slv_rpm_id = -1,
654 	.num_links = ARRAY_SIZE(mas_usb3_0_links),
655 	.links = mas_usb3_0_links,
656 };
657 
658 static const u16 mas_gfx3d_links[] = {
659 	QCM2290_SLAVE_EBI1,
660 };
661 
662 static struct qcom_icc_node mas_gfx3d = {
663 	.id = QCM2290_MASTER_GFX3D,
664 	.name = "mas_gfx3d",
665 	.buswidth = 32,
666 	.qos.ap_owned = true,
667 	.qos.qos_port = 1,
668 	.qos.qos_mode = NOC_QOS_MODE_FIXED,
669 	.qos.prio_level = 0,
670 	.qos.areq_prio = 0,
671 	.mas_rpm_id = 6,
672 	.slv_rpm_id = -1,
673 	.num_links = ARRAY_SIZE(mas_gfx3d_links),
674 	.links = mas_gfx3d_links,
675 };
676 
677 /* Slave nodes */
678 static struct qcom_icc_node slv_ebi1 = {
679 	.name = "slv_ebi1",
680 	.id = QCM2290_SLAVE_EBI1,
681 	.buswidth = 4,
682 	.channels = 2,
683 	.mas_rpm_id = -1,
684 	.slv_rpm_id = 0,
685 };
686 
687 static const u16 slv_bimc_snoc_links[] = {
688 	QCM2290_MASTER_BIMC_SNOC,
689 };
690 
691 static struct qcom_icc_node slv_bimc_snoc = {
692 	.name = "slv_bimc_snoc",
693 	.id = QCM2290_SLAVE_BIMC_SNOC,
694 	.buswidth = 8,
695 	.mas_rpm_id = -1,
696 	.slv_rpm_id = 2,
697 	.num_links = ARRAY_SIZE(slv_bimc_snoc_links),
698 	.links = slv_bimc_snoc_links,
699 };
700 
701 static struct qcom_icc_node slv_bimc_cfg = {
702 	.name = "slv_bimc_cfg",
703 	.id = QCM2290_SLAVE_BIMC_CFG,
704 	.buswidth = 4,
705 	.qos.ap_owned = true,
706 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
707 	.mas_rpm_id = -1,
708 	.slv_rpm_id = 56,
709 };
710 
711 static struct qcom_icc_node slv_camera_nrt_throttle_cfg = {
712 	.name = "slv_camera_nrt_throttle_cfg",
713 	.id = QCM2290_SLAVE_CAMERA_NRT_THROTTLE_CFG,
714 	.buswidth = 4,
715 	.qos.ap_owned = true,
716 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
717 	.mas_rpm_id = -1,
718 	.slv_rpm_id = 271,
719 };
720 
721 static struct qcom_icc_node slv_camera_rt_throttle_cfg = {
722 	.name = "slv_camera_rt_throttle_cfg",
723 	.id = QCM2290_SLAVE_CAMERA_RT_THROTTLE_CFG,
724 	.buswidth = 4,
725 	.qos.ap_owned = true,
726 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
727 	.mas_rpm_id = -1,
728 	.slv_rpm_id = 279,
729 };
730 
731 static struct qcom_icc_node slv_camera_cfg = {
732 	.name = "slv_camera_cfg",
733 	.id = QCM2290_SLAVE_CAMERA_CFG,
734 	.buswidth = 4,
735 	.qos.ap_owned = true,
736 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
737 	.mas_rpm_id = -1,
738 	.slv_rpm_id = 3,
739 };
740 
741 static struct qcom_icc_node slv_clk_ctl = {
742 	.name = "slv_clk_ctl",
743 	.id = QCM2290_SLAVE_CLK_CTL,
744 	.buswidth = 4,
745 	.qos.ap_owned = true,
746 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
747 	.mas_rpm_id = -1,
748 	.slv_rpm_id = 47,
749 };
750 
751 static struct qcom_icc_node slv_crypto_0_cfg = {
752 	.name = "slv_crypto_0_cfg",
753 	.id = QCM2290_SLAVE_CRYPTO_0_CFG,
754 	.buswidth = 4,
755 	.qos.ap_owned = true,
756 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
757 	.mas_rpm_id = -1,
758 	.slv_rpm_id = 52,
759 };
760 
761 static struct qcom_icc_node slv_display_cfg = {
762 	.name = "slv_display_cfg",
763 	.id = QCM2290_SLAVE_DISPLAY_CFG,
764 	.buswidth = 4,
765 	.qos.ap_owned = true,
766 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
767 	.mas_rpm_id = -1,
768 	.slv_rpm_id = 4,
769 };
770 
771 static struct qcom_icc_node slv_display_throttle_cfg = {
772 	.name = "slv_display_throttle_cfg",
773 	.id = QCM2290_SLAVE_DISPLAY_THROTTLE_CFG,
774 	.buswidth = 4,
775 	.qos.ap_owned = true,
776 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
777 	.mas_rpm_id = -1,
778 	.slv_rpm_id = 156,
779 };
780 
781 static struct qcom_icc_node slv_gpu_cfg = {
782 	.name = "slv_gpu_cfg",
783 	.id = QCM2290_SLAVE_GPU_CFG,
784 	.buswidth = 8,
785 	.qos.ap_owned = true,
786 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
787 	.mas_rpm_id = -1,
788 	.slv_rpm_id = 275,
789 };
790 
791 static struct qcom_icc_node slv_hwkm = {
792 	.name = "slv_hwkm",
793 	.id = QCM2290_SLAVE_HWKM,
794 	.buswidth = 4,
795 	.qos.ap_owned = true,
796 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
797 	.mas_rpm_id = -1,
798 	.slv_rpm_id = 280,
799 };
800 
801 static struct qcom_icc_node slv_imem_cfg = {
802 	.name = "slv_imem_cfg",
803 	.id = QCM2290_SLAVE_IMEM_CFG,
804 	.buswidth = 4,
805 	.qos.ap_owned = true,
806 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
807 	.mas_rpm_id = -1,
808 	.slv_rpm_id = 54,
809 };
810 
811 static struct qcom_icc_node slv_ipa_cfg = {
812 	.name = "slv_ipa_cfg",
813 	.id = QCM2290_SLAVE_IPA_CFG,
814 	.buswidth = 4,
815 	.qos.ap_owned = true,
816 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
817 	.mas_rpm_id = -1,
818 	.slv_rpm_id = 183,
819 };
820 
821 static struct qcom_icc_node slv_lpass = {
822 	.name = "slv_lpass",
823 	.id = QCM2290_SLAVE_LPASS,
824 	.buswidth = 4,
825 	.qos.ap_owned = true,
826 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
827 	.mas_rpm_id = -1,
828 	.slv_rpm_id = 21,
829 };
830 
831 static struct qcom_icc_node slv_message_ram = {
832 	.name = "slv_message_ram",
833 	.id = QCM2290_SLAVE_MESSAGE_RAM,
834 	.buswidth = 4,
835 	.qos.ap_owned = true,
836 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
837 	.mas_rpm_id = -1,
838 	.slv_rpm_id = 55,
839 };
840 
841 static struct qcom_icc_node slv_pdm = {
842 	.name = "slv_pdm",
843 	.id = QCM2290_SLAVE_PDM,
844 	.buswidth = 4,
845 	.qos.ap_owned = true,
846 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
847 	.mas_rpm_id = -1,
848 	.slv_rpm_id = 41,
849 };
850 
851 static struct qcom_icc_node slv_pimem_cfg = {
852 	.name = "slv_pimem_cfg",
853 	.id = QCM2290_SLAVE_PIMEM_CFG,
854 	.buswidth = 4,
855 	.qos.ap_owned = true,
856 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
857 	.mas_rpm_id = -1,
858 	.slv_rpm_id = 167,
859 };
860 
861 static struct qcom_icc_node slv_pka_wrapper = {
862 	.name = "slv_pka_wrapper",
863 	.id = QCM2290_SLAVE_PKA_WRAPPER,
864 	.buswidth = 4,
865 	.qos.ap_owned = true,
866 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
867 	.mas_rpm_id = -1,
868 	.slv_rpm_id = 281,
869 };
870 
871 static struct qcom_icc_node slv_pmic_arb = {
872 	.name = "slv_pmic_arb",
873 	.id = QCM2290_SLAVE_PMIC_ARB,
874 	.buswidth = 4,
875 	.qos.ap_owned = true,
876 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
877 	.mas_rpm_id = -1,
878 	.slv_rpm_id = 59,
879 };
880 
881 static struct qcom_icc_node slv_prng = {
882 	.name = "slv_prng",
883 	.id = QCM2290_SLAVE_PRNG,
884 	.buswidth = 4,
885 	.qos.ap_owned = true,
886 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
887 	.mas_rpm_id = -1,
888 	.slv_rpm_id = 44,
889 };
890 
891 static struct qcom_icc_node slv_qdss_cfg = {
892 	.name = "slv_qdss_cfg",
893 	.id = QCM2290_SLAVE_QDSS_CFG,
894 	.buswidth = 4,
895 	.qos.ap_owned = true,
896 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
897 	.mas_rpm_id = -1,
898 	.slv_rpm_id = 63,
899 };
900 
901 static struct qcom_icc_node slv_qm_cfg = {
902 	.name = "slv_qm_cfg",
903 	.id = QCM2290_SLAVE_QM_CFG,
904 	.buswidth = 4,
905 	.qos.ap_owned = true,
906 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
907 	.mas_rpm_id = -1,
908 	.slv_rpm_id = 212,
909 };
910 
911 static struct qcom_icc_node slv_qm_mpu_cfg = {
912 	.name = "slv_qm_mpu_cfg",
913 	.id = QCM2290_SLAVE_QM_MPU_CFG,
914 	.buswidth = 4,
915 	.qos.ap_owned = true,
916 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
917 	.mas_rpm_id = -1,
918 	.slv_rpm_id = 231,
919 };
920 
921 static struct qcom_icc_node slv_qpic = {
922 	.name = "slv_qpic",
923 	.id = QCM2290_SLAVE_QPIC,
924 	.buswidth = 4,
925 	.qos.ap_owned = true,
926 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
927 	.mas_rpm_id = -1,
928 	.slv_rpm_id = 80,
929 };
930 
931 static struct qcom_icc_node slv_qup_0 = {
932 	.name = "slv_qup_0",
933 	.id = QCM2290_SLAVE_QUP_0,
934 	.buswidth = 4,
935 	.qos.ap_owned = true,
936 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
937 	.mas_rpm_id = -1,
938 	.slv_rpm_id = 261,
939 };
940 
941 static struct qcom_icc_node slv_sdcc_1 = {
942 	.name = "slv_sdcc_1",
943 	.id = QCM2290_SLAVE_SDCC_1,
944 	.buswidth = 4,
945 	.qos.ap_owned = true,
946 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
947 	.mas_rpm_id = -1,
948 	.slv_rpm_id = 31,
949 };
950 
951 static struct qcom_icc_node slv_sdcc_2 = {
952 	.name = "slv_sdcc_2",
953 	.id = QCM2290_SLAVE_SDCC_2,
954 	.buswidth = 4,
955 	.qos.ap_owned = true,
956 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
957 	.mas_rpm_id = -1,
958 	.slv_rpm_id = 33,
959 };
960 
961 static const u16 slv_snoc_cfg_links[] = {
962 	QCM2290_MASTER_SNOC_CFG,
963 };
964 
965 static struct qcom_icc_node slv_snoc_cfg = {
966 	.name = "slv_snoc_cfg",
967 	.id = QCM2290_SLAVE_SNOC_CFG,
968 	.buswidth = 4,
969 	.qos.ap_owned = true,
970 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
971 	.mas_rpm_id = -1,
972 	.slv_rpm_id = 70,
973 	.num_links = ARRAY_SIZE(slv_snoc_cfg_links),
974 	.links = slv_snoc_cfg_links,
975 };
976 
977 static struct qcom_icc_node slv_tcsr = {
978 	.name = "slv_tcsr",
979 	.id = QCM2290_SLAVE_TCSR,
980 	.buswidth = 4,
981 	.qos.ap_owned = true,
982 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
983 	.mas_rpm_id = -1,
984 	.slv_rpm_id = 50,
985 };
986 
987 static struct qcom_icc_node slv_usb3 = {
988 	.name = "slv_usb3",
989 	.id = QCM2290_SLAVE_USB3,
990 	.buswidth = 4,
991 	.qos.ap_owned = true,
992 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
993 	.mas_rpm_id = -1,
994 	.slv_rpm_id = 22,
995 };
996 
997 static struct qcom_icc_node slv_venus_cfg = {
998 	.name = "slv_venus_cfg",
999 	.id = QCM2290_SLAVE_VENUS_CFG,
1000 	.buswidth = 4,
1001 	.qos.ap_owned = true,
1002 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
1003 	.mas_rpm_id = -1,
1004 	.slv_rpm_id = 10,
1005 };
1006 
1007 static struct qcom_icc_node slv_venus_throttle_cfg = {
1008 	.name = "slv_venus_throttle_cfg",
1009 	.id = QCM2290_SLAVE_VENUS_THROTTLE_CFG,
1010 	.buswidth = 4,
1011 	.qos.ap_owned = true,
1012 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
1013 	.mas_rpm_id = -1,
1014 	.slv_rpm_id = 178,
1015 };
1016 
1017 static struct qcom_icc_node slv_vsense_ctrl_cfg = {
1018 	.name = "slv_vsense_ctrl_cfg",
1019 	.id = QCM2290_SLAVE_VSENSE_CTRL_CFG,
1020 	.buswidth = 4,
1021 	.qos.ap_owned = true,
1022 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
1023 	.mas_rpm_id = -1,
1024 	.slv_rpm_id = 263,
1025 };
1026 
1027 static struct qcom_icc_node slv_service_cnoc = {
1028 	.name = "slv_service_cnoc",
1029 	.id = QCM2290_SLAVE_SERVICE_CNOC,
1030 	.buswidth = 4,
1031 	.qos.ap_owned = true,
1032 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
1033 	.mas_rpm_id = -1,
1034 	.slv_rpm_id = 76,
1035 };
1036 
1037 static struct qcom_icc_node slv_qup_core_0 = {
1038 	.name = "slv_qup_core_0",
1039 	.id = QCM2290_SLAVE_QUP_CORE_0,
1040 	.buswidth = 4,
1041 	.qos.ap_owned = true,
1042 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
1043 	.mas_rpm_id = -1,
1044 	.slv_rpm_id = 264,
1045 };
1046 
1047 static const u16 slv_snoc_bimc_nrt_links[] = {
1048 	QCM2290_MASTER_SNOC_BIMC_NRT,
1049 };
1050 
1051 static struct qcom_icc_node slv_snoc_bimc_nrt = {
1052 	.name = "slv_snoc_bimc_nrt",
1053 	.id = QCM2290_SLAVE_SNOC_BIMC_NRT,
1054 	.buswidth = 16,
1055 	.qos.ap_owned = true,
1056 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
1057 	.mas_rpm_id = -1,
1058 	.slv_rpm_id = 259,
1059 	.num_links = ARRAY_SIZE(slv_snoc_bimc_nrt_links),
1060 	.links = slv_snoc_bimc_nrt_links,
1061 };
1062 
1063 static const u16 slv_snoc_bimc_rt_links[] = {
1064 	QCM2290_MASTER_SNOC_BIMC_RT,
1065 };
1066 
1067 static struct qcom_icc_node slv_snoc_bimc_rt = {
1068 	.name = "slv_snoc_bimc_rt",
1069 	.id = QCM2290_SLAVE_SNOC_BIMC_RT,
1070 	.buswidth = 16,
1071 	.qos.ap_owned = true,
1072 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
1073 	.mas_rpm_id = -1,
1074 	.slv_rpm_id = 260,
1075 	.num_links = ARRAY_SIZE(slv_snoc_bimc_rt_links),
1076 	.links = slv_snoc_bimc_rt_links,
1077 };
1078 
1079 static struct qcom_icc_node slv_appss = {
1080 	.name = "slv_appss",
1081 	.id = QCM2290_SLAVE_APPSS,
1082 	.buswidth = 8,
1083 	.qos.ap_owned = true,
1084 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
1085 	.mas_rpm_id = -1,
1086 	.slv_rpm_id = 20,
1087 };
1088 
1089 static const u16 slv_snoc_cnoc_links[] = {
1090 	QCM2290_MASTER_SNOC_CNOC,
1091 };
1092 
1093 static struct qcom_icc_node slv_snoc_cnoc = {
1094 	.name = "slv_snoc_cnoc",
1095 	.id = QCM2290_SLAVE_SNOC_CNOC,
1096 	.buswidth = 8,
1097 	.mas_rpm_id = -1,
1098 	.slv_rpm_id = 25,
1099 	.num_links = ARRAY_SIZE(slv_snoc_cnoc_links),
1100 	.links = slv_snoc_cnoc_links,
1101 };
1102 
1103 static struct qcom_icc_node slv_imem = {
1104 	.name = "slv_imem",
1105 	.id = QCM2290_SLAVE_IMEM,
1106 	.buswidth = 8,
1107 	.mas_rpm_id = -1,
1108 	.slv_rpm_id = 26,
1109 };
1110 
1111 static struct qcom_icc_node slv_pimem = {
1112 	.name = "slv_pimem",
1113 	.id = QCM2290_SLAVE_PIMEM,
1114 	.buswidth = 8,
1115 	.qos.ap_owned = true,
1116 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
1117 	.mas_rpm_id = -1,
1118 	.slv_rpm_id = 166,
1119 };
1120 
1121 static const u16 slv_snoc_bimc_links[] = {
1122 	QCM2290_MASTER_SNOC_BIMC,
1123 };
1124 
1125 static struct qcom_icc_node slv_snoc_bimc = {
1126 	.name = "slv_snoc_bimc",
1127 	.id = QCM2290_SLAVE_SNOC_BIMC,
1128 	.buswidth = 16,
1129 	.mas_rpm_id = -1,
1130 	.slv_rpm_id = 24,
1131 	.num_links = ARRAY_SIZE(slv_snoc_bimc_links),
1132 	.links = slv_snoc_bimc_links,
1133 };
1134 
1135 static struct qcom_icc_node slv_service_snoc = {
1136 	.name = "slv_service_snoc",
1137 	.id = QCM2290_SLAVE_SERVICE_SNOC,
1138 	.buswidth = 4,
1139 	.qos.ap_owned = true,
1140 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
1141 	.mas_rpm_id = -1,
1142 	.slv_rpm_id = 29,
1143 };
1144 
1145 static struct qcom_icc_node slv_qdss_stm = {
1146 	.name = "slv_qdss_stm",
1147 	.id = QCM2290_SLAVE_QDSS_STM,
1148 	.buswidth = 4,
1149 	.mas_rpm_id = -1,
1150 	.slv_rpm_id = 30,
1151 };
1152 
1153 static struct qcom_icc_node slv_tcu = {
1154 	.name = "slv_tcu",
1155 	.id = QCM2290_SLAVE_TCU,
1156 	.buswidth = 8,
1157 	.qos.ap_owned = true,
1158 	.qos.qos_mode = NOC_QOS_MODE_INVALID,
1159 	.mas_rpm_id = -1,
1160 	.slv_rpm_id = 133,
1161 };
1162 
1163 static const u16 slv_anoc_snoc_links[] = {
1164 	QCM2290_MASTER_ANOC_SNOC,
1165 };
1166 
1167 static struct qcom_icc_node slv_anoc_snoc = {
1168 	.name = "slv_anoc_snoc",
1169 	.id = QCM2290_SLAVE_ANOC_SNOC,
1170 	.buswidth = 16,
1171 	.mas_rpm_id = -1,
1172 	.slv_rpm_id = 141,
1173 	.num_links = ARRAY_SIZE(slv_anoc_snoc_links),
1174 	.links = slv_anoc_snoc_links,
1175 };
1176 
1177 /* NoC descriptors */
1178 static struct qcom_icc_node * const qcm2290_bimc_nodes[] = {
1179 	[MASTER_APPSS_PROC] = &mas_appss_proc,
1180 	[MASTER_SNOC_BIMC_RT] = &mas_snoc_bimc_rt,
1181 	[MASTER_SNOC_BIMC_NRT] = &mas_snoc_bimc_nrt,
1182 	[MASTER_SNOC_BIMC] = &mas_snoc_bimc,
1183 	[MASTER_TCU_0] = &mas_tcu_0,
1184 	[MASTER_GFX3D] = &mas_gfx3d,
1185 	[SLAVE_EBI1] = &slv_ebi1,
1186 	[SLAVE_BIMC_SNOC] = &slv_bimc_snoc,
1187 };
1188 
1189 static const struct regmap_config qcm2290_bimc_regmap_config = {
1190 	.reg_bits	= 32,
1191 	.reg_stride	= 4,
1192 	.val_bits	= 32,
1193 	.max_register	= 0x80000,
1194 	.fast_io	= true,
1195 };
1196 
1197 static const struct qcom_icc_desc qcm2290_bimc = {
1198 	.type = QCOM_ICC_BIMC,
1199 	.nodes = qcm2290_bimc_nodes,
1200 	.num_nodes = ARRAY_SIZE(qcm2290_bimc_nodes),
1201 	.bus_clk_desc = &bimc_clk,
1202 	.regmap_cfg = &qcm2290_bimc_regmap_config,
1203 	.keep_alive = true,
1204 	/* M_REG_BASE() in vendor msm_bus_bimc_adhoc driver */
1205 	.qos_offset = 0x8000,
1206 	.ab_coeff = 153,
1207 };
1208 
1209 static struct qcom_icc_node * const qcm2290_cnoc_nodes[] = {
1210 	[MASTER_SNOC_CNOC] = &mas_snoc_cnoc,
1211 	[MASTER_QDSS_DAP] = &mas_qdss_dap,
1212 	[SLAVE_BIMC_CFG] = &slv_bimc_cfg,
1213 	[SLAVE_CAMERA_NRT_THROTTLE_CFG] = &slv_camera_nrt_throttle_cfg,
1214 	[SLAVE_CAMERA_RT_THROTTLE_CFG] = &slv_camera_rt_throttle_cfg,
1215 	[SLAVE_CAMERA_CFG] = &slv_camera_cfg,
1216 	[SLAVE_CLK_CTL] = &slv_clk_ctl,
1217 	[SLAVE_CRYPTO_0_CFG] = &slv_crypto_0_cfg,
1218 	[SLAVE_DISPLAY_CFG] = &slv_display_cfg,
1219 	[SLAVE_DISPLAY_THROTTLE_CFG] = &slv_display_throttle_cfg,
1220 	[SLAVE_GPU_CFG] = &slv_gpu_cfg,
1221 	[SLAVE_HWKM] = &slv_hwkm,
1222 	[SLAVE_IMEM_CFG] = &slv_imem_cfg,
1223 	[SLAVE_IPA_CFG] = &slv_ipa_cfg,
1224 	[SLAVE_LPASS] = &slv_lpass,
1225 	[SLAVE_MESSAGE_RAM] = &slv_message_ram,
1226 	[SLAVE_PDM] = &slv_pdm,
1227 	[SLAVE_PIMEM_CFG] = &slv_pimem_cfg,
1228 	[SLAVE_PKA_WRAPPER] = &slv_pka_wrapper,
1229 	[SLAVE_PMIC_ARB] = &slv_pmic_arb,
1230 	[SLAVE_PRNG] = &slv_prng,
1231 	[SLAVE_QDSS_CFG] = &slv_qdss_cfg,
1232 	[SLAVE_QM_CFG] = &slv_qm_cfg,
1233 	[SLAVE_QM_MPU_CFG] = &slv_qm_mpu_cfg,
1234 	[SLAVE_QPIC] = &slv_qpic,
1235 	[SLAVE_QUP_0] = &slv_qup_0,
1236 	[SLAVE_SDCC_1] = &slv_sdcc_1,
1237 	[SLAVE_SDCC_2] = &slv_sdcc_2,
1238 	[SLAVE_SNOC_CFG] = &slv_snoc_cfg,
1239 	[SLAVE_TCSR] = &slv_tcsr,
1240 	[SLAVE_USB3] = &slv_usb3,
1241 	[SLAVE_VENUS_CFG] = &slv_venus_cfg,
1242 	[SLAVE_VENUS_THROTTLE_CFG] = &slv_venus_throttle_cfg,
1243 	[SLAVE_VSENSE_CTRL_CFG] = &slv_vsense_ctrl_cfg,
1244 	[SLAVE_SERVICE_CNOC] = &slv_service_cnoc,
1245 };
1246 
1247 static const struct regmap_config qcm2290_cnoc_regmap_config = {
1248 	.reg_bits	= 32,
1249 	.reg_stride	= 4,
1250 	.val_bits	= 32,
1251 	.max_register	= 0x8200,
1252 	.fast_io	= true,
1253 };
1254 
1255 static const struct qcom_icc_desc qcm2290_cnoc = {
1256 	.type = QCOM_ICC_NOC,
1257 	.nodes = qcm2290_cnoc_nodes,
1258 	.num_nodes = ARRAY_SIZE(qcm2290_cnoc_nodes),
1259 	.bus_clk_desc = &bus_1_clk,
1260 	.regmap_cfg = &qcm2290_cnoc_regmap_config,
1261 	.keep_alive = true,
1262 };
1263 
1264 static struct qcom_icc_node * const qcm2290_snoc_nodes[] = {
1265 	[MASTER_CRYPTO_CORE0] = &mas_crypto_core0,
1266 	[MASTER_SNOC_CFG] = &mas_snoc_cfg,
1267 	[MASTER_TIC] = &mas_tic,
1268 	[MASTER_ANOC_SNOC] = &mas_anoc_snoc,
1269 	[MASTER_BIMC_SNOC] = &mas_bimc_snoc,
1270 	[MASTER_PIMEM] = &mas_pimem,
1271 	[MASTER_QDSS_BAM] = &mas_qdss_bam,
1272 	[MASTER_QUP_0] = &mas_qup_0,
1273 	[MASTER_IPA] = &mas_ipa,
1274 	[MASTER_QDSS_ETR] = &mas_qdss_etr,
1275 	[MASTER_SDCC_1] = &mas_sdcc_1,
1276 	[MASTER_SDCC_2] = &mas_sdcc_2,
1277 	[MASTER_QPIC] = &mas_qpic,
1278 	[MASTER_USB3_0] = &mas_usb3_0,
1279 	[SLAVE_APPSS] = &slv_appss,
1280 	[SLAVE_SNOC_CNOC] = &slv_snoc_cnoc,
1281 	[SLAVE_IMEM] = &slv_imem,
1282 	[SLAVE_PIMEM] = &slv_pimem,
1283 	[SLAVE_SNOC_BIMC] = &slv_snoc_bimc,
1284 	[SLAVE_SERVICE_SNOC] = &slv_service_snoc,
1285 	[SLAVE_QDSS_STM] = &slv_qdss_stm,
1286 	[SLAVE_TCU] = &slv_tcu,
1287 	[SLAVE_ANOC_SNOC] = &slv_anoc_snoc,
1288 };
1289 
1290 static const struct regmap_config qcm2290_snoc_regmap_config = {
1291 	.reg_bits	= 32,
1292 	.reg_stride	= 4,
1293 	.val_bits	= 32,
1294 	.max_register	= 0x60200,
1295 	.fast_io	= true,
1296 };
1297 
1298 static const struct qcom_icc_desc qcm2290_snoc = {
1299 	.type = QCOM_ICC_QNOC,
1300 	.nodes = qcm2290_snoc_nodes,
1301 	.num_nodes = ARRAY_SIZE(qcm2290_snoc_nodes),
1302 	.bus_clk_desc = &bus_2_clk,
1303 	.regmap_cfg = &qcm2290_snoc_regmap_config,
1304 	.keep_alive = true,
1305 	/* Vendor DT node fab-sys_noc property 'qcom,base-offset' */
1306 	.qos_offset = 0x15000,
1307 };
1308 
1309 static struct qcom_icc_node * const qcm2290_qup_virt_nodes[] = {
1310 	[MASTER_QUP_CORE_0] = &mas_qup_core_0,
1311 	[SLAVE_QUP_CORE_0] = &slv_qup_core_0
1312 };
1313 
1314 static const struct qcom_icc_desc qcm2290_qup_virt = {
1315 	.type = QCOM_ICC_QNOC,
1316 	.nodes = qcm2290_qup_virt_nodes,
1317 	.num_nodes = ARRAY_SIZE(qcm2290_qup_virt_nodes),
1318 	.bus_clk_desc = &qup_clk,
1319 	.keep_alive = true,
1320 };
1321 
1322 static struct qcom_icc_node * const qcm2290_mmnrt_virt_nodes[] = {
1323 	[MASTER_CAMNOC_SF] = &mas_camnoc_sf,
1324 	[MASTER_VIDEO_P0] = &mas_video_p0,
1325 	[MASTER_VIDEO_PROC] = &mas_video_proc,
1326 	[SLAVE_SNOC_BIMC_NRT] = &slv_snoc_bimc_nrt,
1327 };
1328 
1329 static const struct qcom_icc_desc qcm2290_mmnrt_virt = {
1330 	.type = QCOM_ICC_QNOC,
1331 	.nodes = qcm2290_mmnrt_virt_nodes,
1332 	.num_nodes = ARRAY_SIZE(qcm2290_mmnrt_virt_nodes),
1333 	.bus_clk_desc = &mmaxi_0_clk,
1334 	.regmap_cfg = &qcm2290_snoc_regmap_config,
1335 	.keep_alive = true,
1336 	.qos_offset = 0x15000,
1337 	.ab_coeff = 142,
1338 };
1339 
1340 static struct qcom_icc_node * const qcm2290_mmrt_virt_nodes[] = {
1341 	[MASTER_CAMNOC_HF] = &mas_camnoc_hf,
1342 	[MASTER_MDP0] = &mas_mdp0,
1343 	[SLAVE_SNOC_BIMC_RT] = &slv_snoc_bimc_rt,
1344 };
1345 
1346 static const struct qcom_icc_desc qcm2290_mmrt_virt = {
1347 	.type = QCOM_ICC_QNOC,
1348 	.nodes = qcm2290_mmrt_virt_nodes,
1349 	.num_nodes = ARRAY_SIZE(qcm2290_mmrt_virt_nodes),
1350 	.bus_clk_desc = &mmaxi_1_clk,
1351 	.regmap_cfg = &qcm2290_snoc_regmap_config,
1352 	.keep_alive = true,
1353 	.qos_offset = 0x15000,
1354 	.ab_coeff = 139,
1355 };
1356 
1357 static const struct of_device_id qcm2290_noc_of_match[] = {
1358 	{ .compatible = "qcom,qcm2290-bimc", .data = &qcm2290_bimc },
1359 	{ .compatible = "qcom,qcm2290-cnoc", .data = &qcm2290_cnoc },
1360 	{ .compatible = "qcom,qcm2290-snoc", .data = &qcm2290_snoc },
1361 	{ .compatible = "qcom,qcm2290-qup-virt", .data = &qcm2290_qup_virt },
1362 	{ .compatible = "qcom,qcm2290-mmrt-virt", .data = &qcm2290_mmrt_virt },
1363 	{ .compatible = "qcom,qcm2290-mmnrt-virt", .data = &qcm2290_mmnrt_virt },
1364 	{ },
1365 };
1366 MODULE_DEVICE_TABLE(of, qcm2290_noc_of_match);
1367 
1368 static struct platform_driver qcm2290_noc_driver = {
1369 	.probe = qnoc_probe,
1370 	.remove_new = qnoc_remove,
1371 	.driver = {
1372 		.name = "qnoc-qcm2290",
1373 		.of_match_table = qcm2290_noc_of_match,
1374 		.sync_state = icc_sync_state,
1375 	},
1376 };
1377 module_platform_driver(qcm2290_noc_driver);
1378 
1379 MODULE_DESCRIPTION("Qualcomm QCM2290 NoC driver");
1380 MODULE_LICENSE("GPL v2");
1381