GNU Linux-libre 6.7.9-gnu
[releases.git] / drivers / interconnect / qcom / msm8996.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Qualcomm MSM8996 Network-on-Chip (NoC) QoS driver
4  *
5  * Copyright (c) 2021 Yassine Oudjana <y.oudjana@protonmail.com>
6  */
7
8 #include <linux/device.h>
9 #include <linux/interconnect-provider.h>
10 #include <linux/io.h>
11 #include <linux/mod_devicetable.h>
12 #include <linux/module.h>
13 #include <linux/platform_device.h>
14 #include <linux/regmap.h>
15
16 #include <dt-bindings/interconnect/qcom,msm8996.h>
17
18 #include "icc-rpm.h"
19 #include "msm8996.h"
20
21 static const char * const mm_intf_clocks[] = {
22         "iface"
23 };
24
25 static const char * const a0noc_intf_clocks[] = {
26         "aggre0_snoc_axi",
27         "aggre0_cnoc_ahb",
28         "aggre0_noc_mpu_cfg"
29 };
30
31 static const char * const a2noc_intf_clocks[] = {
32         "aggre2_ufs_axi",
33         "ufs_axi"
34 };
35
36 static const u16 mas_a0noc_common_links[] = {
37         MSM8996_SLAVE_A0NOC_SNOC
38 };
39
40 static struct qcom_icc_node mas_pcie_0 = {
41         .name = "mas_pcie_0",
42         .id = MSM8996_MASTER_PCIE_0,
43         .buswidth = 8,
44         .mas_rpm_id = 65,
45         .slv_rpm_id = -1,
46         .qos.ap_owned = true,
47         .qos.qos_mode = NOC_QOS_MODE_FIXED,
48         .qos.areq_prio = 1,
49         .qos.prio_level = 1,
50         .qos.qos_port = 0,
51         .num_links = ARRAY_SIZE(mas_a0noc_common_links),
52         .links = mas_a0noc_common_links
53 };
54
55 static struct qcom_icc_node mas_pcie_1 = {
56         .name = "mas_pcie_1",
57         .id = MSM8996_MASTER_PCIE_1,
58         .buswidth = 8,
59         .mas_rpm_id = 66,
60         .slv_rpm_id = -1,
61         .qos.ap_owned = true,
62         .qos.qos_mode = NOC_QOS_MODE_FIXED,
63         .qos.areq_prio = 1,
64         .qos.prio_level = 1,
65         .qos.qos_port = 1,
66         .num_links = ARRAY_SIZE(mas_a0noc_common_links),
67         .links = mas_a0noc_common_links
68 };
69
70 static struct qcom_icc_node mas_pcie_2 = {
71         .name = "mas_pcie_2",
72         .id = MSM8996_MASTER_PCIE_2,
73         .buswidth = 8,
74         .mas_rpm_id = 119,
75         .slv_rpm_id = -1,
76         .qos.ap_owned = true,
77         .qos.qos_mode = NOC_QOS_MODE_FIXED,
78         .qos.areq_prio = 1,
79         .qos.prio_level = 1,
80         .qos.qos_port = 2,
81         .num_links = ARRAY_SIZE(mas_a0noc_common_links),
82         .links = mas_a0noc_common_links
83 };
84
85 static const u16 mas_a1noc_common_links[] = {
86         MSM8996_SLAVE_A1NOC_SNOC
87 };
88
89 static struct qcom_icc_node mas_cnoc_a1noc = {
90         .name = "mas_cnoc_a1noc",
91         .id = MSM8996_MASTER_CNOC_A1NOC,
92         .buswidth = 8,
93         .mas_rpm_id = 116,
94         .slv_rpm_id = -1,
95         .qos.ap_owned = true,
96         .qos.qos_mode = NOC_QOS_MODE_INVALID,
97         .num_links = ARRAY_SIZE(mas_a1noc_common_links),
98         .links = mas_a1noc_common_links
99 };
100
101 static struct qcom_icc_node mas_crypto_c0 = {
102         .name = "mas_crypto_c0",
103         .id = MSM8996_MASTER_CRYPTO_CORE0,
104         .buswidth = 8,
105         .mas_rpm_id = 23,
106         .slv_rpm_id = -1,
107         .qos.ap_owned = true,
108         .qos.qos_mode = NOC_QOS_MODE_FIXED,
109         .qos.areq_prio = 1,
110         .qos.prio_level = 1,
111         .qos.qos_port = 0,
112         .num_links = ARRAY_SIZE(mas_a1noc_common_links),
113         .links = mas_a1noc_common_links
114 };
115
116 static struct qcom_icc_node mas_pnoc_a1noc = {
117         .name = "mas_pnoc_a1noc",
118         .id = MSM8996_MASTER_PNOC_A1NOC,
119         .buswidth = 8,
120         .mas_rpm_id = 117,
121         .slv_rpm_id = -1,
122         .qos.ap_owned = false,
123         .qos.qos_mode = NOC_QOS_MODE_FIXED,
124         .qos.areq_prio = 0,
125         .qos.prio_level = 0,
126         .qos.qos_port = 1,
127         .num_links = ARRAY_SIZE(mas_a1noc_common_links),
128         .links = mas_a1noc_common_links
129 };
130
131 static const u16 mas_a2noc_common_links[] = {
132         MSM8996_SLAVE_A2NOC_SNOC
133 };
134
135 static struct qcom_icc_node mas_usb3 = {
136         .name = "mas_usb3",
137         .id = MSM8996_MASTER_USB3,
138         .buswidth = 8,
139         .mas_rpm_id = 32,
140         .slv_rpm_id = -1,
141         .qos.ap_owned = true,
142         .qos.qos_mode = NOC_QOS_MODE_FIXED,
143         .qos.areq_prio = 1,
144         .qos.prio_level = 1,
145         .qos.qos_port = 3,
146         .num_links = ARRAY_SIZE(mas_a2noc_common_links),
147         .links = mas_a2noc_common_links
148 };
149
150 static struct qcom_icc_node mas_ipa = {
151         .name = "mas_ipa",
152         .id = MSM8996_MASTER_IPA,
153         .buswidth = 8,
154         .mas_rpm_id = 59,
155         .slv_rpm_id = -1,
156         .qos.ap_owned = true,
157         .qos.qos_mode = NOC_QOS_MODE_FIXED,
158         .qos.areq_prio = 0,
159         .qos.prio_level = 0,
160         .qos.qos_port = -1,
161         .num_links = ARRAY_SIZE(mas_a2noc_common_links),
162         .links = mas_a2noc_common_links
163 };
164
165 static struct qcom_icc_node mas_ufs = {
166         .name = "mas_ufs",
167         .id = MSM8996_MASTER_UFS,
168         .buswidth = 8,
169         .mas_rpm_id = 68,
170         .slv_rpm_id = -1,
171         .qos.ap_owned = true,
172         .qos.qos_mode = NOC_QOS_MODE_FIXED,
173         .qos.areq_prio = 1,
174         .qos.prio_level = 1,
175         .qos.qos_port = 2,
176         .num_links = ARRAY_SIZE(mas_a2noc_common_links),
177         .links = mas_a2noc_common_links
178 };
179
180 static const u16 mas_apps_proc_links[] = {
181         MSM8996_SLAVE_BIMC_SNOC_1,
182         MSM8996_SLAVE_EBI_CH0,
183         MSM8996_SLAVE_BIMC_SNOC_0
184 };
185
186 static struct qcom_icc_node mas_apps_proc = {
187         .name = "mas_apps_proc",
188         .id = MSM8996_MASTER_AMPSS_M0,
189         .buswidth = 8,
190         .mas_rpm_id = 0,
191         .slv_rpm_id = -1,
192         .qos.ap_owned = true,
193         .qos.qos_mode = NOC_QOS_MODE_FIXED,
194         .qos.areq_prio = 0,
195         .qos.prio_level = 0,
196         .qos.qos_port = 0,
197         .num_links = ARRAY_SIZE(mas_apps_proc_links),
198         .links = mas_apps_proc_links
199 };
200
201 static const u16 mas_oxili_common_links[] = {
202         MSM8996_SLAVE_BIMC_SNOC_1,
203         MSM8996_SLAVE_HMSS_L3,
204         MSM8996_SLAVE_EBI_CH0,
205         MSM8996_SLAVE_BIMC_SNOC_0
206 };
207
208 static struct qcom_icc_node mas_oxili = {
209         .name = "mas_oxili",
210         .id = MSM8996_MASTER_GRAPHICS_3D,
211         .buswidth = 8,
212         .mas_rpm_id = 6,
213         .slv_rpm_id = -1,
214         .qos.ap_owned = true,
215         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
216         .qos.areq_prio = 0,
217         .qos.prio_level = 0,
218         .qos.qos_port = 1,
219         .num_links = ARRAY_SIZE(mas_oxili_common_links),
220         .links = mas_oxili_common_links
221 };
222
223 static struct qcom_icc_node mas_mnoc_bimc = {
224         .name = "mas_mnoc_bimc",
225         .id = MSM8996_MASTER_MNOC_BIMC,
226         .buswidth = 8,
227         .mas_rpm_id = 2,
228         .slv_rpm_id = -1,
229         .qos.ap_owned = true,
230         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
231         .qos.areq_prio = 0,
232         .qos.prio_level = 0,
233         .qos.qos_port = 2,
234         .num_links = ARRAY_SIZE(mas_oxili_common_links),
235         .links = mas_oxili_common_links
236 };
237
238 static const u16 mas_snoc_bimc_links[] = {
239         MSM8996_SLAVE_HMSS_L3,
240         MSM8996_SLAVE_EBI_CH0
241 };
242
243 static struct qcom_icc_node mas_snoc_bimc = {
244         .name = "mas_snoc_bimc",
245         .id = MSM8996_MASTER_SNOC_BIMC,
246         .buswidth = 8,
247         .mas_rpm_id = 3,
248         .slv_rpm_id = -1,
249         .qos.ap_owned = false,
250         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
251         .qos.areq_prio = 0,
252         .qos.prio_level = 0,
253         .qos.qos_port = -1,
254         .num_links = ARRAY_SIZE(mas_snoc_bimc_links),
255         .links = mas_snoc_bimc_links
256 };
257
258 static const u16 mas_snoc_cnoc_links[] = {
259         MSM8996_SLAVE_CLK_CTL,
260         MSM8996_SLAVE_RBCPR_CX,
261         MSM8996_SLAVE_A2NOC_SMMU_CFG,
262         MSM8996_SLAVE_A0NOC_MPU_CFG,
263         MSM8996_SLAVE_MESSAGE_RAM,
264         MSM8996_SLAVE_CNOC_MNOC_MMSS_CFG,
265         MSM8996_SLAVE_PCIE_0_CFG,
266         MSM8996_SLAVE_TLMM,
267         MSM8996_SLAVE_MPM,
268         MSM8996_SLAVE_A0NOC_SMMU_CFG,
269         MSM8996_SLAVE_EBI1_PHY_CFG,
270         MSM8996_SLAVE_BIMC_CFG,
271         MSM8996_SLAVE_PIMEM_CFG,
272         MSM8996_SLAVE_RBCPR_MX,
273         MSM8996_SLAVE_PRNG,
274         MSM8996_SLAVE_PCIE20_AHB2PHY,
275         MSM8996_SLAVE_A2NOC_MPU_CFG,
276         MSM8996_SLAVE_QDSS_CFG,
277         MSM8996_SLAVE_A2NOC_CFG,
278         MSM8996_SLAVE_A0NOC_CFG,
279         MSM8996_SLAVE_UFS_CFG,
280         MSM8996_SLAVE_CRYPTO_0_CFG,
281         MSM8996_SLAVE_PCIE_1_CFG,
282         MSM8996_SLAVE_SNOC_CFG,
283         MSM8996_SLAVE_SNOC_MPU_CFG,
284         MSM8996_SLAVE_A1NOC_MPU_CFG,
285         MSM8996_SLAVE_A1NOC_SMMU_CFG,
286         MSM8996_SLAVE_PCIE_2_CFG,
287         MSM8996_SLAVE_CNOC_MNOC_CFG,
288         MSM8996_SLAVE_QDSS_RBCPR_APU_CFG,
289         MSM8996_SLAVE_PMIC_ARB,
290         MSM8996_SLAVE_IMEM_CFG,
291         MSM8996_SLAVE_A1NOC_CFG,
292         MSM8996_SLAVE_SSC_CFG,
293         MSM8996_SLAVE_TCSR,
294         MSM8996_SLAVE_LPASS_SMMU_CFG,
295         MSM8996_SLAVE_DCC_CFG
296 };
297
298 static struct qcom_icc_node mas_snoc_cnoc = {
299         .name = "mas_snoc_cnoc",
300         .id = MSM8996_MASTER_SNOC_CNOC,
301         .buswidth = 8,
302         .mas_rpm_id = 52,
303         .slv_rpm_id = -1,
304         .num_links = ARRAY_SIZE(mas_snoc_cnoc_links),
305         .links = mas_snoc_cnoc_links
306 };
307
308 static const u16 mas_qdss_dap_links[] = {
309         MSM8996_SLAVE_QDSS_RBCPR_APU_CFG,
310         MSM8996_SLAVE_RBCPR_CX,
311         MSM8996_SLAVE_A2NOC_SMMU_CFG,
312         MSM8996_SLAVE_A0NOC_MPU_CFG,
313         MSM8996_SLAVE_MESSAGE_RAM,
314         MSM8996_SLAVE_PCIE_0_CFG,
315         MSM8996_SLAVE_TLMM,
316         MSM8996_SLAVE_MPM,
317         MSM8996_SLAVE_A0NOC_SMMU_CFG,
318         MSM8996_SLAVE_EBI1_PHY_CFG,
319         MSM8996_SLAVE_BIMC_CFG,
320         MSM8996_SLAVE_PIMEM_CFG,
321         MSM8996_SLAVE_RBCPR_MX,
322         MSM8996_SLAVE_CLK_CTL,
323         MSM8996_SLAVE_PRNG,
324         MSM8996_SLAVE_PCIE20_AHB2PHY,
325         MSM8996_SLAVE_A2NOC_MPU_CFG,
326         MSM8996_SLAVE_QDSS_CFG,
327         MSM8996_SLAVE_A2NOC_CFG,
328         MSM8996_SLAVE_A0NOC_CFG,
329         MSM8996_SLAVE_UFS_CFG,
330         MSM8996_SLAVE_CRYPTO_0_CFG,
331         MSM8996_SLAVE_CNOC_A1NOC,
332         MSM8996_SLAVE_PCIE_1_CFG,
333         MSM8996_SLAVE_SNOC_CFG,
334         MSM8996_SLAVE_SNOC_MPU_CFG,
335         MSM8996_SLAVE_A1NOC_MPU_CFG,
336         MSM8996_SLAVE_A1NOC_SMMU_CFG,
337         MSM8996_SLAVE_PCIE_2_CFG,
338         MSM8996_SLAVE_CNOC_MNOC_CFG,
339         MSM8996_SLAVE_CNOC_MNOC_MMSS_CFG,
340         MSM8996_SLAVE_PMIC_ARB,
341         MSM8996_SLAVE_IMEM_CFG,
342         MSM8996_SLAVE_A1NOC_CFG,
343         MSM8996_SLAVE_SSC_CFG,
344         MSM8996_SLAVE_TCSR,
345         MSM8996_SLAVE_LPASS_SMMU_CFG,
346         MSM8996_SLAVE_DCC_CFG
347 };
348
349 static struct qcom_icc_node mas_qdss_dap = {
350         .name = "mas_qdss_dap",
351         .id = MSM8996_MASTER_QDSS_DAP,
352         .buswidth = 8,
353         .mas_rpm_id = 49,
354         .slv_rpm_id = -1,
355         .qos.ap_owned = true,
356         .qos.qos_mode = NOC_QOS_MODE_INVALID,
357         .num_links = ARRAY_SIZE(mas_qdss_dap_links),
358         .links = mas_qdss_dap_links
359 };
360
361 static const u16 mas_cnoc_mnoc_mmss_cfg_links[] = {
362         MSM8996_SLAVE_MMAGIC_CFG,
363         MSM8996_SLAVE_DSA_MPU_CFG,
364         MSM8996_SLAVE_MMSS_CLK_CFG,
365         MSM8996_SLAVE_CAMERA_THROTTLE_CFG,
366         MSM8996_SLAVE_VENUS_CFG,
367         MSM8996_SLAVE_SMMU_VFE_CFG,
368         MSM8996_SLAVE_MISC_CFG,
369         MSM8996_SLAVE_SMMU_CPP_CFG,
370         MSM8996_SLAVE_GRAPHICS_3D_CFG,
371         MSM8996_SLAVE_DISPLAY_THROTTLE_CFG,
372         MSM8996_SLAVE_VENUS_THROTTLE_CFG,
373         MSM8996_SLAVE_CAMERA_CFG,
374         MSM8996_SLAVE_DISPLAY_CFG,
375         MSM8996_SLAVE_CPR_CFG,
376         MSM8996_SLAVE_SMMU_ROTATOR_CFG,
377         MSM8996_SLAVE_DSA_CFG,
378         MSM8996_SLAVE_SMMU_VENUS_CFG,
379         MSM8996_SLAVE_VMEM_CFG,
380         MSM8996_SLAVE_SMMU_JPEG_CFG,
381         MSM8996_SLAVE_SMMU_MDP_CFG,
382         MSM8996_SLAVE_MNOC_MPU_CFG
383 };
384
385 static struct qcom_icc_node mas_cnoc_mnoc_mmss_cfg = {
386         .name = "mas_cnoc_mnoc_mmss_cfg",
387         .id = MSM8996_MASTER_CNOC_MNOC_MMSS_CFG,
388         .buswidth = 8,
389         .mas_rpm_id = 4,
390         .slv_rpm_id = -1,
391         .qos.ap_owned = true,
392         .qos.qos_mode = NOC_QOS_MODE_INVALID,
393         .num_links = ARRAY_SIZE(mas_cnoc_mnoc_mmss_cfg_links),
394         .links = mas_cnoc_mnoc_mmss_cfg_links
395 };
396
397 static const u16 mas_cnoc_mnoc_cfg_links[] = {
398         MSM8996_SLAVE_SERVICE_MNOC
399 };
400
401 static struct qcom_icc_node mas_cnoc_mnoc_cfg = {
402         .name = "mas_cnoc_mnoc_cfg",
403         .id = MSM8996_MASTER_CNOC_MNOC_CFG,
404         .buswidth = 8,
405         .mas_rpm_id = 5,
406         .slv_rpm_id = -1,
407         .qos.ap_owned = true,
408         .qos.qos_mode = NOC_QOS_MODE_INVALID,
409         .num_links = ARRAY_SIZE(mas_cnoc_mnoc_cfg_links),
410         .links = mas_cnoc_mnoc_cfg_links
411 };
412
413 static const u16 mas_mnoc_bimc_common_links[] = {
414         MSM8996_SLAVE_MNOC_BIMC
415 };
416
417 static struct qcom_icc_node mas_cpp = {
418         .name = "mas_cpp",
419         .id = MSM8996_MASTER_CPP,
420         .buswidth = 32,
421         .mas_rpm_id = 115,
422         .slv_rpm_id = -1,
423         .qos.ap_owned = true,
424         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
425         .qos.areq_prio = 0,
426         .qos.prio_level = 0,
427         .qos.qos_port = 5,
428         .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
429         .links = mas_mnoc_bimc_common_links
430 };
431
432 static struct qcom_icc_node mas_jpeg = {
433         .name = "mas_jpeg",
434         .id = MSM8996_MASTER_JPEG,
435         .buswidth = 32,
436         .mas_rpm_id = 7,
437         .slv_rpm_id = -1,
438         .qos.ap_owned = true,
439         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
440         .qos.areq_prio = 0,
441         .qos.prio_level = 0,
442         .qos.qos_port = 7,
443         .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
444         .links = mas_mnoc_bimc_common_links
445 };
446
447 static struct qcom_icc_node mas_mdp_p0 = {
448         .name = "mas_mdp_p0",
449         .id = MSM8996_MASTER_MDP_PORT0,
450         .buswidth = 32,
451         .ib_coeff = 25,
452         .mas_rpm_id = 8,
453         .slv_rpm_id = -1,
454         .qos.ap_owned = true,
455         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
456         .qos.areq_prio = 0,
457         .qos.prio_level = 0,
458         .qos.qos_port = 1,
459         .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
460         .links = mas_mnoc_bimc_common_links
461 };
462
463 static struct qcom_icc_node mas_mdp_p1 = {
464         .name = "mas_mdp_p1",
465         .id = MSM8996_MASTER_MDP_PORT1,
466         .buswidth = 32,
467         .ib_coeff = 25,
468         .mas_rpm_id = 61,
469         .slv_rpm_id = -1,
470         .qos.ap_owned = true,
471         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
472         .qos.areq_prio = 0,
473         .qos.prio_level = 0,
474         .qos.qos_port = 2,
475         .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
476         .links = mas_mnoc_bimc_common_links
477 };
478
479 static struct qcom_icc_node mas_rotator = {
480         .name = "mas_rotator",
481         .id = MSM8996_MASTER_ROTATOR,
482         .buswidth = 32,
483         .mas_rpm_id = 120,
484         .slv_rpm_id = -1,
485         .qos.ap_owned = true,
486         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
487         .qos.areq_prio = 0,
488         .qos.prio_level = 0,
489         .qos.qos_port = 0,
490         .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
491         .links = mas_mnoc_bimc_common_links
492 };
493
494 static struct qcom_icc_node mas_venus = {
495         .name = "mas_venus",
496         .id = MSM8996_MASTER_VIDEO_P0,
497         .buswidth = 32,
498         .mas_rpm_id = 9,
499         .slv_rpm_id = -1,
500         .qos.ap_owned = true,
501         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
502         .qos.areq_prio = 0,
503         .qos.prio_level = 0,
504         .qos.qos_port = 3,
505         .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
506         .links = mas_mnoc_bimc_common_links
507 };
508
509 static struct qcom_icc_node mas_vfe = {
510         .name = "mas_vfe",
511         .id = MSM8996_MASTER_VFE,
512         .buswidth = 32,
513         .mas_rpm_id = 11,
514         .slv_rpm_id = -1,
515         .qos.ap_owned = true,
516         .qos.qos_mode = NOC_QOS_MODE_BYPASS,
517         .qos.areq_prio = 0,
518         .qos.prio_level = 0,
519         .qos.qos_port = 6,
520         .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
521         .links = mas_mnoc_bimc_common_links
522 };
523
524 static const u16 mas_vmem_common_links[] = {
525         MSM8996_SLAVE_VMEM
526 };
527
528 static struct qcom_icc_node mas_snoc_vmem = {
529         .name = "mas_snoc_vmem",
530         .id = MSM8996_MASTER_SNOC_VMEM,
531         .buswidth = 32,
532         .mas_rpm_id = 114,
533         .slv_rpm_id = -1,
534         .qos.ap_owned = true,
535         .qos.qos_mode = NOC_QOS_MODE_INVALID,
536         .num_links = ARRAY_SIZE(mas_vmem_common_links),
537         .links = mas_vmem_common_links
538 };
539
540 static struct qcom_icc_node mas_venus_vmem = {
541         .name = "mas_venus_vmem",
542         .id = MSM8996_MASTER_VIDEO_P0_OCMEM,
543         .buswidth = 32,
544         .mas_rpm_id = 121,
545         .slv_rpm_id = -1,
546         .qos.ap_owned = true,
547         .qos.qos_mode = NOC_QOS_MODE_INVALID,
548         .num_links = ARRAY_SIZE(mas_vmem_common_links),
549         .links = mas_vmem_common_links
550 };
551
552 static const u16 mas_snoc_pnoc_links[] = {
553         MSM8996_SLAVE_BLSP_1,
554         MSM8996_SLAVE_BLSP_2,
555         MSM8996_SLAVE_SDCC_1,
556         MSM8996_SLAVE_SDCC_2,
557         MSM8996_SLAVE_SDCC_4,
558         MSM8996_SLAVE_TSIF,
559         MSM8996_SLAVE_PDM,
560         MSM8996_SLAVE_AHB2PHY
561 };
562
563 static struct qcom_icc_node mas_snoc_pnoc = {
564         .name = "mas_snoc_pnoc",
565         .id = MSM8996_MASTER_SNOC_PNOC,
566         .buswidth = 8,
567         .mas_rpm_id = 44,
568         .slv_rpm_id = -1,
569         .num_links = ARRAY_SIZE(mas_snoc_pnoc_links),
570         .links = mas_snoc_pnoc_links
571 };
572
573 static const u16 mas_pnoc_a1noc_common_links[] = {
574         MSM8996_SLAVE_PNOC_A1NOC
575 };
576
577 static struct qcom_icc_node mas_sdcc_1 = {
578         .name = "mas_sdcc_1",
579         .id = MSM8996_MASTER_SDCC_1,
580         .buswidth = 8,
581         .mas_rpm_id = 33,
582         .slv_rpm_id = -1,
583         .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
584         .links = mas_pnoc_a1noc_common_links
585 };
586
587 static struct qcom_icc_node mas_sdcc_2 = {
588         .name = "mas_sdcc_2",
589         .id = MSM8996_MASTER_SDCC_2,
590         .buswidth = 8,
591         .mas_rpm_id = 35,
592         .slv_rpm_id = -1,
593         .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
594         .links = mas_pnoc_a1noc_common_links
595 };
596
597 static struct qcom_icc_node mas_sdcc_4 = {
598         .name = "mas_sdcc_4",
599         .id = MSM8996_MASTER_SDCC_4,
600         .buswidth = 8,
601         .mas_rpm_id = 36,
602         .slv_rpm_id = -1,
603         .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
604         .links = mas_pnoc_a1noc_common_links
605 };
606
607 static struct qcom_icc_node mas_usb_hs = {
608         .name = "mas_usb_hs",
609         .id = MSM8996_MASTER_USB_HS,
610         .buswidth = 8,
611         .mas_rpm_id = 42,
612         .slv_rpm_id = -1,
613         .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
614         .links = mas_pnoc_a1noc_common_links
615 };
616
617 static struct qcom_icc_node mas_blsp_1 = {
618         .name = "mas_blsp_1",
619         .id = MSM8996_MASTER_BLSP_1,
620         .buswidth = 4,
621         .mas_rpm_id = 41,
622         .slv_rpm_id = -1,
623         .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
624         .links = mas_pnoc_a1noc_common_links
625 };
626
627 static struct qcom_icc_node mas_blsp_2 = {
628         .name = "mas_blsp_2",
629         .id = MSM8996_MASTER_BLSP_2,
630         .buswidth = 4,
631         .mas_rpm_id = 39,
632         .slv_rpm_id = -1,
633         .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
634         .links = mas_pnoc_a1noc_common_links
635 };
636
637 static struct qcom_icc_node mas_tsif = {
638         .name = "mas_tsif",
639         .id = MSM8996_MASTER_TSIF,
640         .buswidth = 4,
641         .mas_rpm_id = 37,
642         .slv_rpm_id = -1,
643         .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
644         .links = mas_pnoc_a1noc_common_links
645 };
646
647 static const u16 mas_hmss_links[] = {
648         MSM8996_SLAVE_PIMEM,
649         MSM8996_SLAVE_OCIMEM,
650         MSM8996_SLAVE_SNOC_BIMC
651 };
652
653 static struct qcom_icc_node mas_hmss = {
654         .name = "mas_hmss",
655         .id = MSM8996_MASTER_HMSS,
656         .buswidth = 8,
657         .mas_rpm_id = 118,
658         .slv_rpm_id = -1,
659         .qos.ap_owned = true,
660         .qos.qos_mode = NOC_QOS_MODE_FIXED,
661         .qos.areq_prio = 1,
662         .qos.prio_level = 1,
663         .qos.qos_port = 4,
664         .num_links = ARRAY_SIZE(mas_hmss_links),
665         .links = mas_hmss_links
666 };
667
668 static const u16 mas_qdss_common_links[] = {
669         MSM8996_SLAVE_PIMEM,
670         MSM8996_SLAVE_USB3,
671         MSM8996_SLAVE_OCIMEM,
672         MSM8996_SLAVE_SNOC_BIMC,
673         MSM8996_SLAVE_SNOC_PNOC
674 };
675
676 static struct qcom_icc_node mas_qdss_bam = {
677         .name = "mas_qdss_bam",
678         .id = MSM8996_MASTER_QDSS_BAM,
679         .buswidth = 16,
680         .mas_rpm_id = 19,
681         .slv_rpm_id = -1,
682         .qos.ap_owned = true,
683         .qos.qos_mode = NOC_QOS_MODE_FIXED,
684         .qos.areq_prio = 1,
685         .qos.prio_level = 1,
686         .qos.qos_port = 2,
687         .num_links = ARRAY_SIZE(mas_qdss_common_links),
688         .links = mas_qdss_common_links
689 };
690
691 static const u16 mas_snoc_cfg_links[] = {
692         MSM8996_SLAVE_SERVICE_SNOC
693 };
694
695 static struct qcom_icc_node mas_snoc_cfg = {
696         .name = "mas_snoc_cfg",
697         .id = MSM8996_MASTER_SNOC_CFG,
698         .buswidth = 16,
699         .mas_rpm_id = 20,
700         .slv_rpm_id = -1,
701         .qos.ap_owned = true,
702         .qos.qos_mode = NOC_QOS_MODE_INVALID,
703         .num_links = ARRAY_SIZE(mas_snoc_cfg_links),
704         .links = mas_snoc_cfg_links
705 };
706
707 static const u16 mas_bimc_snoc_0_links[] = {
708         MSM8996_SLAVE_SNOC_VMEM,
709         MSM8996_SLAVE_USB3,
710         MSM8996_SLAVE_PIMEM,
711         MSM8996_SLAVE_LPASS,
712         MSM8996_SLAVE_APPSS,
713         MSM8996_SLAVE_SNOC_CNOC,
714         MSM8996_SLAVE_SNOC_PNOC,
715         MSM8996_SLAVE_OCIMEM,
716         MSM8996_SLAVE_QDSS_STM
717 };
718
719 static struct qcom_icc_node mas_bimc_snoc_0 = {
720         .name = "mas_bimc_snoc_0",
721         .id = MSM8996_MASTER_BIMC_SNOC_0,
722         .buswidth = 16,
723         .mas_rpm_id = 21,
724         .slv_rpm_id = -1,
725         .qos.ap_owned = true,
726         .qos.qos_mode = NOC_QOS_MODE_INVALID,
727         .num_links = ARRAY_SIZE(mas_bimc_snoc_0_links),
728         .links = mas_bimc_snoc_0_links
729 };
730
731 static const u16 mas_bimc_snoc_1_links[] = {
732         MSM8996_SLAVE_PCIE_2,
733         MSM8996_SLAVE_PCIE_1,
734         MSM8996_SLAVE_PCIE_0
735 };
736
737 static struct qcom_icc_node mas_bimc_snoc_1 = {
738         .name = "mas_bimc_snoc_1",
739         .id = MSM8996_MASTER_BIMC_SNOC_1,
740         .buswidth = 16,
741         .mas_rpm_id = 109,
742         .slv_rpm_id = -1,
743         .qos.ap_owned = true,
744         .qos.qos_mode = NOC_QOS_MODE_INVALID,
745         .num_links = ARRAY_SIZE(mas_bimc_snoc_1_links),
746         .links = mas_bimc_snoc_1_links
747 };
748
749 static const u16 mas_a0noc_snoc_links[] = {
750         MSM8996_SLAVE_SNOC_PNOC,
751         MSM8996_SLAVE_OCIMEM,
752         MSM8996_SLAVE_APPSS,
753         MSM8996_SLAVE_SNOC_BIMC,
754         MSM8996_SLAVE_PIMEM
755 };
756
757 static struct qcom_icc_node mas_a0noc_snoc = {
758         .name = "mas_a0noc_snoc",
759         .id = MSM8996_MASTER_A0NOC_SNOC,
760         .buswidth = 16,
761         .mas_rpm_id = 110,
762         .slv_rpm_id = -1,
763         .qos.ap_owned = true,
764         .qos.qos_mode = NOC_QOS_MODE_INVALID,
765         .num_links = ARRAY_SIZE(mas_a0noc_snoc_links),
766         .links = mas_a0noc_snoc_links
767 };
768
769 static const u16 mas_a1noc_snoc_links[] = {
770         MSM8996_SLAVE_SNOC_VMEM,
771         MSM8996_SLAVE_USB3,
772         MSM8996_SLAVE_PCIE_0,
773         MSM8996_SLAVE_PIMEM,
774         MSM8996_SLAVE_PCIE_2,
775         MSM8996_SLAVE_LPASS,
776         MSM8996_SLAVE_PCIE_1,
777         MSM8996_SLAVE_APPSS,
778         MSM8996_SLAVE_SNOC_BIMC,
779         MSM8996_SLAVE_SNOC_CNOC,
780         MSM8996_SLAVE_SNOC_PNOC,
781         MSM8996_SLAVE_OCIMEM,
782         MSM8996_SLAVE_QDSS_STM
783 };
784
785 static struct qcom_icc_node mas_a1noc_snoc = {
786         .name = "mas_a1noc_snoc",
787         .id = MSM8996_MASTER_A1NOC_SNOC,
788         .buswidth = 16,
789         .mas_rpm_id = 111,
790         .slv_rpm_id = -1,
791         .num_links = ARRAY_SIZE(mas_a1noc_snoc_links),
792         .links = mas_a1noc_snoc_links
793 };
794
795 static const u16 mas_a2noc_snoc_links[] = {
796         MSM8996_SLAVE_SNOC_VMEM,
797         MSM8996_SLAVE_USB3,
798         MSM8996_SLAVE_PCIE_1,
799         MSM8996_SLAVE_PIMEM,
800         MSM8996_SLAVE_PCIE_2,
801         MSM8996_SLAVE_QDSS_STM,
802         MSM8996_SLAVE_LPASS,
803         MSM8996_SLAVE_SNOC_BIMC,
804         MSM8996_SLAVE_SNOC_CNOC,
805         MSM8996_SLAVE_SNOC_PNOC,
806         MSM8996_SLAVE_OCIMEM,
807         MSM8996_SLAVE_PCIE_0
808 };
809
810 static struct qcom_icc_node mas_a2noc_snoc = {
811         .name = "mas_a2noc_snoc",
812         .id = MSM8996_MASTER_A2NOC_SNOC,
813         .buswidth = 16,
814         .mas_rpm_id = 112,
815         .slv_rpm_id = -1,
816         .num_links = ARRAY_SIZE(mas_a2noc_snoc_links),
817         .links = mas_a2noc_snoc_links
818 };
819
820 static struct qcom_icc_node mas_qdss_etr = {
821         .name = "mas_qdss_etr",
822         .id = MSM8996_MASTER_QDSS_ETR,
823         .buswidth = 16,
824         .mas_rpm_id = 31,
825         .slv_rpm_id = -1,
826         .qos.ap_owned = true,
827         .qos.qos_mode = NOC_QOS_MODE_FIXED,
828         .qos.areq_prio = 1,
829         .qos.prio_level = 1,
830         .qos.qos_port = 3,
831         .num_links = ARRAY_SIZE(mas_qdss_common_links),
832         .links = mas_qdss_common_links
833 };
834
835 static const u16 slv_a0noc_snoc_links[] = {
836         MSM8996_MASTER_A0NOC_SNOC
837 };
838
839 static struct qcom_icc_node slv_a0noc_snoc = {
840         .name = "slv_a0noc_snoc",
841         .id = MSM8996_SLAVE_A0NOC_SNOC,
842         .buswidth = 8,
843         .mas_rpm_id = -1,
844         .slv_rpm_id = 141,
845         .qos.ap_owned = true,
846         .qos.qos_mode = NOC_QOS_MODE_INVALID,
847         .num_links = ARRAY_SIZE(slv_a0noc_snoc_links),
848         .links = slv_a0noc_snoc_links
849 };
850
851 static const u16 slv_a1noc_snoc_links[] = {
852         MSM8996_MASTER_A1NOC_SNOC
853 };
854
855 static struct qcom_icc_node slv_a1noc_snoc = {
856         .name = "slv_a1noc_snoc",
857         .id = MSM8996_SLAVE_A1NOC_SNOC,
858         .buswidth = 8,
859         .mas_rpm_id = -1,
860         .slv_rpm_id = 142,
861         .num_links = ARRAY_SIZE(slv_a1noc_snoc_links),
862         .links = slv_a1noc_snoc_links
863 };
864
865 static const u16 slv_a2noc_snoc_links[] = {
866         MSM8996_MASTER_A2NOC_SNOC
867 };
868
869 static struct qcom_icc_node slv_a2noc_snoc = {
870         .name = "slv_a2noc_snoc",
871         .id = MSM8996_SLAVE_A2NOC_SNOC,
872         .buswidth = 8,
873         .mas_rpm_id = -1,
874         .slv_rpm_id = 143,
875         .num_links = ARRAY_SIZE(slv_a2noc_snoc_links),
876         .links = slv_a2noc_snoc_links
877 };
878
879 static struct qcom_icc_node slv_ebi = {
880         .name = "slv_ebi",
881         .id = MSM8996_SLAVE_EBI_CH0,
882         .buswidth = 8,
883         .mas_rpm_id = -1,
884         .slv_rpm_id = 0
885 };
886
887 static struct qcom_icc_node slv_hmss_l3 = {
888         .name = "slv_hmss_l3",
889         .id = MSM8996_SLAVE_HMSS_L3,
890         .buswidth = 8,
891         .mas_rpm_id = -1,
892         .slv_rpm_id = 160
893 };
894
895 static const u16 slv_bimc_snoc_0_links[] = {
896         MSM8996_MASTER_BIMC_SNOC_0
897 };
898
899 static struct qcom_icc_node slv_bimc_snoc_0 = {
900         .name = "slv_bimc_snoc_0",
901         .id = MSM8996_SLAVE_BIMC_SNOC_0,
902         .buswidth = 8,
903         .mas_rpm_id = -1,
904         .slv_rpm_id = 2,
905         .qos.ap_owned = true,
906         .qos.qos_mode = NOC_QOS_MODE_INVALID,
907         .num_links = ARRAY_SIZE(slv_bimc_snoc_0_links),
908         .links = slv_bimc_snoc_0_links
909 };
910
911 static const u16 slv_bimc_snoc_1_links[] = {
912         MSM8996_MASTER_BIMC_SNOC_1
913 };
914
915 static struct qcom_icc_node slv_bimc_snoc_1 = {
916         .name = "slv_bimc_snoc_1",
917         .id = MSM8996_SLAVE_BIMC_SNOC_1,
918         .buswidth = 8,
919         .mas_rpm_id = -1,
920         .slv_rpm_id = 138,
921         .qos.ap_owned = true,
922         .qos.qos_mode = NOC_QOS_MODE_INVALID,
923         .num_links = ARRAY_SIZE(slv_bimc_snoc_1_links),
924         .links = slv_bimc_snoc_1_links
925 };
926
927 static const u16 slv_cnoc_a1noc_links[] = {
928         MSM8996_MASTER_CNOC_A1NOC
929 };
930
931 static struct qcom_icc_node slv_cnoc_a1noc = {
932         .name = "slv_cnoc_a1noc",
933         .id = MSM8996_SLAVE_CNOC_A1NOC,
934         .buswidth = 4,
935         .mas_rpm_id = -1,
936         .slv_rpm_id = 75,
937         .qos.ap_owned = true,
938         .qos.qos_mode = NOC_QOS_MODE_INVALID,
939         .num_links = ARRAY_SIZE(slv_cnoc_a1noc_links),
940         .links = slv_cnoc_a1noc_links
941 };
942
943 static struct qcom_icc_node slv_clk_ctl = {
944         .name = "slv_clk_ctl",
945         .id = MSM8996_SLAVE_CLK_CTL,
946         .buswidth = 4,
947         .mas_rpm_id = -1,
948         .slv_rpm_id = 47
949 };
950
951 static struct qcom_icc_node slv_tcsr = {
952         .name = "slv_tcsr",
953         .id = MSM8996_SLAVE_TCSR,
954         .buswidth = 4,
955         .mas_rpm_id = -1,
956         .slv_rpm_id = 50
957 };
958
959 static struct qcom_icc_node slv_tlmm = {
960         .name = "slv_tlmm",
961         .id = MSM8996_SLAVE_TLMM,
962         .buswidth = 4,
963         .mas_rpm_id = -1,
964         .slv_rpm_id = 51
965 };
966
967 static struct qcom_icc_node slv_crypto0_cfg = {
968         .name = "slv_crypto0_cfg",
969         .id = MSM8996_SLAVE_CRYPTO_0_CFG,
970         .buswidth = 4,
971         .mas_rpm_id = -1,
972         .slv_rpm_id = 52,
973         .qos.ap_owned = true,
974         .qos.qos_mode = NOC_QOS_MODE_INVALID
975 };
976
977 static struct qcom_icc_node slv_mpm = {
978         .name = "slv_mpm",
979         .id = MSM8996_SLAVE_MPM,
980         .buswidth = 4,
981         .mas_rpm_id = -1,
982         .slv_rpm_id = 62,
983         .qos.ap_owned = true,
984         .qos.qos_mode = NOC_QOS_MODE_INVALID
985 };
986
987 static struct qcom_icc_node slv_pimem_cfg = {
988         .name = "slv_pimem_cfg",
989         .id = MSM8996_SLAVE_PIMEM_CFG,
990         .buswidth = 4,
991         .mas_rpm_id = -1,
992         .slv_rpm_id = 167,
993         .qos.ap_owned = true,
994         .qos.qos_mode = NOC_QOS_MODE_INVALID
995 };
996
997 static struct qcom_icc_node slv_imem_cfg = {
998         .name = "slv_imem_cfg",
999         .id = MSM8996_SLAVE_IMEM_CFG,
1000         .buswidth = 4,
1001         .mas_rpm_id = -1,
1002         .slv_rpm_id = 54,
1003         .qos.ap_owned = true,
1004         .qos.qos_mode = NOC_QOS_MODE_INVALID
1005 };
1006
1007 static struct qcom_icc_node slv_message_ram = {
1008         .name = "slv_message_ram",
1009         .id = MSM8996_SLAVE_MESSAGE_RAM,
1010         .buswidth = 4,
1011         .mas_rpm_id = -1,
1012         .slv_rpm_id = 55
1013 };
1014
1015 static struct qcom_icc_node slv_bimc_cfg = {
1016         .name = "slv_bimc_cfg",
1017         .id = MSM8996_SLAVE_BIMC_CFG,
1018         .buswidth = 4,
1019         .mas_rpm_id = -1,
1020         .slv_rpm_id = 56,
1021         .qos.ap_owned = true,
1022         .qos.qos_mode = NOC_QOS_MODE_INVALID
1023 };
1024
1025 static struct qcom_icc_node slv_pmic_arb = {
1026         .name = "slv_pmic_arb",
1027         .id = MSM8996_SLAVE_PMIC_ARB,
1028         .buswidth = 4,
1029         .mas_rpm_id = -1,
1030         .slv_rpm_id = 59
1031 };
1032
1033 static struct qcom_icc_node slv_prng = {
1034         .name = "slv_prng",
1035         .id = MSM8996_SLAVE_PRNG,
1036         .buswidth = 4,
1037         .mas_rpm_id = -1,
1038         .slv_rpm_id = 127,
1039         .qos.ap_owned = true,
1040         .qos.qos_mode = NOC_QOS_MODE_INVALID
1041 };
1042
1043 static struct qcom_icc_node slv_dcc_cfg = {
1044         .name = "slv_dcc_cfg",
1045         .id = MSM8996_SLAVE_DCC_CFG,
1046         .buswidth = 4,
1047         .mas_rpm_id = -1,
1048         .slv_rpm_id = 155,
1049         .qos.ap_owned = true,
1050         .qos.qos_mode = NOC_QOS_MODE_INVALID
1051 };
1052
1053 static struct qcom_icc_node slv_rbcpr_mx = {
1054         .name = "slv_rbcpr_mx",
1055         .id = MSM8996_SLAVE_RBCPR_MX,
1056         .buswidth = 4,
1057         .mas_rpm_id = -1,
1058         .slv_rpm_id = 170,
1059         .qos.ap_owned = true,
1060         .qos.qos_mode = NOC_QOS_MODE_INVALID
1061 };
1062
1063 static struct qcom_icc_node slv_qdss_cfg = {
1064         .name = "slv_qdss_cfg",
1065         .id = MSM8996_SLAVE_QDSS_CFG,
1066         .buswidth = 4,
1067         .mas_rpm_id = -1,
1068         .slv_rpm_id = 63,
1069         .qos.ap_owned = true,
1070         .qos.qos_mode = NOC_QOS_MODE_INVALID
1071 };
1072
1073 static struct qcom_icc_node slv_rbcpr_cx = {
1074         .name = "slv_rbcpr_cx",
1075         .id = MSM8996_SLAVE_RBCPR_CX,
1076         .buswidth = 4,
1077         .mas_rpm_id = -1,
1078         .slv_rpm_id = 169,
1079         .qos.ap_owned = true,
1080         .qos.qos_mode = NOC_QOS_MODE_INVALID
1081 };
1082
1083 static struct qcom_icc_node slv_cpu_apu_cfg = {
1084         .name = "slv_cpu_apu_cfg",
1085         .id = MSM8996_SLAVE_QDSS_RBCPR_APU_CFG,
1086         .buswidth = 4,
1087         .mas_rpm_id = -1,
1088         .slv_rpm_id = 168,
1089         .qos.ap_owned = true,
1090         .qos.qos_mode = NOC_QOS_MODE_INVALID
1091 };
1092
1093 static const u16 slv_cnoc_mnoc_cfg_links[] = {
1094         MSM8996_MASTER_CNOC_MNOC_CFG
1095 };
1096
1097 static struct qcom_icc_node slv_cnoc_mnoc_cfg = {
1098         .name = "slv_cnoc_mnoc_cfg",
1099         .id = MSM8996_SLAVE_CNOC_MNOC_CFG,
1100         .buswidth = 4,
1101         .mas_rpm_id = -1,
1102         .slv_rpm_id = 66,
1103         .qos.ap_owned = true,
1104         .qos.qos_mode = NOC_QOS_MODE_INVALID,
1105         .num_links = ARRAY_SIZE(slv_cnoc_mnoc_cfg_links),
1106         .links = slv_cnoc_mnoc_cfg_links
1107 };
1108
1109 static struct qcom_icc_node slv_snoc_cfg = {
1110         .name = "slv_snoc_cfg",
1111         .id = MSM8996_SLAVE_SNOC_CFG,
1112         .buswidth = 4,
1113         .mas_rpm_id = -1,
1114         .slv_rpm_id = 70,
1115         .qos.ap_owned = true,
1116         .qos.qos_mode = NOC_QOS_MODE_INVALID
1117 };
1118
1119 static struct qcom_icc_node slv_snoc_mpu_cfg = {
1120         .name = "slv_snoc_mpu_cfg",
1121         .id = MSM8996_SLAVE_SNOC_MPU_CFG,
1122         .buswidth = 4,
1123         .mas_rpm_id = -1,
1124         .slv_rpm_id = 67,
1125         .qos.ap_owned = true,
1126         .qos.qos_mode = NOC_QOS_MODE_INVALID
1127 };
1128
1129 static struct qcom_icc_node slv_ebi1_phy_cfg = {
1130         .name = "slv_ebi1_phy_cfg",
1131         .id = MSM8996_SLAVE_EBI1_PHY_CFG,
1132         .buswidth = 4,
1133         .mas_rpm_id = -1,
1134         .slv_rpm_id = 73,
1135         .qos.ap_owned = true,
1136         .qos.qos_mode = NOC_QOS_MODE_INVALID
1137 };
1138
1139 static struct qcom_icc_node slv_a0noc_cfg = {
1140         .name = "slv_a0noc_cfg",
1141         .id = MSM8996_SLAVE_A0NOC_CFG,
1142         .buswidth = 4,
1143         .mas_rpm_id = -1,
1144         .slv_rpm_id = 144,
1145         .qos.ap_owned = true,
1146         .qos.qos_mode = NOC_QOS_MODE_INVALID
1147 };
1148
1149 static struct qcom_icc_node slv_pcie_1_cfg = {
1150         .name = "slv_pcie_1_cfg",
1151         .id = MSM8996_SLAVE_PCIE_1_CFG,
1152         .buswidth = 4,
1153         .mas_rpm_id = -1,
1154         .slv_rpm_id = 89,
1155         .qos.ap_owned = true,
1156         .qos.qos_mode = NOC_QOS_MODE_INVALID
1157 };
1158
1159 static struct qcom_icc_node slv_pcie_2_cfg = {
1160         .name = "slv_pcie_2_cfg",
1161         .id = MSM8996_SLAVE_PCIE_2_CFG,
1162         .buswidth = 4,
1163         .mas_rpm_id = -1,
1164         .slv_rpm_id = 165,
1165         .qos.ap_owned = true,
1166         .qos.qos_mode = NOC_QOS_MODE_INVALID
1167 };
1168
1169 static struct qcom_icc_node slv_pcie_0_cfg = {
1170         .name = "slv_pcie_0_cfg",
1171         .id = MSM8996_SLAVE_PCIE_0_CFG,
1172         .buswidth = 4,
1173         .mas_rpm_id = -1,
1174         .slv_rpm_id = 88,
1175         .qos.ap_owned = true,
1176         .qos.qos_mode = NOC_QOS_MODE_INVALID
1177 };
1178
1179 static struct qcom_icc_node slv_pcie20_ahb2phy = {
1180         .name = "slv_pcie20_ahb2phy",
1181         .id = MSM8996_SLAVE_PCIE20_AHB2PHY,
1182         .buswidth = 4,
1183         .mas_rpm_id = -1,
1184         .slv_rpm_id = 163,
1185         .qos.ap_owned = true,
1186         .qos.qos_mode = NOC_QOS_MODE_INVALID
1187 };
1188
1189 static struct qcom_icc_node slv_a0noc_mpu_cfg = {
1190         .name = "slv_a0noc_mpu_cfg",
1191         .id = MSM8996_SLAVE_A0NOC_MPU_CFG,
1192         .buswidth = 4,
1193         .mas_rpm_id = -1,
1194         .slv_rpm_id = 145,
1195         .qos.ap_owned = true,
1196         .qos.qos_mode = NOC_QOS_MODE_INVALID
1197 };
1198
1199 static struct qcom_icc_node slv_ufs_cfg = {
1200         .name = "slv_ufs_cfg",
1201         .id = MSM8996_SLAVE_UFS_CFG,
1202         .buswidth = 4,
1203         .mas_rpm_id = -1,
1204         .slv_rpm_id = 92,
1205         .qos.ap_owned = true,
1206         .qos.qos_mode = NOC_QOS_MODE_INVALID
1207 };
1208
1209 static struct qcom_icc_node slv_a1noc_cfg = {
1210         .name = "slv_a1noc_cfg",
1211         .id = MSM8996_SLAVE_A1NOC_CFG,
1212         .buswidth = 4,
1213         .mas_rpm_id = -1,
1214         .slv_rpm_id = 147,
1215         .qos.ap_owned = true,
1216         .qos.qos_mode = NOC_QOS_MODE_INVALID
1217 };
1218
1219 static struct qcom_icc_node slv_a1noc_mpu_cfg = {
1220         .name = "slv_a1noc_mpu_cfg",
1221         .id = MSM8996_SLAVE_A1NOC_MPU_CFG,
1222         .buswidth = 4,
1223         .mas_rpm_id = -1,
1224         .slv_rpm_id = 148,
1225         .qos.ap_owned = true,
1226         .qos.qos_mode = NOC_QOS_MODE_INVALID
1227 };
1228
1229 static struct qcom_icc_node slv_a2noc_cfg = {
1230         .name = "slv_a2noc_cfg",
1231         .id = MSM8996_SLAVE_A2NOC_CFG,
1232         .buswidth = 4,
1233         .mas_rpm_id = -1,
1234         .slv_rpm_id = 150,
1235         .qos.ap_owned = true,
1236         .qos.qos_mode = NOC_QOS_MODE_INVALID
1237 };
1238
1239 static struct qcom_icc_node slv_a2noc_mpu_cfg = {
1240         .name = "slv_a2noc_mpu_cfg",
1241         .id = MSM8996_SLAVE_A2NOC_MPU_CFG,
1242         .buswidth = 4,
1243         .mas_rpm_id = -1,
1244         .slv_rpm_id = 151,
1245         .qos.ap_owned = true,
1246         .qos.qos_mode = NOC_QOS_MODE_INVALID
1247 };
1248
1249 static struct qcom_icc_node slv_ssc_cfg = {
1250         .name = "slv_ssc_cfg",
1251         .id = MSM8996_SLAVE_SSC_CFG,
1252         .buswidth = 4,
1253         .mas_rpm_id = -1,
1254         .slv_rpm_id = 177,
1255         .qos.ap_owned = true,
1256         .qos.qos_mode = NOC_QOS_MODE_INVALID
1257 };
1258
1259 static struct qcom_icc_node slv_a0noc_smmu_cfg = {
1260         .name = "slv_a0noc_smmu_cfg",
1261         .id = MSM8996_SLAVE_A0NOC_SMMU_CFG,
1262         .buswidth = 8,
1263         .mas_rpm_id = -1,
1264         .slv_rpm_id = 146,
1265         .qos.ap_owned = true,
1266         .qos.qos_mode = NOC_QOS_MODE_INVALID
1267 };
1268
1269 static struct qcom_icc_node slv_a1noc_smmu_cfg = {
1270         .name = "slv_a1noc_smmu_cfg",
1271         .id = MSM8996_SLAVE_A1NOC_SMMU_CFG,
1272         .buswidth = 8,
1273         .mas_rpm_id = -1,
1274         .slv_rpm_id = 149,
1275         .qos.ap_owned = true,
1276         .qos.qos_mode = NOC_QOS_MODE_INVALID
1277 };
1278
1279 static struct qcom_icc_node slv_a2noc_smmu_cfg = {
1280         .name = "slv_a2noc_smmu_cfg",
1281         .id = MSM8996_SLAVE_A2NOC_SMMU_CFG,
1282         .buswidth = 8,
1283         .mas_rpm_id = -1,
1284         .slv_rpm_id = 152,
1285         .qos.ap_owned = true,
1286         .qos.qos_mode = NOC_QOS_MODE_INVALID
1287 };
1288
1289 static struct qcom_icc_node slv_lpass_smmu_cfg = {
1290         .name = "slv_lpass_smmu_cfg",
1291         .id = MSM8996_SLAVE_LPASS_SMMU_CFG,
1292         .buswidth = 8,
1293         .mas_rpm_id = -1,
1294         .slv_rpm_id = 161,
1295         .qos.ap_owned = true,
1296         .qos.qos_mode = NOC_QOS_MODE_INVALID
1297 };
1298
1299 static const u16 slv_cnoc_mnoc_mmss_cfg_links[] = {
1300         MSM8996_MASTER_CNOC_MNOC_MMSS_CFG
1301 };
1302
1303 static struct qcom_icc_node slv_cnoc_mnoc_mmss_cfg = {
1304         .name = "slv_cnoc_mnoc_mmss_cfg",
1305         .id = MSM8996_SLAVE_CNOC_MNOC_MMSS_CFG,
1306         .buswidth = 8,
1307         .mas_rpm_id = -1,
1308         .slv_rpm_id = 58,
1309         .qos.ap_owned = true,
1310         .qos.qos_mode = NOC_QOS_MODE_INVALID,
1311         .num_links = ARRAY_SIZE(slv_cnoc_mnoc_mmss_cfg_links),
1312         .links = slv_cnoc_mnoc_mmss_cfg_links
1313 };
1314
1315 static struct qcom_icc_node slv_mmagic_cfg = {
1316         .name = "slv_mmagic_cfg",
1317         .id = MSM8996_SLAVE_MMAGIC_CFG,
1318         .buswidth = 8,
1319         .mas_rpm_id = -1,
1320         .slv_rpm_id = 162,
1321         .qos.ap_owned = true,
1322         .qos.qos_mode = NOC_QOS_MODE_INVALID
1323 };
1324
1325 static struct qcom_icc_node slv_cpr_cfg = {
1326         .name = "slv_cpr_cfg",
1327         .id = MSM8996_SLAVE_CPR_CFG,
1328         .buswidth = 8,
1329         .mas_rpm_id = -1,
1330         .slv_rpm_id = 6,
1331         .qos.ap_owned = true,
1332         .qos.qos_mode = NOC_QOS_MODE_INVALID
1333 };
1334
1335 static struct qcom_icc_node slv_misc_cfg = {
1336         .name = "slv_misc_cfg",
1337         .id = MSM8996_SLAVE_MISC_CFG,
1338         .buswidth = 8,
1339         .mas_rpm_id = -1,
1340         .slv_rpm_id = 8,
1341         .qos.ap_owned = true,
1342         .qos.qos_mode = NOC_QOS_MODE_INVALID
1343 };
1344
1345 static struct qcom_icc_node slv_venus_throttle_cfg = {
1346         .name = "slv_venus_throttle_cfg",
1347         .id = MSM8996_SLAVE_VENUS_THROTTLE_CFG,
1348         .buswidth = 8,
1349         .mas_rpm_id = -1,
1350         .slv_rpm_id = 178,
1351         .qos.ap_owned = true,
1352         .qos.qos_mode = NOC_QOS_MODE_INVALID
1353 };
1354
1355 static struct qcom_icc_node slv_venus_cfg = {
1356         .name = "slv_venus_cfg",
1357         .id = MSM8996_SLAVE_VENUS_CFG,
1358         .buswidth = 8,
1359         .mas_rpm_id = -1,
1360         .slv_rpm_id = 10,
1361         .qos.ap_owned = true,
1362         .qos.qos_mode = NOC_QOS_MODE_INVALID
1363 };
1364
1365 static struct qcom_icc_node slv_vmem_cfg = {
1366         .name = "slv_vmem_cfg",
1367         .id = MSM8996_SLAVE_VMEM_CFG,
1368         .buswidth = 8,
1369         .mas_rpm_id = -1,
1370         .slv_rpm_id = 180,
1371         .qos.ap_owned = true,
1372         .qos.qos_mode = NOC_QOS_MODE_INVALID
1373 };
1374
1375 static struct qcom_icc_node slv_dsa_cfg = {
1376         .name = "slv_dsa_cfg",
1377         .id = MSM8996_SLAVE_DSA_CFG,
1378         .buswidth = 8,
1379         .mas_rpm_id = -1,
1380         .slv_rpm_id = 157,
1381         .qos.ap_owned = true,
1382         .qos.qos_mode = NOC_QOS_MODE_INVALID
1383 };
1384
1385 static struct qcom_icc_node slv_mnoc_clocks_cfg = {
1386         .name = "slv_mnoc_clocks_cfg",
1387         .id = MSM8996_SLAVE_MMSS_CLK_CFG,
1388         .buswidth = 8,
1389         .mas_rpm_id = -1,
1390         .slv_rpm_id = 12,
1391         .qos.ap_owned = true,
1392         .qos.qos_mode = NOC_QOS_MODE_INVALID
1393 };
1394
1395 static struct qcom_icc_node slv_dsa_mpu_cfg = {
1396         .name = "slv_dsa_mpu_cfg",
1397         .id = MSM8996_SLAVE_DSA_MPU_CFG,
1398         .buswidth = 8,
1399         .mas_rpm_id = -1,
1400         .slv_rpm_id = 158,
1401         .qos.ap_owned = true,
1402         .qos.qos_mode = NOC_QOS_MODE_INVALID
1403 };
1404
1405 static struct qcom_icc_node slv_mnoc_mpu_cfg = {
1406         .name = "slv_mnoc_mpu_cfg",
1407         .id = MSM8996_SLAVE_MNOC_MPU_CFG,
1408         .buswidth = 8,
1409         .mas_rpm_id = -1,
1410         .slv_rpm_id = 14,
1411         .qos.ap_owned = true,
1412         .qos.qos_mode = NOC_QOS_MODE_INVALID
1413 };
1414
1415 static struct qcom_icc_node slv_display_cfg = {
1416         .name = "slv_display_cfg",
1417         .id = MSM8996_SLAVE_DISPLAY_CFG,
1418         .buswidth = 8,
1419         .mas_rpm_id = -1,
1420         .slv_rpm_id = 4,
1421         .qos.ap_owned = true,
1422         .qos.qos_mode = NOC_QOS_MODE_INVALID
1423 };
1424
1425 static struct qcom_icc_node slv_display_throttle_cfg = {
1426         .name = "slv_display_throttle_cfg",
1427         .id = MSM8996_SLAVE_DISPLAY_THROTTLE_CFG,
1428         .buswidth = 8,
1429         .mas_rpm_id = -1,
1430         .slv_rpm_id = 156,
1431         .qos.ap_owned = true,
1432         .qos.qos_mode = NOC_QOS_MODE_INVALID
1433 };
1434
1435 static struct qcom_icc_node slv_camera_cfg = {
1436         .name = "slv_camera_cfg",
1437         .id = MSM8996_SLAVE_CAMERA_CFG,
1438         .buswidth = 8,
1439         .mas_rpm_id = -1,
1440         .slv_rpm_id = 3,
1441         .qos.ap_owned = true,
1442         .qos.qos_mode = NOC_QOS_MODE_INVALID
1443 };
1444
1445 static struct qcom_icc_node slv_camera_throttle_cfg = {
1446         .name = "slv_camera_throttle_cfg",
1447         .id = MSM8996_SLAVE_CAMERA_THROTTLE_CFG,
1448         .buswidth = 8,
1449         .mas_rpm_id = -1,
1450         .slv_rpm_id = 154,
1451         .qos.ap_owned = true,
1452         .qos.qos_mode = NOC_QOS_MODE_INVALID
1453 };
1454
1455 static struct qcom_icc_node slv_oxili_cfg = {
1456         .name = "slv_oxili_cfg",
1457         .id = MSM8996_SLAVE_GRAPHICS_3D_CFG,
1458         .buswidth = 8,
1459         .mas_rpm_id = -1,
1460         .slv_rpm_id = 11,
1461         .qos.ap_owned = true,
1462         .qos.qos_mode = NOC_QOS_MODE_INVALID
1463 };
1464
1465 static struct qcom_icc_node slv_smmu_mdp_cfg = {
1466         .name = "slv_smmu_mdp_cfg",
1467         .id = MSM8996_SLAVE_SMMU_MDP_CFG,
1468         .buswidth = 8,
1469         .mas_rpm_id = -1,
1470         .slv_rpm_id = 173,
1471         .qos.ap_owned = true,
1472         .qos.qos_mode = NOC_QOS_MODE_INVALID
1473 };
1474
1475 static struct qcom_icc_node slv_smmu_rot_cfg = {
1476         .name = "slv_smmu_rot_cfg",
1477         .id = MSM8996_SLAVE_SMMU_ROTATOR_CFG,
1478         .buswidth = 8,
1479         .mas_rpm_id = -1,
1480         .slv_rpm_id = 174,
1481         .qos.ap_owned = true,
1482         .qos.qos_mode = NOC_QOS_MODE_INVALID
1483 };
1484
1485 static struct qcom_icc_node slv_smmu_venus_cfg = {
1486         .name = "slv_smmu_venus_cfg",
1487         .id = MSM8996_SLAVE_SMMU_VENUS_CFG,
1488         .buswidth = 8,
1489         .mas_rpm_id = -1,
1490         .slv_rpm_id = 175,
1491         .qos.ap_owned = true,
1492         .qos.qos_mode = NOC_QOS_MODE_INVALID
1493 };
1494
1495 static struct qcom_icc_node slv_smmu_cpp_cfg = {
1496         .name = "slv_smmu_cpp_cfg",
1497         .id = MSM8996_SLAVE_SMMU_CPP_CFG,
1498         .buswidth = 8,
1499         .mas_rpm_id = -1,
1500         .slv_rpm_id = 171,
1501         .qos.ap_owned = true,
1502         .qos.qos_mode = NOC_QOS_MODE_INVALID
1503 };
1504
1505 static struct qcom_icc_node slv_smmu_jpeg_cfg = {
1506         .name = "slv_smmu_jpeg_cfg",
1507         .id = MSM8996_SLAVE_SMMU_JPEG_CFG,
1508         .buswidth = 8,
1509         .mas_rpm_id = -1,
1510         .slv_rpm_id = 172,
1511         .qos.ap_owned = true,
1512         .qos.qos_mode = NOC_QOS_MODE_INVALID
1513 };
1514
1515 static struct qcom_icc_node slv_smmu_vfe_cfg = {
1516         .name = "slv_smmu_vfe_cfg",
1517         .id = MSM8996_SLAVE_SMMU_VFE_CFG,
1518         .buswidth = 8,
1519         .mas_rpm_id = -1,
1520         .slv_rpm_id = 176,
1521         .qos.ap_owned = true,
1522         .qos.qos_mode = NOC_QOS_MODE_INVALID
1523 };
1524
1525 static const u16 slv_mnoc_bimc_links[] = {
1526         MSM8996_MASTER_MNOC_BIMC
1527 };
1528
1529 static struct qcom_icc_node slv_mnoc_bimc = {
1530         .name = "slv_mnoc_bimc",
1531         .id = MSM8996_SLAVE_MNOC_BIMC,
1532         .buswidth = 32,
1533         .mas_rpm_id = -1,
1534         .slv_rpm_id = 16,
1535         .qos.ap_owned = true,
1536         .qos.qos_mode = NOC_QOS_MODE_INVALID,
1537         .num_links = ARRAY_SIZE(slv_mnoc_bimc_links),
1538         .links = slv_mnoc_bimc_links
1539 };
1540
1541 static struct qcom_icc_node slv_vmem = {
1542         .name = "slv_vmem",
1543         .id = MSM8996_SLAVE_VMEM,
1544         .buswidth = 32,
1545         .mas_rpm_id = -1,
1546         .slv_rpm_id = 179,
1547         .qos.ap_owned = true,
1548         .qos.qos_mode = NOC_QOS_MODE_INVALID
1549 };
1550
1551 static struct qcom_icc_node slv_srvc_mnoc = {
1552         .name = "slv_srvc_mnoc",
1553         .id = MSM8996_SLAVE_SERVICE_MNOC,
1554         .buswidth = 8,
1555         .mas_rpm_id = -1,
1556         .slv_rpm_id = 17,
1557         .qos.ap_owned = true,
1558         .qos.qos_mode = NOC_QOS_MODE_INVALID
1559 };
1560
1561 static const u16 slv_pnoc_a1noc_links[] = {
1562         MSM8996_MASTER_PNOC_A1NOC
1563 };
1564
1565 static struct qcom_icc_node slv_pnoc_a1noc = {
1566         .name = "slv_pnoc_a1noc",
1567         .id = MSM8996_SLAVE_PNOC_A1NOC,
1568         .buswidth = 8,
1569         .mas_rpm_id = -1,
1570         .slv_rpm_id = 139,
1571         .num_links = ARRAY_SIZE(slv_pnoc_a1noc_links),
1572         .links = slv_pnoc_a1noc_links
1573 };
1574
1575 static struct qcom_icc_node slv_usb_hs = {
1576         .name = "slv_usb_hs",
1577         .id = MSM8996_SLAVE_USB_HS,
1578         .buswidth = 4,
1579         .mas_rpm_id = -1,
1580         .slv_rpm_id = 40
1581 };
1582
1583 static struct qcom_icc_node slv_sdcc_2 = {
1584         .name = "slv_sdcc_2",
1585         .id = MSM8996_SLAVE_SDCC_2,
1586         .buswidth = 4,
1587         .mas_rpm_id = -1,
1588         .slv_rpm_id = 33
1589 };
1590
1591 static struct qcom_icc_node slv_sdcc_4 = {
1592         .name = "slv_sdcc_4",
1593         .id = MSM8996_SLAVE_SDCC_4,
1594         .buswidth = 4,
1595         .mas_rpm_id = -1,
1596         .slv_rpm_id = 34
1597 };
1598
1599 static struct qcom_icc_node slv_tsif = {
1600         .name = "slv_tsif",
1601         .id = MSM8996_SLAVE_TSIF,
1602         .buswidth = 4,
1603         .mas_rpm_id = -1,
1604         .slv_rpm_id = 35
1605 };
1606
1607 static struct qcom_icc_node slv_blsp_2 = {
1608         .name = "slv_blsp_2",
1609         .id = MSM8996_SLAVE_BLSP_2,
1610         .buswidth = 4,
1611         .mas_rpm_id = -1,
1612         .slv_rpm_id = 37
1613 };
1614
1615 static struct qcom_icc_node slv_sdcc_1 = {
1616         .name = "slv_sdcc_1",
1617         .id = MSM8996_SLAVE_SDCC_1,
1618         .buswidth = 4,
1619         .mas_rpm_id = -1,
1620         .slv_rpm_id = 31
1621 };
1622
1623 static struct qcom_icc_node slv_blsp_1 = {
1624         .name = "slv_blsp_1",
1625         .id = MSM8996_SLAVE_BLSP_1,
1626         .buswidth = 4,
1627         .mas_rpm_id = -1,
1628         .slv_rpm_id = 39
1629 };
1630
1631 static struct qcom_icc_node slv_pdm = {
1632         .name = "slv_pdm",
1633         .id = MSM8996_SLAVE_PDM,
1634         .buswidth = 4,
1635         .mas_rpm_id = -1,
1636         .slv_rpm_id = 41
1637 };
1638
1639 static struct qcom_icc_node slv_ahb2phy = {
1640         .name = "slv_ahb2phy",
1641         .id = MSM8996_SLAVE_AHB2PHY,
1642         .buswidth = 4,
1643         .mas_rpm_id = -1,
1644         .slv_rpm_id = 153,
1645         .qos.ap_owned = true,
1646         .qos.qos_mode = NOC_QOS_MODE_INVALID
1647 };
1648
1649 static struct qcom_icc_node slv_hmss = {
1650         .name = "slv_hmss",
1651         .id = MSM8996_SLAVE_APPSS,
1652         .buswidth = 16,
1653         .mas_rpm_id = -1,
1654         .slv_rpm_id = 20,
1655         .qos.ap_owned = true,
1656         .qos.qos_mode = NOC_QOS_MODE_INVALID
1657 };
1658
1659 static struct qcom_icc_node slv_lpass = {
1660         .name = "slv_lpass",
1661         .id = MSM8996_SLAVE_LPASS,
1662         .buswidth = 16,
1663         .mas_rpm_id = -1,
1664         .slv_rpm_id = 21,
1665         .qos.ap_owned = true,
1666         .qos.qos_mode = NOC_QOS_MODE_INVALID
1667 };
1668
1669 static struct qcom_icc_node slv_usb3 = {
1670         .name = "slv_usb3",
1671         .id = MSM8996_SLAVE_USB3,
1672         .buswidth = 16,
1673         .mas_rpm_id = -1,
1674         .slv_rpm_id = 22,
1675         .qos.ap_owned = true,
1676         .qos.qos_mode = NOC_QOS_MODE_INVALID
1677 };
1678
1679 static const u16 slv_snoc_bimc_links[] = {
1680         MSM8996_MASTER_SNOC_BIMC
1681 };
1682
1683 static struct qcom_icc_node slv_snoc_bimc = {
1684         .name = "slv_snoc_bimc",
1685         .id = MSM8996_SLAVE_SNOC_BIMC,
1686         .buswidth = 32,
1687         .mas_rpm_id = -1,
1688         .slv_rpm_id = 24,
1689         .num_links = ARRAY_SIZE(slv_snoc_bimc_links),
1690         .links = slv_snoc_bimc_links
1691 };
1692
1693 static const u16 slv_snoc_cnoc_links[] = {
1694         MSM8996_MASTER_SNOC_CNOC
1695 };
1696
1697 static struct qcom_icc_node slv_snoc_cnoc = {
1698         .name = "slv_snoc_cnoc",
1699         .id = MSM8996_SLAVE_SNOC_CNOC,
1700         .buswidth = 16,
1701         .mas_rpm_id = -1,
1702         .slv_rpm_id = 25,
1703         .num_links = ARRAY_SIZE(slv_snoc_cnoc_links),
1704         .links = slv_snoc_cnoc_links
1705 };
1706
1707 static struct qcom_icc_node slv_imem = {
1708         .name = "slv_imem",
1709         .id = MSM8996_SLAVE_OCIMEM,
1710         .buswidth = 16,
1711         .mas_rpm_id = -1,
1712         .slv_rpm_id = 26
1713 };
1714
1715 static struct qcom_icc_node slv_pimem = {
1716         .name = "slv_pimem",
1717         .id = MSM8996_SLAVE_PIMEM,
1718         .buswidth = 16,
1719         .mas_rpm_id = -1,
1720         .slv_rpm_id = 166
1721 };
1722
1723 static const u16 slv_snoc_vmem_links[] = {
1724         MSM8996_MASTER_SNOC_VMEM
1725 };
1726
1727 static struct qcom_icc_node slv_snoc_vmem = {
1728         .name = "slv_snoc_vmem",
1729         .id = MSM8996_SLAVE_SNOC_VMEM,
1730         .buswidth = 16,
1731         .mas_rpm_id = -1,
1732         .slv_rpm_id = 140,
1733         .qos.ap_owned = true,
1734         .qos.qos_mode = NOC_QOS_MODE_INVALID,
1735         .num_links = ARRAY_SIZE(slv_snoc_vmem_links),
1736         .links = slv_snoc_vmem_links
1737 };
1738
1739 static const u16 slv_snoc_pnoc_links[] = {
1740         MSM8996_MASTER_SNOC_PNOC
1741 };
1742
1743 static struct qcom_icc_node slv_snoc_pnoc = {
1744         .name = "slv_snoc_pnoc",
1745         .id = MSM8996_SLAVE_SNOC_PNOC,
1746         .buswidth = 16,
1747         .mas_rpm_id = -1,
1748         .slv_rpm_id = 28,
1749         .num_links = ARRAY_SIZE(slv_snoc_pnoc_links),
1750         .links = slv_snoc_pnoc_links
1751 };
1752
1753 static struct qcom_icc_node slv_qdss_stm = {
1754         .name = "slv_qdss_stm",
1755         .id = MSM8996_SLAVE_QDSS_STM,
1756         .buswidth = 16,
1757         .mas_rpm_id = -1,
1758         .slv_rpm_id = 30
1759 };
1760
1761 static struct qcom_icc_node slv_pcie_0 = {
1762         .name = "slv_pcie_0",
1763         .id = MSM8996_SLAVE_PCIE_0,
1764         .buswidth = 16,
1765         .mas_rpm_id = -1,
1766         .slv_rpm_id = 84,
1767         .qos.ap_owned = true,
1768         .qos.qos_mode = NOC_QOS_MODE_INVALID
1769 };
1770
1771 static struct qcom_icc_node slv_pcie_1 = {
1772         .name = "slv_pcie_1",
1773         .id = MSM8996_SLAVE_PCIE_1,
1774         .buswidth = 16,
1775         .mas_rpm_id = -1,
1776         .slv_rpm_id = 85,
1777         .qos.ap_owned = true,
1778         .qos.qos_mode = NOC_QOS_MODE_INVALID
1779 };
1780
1781 static struct qcom_icc_node slv_pcie_2 = {
1782         .name = "slv_pcie_2",
1783         .id = MSM8996_SLAVE_PCIE_2,
1784         .buswidth = 16,
1785         .mas_rpm_id = -1,
1786         .slv_rpm_id = 164,
1787         .qos.ap_owned = true,
1788         .qos.qos_mode = NOC_QOS_MODE_INVALID
1789 };
1790
1791 static struct qcom_icc_node slv_srvc_snoc = {
1792         .name = "slv_srvc_snoc",
1793         .id = MSM8996_SLAVE_SERVICE_SNOC,
1794         .buswidth = 16,
1795         .mas_rpm_id = -1,
1796         .slv_rpm_id = 29,
1797         .qos.ap_owned = true,
1798         .qos.qos_mode = NOC_QOS_MODE_INVALID
1799 };
1800
1801 static struct qcom_icc_node * const a0noc_nodes[] = {
1802         [MASTER_PCIE_0] = &mas_pcie_0,
1803         [MASTER_PCIE_1] = &mas_pcie_1,
1804         [MASTER_PCIE_2] = &mas_pcie_2
1805 };
1806
1807 static const struct regmap_config msm8996_a0noc_regmap_config = {
1808         .reg_bits       = 32,
1809         .reg_stride     = 4,
1810         .val_bits       = 32,
1811         .max_register   = 0x6000,
1812         .fast_io        = true
1813 };
1814
1815 static const struct qcom_icc_desc msm8996_a0noc = {
1816         .type = QCOM_ICC_NOC,
1817         .nodes = a0noc_nodes,
1818         .num_nodes = ARRAY_SIZE(a0noc_nodes),
1819         .intf_clocks = a0noc_intf_clocks,
1820         .num_intf_clocks = ARRAY_SIZE(a0noc_intf_clocks),
1821         .regmap_cfg = &msm8996_a0noc_regmap_config
1822 };
1823
1824 static struct qcom_icc_node * const a1noc_nodes[] = {
1825         [MASTER_CNOC_A1NOC] = &mas_cnoc_a1noc,
1826         [MASTER_CRYPTO_CORE0] = &mas_crypto_c0,
1827         [MASTER_PNOC_A1NOC] = &mas_pnoc_a1noc
1828 };
1829
1830 static const struct regmap_config msm8996_a1noc_regmap_config = {
1831         .reg_bits       = 32,
1832         .reg_stride     = 4,
1833         .val_bits       = 32,
1834         .max_register   = 0x5000,
1835         .fast_io        = true
1836 };
1837
1838 static const struct qcom_icc_desc msm8996_a1noc = {
1839         .type = QCOM_ICC_NOC,
1840         .nodes = a1noc_nodes,
1841         .num_nodes = ARRAY_SIZE(a1noc_nodes),
1842         .bus_clk_desc = &aggre1_branch_clk,
1843         .regmap_cfg = &msm8996_a1noc_regmap_config
1844 };
1845
1846 static struct qcom_icc_node * const a2noc_nodes[] = {
1847         [MASTER_USB3] = &mas_usb3,
1848         [MASTER_IPA] = &mas_ipa,
1849         [MASTER_UFS] = &mas_ufs
1850 };
1851
1852 static const struct regmap_config msm8996_a2noc_regmap_config = {
1853         .reg_bits       = 32,
1854         .reg_stride     = 4,
1855         .val_bits       = 32,
1856         .max_register   = 0x7000,
1857         .fast_io        = true
1858 };
1859
1860 static const struct qcom_icc_desc msm8996_a2noc = {
1861         .type = QCOM_ICC_NOC,
1862         .nodes = a2noc_nodes,
1863         .num_nodes = ARRAY_SIZE(a2noc_nodes),
1864         .bus_clk_desc = &aggre2_branch_clk,
1865         .intf_clocks = a2noc_intf_clocks,
1866         .num_intf_clocks = ARRAY_SIZE(a2noc_intf_clocks),
1867         .regmap_cfg = &msm8996_a2noc_regmap_config
1868 };
1869
1870 static struct qcom_icc_node * const bimc_nodes[] = {
1871         [MASTER_AMPSS_M0] = &mas_apps_proc,
1872         [MASTER_GRAPHICS_3D] = &mas_oxili,
1873         [MASTER_MNOC_BIMC] = &mas_mnoc_bimc,
1874         [MASTER_SNOC_BIMC] = &mas_snoc_bimc,
1875         [SLAVE_EBI_CH0] = &slv_ebi,
1876         [SLAVE_HMSS_L3] = &slv_hmss_l3,
1877         [SLAVE_BIMC_SNOC_0] = &slv_bimc_snoc_0,
1878         [SLAVE_BIMC_SNOC_1] = &slv_bimc_snoc_1
1879 };
1880
1881 static const struct regmap_config msm8996_bimc_regmap_config = {
1882         .reg_bits       = 32,
1883         .reg_stride     = 4,
1884         .val_bits       = 32,
1885         .max_register   = 0x5a000,
1886         .fast_io        = true
1887 };
1888
1889 static const struct qcom_icc_desc msm8996_bimc = {
1890         .type = QCOM_ICC_BIMC,
1891         .nodes = bimc_nodes,
1892         .num_nodes = ARRAY_SIZE(bimc_nodes),
1893         .bus_clk_desc = &bimc_clk,
1894         .regmap_cfg = &msm8996_bimc_regmap_config,
1895         .ab_coeff = 154,
1896 };
1897
1898 static struct qcom_icc_node * const cnoc_nodes[] = {
1899         [MASTER_SNOC_CNOC] = &mas_snoc_cnoc,
1900         [MASTER_QDSS_DAP] = &mas_qdss_dap,
1901         [SLAVE_CNOC_A1NOC] = &slv_cnoc_a1noc,
1902         [SLAVE_CLK_CTL] = &slv_clk_ctl,
1903         [SLAVE_TCSR] = &slv_tcsr,
1904         [SLAVE_TLMM] = &slv_tlmm,
1905         [SLAVE_CRYPTO_0_CFG] = &slv_crypto0_cfg,
1906         [SLAVE_MPM] = &slv_mpm,
1907         [SLAVE_PIMEM_CFG] = &slv_pimem_cfg,
1908         [SLAVE_IMEM_CFG] = &slv_imem_cfg,
1909         [SLAVE_MESSAGE_RAM] = &slv_message_ram,
1910         [SLAVE_BIMC_CFG] = &slv_bimc_cfg,
1911         [SLAVE_PMIC_ARB] = &slv_pmic_arb,
1912         [SLAVE_PRNG] = &slv_prng,
1913         [SLAVE_DCC_CFG] = &slv_dcc_cfg,
1914         [SLAVE_RBCPR_MX] = &slv_rbcpr_mx,
1915         [SLAVE_QDSS_CFG] = &slv_qdss_cfg,
1916         [SLAVE_RBCPR_CX] = &slv_rbcpr_cx,
1917         [SLAVE_QDSS_RBCPR_APU] = &slv_cpu_apu_cfg,
1918         [SLAVE_CNOC_MNOC_CFG] = &slv_cnoc_mnoc_cfg,
1919         [SLAVE_SNOC_CFG] = &slv_snoc_cfg,
1920         [SLAVE_SNOC_MPU_CFG] = &slv_snoc_mpu_cfg,
1921         [SLAVE_EBI1_PHY_CFG] = &slv_ebi1_phy_cfg,
1922         [SLAVE_A0NOC_CFG] = &slv_a0noc_cfg,
1923         [SLAVE_PCIE_1_CFG] = &slv_pcie_1_cfg,
1924         [SLAVE_PCIE_2_CFG] = &slv_pcie_2_cfg,
1925         [SLAVE_PCIE_0_CFG] = &slv_pcie_0_cfg,
1926         [SLAVE_PCIE20_AHB2PHY] = &slv_pcie20_ahb2phy,
1927         [SLAVE_A0NOC_MPU_CFG] = &slv_a0noc_mpu_cfg,
1928         [SLAVE_UFS_CFG] = &slv_ufs_cfg,
1929         [SLAVE_A1NOC_CFG] = &slv_a1noc_cfg,
1930         [SLAVE_A1NOC_MPU_CFG] = &slv_a1noc_mpu_cfg,
1931         [SLAVE_A2NOC_CFG] = &slv_a2noc_cfg,
1932         [SLAVE_A2NOC_MPU_CFG] = &slv_a2noc_mpu_cfg,
1933         [SLAVE_SSC_CFG] = &slv_ssc_cfg,
1934         [SLAVE_A0NOC_SMMU_CFG] = &slv_a0noc_smmu_cfg,
1935         [SLAVE_A1NOC_SMMU_CFG] = &slv_a1noc_smmu_cfg,
1936         [SLAVE_A2NOC_SMMU_CFG] = &slv_a2noc_smmu_cfg,
1937         [SLAVE_LPASS_SMMU_CFG] = &slv_lpass_smmu_cfg,
1938         [SLAVE_CNOC_MNOC_MMSS_CFG] = &slv_cnoc_mnoc_mmss_cfg
1939 };
1940
1941 static const struct regmap_config msm8996_cnoc_regmap_config = {
1942         .reg_bits       = 32,
1943         .reg_stride     = 4,
1944         .val_bits       = 32,
1945         .max_register   = 0x1000,
1946         .fast_io        = true
1947 };
1948
1949 static const struct qcom_icc_desc msm8996_cnoc = {
1950         .type = QCOM_ICC_NOC,
1951         .nodes = cnoc_nodes,
1952         .num_nodes = ARRAY_SIZE(cnoc_nodes),
1953         .bus_clk_desc = &bus_2_clk,
1954         .regmap_cfg = &msm8996_cnoc_regmap_config
1955 };
1956
1957 static struct qcom_icc_node * const mnoc_nodes[] = {
1958         [MASTER_CNOC_MNOC_CFG] = &mas_cnoc_mnoc_cfg,
1959         [MASTER_CPP] = &mas_cpp,
1960         [MASTER_JPEG] = &mas_jpeg,
1961         [MASTER_MDP_PORT0] = &mas_mdp_p0,
1962         [MASTER_MDP_PORT1] = &mas_mdp_p1,
1963         [MASTER_ROTATOR] = &mas_rotator,
1964         [MASTER_VIDEO_P0] = &mas_venus,
1965         [MASTER_VFE] = &mas_vfe,
1966         [MASTER_SNOC_VMEM] = &mas_snoc_vmem,
1967         [MASTER_VIDEO_P0_OCMEM] = &mas_venus_vmem,
1968         [MASTER_CNOC_MNOC_MMSS_CFG] = &mas_cnoc_mnoc_mmss_cfg,
1969         [SLAVE_MNOC_BIMC] = &slv_mnoc_bimc,
1970         [SLAVE_VMEM] = &slv_vmem,
1971         [SLAVE_SERVICE_MNOC] = &slv_srvc_mnoc,
1972         [SLAVE_MMAGIC_CFG] = &slv_mmagic_cfg,
1973         [SLAVE_CPR_CFG] = &slv_cpr_cfg,
1974         [SLAVE_MISC_CFG] = &slv_misc_cfg,
1975         [SLAVE_VENUS_THROTTLE_CFG] = &slv_venus_throttle_cfg,
1976         [SLAVE_VENUS_CFG] = &slv_venus_cfg,
1977         [SLAVE_VMEM_CFG] = &slv_vmem_cfg,
1978         [SLAVE_DSA_CFG] = &slv_dsa_cfg,
1979         [SLAVE_MMSS_CLK_CFG] = &slv_mnoc_clocks_cfg,
1980         [SLAVE_DSA_MPU_CFG] = &slv_dsa_mpu_cfg,
1981         [SLAVE_MNOC_MPU_CFG] = &slv_mnoc_mpu_cfg,
1982         [SLAVE_DISPLAY_CFG] = &slv_display_cfg,
1983         [SLAVE_DISPLAY_THROTTLE_CFG] = &slv_display_throttle_cfg,
1984         [SLAVE_CAMERA_CFG] = &slv_camera_cfg,
1985         [SLAVE_CAMERA_THROTTLE_CFG] = &slv_camera_throttle_cfg,
1986         [SLAVE_GRAPHICS_3D_CFG] = &slv_oxili_cfg,
1987         [SLAVE_SMMU_MDP_CFG] = &slv_smmu_mdp_cfg,
1988         [SLAVE_SMMU_ROT_CFG] = &slv_smmu_rot_cfg,
1989         [SLAVE_SMMU_VENUS_CFG] = &slv_smmu_venus_cfg,
1990         [SLAVE_SMMU_CPP_CFG] = &slv_smmu_cpp_cfg,
1991         [SLAVE_SMMU_JPEG_CFG] = &slv_smmu_jpeg_cfg,
1992         [SLAVE_SMMU_VFE_CFG] = &slv_smmu_vfe_cfg
1993 };
1994
1995 static const struct regmap_config msm8996_mnoc_regmap_config = {
1996         .reg_bits       = 32,
1997         .reg_stride     = 4,
1998         .val_bits       = 32,
1999         .max_register   = 0x1c000,
2000         .fast_io        = true
2001 };
2002
2003 static const struct qcom_icc_desc msm8996_mnoc = {
2004         .type = QCOM_ICC_NOC,
2005         .nodes = mnoc_nodes,
2006         .num_nodes = ARRAY_SIZE(mnoc_nodes),
2007         .bus_clk_desc = &mmaxi_0_clk,
2008         .intf_clocks = mm_intf_clocks,
2009         .num_intf_clocks = ARRAY_SIZE(mm_intf_clocks),
2010         .regmap_cfg = &msm8996_mnoc_regmap_config,
2011         .ab_coeff = 154,
2012 };
2013
2014 static struct qcom_icc_node * const pnoc_nodes[] = {
2015         [MASTER_SNOC_PNOC] = &mas_snoc_pnoc,
2016         [MASTER_SDCC_1] = &mas_sdcc_1,
2017         [MASTER_SDCC_2] = &mas_sdcc_2,
2018         [MASTER_SDCC_4] = &mas_sdcc_4,
2019         [MASTER_USB_HS] = &mas_usb_hs,
2020         [MASTER_BLSP_1] = &mas_blsp_1,
2021         [MASTER_BLSP_2] = &mas_blsp_2,
2022         [MASTER_TSIF] = &mas_tsif,
2023         [SLAVE_PNOC_A1NOC] = &slv_pnoc_a1noc,
2024         [SLAVE_USB_HS] = &slv_usb_hs,
2025         [SLAVE_SDCC_2] = &slv_sdcc_2,
2026         [SLAVE_SDCC_4] = &slv_sdcc_4,
2027         [SLAVE_TSIF] = &slv_tsif,
2028         [SLAVE_BLSP_2] = &slv_blsp_2,
2029         [SLAVE_SDCC_1] = &slv_sdcc_1,
2030         [SLAVE_BLSP_1] = &slv_blsp_1,
2031         [SLAVE_PDM] = &slv_pdm,
2032         [SLAVE_AHB2PHY] = &slv_ahb2phy
2033 };
2034
2035 static const struct regmap_config msm8996_pnoc_regmap_config = {
2036         .reg_bits       = 32,
2037         .reg_stride     = 4,
2038         .val_bits       = 32,
2039         .max_register   = 0x3000,
2040         .fast_io        = true
2041 };
2042
2043 static const struct qcom_icc_desc msm8996_pnoc = {
2044         .type = QCOM_ICC_NOC,
2045         .nodes = pnoc_nodes,
2046         .num_nodes = ARRAY_SIZE(pnoc_nodes),
2047         .bus_clk_desc = &bus_0_clk,
2048         .regmap_cfg = &msm8996_pnoc_regmap_config
2049 };
2050
2051 static struct qcom_icc_node * const snoc_nodes[] = {
2052         [MASTER_HMSS] = &mas_hmss,
2053         [MASTER_QDSS_BAM] = &mas_qdss_bam,
2054         [MASTER_SNOC_CFG] = &mas_snoc_cfg,
2055         [MASTER_BIMC_SNOC_0] = &mas_bimc_snoc_0,
2056         [MASTER_BIMC_SNOC_1] = &mas_bimc_snoc_1,
2057         [MASTER_A0NOC_SNOC] = &mas_a0noc_snoc,
2058         [MASTER_A1NOC_SNOC] = &mas_a1noc_snoc,
2059         [MASTER_A2NOC_SNOC] = &mas_a2noc_snoc,
2060         [MASTER_QDSS_ETR] = &mas_qdss_etr,
2061         [SLAVE_A0NOC_SNOC] = &slv_a0noc_snoc,
2062         [SLAVE_A1NOC_SNOC] = &slv_a1noc_snoc,
2063         [SLAVE_A2NOC_SNOC] = &slv_a2noc_snoc,
2064         [SLAVE_HMSS] = &slv_hmss,
2065         [SLAVE_LPASS] = &slv_lpass,
2066         [SLAVE_USB3] = &slv_usb3,
2067         [SLAVE_SNOC_BIMC] = &slv_snoc_bimc,
2068         [SLAVE_SNOC_CNOC] = &slv_snoc_cnoc,
2069         [SLAVE_IMEM] = &slv_imem,
2070         [SLAVE_PIMEM] = &slv_pimem,
2071         [SLAVE_SNOC_VMEM] = &slv_snoc_vmem,
2072         [SLAVE_SNOC_PNOC] = &slv_snoc_pnoc,
2073         [SLAVE_QDSS_STM] = &slv_qdss_stm,
2074         [SLAVE_PCIE_0] = &slv_pcie_0,
2075         [SLAVE_PCIE_1] = &slv_pcie_1,
2076         [SLAVE_PCIE_2] = &slv_pcie_2,
2077         [SLAVE_SERVICE_SNOC] = &slv_srvc_snoc
2078 };
2079
2080 static const struct regmap_config msm8996_snoc_regmap_config = {
2081         .reg_bits       = 32,
2082         .reg_stride     = 4,
2083         .val_bits       = 32,
2084         .max_register   = 0x20000,
2085         .fast_io        = true
2086 };
2087
2088 static const struct qcom_icc_desc msm8996_snoc = {
2089         .type = QCOM_ICC_NOC,
2090         .nodes = snoc_nodes,
2091         .num_nodes = ARRAY_SIZE(snoc_nodes),
2092         .bus_clk_desc = &bus_1_clk,
2093         .regmap_cfg = &msm8996_snoc_regmap_config
2094 };
2095
2096 static const struct of_device_id qnoc_of_match[] = {
2097         { .compatible = "qcom,msm8996-a0noc", .data = &msm8996_a0noc},
2098         { .compatible = "qcom,msm8996-a1noc", .data = &msm8996_a1noc},
2099         { .compatible = "qcom,msm8996-a2noc", .data = &msm8996_a2noc},
2100         { .compatible = "qcom,msm8996-bimc", .data = &msm8996_bimc},
2101         { .compatible = "qcom,msm8996-cnoc", .data = &msm8996_cnoc},
2102         { .compatible = "qcom,msm8996-mnoc", .data = &msm8996_mnoc},
2103         { .compatible = "qcom,msm8996-pnoc", .data = &msm8996_pnoc},
2104         { .compatible = "qcom,msm8996-snoc", .data = &msm8996_snoc},
2105         { }
2106 };
2107 MODULE_DEVICE_TABLE(of, qnoc_of_match);
2108
2109 static struct platform_driver qnoc_driver = {
2110         .probe = qnoc_probe,
2111         .remove = qnoc_remove,
2112         .driver = {
2113                 .name = "qnoc-msm8996",
2114                 .of_match_table = qnoc_of_match,
2115                 .sync_state = icc_sync_state,
2116         }
2117 };
2118 static int __init qnoc_driver_init(void)
2119 {
2120         return platform_driver_register(&qnoc_driver);
2121 }
2122 core_initcall(qnoc_driver_init);
2123
2124 static void __exit qnoc_driver_exit(void)
2125 {
2126         platform_driver_unregister(&qnoc_driver);
2127 }
2128 module_exit(qnoc_driver_exit);
2129
2130 MODULE_AUTHOR("Yassine Oudjana <y.oudjana@protonmail.com>");
2131 MODULE_DESCRIPTION("Qualcomm MSM8996 NoC driver");
2132 MODULE_LICENSE("GPL v2");