Merge tag 'pci-v5.18-changes-2' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / interconnect / qcom / msm8939.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2020 Linaro Ltd
4  * Author: Jun Nie <jun.nie@linaro.org>
5  * With reference of msm8916 interconnect driver of Georgi Djakov.
6  */
7
8 #include <linux/clk.h>
9 #include <linux/device.h>
10 #include <linux/interconnect-provider.h>
11 #include <linux/io.h>
12 #include <linux/module.h>
13 #include <linux/platform_device.h>
14 #include <linux/regmap.h>
15 #include <linux/of_device.h>
16
17 #include <dt-bindings/interconnect/qcom,msm8939.h>
18
19 #include "smd-rpm.h"
20 #include "icc-rpm.h"
21
22 enum {
23         MSM8939_BIMC_SNOC_MAS = 1,
24         MSM8939_BIMC_SNOC_SLV,
25         MSM8939_MASTER_AMPSS_M0,
26         MSM8939_MASTER_LPASS,
27         MSM8939_MASTER_BLSP_1,
28         MSM8939_MASTER_DEHR,
29         MSM8939_MASTER_GRAPHICS_3D,
30         MSM8939_MASTER_JPEG,
31         MSM8939_MASTER_MDP_PORT0,
32         MSM8939_MASTER_MDP_PORT1,
33         MSM8939_MASTER_CPP,
34         MSM8939_MASTER_CRYPTO_CORE0,
35         MSM8939_MASTER_SDCC_1,
36         MSM8939_MASTER_SDCC_2,
37         MSM8939_MASTER_QDSS_BAM,
38         MSM8939_MASTER_QDSS_ETR,
39         MSM8939_MASTER_SNOC_CFG,
40         MSM8939_MASTER_SPDM,
41         MSM8939_MASTER_TCU0,
42         MSM8939_MASTER_USB_HS1,
43         MSM8939_MASTER_USB_HS2,
44         MSM8939_MASTER_VFE,
45         MSM8939_MASTER_VIDEO_P0,
46         MSM8939_SNOC_MM_INT_0,
47         MSM8939_SNOC_MM_INT_1,
48         MSM8939_SNOC_MM_INT_2,
49         MSM8939_PNOC_INT_0,
50         MSM8939_PNOC_INT_1,
51         MSM8939_PNOC_MAS_0,
52         MSM8939_PNOC_MAS_1,
53         MSM8939_PNOC_SLV_0,
54         MSM8939_PNOC_SLV_1,
55         MSM8939_PNOC_SLV_2,
56         MSM8939_PNOC_SLV_3,
57         MSM8939_PNOC_SLV_4,
58         MSM8939_PNOC_SLV_8,
59         MSM8939_PNOC_SLV_9,
60         MSM8939_PNOC_SNOC_MAS,
61         MSM8939_PNOC_SNOC_SLV,
62         MSM8939_SNOC_QDSS_INT,
63         MSM8939_SLAVE_AMPSS_L2,
64         MSM8939_SLAVE_APSS,
65         MSM8939_SLAVE_LPASS,
66         MSM8939_SLAVE_BIMC_CFG,
67         MSM8939_SLAVE_BLSP_1,
68         MSM8939_SLAVE_BOOT_ROM,
69         MSM8939_SLAVE_CAMERA_CFG,
70         MSM8939_SLAVE_CATS_128,
71         MSM8939_SLAVE_OCMEM_64,
72         MSM8939_SLAVE_CLK_CTL,
73         MSM8939_SLAVE_CRYPTO_0_CFG,
74         MSM8939_SLAVE_DEHR_CFG,
75         MSM8939_SLAVE_DISPLAY_CFG,
76         MSM8939_SLAVE_EBI_CH0,
77         MSM8939_SLAVE_GRAPHICS_3D_CFG,
78         MSM8939_SLAVE_IMEM_CFG,
79         MSM8939_SLAVE_IMEM,
80         MSM8939_SLAVE_MPM,
81         MSM8939_SLAVE_MSG_RAM,
82         MSM8939_SLAVE_MSS,
83         MSM8939_SLAVE_PDM,
84         MSM8939_SLAVE_PMIC_ARB,
85         MSM8939_SLAVE_PNOC_CFG,
86         MSM8939_SLAVE_PRNG,
87         MSM8939_SLAVE_QDSS_CFG,
88         MSM8939_SLAVE_QDSS_STM,
89         MSM8939_SLAVE_RBCPR_CFG,
90         MSM8939_SLAVE_SDCC_1,
91         MSM8939_SLAVE_SDCC_2,
92         MSM8939_SLAVE_SECURITY,
93         MSM8939_SLAVE_SNOC_CFG,
94         MSM8939_SLAVE_SPDM,
95         MSM8939_SLAVE_SRVC_SNOC,
96         MSM8939_SLAVE_TCSR,
97         MSM8939_SLAVE_TLMM,
98         MSM8939_SLAVE_USB_HS1,
99         MSM8939_SLAVE_USB_HS2,
100         MSM8939_SLAVE_VENUS_CFG,
101         MSM8939_SNOC_BIMC_0_MAS,
102         MSM8939_SNOC_BIMC_0_SLV,
103         MSM8939_SNOC_BIMC_1_MAS,
104         MSM8939_SNOC_BIMC_1_SLV,
105         MSM8939_SNOC_BIMC_2_MAS,
106         MSM8939_SNOC_BIMC_2_SLV,
107         MSM8939_SNOC_INT_0,
108         MSM8939_SNOC_INT_1,
109         MSM8939_SNOC_INT_BIMC,
110         MSM8939_SNOC_PNOC_MAS,
111         MSM8939_SNOC_PNOC_SLV,
112 };
113
114 static const u16 bimc_snoc_mas_links[] = {
115         MSM8939_BIMC_SNOC_SLV
116 };
117
118 static struct qcom_icc_node bimc_snoc_mas = {
119         .name = "bimc_snoc_mas",
120         .id = MSM8939_BIMC_SNOC_MAS,
121         .buswidth = 8,
122         .mas_rpm_id = -1,
123         .slv_rpm_id = -1,
124         .qos.ap_owned = true,
125         .qos.qos_mode = NOC_QOS_MODE_INVALID,
126         .num_links = ARRAY_SIZE(bimc_snoc_mas_links),
127         .links = bimc_snoc_mas_links,
128 };
129
130 static const u16 bimc_snoc_slv_links[] = {
131         MSM8939_SNOC_INT_0,
132         MSM8939_SNOC_INT_1
133 };
134
135 static struct qcom_icc_node bimc_snoc_slv = {
136         .name = "bimc_snoc_slv",
137         .id = MSM8939_BIMC_SNOC_SLV,
138         .buswidth = 16,
139         .mas_rpm_id = -1,
140         .slv_rpm_id = 2,
141         .num_links = ARRAY_SIZE(bimc_snoc_slv_links),
142         .links = bimc_snoc_slv_links,
143 };
144
145 static const u16 mas_apss_links[] = {
146         MSM8939_SLAVE_EBI_CH0,
147         MSM8939_BIMC_SNOC_MAS,
148         MSM8939_SLAVE_AMPSS_L2
149 };
150
151 static struct qcom_icc_node mas_apss = {
152         .name = "mas_apss",
153         .id = MSM8939_MASTER_AMPSS_M0,
154         .buswidth = 16,
155         .mas_rpm_id = -1,
156         .slv_rpm_id = -1,
157         .qos.ap_owned = true,
158         .qos.qos_mode = NOC_QOS_MODE_FIXED,
159         .qos.areq_prio = 0,
160         .qos.prio_level = 0,
161         .qos.qos_port = 0,
162         .num_links = ARRAY_SIZE(mas_apss_links),
163         .links = mas_apss_links,
164 };
165
166 static const u16 mas_audio_links[] = {
167         MSM8939_PNOC_MAS_0
168 };
169
170 static struct qcom_icc_node mas_audio = {
171         .name = "mas_audio",
172         .id = MSM8939_MASTER_LPASS,
173         .buswidth = 4,
174         .mas_rpm_id = -1,
175         .slv_rpm_id = -1,
176         .num_links = ARRAY_SIZE(mas_audio_links),
177         .links = mas_audio_links,
178 };
179
180 static const u16 mas_blsp_1_links[] = {
181         MSM8939_PNOC_MAS_1
182 };
183
184 static struct qcom_icc_node mas_blsp_1 = {
185         .name = "mas_blsp_1",
186         .id = MSM8939_MASTER_BLSP_1,
187         .buswidth = 4,
188         .mas_rpm_id = -1,
189         .slv_rpm_id = -1,
190         .num_links = ARRAY_SIZE(mas_blsp_1_links),
191         .links = mas_blsp_1_links,
192 };
193
194 static const u16 mas_dehr_links[] = {
195         MSM8939_PNOC_MAS_0
196 };
197
198 static struct qcom_icc_node mas_dehr = {
199         .name = "mas_dehr",
200         .id = MSM8939_MASTER_DEHR,
201         .buswidth = 4,
202         .mas_rpm_id = -1,
203         .slv_rpm_id = -1,
204         .num_links = ARRAY_SIZE(mas_dehr_links),
205         .links = mas_dehr_links,
206 };
207
208 static const u16 mas_gfx_links[] = {
209         MSM8939_SLAVE_EBI_CH0,
210         MSM8939_BIMC_SNOC_MAS,
211         MSM8939_SLAVE_AMPSS_L2
212 };
213
214 static struct qcom_icc_node mas_gfx = {
215         .name = "mas_gfx",
216         .id = MSM8939_MASTER_GRAPHICS_3D,
217         .buswidth = 16,
218         .mas_rpm_id = -1,
219         .slv_rpm_id = -1,
220         .qos.ap_owned = true,
221         .qos.qos_mode = NOC_QOS_MODE_FIXED,
222         .qos.areq_prio = 0,
223         .qos.prio_level = 0,
224         .qos.qos_port = 2,
225         .num_links = ARRAY_SIZE(mas_gfx_links),
226         .links = mas_gfx_links,
227 };
228
229 static const u16 mas_jpeg_links[] = {
230         MSM8939_SNOC_MM_INT_0,
231         MSM8939_SNOC_MM_INT_2
232 };
233
234 static struct qcom_icc_node mas_jpeg = {
235         .name = "mas_jpeg",
236         .id = MSM8939_MASTER_JPEG,
237         .buswidth = 16,
238         .mas_rpm_id = -1,
239         .slv_rpm_id = -1,
240         .qos.ap_owned = true,
241         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
242         .qos.areq_prio = 0,
243         .qos.prio_level = 0,
244         .qos.qos_port = 6,
245         .num_links = ARRAY_SIZE(mas_jpeg_links),
246         .links = mas_jpeg_links,
247 };
248
249 static const u16 mas_mdp0_links[] = {
250         MSM8939_SNOC_MM_INT_1,
251         MSM8939_SNOC_MM_INT_2
252 };
253
254 static struct qcom_icc_node mas_mdp0 = {
255         .name = "mas_mdp0",
256         .id = MSM8939_MASTER_MDP_PORT0,
257         .buswidth = 16,
258         .mas_rpm_id = -1,
259         .slv_rpm_id = -1,
260         .qos.ap_owned = true,
261         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
262         .qos.areq_prio = 0,
263         .qos.prio_level = 0,
264         .qos.qos_port = 7,
265         .num_links = ARRAY_SIZE(mas_mdp0_links),
266         .links = mas_mdp0_links,
267 };
268
269 static const u16 mas_mdp1_links[] = {
270         MSM8939_SNOC_MM_INT_0,
271         MSM8939_SNOC_MM_INT_2
272 };
273
274 static struct qcom_icc_node mas_mdp1 = {
275         .name = "mas_mdp1",
276         .id = MSM8939_MASTER_MDP_PORT1,
277         .buswidth = 16,
278         .mas_rpm_id = -1,
279         .slv_rpm_id = -1,
280         .qos.ap_owned = true,
281         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
282         .qos.areq_prio = 0,
283         .qos.prio_level = 0,
284         .qos.qos_port = 13,
285         .num_links = ARRAY_SIZE(mas_mdp1_links),
286         .links = mas_mdp1_links,
287 };
288
289 static const u16 mas_cpp_links[] = {
290         MSM8939_SNOC_MM_INT_0,
291         MSM8939_SNOC_MM_INT_2
292 };
293
294 static struct qcom_icc_node mas_cpp = {
295         .name = "mas_cpp",
296         .id = MSM8939_MASTER_CPP,
297         .buswidth = 16,
298         .mas_rpm_id = -1,
299         .slv_rpm_id = -1,
300         .qos.ap_owned = true,
301         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
302         .qos.areq_prio = 0,
303         .qos.prio_level = 0,
304         .qos.qos_port = 12,
305         .num_links = ARRAY_SIZE(mas_cpp_links),
306         .links = mas_cpp_links,
307 };
308
309 static const u16 mas_pcnoc_crypto_0_links[] = {
310         MSM8939_PNOC_INT_1
311 };
312
313 static struct qcom_icc_node mas_pcnoc_crypto_0 = {
314         .name = "mas_pcnoc_crypto_0",
315         .id = MSM8939_MASTER_CRYPTO_CORE0,
316         .buswidth = 8,
317         .mas_rpm_id = -1,
318         .slv_rpm_id = -1,
319         .num_links = ARRAY_SIZE(mas_pcnoc_crypto_0_links),
320         .links = mas_pcnoc_crypto_0_links,
321 };
322
323 static const u16 mas_pcnoc_sdcc_1_links[] = {
324         MSM8939_PNOC_INT_1
325 };
326
327 static struct qcom_icc_node mas_pcnoc_sdcc_1 = {
328         .name = "mas_pcnoc_sdcc_1",
329         .id = MSM8939_MASTER_SDCC_1,
330         .buswidth = 8,
331         .mas_rpm_id = -1,
332         .slv_rpm_id = -1,
333         .num_links = ARRAY_SIZE(mas_pcnoc_sdcc_1_links),
334         .links = mas_pcnoc_sdcc_1_links,
335 };
336
337 static const u16 mas_pcnoc_sdcc_2_links[] = {
338         MSM8939_PNOC_INT_1
339 };
340
341 static struct qcom_icc_node mas_pcnoc_sdcc_2 = {
342         .name = "mas_pcnoc_sdcc_2",
343         .id = MSM8939_MASTER_SDCC_2,
344         .buswidth = 8,
345         .mas_rpm_id = -1,
346         .slv_rpm_id = -1,
347         .num_links = ARRAY_SIZE(mas_pcnoc_sdcc_2_links),
348         .links = mas_pcnoc_sdcc_2_links,
349 };
350
351 static const u16 mas_qdss_bam_links[] = {
352         MSM8939_SNOC_QDSS_INT
353 };
354
355 static struct qcom_icc_node mas_qdss_bam = {
356         .name = "mas_qdss_bam",
357         .id = MSM8939_MASTER_QDSS_BAM,
358         .buswidth = 8,
359         .mas_rpm_id = -1,
360         .slv_rpm_id = -1,
361         .qos.ap_owned = true,
362         .qos.qos_mode = NOC_QOS_MODE_FIXED,
363         .qos.areq_prio = 1,
364         .qos.prio_level = 1,
365         .qos.qos_port = 11,
366         .num_links = ARRAY_SIZE(mas_qdss_bam_links),
367         .links = mas_qdss_bam_links,
368 };
369
370 static const u16 mas_qdss_etr_links[] = {
371         MSM8939_SNOC_QDSS_INT
372 };
373
374 static struct qcom_icc_node mas_qdss_etr = {
375         .name = "mas_qdss_etr",
376         .id = MSM8939_MASTER_QDSS_ETR,
377         .buswidth = 8,
378         .mas_rpm_id = -1,
379         .slv_rpm_id = -1,
380         .qos.ap_owned = true,
381         .qos.qos_mode = NOC_QOS_MODE_FIXED,
382         .qos.areq_prio = 1,
383         .qos.prio_level = 1,
384         .qos.qos_port = 10,
385         .num_links = ARRAY_SIZE(mas_qdss_etr_links),
386         .links = mas_qdss_etr_links,
387 };
388
389 static const u16 mas_snoc_cfg_links[] = {
390         MSM8939_SLAVE_SRVC_SNOC
391 };
392
393 static struct qcom_icc_node mas_snoc_cfg = {
394         .name = "mas_snoc_cfg",
395         .id = MSM8939_MASTER_SNOC_CFG,
396         .buswidth = 4,
397         .mas_rpm_id = -1,
398         .slv_rpm_id = -1,
399         .num_links = ARRAY_SIZE(mas_snoc_cfg_links),
400         .links = mas_snoc_cfg_links,
401 };
402
403 static const u16 mas_spdm_links[] = {
404         MSM8939_PNOC_MAS_0
405 };
406
407 static struct qcom_icc_node mas_spdm = {
408         .name = "mas_spdm",
409         .id = MSM8939_MASTER_SPDM,
410         .buswidth = 4,
411         .mas_rpm_id = -1,
412         .slv_rpm_id = -1,
413         .num_links = ARRAY_SIZE(mas_spdm_links),
414         .links = mas_spdm_links,
415 };
416
417 static const u16 mas_tcu0_links[] = {
418         MSM8939_SLAVE_EBI_CH0,
419         MSM8939_BIMC_SNOC_MAS,
420         MSM8939_SLAVE_AMPSS_L2
421 };
422
423 static struct qcom_icc_node mas_tcu0 = {
424         .name = "mas_tcu0",
425         .id = MSM8939_MASTER_TCU0,
426         .buswidth = 16,
427         .mas_rpm_id = -1,
428         .slv_rpm_id = -1,
429         .qos.ap_owned = true,
430         .qos.qos_mode = NOC_QOS_MODE_FIXED,
431         .qos.areq_prio = 2,
432         .qos.prio_level = 2,
433         .qos.qos_port = 6,
434         .num_links = ARRAY_SIZE(mas_tcu0_links),
435         .links = mas_tcu0_links,
436 };
437
438 static const u16 mas_usb_hs1_links[] = {
439         MSM8939_PNOC_MAS_1
440 };
441
442 static struct qcom_icc_node mas_usb_hs1 = {
443         .name = "mas_usb_hs1",
444         .id = MSM8939_MASTER_USB_HS1,
445         .buswidth = 4,
446         .mas_rpm_id = -1,
447         .slv_rpm_id = -1,
448         .num_links = ARRAY_SIZE(mas_usb_hs1_links),
449         .links = mas_usb_hs1_links,
450 };
451
452 static const u16 mas_usb_hs2_links[] = {
453         MSM8939_PNOC_MAS_1
454 };
455
456 static struct qcom_icc_node mas_usb_hs2 = {
457         .name = "mas_usb_hs2",
458         .id = MSM8939_MASTER_USB_HS2,
459         .buswidth = 4,
460         .mas_rpm_id = -1,
461         .slv_rpm_id = -1,
462         .num_links = ARRAY_SIZE(mas_usb_hs2_links),
463         .links = mas_usb_hs2_links,
464 };
465
466 static const u16 mas_vfe_links[] = {
467         MSM8939_SNOC_MM_INT_1,
468         MSM8939_SNOC_MM_INT_2
469 };
470
471 static struct qcom_icc_node mas_vfe = {
472         .name = "mas_vfe",
473         .id = MSM8939_MASTER_VFE,
474         .buswidth = 16,
475         .mas_rpm_id = -1,
476         .slv_rpm_id = -1,
477         .qos.ap_owned = true,
478         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
479         .qos.areq_prio = 0,
480         .qos.prio_level = 0,
481         .qos.qos_port = 9,
482         .num_links = ARRAY_SIZE(mas_vfe_links),
483         .links = mas_vfe_links,
484 };
485
486 static const u16 mas_video_links[] = {
487         MSM8939_SNOC_MM_INT_0,
488         MSM8939_SNOC_MM_INT_2
489 };
490
491 static struct qcom_icc_node mas_video = {
492         .name = "mas_video",
493         .id = MSM8939_MASTER_VIDEO_P0,
494         .buswidth = 16,
495         .mas_rpm_id = -1,
496         .slv_rpm_id = -1,
497         .qos.ap_owned = true,
498         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
499         .qos.areq_prio = 0,
500         .qos.prio_level = 0,
501         .qos.qos_port = 8,
502         .num_links = ARRAY_SIZE(mas_video_links),
503         .links = mas_video_links,
504 };
505
506 static const u16 mm_int_0_links[] = {
507         MSM8939_SNOC_BIMC_2_MAS
508 };
509
510 static struct qcom_icc_node mm_int_0 = {
511         .name = "mm_int_0",
512         .id = MSM8939_SNOC_MM_INT_0,
513         .buswidth = 16,
514         .mas_rpm_id = -1,
515         .slv_rpm_id = -1,
516         .qos.ap_owned = true,
517         .qos.qos_mode = NOC_QOS_MODE_INVALID,
518         .num_links = ARRAY_SIZE(mm_int_0_links),
519         .links = mm_int_0_links,
520 };
521
522 static const u16 mm_int_1_links[] = {
523         MSM8939_SNOC_BIMC_1_MAS
524 };
525
526 static struct qcom_icc_node mm_int_1 = {
527         .name = "mm_int_1",
528         .id = MSM8939_SNOC_MM_INT_1,
529         .buswidth = 16,
530         .mas_rpm_id = -1,
531         .slv_rpm_id = -1,
532         .qos.ap_owned = true,
533         .qos.qos_mode = NOC_QOS_MODE_INVALID,
534         .num_links = ARRAY_SIZE(mm_int_1_links),
535         .links = mm_int_1_links,
536 };
537
538 static const u16 mm_int_2_links[] = {
539         MSM8939_SNOC_INT_0
540 };
541
542 static struct qcom_icc_node mm_int_2 = {
543         .name = "mm_int_2",
544         .id = MSM8939_SNOC_MM_INT_2,
545         .buswidth = 16,
546         .mas_rpm_id = -1,
547         .slv_rpm_id = -1,
548         .qos.ap_owned = true,
549         .qos.qos_mode = NOC_QOS_MODE_INVALID,
550         .num_links = ARRAY_SIZE(mm_int_2_links),
551         .links = mm_int_2_links,
552 };
553
554 static const u16 pcnoc_int_0_links[] = {
555         MSM8939_PNOC_SNOC_MAS,
556         MSM8939_PNOC_SLV_0,
557         MSM8939_PNOC_SLV_1,
558         MSM8939_PNOC_SLV_2,
559         MSM8939_PNOC_SLV_3,
560         MSM8939_PNOC_SLV_4,
561         MSM8939_PNOC_SLV_8,
562         MSM8939_PNOC_SLV_9
563 };
564
565 static struct qcom_icc_node pcnoc_int_0 = {
566         .name = "pcnoc_int_0",
567         .id = MSM8939_PNOC_INT_0,
568         .buswidth = 8,
569         .mas_rpm_id = -1,
570         .slv_rpm_id = -1,
571         .num_links = ARRAY_SIZE(pcnoc_int_0_links),
572         .links = pcnoc_int_0_links,
573 };
574
575 static const u16 pcnoc_int_1_links[] = {
576         MSM8939_PNOC_SNOC_MAS
577 };
578
579 static struct qcom_icc_node pcnoc_int_1 = {
580         .name = "pcnoc_int_1",
581         .id = MSM8939_PNOC_INT_1,
582         .buswidth = 8,
583         .mas_rpm_id = -1,
584         .slv_rpm_id = -1,
585         .num_links = ARRAY_SIZE(pcnoc_int_1_links),
586         .links = pcnoc_int_1_links,
587 };
588
589 static const u16 pcnoc_m_0_links[] = {
590         MSM8939_PNOC_INT_0
591 };
592
593 static struct qcom_icc_node pcnoc_m_0 = {
594         .name = "pcnoc_m_0",
595         .id = MSM8939_PNOC_MAS_0,
596         .buswidth = 8,
597         .mas_rpm_id = -1,
598         .slv_rpm_id = -1,
599         .num_links = ARRAY_SIZE(pcnoc_m_0_links),
600         .links = pcnoc_m_0_links,
601 };
602
603 static const u16 pcnoc_m_1_links[] = {
604         MSM8939_PNOC_SNOC_MAS
605 };
606
607 static struct qcom_icc_node pcnoc_m_1 = {
608         .name = "pcnoc_m_1",
609         .id = MSM8939_PNOC_MAS_1,
610         .buswidth = 8,
611         .mas_rpm_id = -1,
612         .slv_rpm_id = -1,
613         .num_links = ARRAY_SIZE(pcnoc_m_1_links),
614         .links = pcnoc_m_1_links,
615 };
616
617 static const u16 pcnoc_s_0_links[] = {
618         MSM8939_SLAVE_CLK_CTL,
619         MSM8939_SLAVE_TLMM,
620         MSM8939_SLAVE_TCSR,
621         MSM8939_SLAVE_SECURITY,
622         MSM8939_SLAVE_MSS
623 };
624
625 static struct qcom_icc_node pcnoc_s_0 = {
626         .name = "pcnoc_s_0",
627         .id = MSM8939_PNOC_SLV_0,
628         .buswidth = 4,
629         .mas_rpm_id = -1,
630         .slv_rpm_id = -1,
631         .num_links = ARRAY_SIZE(pcnoc_s_0_links),
632         .links = pcnoc_s_0_links,
633 };
634
635 static const u16 pcnoc_s_1_links[] = {
636         MSM8939_SLAVE_IMEM_CFG,
637         MSM8939_SLAVE_CRYPTO_0_CFG,
638         MSM8939_SLAVE_MSG_RAM,
639         MSM8939_SLAVE_PDM,
640         MSM8939_SLAVE_PRNG
641 };
642
643 static struct qcom_icc_node pcnoc_s_1 = {
644         .name = "pcnoc_s_1",
645         .id = MSM8939_PNOC_SLV_1,
646         .buswidth = 4,
647         .mas_rpm_id = -1,
648         .slv_rpm_id = -1,
649         .num_links = ARRAY_SIZE(pcnoc_s_1_links),
650         .links = pcnoc_s_1_links,
651 };
652
653 static const u16 pcnoc_s_2_links[] = {
654         MSM8939_SLAVE_SPDM,
655         MSM8939_SLAVE_BOOT_ROM,
656         MSM8939_SLAVE_BIMC_CFG,
657         MSM8939_SLAVE_PNOC_CFG,
658         MSM8939_SLAVE_PMIC_ARB
659 };
660
661 static struct qcom_icc_node pcnoc_s_2 = {
662         .name = "pcnoc_s_2",
663         .id = MSM8939_PNOC_SLV_2,
664         .buswidth = 4,
665         .mas_rpm_id = -1,
666         .slv_rpm_id = -1,
667         .num_links = ARRAY_SIZE(pcnoc_s_2_links),
668         .links = pcnoc_s_2_links,
669 };
670
671 static const u16 pcnoc_s_3_links[] = {
672         MSM8939_SLAVE_MPM,
673         MSM8939_SLAVE_SNOC_CFG,
674         MSM8939_SLAVE_RBCPR_CFG,
675         MSM8939_SLAVE_QDSS_CFG,
676         MSM8939_SLAVE_DEHR_CFG
677 };
678
679 static struct qcom_icc_node pcnoc_s_3 = {
680         .name = "pcnoc_s_3",
681         .id = MSM8939_PNOC_SLV_3,
682         .buswidth = 4,
683         .mas_rpm_id = -1,
684         .slv_rpm_id = -1,
685         .num_links = ARRAY_SIZE(pcnoc_s_3_links),
686         .links = pcnoc_s_3_links,
687 };
688
689 static const u16 pcnoc_s_4_links[] = {
690         MSM8939_SLAVE_VENUS_CFG,
691         MSM8939_SLAVE_CAMERA_CFG,
692         MSM8939_SLAVE_DISPLAY_CFG
693 };
694
695 static struct qcom_icc_node pcnoc_s_4 = {
696         .name = "pcnoc_s_4",
697         .id = MSM8939_PNOC_SLV_4,
698         .buswidth = 4,
699         .mas_rpm_id = -1,
700         .slv_rpm_id = -1,
701         .num_links = ARRAY_SIZE(pcnoc_s_4_links),
702         .links = pcnoc_s_4_links,
703 };
704
705 static const u16 pcnoc_s_8_links[] = {
706         MSM8939_SLAVE_USB_HS1,
707         MSM8939_SLAVE_SDCC_1,
708         MSM8939_SLAVE_BLSP_1
709 };
710
711 static struct qcom_icc_node pcnoc_s_8 = {
712         .name = "pcnoc_s_8",
713         .id = MSM8939_PNOC_SLV_8,
714         .buswidth = 4,
715         .mas_rpm_id = -1,
716         .slv_rpm_id = -1,
717         .num_links = ARRAY_SIZE(pcnoc_s_8_links),
718         .links = pcnoc_s_8_links,
719 };
720
721 static const u16 pcnoc_s_9_links[] = {
722         MSM8939_SLAVE_SDCC_2,
723         MSM8939_SLAVE_LPASS,
724         MSM8939_SLAVE_USB_HS2
725 };
726
727 static struct qcom_icc_node pcnoc_s_9 = {
728         .name = "pcnoc_s_9",
729         .id = MSM8939_PNOC_SLV_9,
730         .buswidth = 4,
731         .mas_rpm_id = -1,
732         .slv_rpm_id = -1,
733         .num_links = ARRAY_SIZE(pcnoc_s_9_links),
734         .links = pcnoc_s_9_links,
735 };
736
737 static const u16 pcnoc_snoc_mas_links[] = {
738         MSM8939_PNOC_SNOC_SLV
739 };
740
741 static struct qcom_icc_node pcnoc_snoc_mas = {
742         .name = "pcnoc_snoc_mas",
743         .id = MSM8939_PNOC_SNOC_MAS,
744         .buswidth = 8,
745         .mas_rpm_id = 29,
746         .slv_rpm_id = -1,
747         .num_links = ARRAY_SIZE(pcnoc_snoc_mas_links),
748         .links = pcnoc_snoc_mas_links,
749 };
750
751 static const u16 pcnoc_snoc_slv_links[] = {
752         MSM8939_SNOC_INT_0,
753         MSM8939_SNOC_INT_BIMC,
754         MSM8939_SNOC_INT_1
755 };
756
757 static struct qcom_icc_node pcnoc_snoc_slv = {
758         .name = "pcnoc_snoc_slv",
759         .id = MSM8939_PNOC_SNOC_SLV,
760         .buswidth = 8,
761         .mas_rpm_id = -1,
762         .slv_rpm_id = 45,
763         .num_links = ARRAY_SIZE(pcnoc_snoc_slv_links),
764         .links = pcnoc_snoc_slv_links,
765 };
766
767 static const u16 qdss_int_links[] = {
768         MSM8939_SNOC_INT_0,
769         MSM8939_SNOC_INT_BIMC
770 };
771
772 static struct qcom_icc_node qdss_int = {
773         .name = "qdss_int",
774         .id = MSM8939_SNOC_QDSS_INT,
775         .buswidth = 8,
776         .mas_rpm_id = -1,
777         .slv_rpm_id = -1,
778         .qos.ap_owned = true,
779         .qos.qos_mode = NOC_QOS_MODE_INVALID,
780         .num_links = ARRAY_SIZE(qdss_int_links),
781         .links = qdss_int_links,
782 };
783
784 static struct qcom_icc_node slv_apps_l2 = {
785         .name = "slv_apps_l2",
786         .id = MSM8939_SLAVE_AMPSS_L2,
787         .buswidth = 16,
788         .mas_rpm_id = -1,
789         .slv_rpm_id = -1,
790 };
791
792 static struct qcom_icc_node slv_apss = {
793         .name = "slv_apss",
794         .id = MSM8939_SLAVE_APSS,
795         .buswidth = 4,
796         .mas_rpm_id = -1,
797         .slv_rpm_id = -1,
798 };
799
800 static struct qcom_icc_node slv_audio = {
801         .name = "slv_audio",
802         .id = MSM8939_SLAVE_LPASS,
803         .buswidth = 4,
804         .mas_rpm_id = -1,
805         .slv_rpm_id = -1,
806 };
807
808 static struct qcom_icc_node slv_bimc_cfg = {
809         .name = "slv_bimc_cfg",
810         .id = MSM8939_SLAVE_BIMC_CFG,
811         .buswidth = 4,
812         .mas_rpm_id = -1,
813         .slv_rpm_id = -1,
814 };
815
816 static struct qcom_icc_node slv_blsp_1 = {
817         .name = "slv_blsp_1",
818         .id = MSM8939_SLAVE_BLSP_1,
819         .buswidth = 4,
820         .mas_rpm_id = -1,
821         .slv_rpm_id = -1,
822 };
823
824 static struct qcom_icc_node slv_boot_rom = {
825         .name = "slv_boot_rom",
826         .id = MSM8939_SLAVE_BOOT_ROM,
827         .buswidth = 4,
828         .mas_rpm_id = -1,
829         .slv_rpm_id = -1,
830 };
831
832 static struct qcom_icc_node slv_camera_cfg = {
833         .name = "slv_camera_cfg",
834         .id = MSM8939_SLAVE_CAMERA_CFG,
835         .buswidth = 4,
836         .mas_rpm_id = -1,
837         .slv_rpm_id = -1,
838 };
839
840 static struct qcom_icc_node slv_cats_0 = {
841         .name = "slv_cats_0",
842         .id = MSM8939_SLAVE_CATS_128,
843         .buswidth = 16,
844         .mas_rpm_id = -1,
845         .slv_rpm_id = -1,
846 };
847
848 static struct qcom_icc_node slv_cats_1 = {
849         .name = "slv_cats_1",
850         .id = MSM8939_SLAVE_OCMEM_64,
851         .buswidth = 8,
852         .mas_rpm_id = -1,
853         .slv_rpm_id = -1,
854 };
855
856 static struct qcom_icc_node slv_clk_ctl = {
857         .name = "slv_clk_ctl",
858         .id = MSM8939_SLAVE_CLK_CTL,
859         .buswidth = 4,
860         .mas_rpm_id = -1,
861         .slv_rpm_id = -1,
862 };
863
864 static struct qcom_icc_node slv_crypto_0_cfg = {
865         .name = "slv_crypto_0_cfg",
866         .id = MSM8939_SLAVE_CRYPTO_0_CFG,
867         .buswidth = 4,
868         .mas_rpm_id = -1,
869         .slv_rpm_id = -1,
870 };
871
872 static struct qcom_icc_node slv_dehr_cfg = {
873         .name = "slv_dehr_cfg",
874         .id = MSM8939_SLAVE_DEHR_CFG,
875         .buswidth = 4,
876         .mas_rpm_id = -1,
877         .slv_rpm_id = -1,
878 };
879
880 static struct qcom_icc_node slv_display_cfg = {
881         .name = "slv_display_cfg",
882         .id = MSM8939_SLAVE_DISPLAY_CFG,
883         .buswidth = 4,
884         .mas_rpm_id = -1,
885         .slv_rpm_id = -1,
886 };
887
888 static struct qcom_icc_node slv_ebi_ch0 = {
889         .name = "slv_ebi_ch0",
890         .id = MSM8939_SLAVE_EBI_CH0,
891         .buswidth = 16,
892         .mas_rpm_id = -1,
893         .slv_rpm_id = 0,
894 };
895
896 static struct qcom_icc_node slv_gfx_cfg = {
897         .name = "slv_gfx_cfg",
898         .id = MSM8939_SLAVE_GRAPHICS_3D_CFG,
899         .buswidth = 4,
900         .mas_rpm_id = -1,
901         .slv_rpm_id = -1,
902 };
903
904 static struct qcom_icc_node slv_imem_cfg = {
905         .name = "slv_imem_cfg",
906         .id = MSM8939_SLAVE_IMEM_CFG,
907         .buswidth = 4,
908         .mas_rpm_id = -1,
909         .slv_rpm_id = -1,
910 };
911
912 static struct qcom_icc_node slv_imem = {
913         .name = "slv_imem",
914         .id = MSM8939_SLAVE_IMEM,
915         .buswidth = 8,
916         .mas_rpm_id = -1,
917         .slv_rpm_id = 26,
918 };
919
920 static struct qcom_icc_node slv_mpm = {
921         .name = "slv_mpm",
922         .id = MSM8939_SLAVE_MPM,
923         .buswidth = 4,
924         .mas_rpm_id = -1,
925         .slv_rpm_id = -1,
926 };
927
928 static struct qcom_icc_node slv_msg_ram = {
929         .name = "slv_msg_ram",
930         .id = MSM8939_SLAVE_MSG_RAM,
931         .buswidth = 4,
932         .mas_rpm_id = -1,
933         .slv_rpm_id = -1,
934 };
935
936 static struct qcom_icc_node slv_mss = {
937         .name = "slv_mss",
938         .id = MSM8939_SLAVE_MSS,
939         .buswidth = 4,
940         .mas_rpm_id = -1,
941         .slv_rpm_id = -1,
942 };
943
944 static struct qcom_icc_node slv_pdm = {
945         .name = "slv_pdm",
946         .id = MSM8939_SLAVE_PDM,
947         .buswidth = 4,
948         .mas_rpm_id = -1,
949         .slv_rpm_id = -1,
950 };
951
952 static struct qcom_icc_node slv_pmic_arb = {
953         .name = "slv_pmic_arb",
954         .id = MSM8939_SLAVE_PMIC_ARB,
955         .buswidth = 4,
956         .mas_rpm_id = -1,
957         .slv_rpm_id = -1,
958 };
959
960 static struct qcom_icc_node slv_pcnoc_cfg = {
961         .name = "slv_pcnoc_cfg",
962         .id = MSM8939_SLAVE_PNOC_CFG,
963         .buswidth = 4,
964         .mas_rpm_id = -1,
965         .slv_rpm_id = -1,
966 };
967
968 static struct qcom_icc_node slv_prng = {
969         .name = "slv_prng",
970         .id = MSM8939_SLAVE_PRNG,
971         .buswidth = 4,
972         .mas_rpm_id = -1,
973         .slv_rpm_id = -1,
974 };
975
976 static struct qcom_icc_node slv_qdss_cfg = {
977         .name = "slv_qdss_cfg",
978         .id = MSM8939_SLAVE_QDSS_CFG,
979         .buswidth = 4,
980         .mas_rpm_id = -1,
981         .slv_rpm_id = -1,
982 };
983
984 static struct qcom_icc_node slv_qdss_stm = {
985         .name = "slv_qdss_stm",
986         .id = MSM8939_SLAVE_QDSS_STM,
987         .buswidth = 4,
988         .mas_rpm_id = -1,
989         .slv_rpm_id = 30,
990 };
991
992 static struct qcom_icc_node slv_rbcpr_cfg = {
993         .name = "slv_rbcpr_cfg",
994         .id = MSM8939_SLAVE_RBCPR_CFG,
995         .buswidth = 4,
996         .mas_rpm_id = -1,
997         .slv_rpm_id = -1,
998 };
999
1000 static struct qcom_icc_node slv_sdcc_1 = {
1001         .name = "slv_sdcc_1",
1002         .id = MSM8939_SLAVE_SDCC_1,
1003         .buswidth = 4,
1004         .mas_rpm_id = -1,
1005         .slv_rpm_id = -1,
1006 };
1007
1008 static struct qcom_icc_node slv_sdcc_2 = {
1009         .name = "slv_sdcc_2",
1010         .id = MSM8939_SLAVE_SDCC_2,
1011         .buswidth = 4,
1012         .mas_rpm_id = -1,
1013         .slv_rpm_id = -1,
1014 };
1015
1016 static struct qcom_icc_node slv_security = {
1017         .name = "slv_security",
1018         .id = MSM8939_SLAVE_SECURITY,
1019         .buswidth = 4,
1020         .mas_rpm_id = -1,
1021         .slv_rpm_id = -1,
1022 };
1023
1024 static struct qcom_icc_node slv_snoc_cfg = {
1025         .name = "slv_snoc_cfg",
1026         .id = MSM8939_SLAVE_SNOC_CFG,
1027         .buswidth = 4,
1028         .mas_rpm_id = -1,
1029         .slv_rpm_id = -1,
1030 };
1031
1032 static struct qcom_icc_node slv_spdm = {
1033         .name = "slv_spdm",
1034         .id = MSM8939_SLAVE_SPDM,
1035         .buswidth = 4,
1036         .mas_rpm_id = -1,
1037         .slv_rpm_id = -1,
1038 };
1039
1040 static struct qcom_icc_node slv_srvc_snoc = {
1041         .name = "slv_srvc_snoc",
1042         .id = MSM8939_SLAVE_SRVC_SNOC,
1043         .buswidth = 8,
1044         .mas_rpm_id = -1,
1045         .slv_rpm_id = -1,
1046 };
1047
1048 static struct qcom_icc_node slv_tcsr = {
1049         .name = "slv_tcsr",
1050         .id = MSM8939_SLAVE_TCSR,
1051         .buswidth = 4,
1052         .mas_rpm_id = -1,
1053         .slv_rpm_id = -1,
1054 };
1055
1056 static struct qcom_icc_node slv_tlmm = {
1057         .name = "slv_tlmm",
1058         .id = MSM8939_SLAVE_TLMM,
1059         .buswidth = 4,
1060         .mas_rpm_id = -1,
1061         .slv_rpm_id = -1,
1062 };
1063
1064 static struct qcom_icc_node slv_usb_hs1 = {
1065         .name = "slv_usb_hs1",
1066         .id = MSM8939_SLAVE_USB_HS1,
1067         .buswidth = 4,
1068         .mas_rpm_id = -1,
1069         .slv_rpm_id = -1,
1070 };
1071
1072 static struct qcom_icc_node slv_usb_hs2 = {
1073         .name = "slv_usb_hs2",
1074         .id = MSM8939_SLAVE_USB_HS2,
1075         .buswidth = 4,
1076         .mas_rpm_id = -1,
1077         .slv_rpm_id = -1,
1078 };
1079
1080 static struct qcom_icc_node slv_venus_cfg = {
1081         .name = "slv_venus_cfg",
1082         .id = MSM8939_SLAVE_VENUS_CFG,
1083         .buswidth = 4,
1084         .mas_rpm_id = -1,
1085         .slv_rpm_id = -1,
1086 };
1087
1088 static const u16 snoc_bimc_0_mas_links[] = {
1089         MSM8939_SNOC_BIMC_0_SLV
1090 };
1091
1092 static struct qcom_icc_node snoc_bimc_0_mas = {
1093         .name = "snoc_bimc_0_mas",
1094         .id = MSM8939_SNOC_BIMC_0_MAS,
1095         .buswidth = 16,
1096         .mas_rpm_id = -1,
1097         .slv_rpm_id = -1,
1098         .qos.ap_owned = true,
1099         .qos.qos_mode = NOC_QOS_MODE_INVALID,
1100         .num_links = ARRAY_SIZE(snoc_bimc_0_mas_links),
1101         .links = snoc_bimc_0_mas_links,
1102 };
1103
1104 static const u16 snoc_bimc_0_slv_links[] = {
1105         MSM8939_SLAVE_EBI_CH0
1106 };
1107
1108 static struct qcom_icc_node snoc_bimc_0_slv = {
1109         .name = "snoc_bimc_0_slv",
1110         .id = MSM8939_SNOC_BIMC_0_SLV,
1111         .buswidth = 16,
1112         .mas_rpm_id = -1,
1113         .slv_rpm_id = -1,
1114         .qos.ap_owned = true,
1115         .qos.qos_mode = NOC_QOS_MODE_INVALID,
1116         .num_links = ARRAY_SIZE(snoc_bimc_0_slv_links),
1117         .links = snoc_bimc_0_slv_links,
1118 };
1119
1120 static const u16 snoc_bimc_1_mas_links[] = {
1121         MSM8939_SNOC_BIMC_1_SLV
1122 };
1123
1124 static struct qcom_icc_node snoc_bimc_1_mas = {
1125         .name = "snoc_bimc_1_mas",
1126         .id = MSM8939_SNOC_BIMC_1_MAS,
1127         .buswidth = 16,
1128         .mas_rpm_id = 76,
1129         .slv_rpm_id = -1,
1130         .num_links = ARRAY_SIZE(snoc_bimc_1_mas_links),
1131         .links = snoc_bimc_1_mas_links,
1132 };
1133
1134 static const u16 snoc_bimc_1_slv_links[] = {
1135         MSM8939_SLAVE_EBI_CH0
1136 };
1137
1138 static struct qcom_icc_node snoc_bimc_1_slv = {
1139         .name = "snoc_bimc_1_slv",
1140         .id = MSM8939_SNOC_BIMC_1_SLV,
1141         .buswidth = 16,
1142         .mas_rpm_id = -1,
1143         .slv_rpm_id = 104,
1144         .num_links = ARRAY_SIZE(snoc_bimc_1_slv_links),
1145         .links = snoc_bimc_1_slv_links,
1146 };
1147
1148 static const u16 snoc_bimc_2_mas_links[] = {
1149         MSM8939_SNOC_BIMC_2_SLV
1150 };
1151
1152 static struct qcom_icc_node snoc_bimc_2_mas = {
1153         .name = "snoc_bimc_2_mas",
1154         .id = MSM8939_SNOC_BIMC_2_MAS,
1155         .buswidth = 16,
1156         .mas_rpm_id = -1,
1157         .slv_rpm_id = -1,
1158         .qos.ap_owned = true,
1159         .qos.qos_mode = NOC_QOS_MODE_INVALID,
1160         .num_links = ARRAY_SIZE(snoc_bimc_2_mas_links),
1161         .links = snoc_bimc_2_mas_links,
1162 };
1163
1164 static const u16 snoc_bimc_2_slv_links[] = {
1165         MSM8939_SLAVE_EBI_CH0
1166 };
1167
1168 static struct qcom_icc_node snoc_bimc_2_slv = {
1169         .name = "snoc_bimc_2_slv",
1170         .id = MSM8939_SNOC_BIMC_2_SLV,
1171         .buswidth = 16,
1172         .mas_rpm_id = -1,
1173         .slv_rpm_id = -1,
1174         .qos.ap_owned = true,
1175         .qos.qos_mode = NOC_QOS_MODE_INVALID,
1176         .num_links = ARRAY_SIZE(snoc_bimc_2_slv_links),
1177         .links = snoc_bimc_2_slv_links,
1178 };
1179
1180 static const u16 snoc_int_0_links[] = {
1181         MSM8939_SLAVE_QDSS_STM,
1182         MSM8939_SLAVE_IMEM,
1183         MSM8939_SNOC_PNOC_MAS
1184 };
1185
1186 static struct qcom_icc_node snoc_int_0 = {
1187         .name = "snoc_int_0",
1188         .id = MSM8939_SNOC_INT_0,
1189         .buswidth = 8,
1190         .mas_rpm_id = 99,
1191         .slv_rpm_id = 130,
1192         .num_links = ARRAY_SIZE(snoc_int_0_links),
1193         .links = snoc_int_0_links,
1194 };
1195
1196 static const u16 snoc_int_1_links[] = {
1197         MSM8939_SLAVE_APSS,
1198         MSM8939_SLAVE_CATS_128,
1199         MSM8939_SLAVE_OCMEM_64
1200 };
1201
1202 static struct qcom_icc_node snoc_int_1 = {
1203         .name = "snoc_int_1",
1204         .id = MSM8939_SNOC_INT_1,
1205         .buswidth = 8,
1206         .mas_rpm_id = -1,
1207         .slv_rpm_id = -1,
1208         .num_links = ARRAY_SIZE(snoc_int_1_links),
1209         .links = snoc_int_1_links,
1210 };
1211
1212 static const u16 snoc_int_bimc_links[] = {
1213         MSM8939_SNOC_BIMC_1_MAS
1214 };
1215
1216 static struct qcom_icc_node snoc_int_bimc = {
1217         .name = "snoc_int_bimc",
1218         .id = MSM8939_SNOC_INT_BIMC,
1219         .buswidth = 8,
1220         .mas_rpm_id = 101,
1221         .slv_rpm_id = 132,
1222         .num_links = ARRAY_SIZE(snoc_int_bimc_links),
1223         .links = snoc_int_bimc_links,
1224 };
1225
1226 static const u16 snoc_pcnoc_mas_links[] = {
1227         MSM8939_SNOC_PNOC_SLV
1228 };
1229
1230 static struct qcom_icc_node snoc_pcnoc_mas = {
1231         .name = "snoc_pcnoc_mas",
1232         .id = MSM8939_SNOC_PNOC_MAS,
1233         .buswidth = 8,
1234         .mas_rpm_id = -1,
1235         .slv_rpm_id = -1,
1236         .num_links = ARRAY_SIZE(snoc_pcnoc_mas_links),
1237         .links = snoc_pcnoc_mas_links,
1238 };
1239
1240 static const u16 snoc_pcnoc_slv_links[] = {
1241         MSM8939_PNOC_INT_0
1242 };
1243
1244 static struct qcom_icc_node snoc_pcnoc_slv = {
1245         .name = "snoc_pcnoc_slv",
1246         .id = MSM8939_SNOC_PNOC_SLV,
1247         .buswidth = 8,
1248         .mas_rpm_id = -1,
1249         .slv_rpm_id = -1,
1250         .num_links = ARRAY_SIZE(snoc_pcnoc_slv_links),
1251         .links = snoc_pcnoc_slv_links,
1252 };
1253
1254 static struct qcom_icc_node *msm8939_snoc_nodes[] = {
1255         [BIMC_SNOC_SLV] = &bimc_snoc_slv,
1256         [MASTER_QDSS_BAM] = &mas_qdss_bam,
1257         [MASTER_QDSS_ETR] = &mas_qdss_etr,
1258         [MASTER_SNOC_CFG] = &mas_snoc_cfg,
1259         [PCNOC_SNOC_SLV] = &pcnoc_snoc_slv,
1260         [SLAVE_APSS] = &slv_apss,
1261         [SLAVE_CATS_128] = &slv_cats_0,
1262         [SLAVE_OCMEM_64] = &slv_cats_1,
1263         [SLAVE_IMEM] = &slv_imem,
1264         [SLAVE_QDSS_STM] = &slv_qdss_stm,
1265         [SLAVE_SRVC_SNOC] = &slv_srvc_snoc,
1266         [SNOC_BIMC_0_MAS] = &snoc_bimc_0_mas,
1267         [SNOC_BIMC_1_MAS] = &snoc_bimc_1_mas,
1268         [SNOC_BIMC_2_MAS] = &snoc_bimc_2_mas,
1269         [SNOC_INT_0] = &snoc_int_0,
1270         [SNOC_INT_1] = &snoc_int_1,
1271         [SNOC_INT_BIMC] = &snoc_int_bimc,
1272         [SNOC_PCNOC_MAS] = &snoc_pcnoc_mas,
1273         [SNOC_QDSS_INT] = &qdss_int,
1274 };
1275
1276 static const struct regmap_config msm8939_snoc_regmap_config = {
1277         .reg_bits       = 32,
1278         .reg_stride     = 4,
1279         .val_bits       = 32,
1280         .max_register   = 0x14080,
1281         .fast_io        = true,
1282 };
1283
1284 static struct qcom_icc_desc msm8939_snoc = {
1285         .type = QCOM_ICC_NOC,
1286         .nodes = msm8939_snoc_nodes,
1287         .num_nodes = ARRAY_SIZE(msm8939_snoc_nodes),
1288         .regmap_cfg = &msm8939_snoc_regmap_config,
1289         .qos_offset = 0x7000,
1290 };
1291
1292 static struct qcom_icc_node *msm8939_snoc_mm_nodes[] = {
1293         [MASTER_VIDEO_P0] = &mas_video,
1294         [MASTER_JPEG] = &mas_jpeg,
1295         [MASTER_VFE] = &mas_vfe,
1296         [MASTER_MDP_PORT0] = &mas_mdp0,
1297         [MASTER_MDP_PORT1] = &mas_mdp1,
1298         [MASTER_CPP] = &mas_cpp,
1299         [SNOC_MM_INT_0] = &mm_int_0,
1300         [SNOC_MM_INT_1] = &mm_int_1,
1301         [SNOC_MM_INT_2] = &mm_int_2,
1302 };
1303
1304 static struct qcom_icc_desc msm8939_snoc_mm = {
1305         .type = QCOM_ICC_NOC,
1306         .nodes = msm8939_snoc_mm_nodes,
1307         .num_nodes = ARRAY_SIZE(msm8939_snoc_mm_nodes),
1308         .regmap_cfg = &msm8939_snoc_regmap_config,
1309         .qos_offset = 0x7000,
1310 };
1311
1312 static struct qcom_icc_node *msm8939_bimc_nodes[] = {
1313         [BIMC_SNOC_MAS] = &bimc_snoc_mas,
1314         [MASTER_AMPSS_M0] = &mas_apss,
1315         [MASTER_GRAPHICS_3D] = &mas_gfx,
1316         [MASTER_TCU0] = &mas_tcu0,
1317         [SLAVE_AMPSS_L2] = &slv_apps_l2,
1318         [SLAVE_EBI_CH0] = &slv_ebi_ch0,
1319         [SNOC_BIMC_0_SLV] = &snoc_bimc_0_slv,
1320         [SNOC_BIMC_1_SLV] = &snoc_bimc_1_slv,
1321         [SNOC_BIMC_2_SLV] = &snoc_bimc_2_slv,
1322 };
1323
1324 static const struct regmap_config msm8939_bimc_regmap_config = {
1325         .reg_bits       = 32,
1326         .reg_stride     = 4,
1327         .val_bits       = 32,
1328         .max_register   = 0x62000,
1329         .fast_io        = true,
1330 };
1331
1332 static struct qcom_icc_desc msm8939_bimc = {
1333         .type = QCOM_ICC_BIMC,
1334         .nodes = msm8939_bimc_nodes,
1335         .num_nodes = ARRAY_SIZE(msm8939_bimc_nodes),
1336         .regmap_cfg = &msm8939_bimc_regmap_config,
1337         .qos_offset = 0x8000,
1338 };
1339
1340 static struct qcom_icc_node *msm8939_pcnoc_nodes[] = {
1341         [MASTER_BLSP_1] = &mas_blsp_1,
1342         [MASTER_DEHR] = &mas_dehr,
1343         [MASTER_LPASS] = &mas_audio,
1344         [MASTER_CRYPTO_CORE0] = &mas_pcnoc_crypto_0,
1345         [MASTER_SDCC_1] = &mas_pcnoc_sdcc_1,
1346         [MASTER_SDCC_2] = &mas_pcnoc_sdcc_2,
1347         [MASTER_SPDM] = &mas_spdm,
1348         [MASTER_USB_HS1] = &mas_usb_hs1,
1349         [MASTER_USB_HS2] = &mas_usb_hs2,
1350         [PCNOC_INT_0] = &pcnoc_int_0,
1351         [PCNOC_INT_1] = &pcnoc_int_1,
1352         [PCNOC_MAS_0] = &pcnoc_m_0,
1353         [PCNOC_MAS_1] = &pcnoc_m_1,
1354         [PCNOC_SLV_0] = &pcnoc_s_0,
1355         [PCNOC_SLV_1] = &pcnoc_s_1,
1356         [PCNOC_SLV_2] = &pcnoc_s_2,
1357         [PCNOC_SLV_3] = &pcnoc_s_3,
1358         [PCNOC_SLV_4] = &pcnoc_s_4,
1359         [PCNOC_SLV_8] = &pcnoc_s_8,
1360         [PCNOC_SLV_9] = &pcnoc_s_9,
1361         [PCNOC_SNOC_MAS] = &pcnoc_snoc_mas,
1362         [SLAVE_BIMC_CFG] = &slv_bimc_cfg,
1363         [SLAVE_BLSP_1] = &slv_blsp_1,
1364         [SLAVE_BOOT_ROM] = &slv_boot_rom,
1365         [SLAVE_CAMERA_CFG] = &slv_camera_cfg,
1366         [SLAVE_CLK_CTL] = &slv_clk_ctl,
1367         [SLAVE_CRYPTO_0_CFG] = &slv_crypto_0_cfg,
1368         [SLAVE_DEHR_CFG] = &slv_dehr_cfg,
1369         [SLAVE_DISPLAY_CFG] = &slv_display_cfg,
1370         [SLAVE_GRAPHICS_3D_CFG] = &slv_gfx_cfg,
1371         [SLAVE_IMEM_CFG] = &slv_imem_cfg,
1372         [SLAVE_LPASS] = &slv_audio,
1373         [SLAVE_MPM] = &slv_mpm,
1374         [SLAVE_MSG_RAM] = &slv_msg_ram,
1375         [SLAVE_MSS] = &slv_mss,
1376         [SLAVE_PDM] = &slv_pdm,
1377         [SLAVE_PMIC_ARB] = &slv_pmic_arb,
1378         [SLAVE_PCNOC_CFG] = &slv_pcnoc_cfg,
1379         [SLAVE_PRNG] = &slv_prng,
1380         [SLAVE_QDSS_CFG] = &slv_qdss_cfg,
1381         [SLAVE_RBCPR_CFG] = &slv_rbcpr_cfg,
1382         [SLAVE_SDCC_1] = &slv_sdcc_1,
1383         [SLAVE_SDCC_2] = &slv_sdcc_2,
1384         [SLAVE_SECURITY] = &slv_security,
1385         [SLAVE_SNOC_CFG] = &slv_snoc_cfg,
1386         [SLAVE_SPDM] = &slv_spdm,
1387         [SLAVE_TCSR] = &slv_tcsr,
1388         [SLAVE_TLMM] = &slv_tlmm,
1389         [SLAVE_USB_HS1] = &slv_usb_hs1,
1390         [SLAVE_USB_HS2] = &slv_usb_hs2,
1391         [SLAVE_VENUS_CFG] = &slv_venus_cfg,
1392         [SNOC_PCNOC_SLV] = &snoc_pcnoc_slv,
1393 };
1394
1395 static const struct regmap_config msm8939_pcnoc_regmap_config = {
1396         .reg_bits       = 32,
1397         .reg_stride     = 4,
1398         .val_bits       = 32,
1399         .max_register   = 0x11000,
1400         .fast_io        = true,
1401 };
1402
1403 static struct qcom_icc_desc msm8939_pcnoc = {
1404         .type = QCOM_ICC_NOC,
1405         .nodes = msm8939_pcnoc_nodes,
1406         .num_nodes = ARRAY_SIZE(msm8939_pcnoc_nodes),
1407         .regmap_cfg = &msm8939_pcnoc_regmap_config,
1408         .qos_offset = 0x7000,
1409 };
1410
1411 static const struct of_device_id msm8939_noc_of_match[] = {
1412         { .compatible = "qcom,msm8939-bimc", .data = &msm8939_bimc },
1413         { .compatible = "qcom,msm8939-pcnoc", .data = &msm8939_pcnoc },
1414         { .compatible = "qcom,msm8939-snoc", .data = &msm8939_snoc },
1415         { .compatible = "qcom,msm8939-snoc-mm", .data = &msm8939_snoc_mm },
1416         { }
1417 };
1418 MODULE_DEVICE_TABLE(of, msm8939_noc_of_match);
1419
1420 static struct platform_driver msm8939_noc_driver = {
1421         .probe = qnoc_probe,
1422         .remove = qnoc_remove,
1423         .driver = {
1424                 .name = "qnoc-msm8939",
1425                 .of_match_table = msm8939_noc_of_match,
1426         },
1427 };
1428 module_platform_driver(msm8939_noc_driver);
1429 MODULE_AUTHOR("Jun Nie <jun.nie@linaro.org>");
1430 MODULE_DESCRIPTION("Qualcomm MSM8939 NoC driver");
1431 MODULE_LICENSE("GPL v2");