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