1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
4 *
5 */
6
7#include <linux/device.h>
8#include <linux/interconnect.h>
9#include <linux/interconnect-provider.h>
10#include <linux/mod_devicetable.h>
11#include <linux/module.h>
12#include <linux/platform_device.h>
13#include <dt-bindings/interconnect/qcom,qdu1000-rpmh.h>
14
15#include "bcm-voter.h"
16#include "icc-common.h"
17#include "icc-rpmh.h"
18#include "qdu1000.h"
19
20static struct qcom_icc_node qup0_core_master = {
21 .name = "qup0_core_master",
22 .id = QDU1000_MASTER_QUP_CORE_0,
23 .channels = 1,
24 .buswidth = 4,
25 .num_links = 1,
26 .links = { QDU1000_SLAVE_QUP_CORE_0 },
27};
28
29static struct qcom_icc_node qup1_core_master = {
30 .name = "qup1_core_master",
31 .id = QDU1000_MASTER_QUP_CORE_1,
32 .channels = 1,
33 .buswidth = 4,
34 .num_links = 1,
35 .links = { QDU1000_SLAVE_QUP_CORE_1 },
36};
37
38static struct qcom_icc_node alm_sys_tcu = {
39 .name = "alm_sys_tcu",
40 .id = QDU1000_MASTER_SYS_TCU,
41 .channels = 1,
42 .buswidth = 8,
43 .num_links = 2,
44 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC },
45};
46
47static struct qcom_icc_node chm_apps = {
48 .name = "chm_apps",
49 .id = QDU1000_MASTER_APPSS_PROC,
50 .channels = 1,
51 .buswidth = 16,
52 .num_links = 4,
53 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC,
54 QDU1000_SLAVE_GEMNOC_MODEM_CNOC, QDU1000_SLAVE_MEM_NOC_PCIE_SNOC
55 },
56};
57
58static struct qcom_icc_node qnm_ecpri_dma = {
59 .name = "qnm_ecpri_dma",
60 .id = QDU1000_MASTER_GEMNOC_ECPRI_DMA,
61 .channels = 2,
62 .buswidth = 32,
63 .num_links = 2,
64 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC },
65};
66
67static struct qcom_icc_node qnm_fec_2_gemnoc = {
68 .name = "qnm_fec_2_gemnoc",
69 .id = QDU1000_MASTER_FEC_2_GEMNOC,
70 .channels = 2,
71 .buswidth = 32,
72 .num_links = 2,
73 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC },
74};
75
76static struct qcom_icc_node qnm_pcie = {
77 .name = "qnm_pcie",
78 .id = QDU1000_MASTER_ANOC_PCIE_GEM_NOC,
79 .channels = 1,
80 .buswidth = 64,
81 .num_links = 3,
82 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC,
83 QDU1000_SLAVE_GEMNOC_MODEM_CNOC
84 },
85};
86
87static struct qcom_icc_node qnm_snoc_gc = {
88 .name = "qnm_snoc_gc",
89 .id = QDU1000_MASTER_SNOC_GC_MEM_NOC,
90 .channels = 1,
91 .buswidth = 8,
92 .num_links = 1,
93 .links = { QDU1000_SLAVE_LLCC },
94};
95
96static struct qcom_icc_node qnm_snoc_sf = {
97 .name = "qnm_snoc_sf",
98 .id = QDU1000_MASTER_SNOC_SF_MEM_NOC,
99 .channels = 1,
100 .buswidth = 16,
101 .num_links = 4,
102 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC,
103 QDU1000_SLAVE_GEMNOC_MODEM_CNOC, QDU1000_SLAVE_MEM_NOC_PCIE_SNOC
104 },
105};
106
107static struct qcom_icc_node qxm_mdsp = {
108 .name = "qxm_mdsp",
109 .id = QDU1000_MASTER_MSS_PROC,
110 .channels = 1,
111 .buswidth = 16,
112 .num_links = 3,
113 .links = { QDU1000_SLAVE_GEM_NOC_CNOC, QDU1000_SLAVE_LLCC,
114 QDU1000_SLAVE_MEM_NOC_PCIE_SNOC
115 },
116};
117
118static struct qcom_icc_node llcc_mc = {
119 .name = "llcc_mc",
120 .id = QDU1000_MASTER_LLCC,
121 .channels = 8,
122 .buswidth = 4,
123 .num_links = 1,
124 .links = { QDU1000_SLAVE_EBI1 },
125};
126
127static struct qcom_icc_node qhm_gic = {
128 .name = "qhm_gic",
129 .id = QDU1000_MASTER_GIC_AHB,
130 .channels = 1,
131 .buswidth = 4,
132 .num_links = 1,
133 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_SF },
134};
135
136static struct qcom_icc_node qhm_qdss_bam = {
137 .name = "qhm_qdss_bam",
138 .id = QDU1000_MASTER_QDSS_BAM,
139 .channels = 1,
140 .buswidth = 4,
141 .num_links = 1,
142 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_SF },
143};
144
145static struct qcom_icc_node qhm_qpic = {
146 .name = "qhm_qpic",
147 .id = QDU1000_MASTER_QPIC,
148 .channels = 1,
149 .buswidth = 4,
150 .num_links = 1,
151 .links = { QDU1000_SLAVE_A1NOC_SNOC },
152};
153
154static struct qcom_icc_node qhm_qspi = {
155 .name = "qhm_qspi",
156 .id = QDU1000_MASTER_QSPI_0,
157 .channels = 1,
158 .buswidth = 4,
159 .num_links = 1,
160 .links = { QDU1000_SLAVE_A1NOC_SNOC },
161};
162
163static struct qcom_icc_node qhm_qup0 = {
164 .name = "qhm_qup0",
165 .id = QDU1000_MASTER_QUP_0,
166 .channels = 1,
167 .buswidth = 4,
168 .num_links = 1,
169 .links = { QDU1000_SLAVE_A1NOC_SNOC },
170};
171
172static struct qcom_icc_node qhm_qup1 = {
173 .name = "qhm_qup1",
174 .id = QDU1000_MASTER_QUP_1,
175 .channels = 1,
176 .buswidth = 4,
177 .num_links = 1,
178 .links = { QDU1000_SLAVE_A1NOC_SNOC },
179};
180
181static struct qcom_icc_node qhm_system_noc_cfg = {
182 .name = "qhm_system_noc_cfg",
183 .id = QDU1000_MASTER_SNOC_CFG,
184 .channels = 1,
185 .buswidth = 4,
186 .num_links = 1,
187 .links = { QDU1000_SLAVE_SERVICE_SNOC },
188};
189
190static struct qcom_icc_node qnm_aggre_noc = {
191 .name = "qnm_aggre_noc",
192 .id = QDU1000_MASTER_ANOC_SNOC,
193 .channels = 1,
194 .buswidth = 8,
195 .num_links = 1,
196 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_SF },
197};
198
199static struct qcom_icc_node qnm_aggre_noc_gsi = {
200 .name = "qnm_aggre_noc_gsi",
201 .id = QDU1000_MASTER_ANOC_GSI,
202 .channels = 1,
203 .buswidth = 8,
204 .num_links = 1,
205 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_GC },
206};
207
208static struct qcom_icc_node qnm_gemnoc_cnoc = {
209 .name = "qnm_gemnoc_cnoc",
210 .id = QDU1000_MASTER_GEM_NOC_CNOC,
211 .channels = 1,
212 .buswidth = 16,
213 .num_links = 36,
214 .links = { QDU1000_SLAVE_AHB2PHY_SOUTH, QDU1000_SLAVE_AHB2PHY_NORTH,
215 QDU1000_SLAVE_AHB2PHY_EAST, QDU1000_SLAVE_AOSS,
216 QDU1000_SLAVE_CLK_CTL, QDU1000_SLAVE_RBCPR_CX_CFG,
217 QDU1000_SLAVE_RBCPR_MX_CFG, QDU1000_SLAVE_CRYPTO_0_CFG,
218 QDU1000_SLAVE_ECPRI_CFG, QDU1000_SLAVE_IMEM_CFG,
219 QDU1000_SLAVE_IPC_ROUTER_CFG, QDU1000_SLAVE_CNOC_MSS,
220 QDU1000_SLAVE_PCIE_CFG, QDU1000_SLAVE_PDM,
221 QDU1000_SLAVE_PIMEM_CFG, QDU1000_SLAVE_PRNG,
222 QDU1000_SLAVE_QDSS_CFG, QDU1000_SLAVE_QPIC,
223 QDU1000_SLAVE_QSPI_0, QDU1000_SLAVE_QUP_0,
224 QDU1000_SLAVE_QUP_1, QDU1000_SLAVE_SDCC_2,
225 QDU1000_SLAVE_SMBUS_CFG, QDU1000_SLAVE_SNOC_CFG,
226 QDU1000_SLAVE_TCSR, QDU1000_SLAVE_TLMM,
227 QDU1000_SLAVE_TME_CFG, QDU1000_SLAVE_TSC_CFG,
228 QDU1000_SLAVE_USB3_0, QDU1000_SLAVE_VSENSE_CTRL_CFG,
229 QDU1000_SLAVE_DDRSS_CFG, QDU1000_SLAVE_IMEM,
230 QDU1000_SLAVE_PIMEM, QDU1000_SLAVE_ETHERNET_SS,
231 QDU1000_SLAVE_QDSS_STM, QDU1000_SLAVE_TCU
232 },
233};
234
235static struct qcom_icc_node qnm_gemnoc_modem_slave = {
236 .name = "qnm_gemnoc_modem_slave",
237 .id = QDU1000_MASTER_GEMNOC_MODEM_CNOC,
238 .channels = 1,
239 .buswidth = 16,
240 .num_links = 1,
241 .links = { QDU1000_SLAVE_MODEM_OFFLINE },
242};
243
244static struct qcom_icc_node qnm_gemnoc_pcie = {
245 .name = "qnm_gemnoc_pcie",
246 .id = QDU1000_MASTER_GEM_NOC_PCIE_SNOC,
247 .channels = 1,
248 .buswidth = 16,
249 .num_links = 1,
250 .links = { QDU1000_SLAVE_PCIE_0 },
251};
252
253static struct qcom_icc_node qxm_crypto = {
254 .name = "qxm_crypto",
255 .id = QDU1000_MASTER_CRYPTO,
256 .channels = 1,
257 .buswidth = 8,
258 .num_links = 1,
259 .links = { QDU1000_SLAVE_A1NOC_SNOC },
260};
261
262static struct qcom_icc_node qxm_ecpri_gsi = {
263 .name = "qxm_ecpri_gsi",
264 .id = QDU1000_MASTER_ECPRI_GSI,
265 .channels = 1,
266 .buswidth = 8,
267 .num_links = 2,
268 .links = { QDU1000_SLAVE_ANOC_SNOC_GSI, QDU1000_SLAVE_PCIE_0 },
269};
270
271static struct qcom_icc_node qxm_pimem = {
272 .name = "qxm_pimem",
273 .id = QDU1000_MASTER_PIMEM,
274 .channels = 1,
275 .buswidth = 8,
276 .num_links = 1,
277 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_GC },
278};
279
280static struct qcom_icc_node xm_ecpri_dma = {
281 .name = "xm_ecpri_dma",
282 .id = QDU1000_MASTER_SNOC_ECPRI_DMA,
283 .channels = 2,
284 .buswidth = 32,
285 .num_links = 2,
286 .links = { QDU1000_SLAVE_ECPRI_GEMNOC, QDU1000_SLAVE_PCIE_0 },
287};
288
289static struct qcom_icc_node xm_gic = {
290 .name = "xm_gic",
291 .id = QDU1000_MASTER_GIC,
292 .channels = 1,
293 .buswidth = 8,
294 .num_links = 1,
295 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_GC },
296};
297
298static struct qcom_icc_node xm_pcie = {
299 .name = "xm_pcie",
300 .id = QDU1000_MASTER_PCIE,
301 .channels = 1,
302 .buswidth = 64,
303 .num_links = 1,
304 .links = { QDU1000_SLAVE_ANOC_PCIE_GEM_NOC },
305};
306
307static struct qcom_icc_node xm_qdss_etr0 = {
308 .name = "xm_qdss_etr0",
309 .id = QDU1000_MASTER_QDSS_ETR,
310 .channels = 1,
311 .buswidth = 8,
312 .num_links = 1,
313 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_SF },
314};
315
316static struct qcom_icc_node xm_qdss_etr1 = {
317 .name = "xm_qdss_etr1",
318 .id = QDU1000_MASTER_QDSS_ETR_1,
319 .channels = 1,
320 .buswidth = 8,
321 .num_links = 1,
322 .links = { QDU1000_SLAVE_SNOC_GEM_NOC_SF },
323};
324
325static struct qcom_icc_node xm_sdc = {
326 .name = "xm_sdc",
327 .id = QDU1000_MASTER_SDCC_1,
328 .channels = 1,
329 .buswidth = 8,
330 .num_links = 1,
331 .links = { QDU1000_SLAVE_A1NOC_SNOC },
332};
333
334static struct qcom_icc_node xm_usb3 = {
335 .name = "xm_usb3",
336 .id = QDU1000_MASTER_USB3,
337 .channels = 1,
338 .buswidth = 8,
339 .num_links = 1,
340 .links = { QDU1000_SLAVE_A1NOC_SNOC },
341};
342
343static struct qcom_icc_node qup0_core_slave = {
344 .name = "qup0_core_slave",
345 .id = QDU1000_SLAVE_QUP_CORE_0,
346 .channels = 1,
347 .buswidth = 4,
348 .num_links = 0,
349};
350
351static struct qcom_icc_node qup1_core_slave = {
352 .name = "qup1_core_slave",
353 .id = QDU1000_SLAVE_QUP_CORE_1,
354 .channels = 1,
355 .buswidth = 4,
356 .num_links = 0,
357};
358
359static struct qcom_icc_node qns_gem_noc_cnoc = {
360 .name = "qns_gem_noc_cnoc",
361 .id = QDU1000_SLAVE_GEM_NOC_CNOC,
362 .channels = 1,
363 .buswidth = 16,
364 .num_links = 1,
365 .links = { QDU1000_MASTER_GEM_NOC_CNOC },
366};
367
368static struct qcom_icc_node qns_llcc = {
369 .name = "qns_llcc",
370 .id = QDU1000_SLAVE_LLCC,
371 .channels = 8,
372 .buswidth = 16,
373 .num_links = 1,
374 .links = { QDU1000_MASTER_LLCC },
375};
376
377static struct qcom_icc_node qns_modem_slave = {
378 .name = "qns_modem_slave",
379 .id = QDU1000_SLAVE_GEMNOC_MODEM_CNOC,
380 .channels = 1,
381 .buswidth = 16,
382 .num_links = 1,
383 .links = { QDU1000_MASTER_GEMNOC_MODEM_CNOC },
384};
385
386static struct qcom_icc_node qns_pcie = {
387 .name = "qns_pcie",
388 .id = QDU1000_SLAVE_MEM_NOC_PCIE_SNOC,
389 .channels = 1,
390 .buswidth = 16,
391 .num_links = 1,
392 .links = { QDU1000_MASTER_GEM_NOC_PCIE_SNOC },
393};
394
395static struct qcom_icc_node ebi = {
396 .name = "ebi",
397 .id = QDU1000_SLAVE_EBI1,
398 .channels = 8,
399 .buswidth = 4,
400 .num_links = 0,
401};
402
403static struct qcom_icc_node qhs_ahb2phy0_south = {
404 .name = "qhs_ahb2phy0_south",
405 .id = QDU1000_SLAVE_AHB2PHY_SOUTH,
406 .channels = 1,
407 .buswidth = 4,
408 .num_links = 0,
409};
410
411static struct qcom_icc_node qhs_ahb2phy1_north = {
412 .name = "qhs_ahb2phy1_north",
413 .id = QDU1000_SLAVE_AHB2PHY_NORTH,
414 .channels = 1,
415 .buswidth = 4,
416 .num_links = 0,
417};
418
419static struct qcom_icc_node qhs_ahb2phy2_east = {
420 .name = "qhs_ahb2phy2_east",
421 .id = QDU1000_SLAVE_AHB2PHY_EAST,
422 .channels = 1,
423 .buswidth = 4,
424 .num_links = 0,
425};
426
427static struct qcom_icc_node qhs_aoss = {
428 .name = "qhs_aoss",
429 .id = QDU1000_SLAVE_AOSS,
430 .channels = 1,
431 .buswidth = 4,
432 .num_links = 0,
433};
434
435static struct qcom_icc_node qhs_clk_ctl = {
436 .name = "qhs_clk_ctl",
437 .id = QDU1000_SLAVE_CLK_CTL,
438 .channels = 1,
439 .buswidth = 4,
440 .num_links = 0,
441};
442
443static struct qcom_icc_node qhs_cpr_cx = {
444 .name = "qhs_cpr_cx",
445 .id = QDU1000_SLAVE_RBCPR_CX_CFG,
446 .channels = 1,
447 .buswidth = 4,
448 .num_links = 0,
449};
450
451static struct qcom_icc_node qhs_cpr_mx = {
452 .name = "qhs_cpr_mx",
453 .id = QDU1000_SLAVE_RBCPR_MX_CFG,
454 .channels = 1,
455 .buswidth = 4,
456 .num_links = 0,
457};
458
459static struct qcom_icc_node qhs_crypto_cfg = {
460 .name = "qhs_crypto_cfg",
461 .id = QDU1000_SLAVE_CRYPTO_0_CFG,
462 .channels = 1,
463 .buswidth = 4,
464 .num_links = 0,
465};
466
467static struct qcom_icc_node qhs_ecpri_cfg = {
468 .name = "qhs_ecpri_cfg",
469 .id = QDU1000_SLAVE_ECPRI_CFG,
470 .channels = 1,
471 .buswidth = 4,
472 .num_links = 0,
473};
474
475static struct qcom_icc_node qhs_imem_cfg = {
476 .name = "qhs_imem_cfg",
477 .id = QDU1000_SLAVE_IMEM_CFG,
478 .channels = 1,
479 .buswidth = 4,
480 .num_links = 0,
481};
482
483static struct qcom_icc_node qhs_ipc_router = {
484 .name = "qhs_ipc_router",
485 .id = QDU1000_SLAVE_IPC_ROUTER_CFG,
486 .channels = 1,
487 .buswidth = 4,
488 .num_links = 0,
489};
490
491static struct qcom_icc_node qhs_mss_cfg = {
492 .name = "qhs_mss_cfg",
493 .id = QDU1000_SLAVE_CNOC_MSS,
494 .channels = 1,
495 .buswidth = 4,
496 .num_links = 0,
497};
498
499static struct qcom_icc_node qhs_pcie_cfg = {
500 .name = "qhs_pcie_cfg",
501 .id = QDU1000_SLAVE_PCIE_CFG,
502 .channels = 1,
503 .buswidth = 4,
504 .num_links = 0,
505};
506
507static struct qcom_icc_node qhs_pdm = {
508 .name = "qhs_pdm",
509 .id = QDU1000_SLAVE_PDM,
510 .channels = 1,
511 .buswidth = 4,
512 .num_links = 0,
513};
514
515static struct qcom_icc_node qhs_pimem_cfg = {
516 .name = "qhs_pimem_cfg",
517 .id = QDU1000_SLAVE_PIMEM_CFG,
518 .channels = 1,
519 .buswidth = 4,
520 .num_links = 0,
521};
522
523static struct qcom_icc_node qhs_prng = {
524 .name = "qhs_prng",
525 .id = QDU1000_SLAVE_PRNG,
526 .channels = 1,
527 .buswidth = 4,
528 .num_links = 0,
529};
530
531static struct qcom_icc_node qhs_qdss_cfg = {
532 .name = "qhs_qdss_cfg",
533 .id = QDU1000_SLAVE_QDSS_CFG,
534 .channels = 1,
535 .buswidth = 4,
536 .num_links = 0,
537};
538
539static struct qcom_icc_node qhs_qpic = {
540 .name = "qhs_qpic",
541 .id = QDU1000_SLAVE_QPIC,
542 .channels = 1,
543 .buswidth = 4,
544 .num_links = 0,
545};
546
547static struct qcom_icc_node qhs_qspi = {
548 .name = "qhs_qspi",
549 .id = QDU1000_SLAVE_QSPI_0,
550 .channels = 1,
551 .buswidth = 4,
552 .num_links = 0,
553};
554
555static struct qcom_icc_node qhs_qup0 = {
556 .name = "qhs_qup0",
557 .id = QDU1000_SLAVE_QUP_0,
558 .channels = 1,
559 .buswidth = 4,
560 .num_links = 0,
561};
562
563static struct qcom_icc_node qhs_qup1 = {
564 .name = "qhs_qup1",
565 .id = QDU1000_SLAVE_QUP_1,
566 .channels = 1,
567 .buswidth = 4,
568 .num_links = 0,
569};
570
571static struct qcom_icc_node qhs_sdc2 = {
572 .name = "qhs_sdc2",
573 .id = QDU1000_SLAVE_SDCC_2,
574 .channels = 1,
575 .buswidth = 4,
576 .num_links = 0,
577};
578
579static struct qcom_icc_node qhs_smbus_cfg = {
580 .name = "qhs_smbus_cfg",
581 .id = QDU1000_SLAVE_SMBUS_CFG,
582 .channels = 1,
583 .buswidth = 4,
584 .num_links = 0,
585};
586
587static struct qcom_icc_node qhs_system_noc_cfg = {
588 .name = "qhs_system_noc_cfg",
589 .id = QDU1000_SLAVE_SNOC_CFG,
590 .channels = 1,
591 .buswidth = 4,
592 .num_links = 1,
593 .links = { QDU1000_MASTER_SNOC_CFG },
594};
595
596static struct qcom_icc_node qhs_tcsr = {
597 .name = "qhs_tcsr",
598 .id = QDU1000_SLAVE_TCSR,
599 .channels = 1,
600 .buswidth = 4,
601 .num_links = 0,
602};
603
604static struct qcom_icc_node qhs_tlmm = {
605 .name = "qhs_tlmm",
606 .id = QDU1000_SLAVE_TLMM,
607 .channels = 1,
608 .buswidth = 4,
609 .num_links = 0,
610};
611
612static struct qcom_icc_node qhs_tme_cfg = {
613 .name = "qhs_tme_cfg",
614 .id = QDU1000_SLAVE_TME_CFG,
615 .channels = 1,
616 .buswidth = 4,
617 .num_links = 0,
618};
619
620static struct qcom_icc_node qhs_tsc_cfg = {
621 .name = "qhs_tsc_cfg",
622 .id = QDU1000_SLAVE_TSC_CFG,
623 .channels = 1,
624 .buswidth = 4,
625 .num_links = 0,
626};
627
628static struct qcom_icc_node qhs_usb3 = {
629 .name = "qhs_usb3",
630 .id = QDU1000_SLAVE_USB3_0,
631 .channels = 1,
632 .buswidth = 4,
633 .num_links = 0,
634};
635
636static struct qcom_icc_node qhs_vsense_ctrl_cfg = {
637 .name = "qhs_vsense_ctrl_cfg",
638 .id = QDU1000_SLAVE_VSENSE_CTRL_CFG,
639 .channels = 1,
640 .buswidth = 4,
641 .num_links = 0,
642};
643
644static struct qcom_icc_node qns_a1noc_snoc = {
645 .name = "qns_a1noc_snoc",
646 .id = QDU1000_SLAVE_A1NOC_SNOC,
647 .channels = 1,
648 .buswidth = 8,
649 .num_links = 1,
650 .links = { QDU1000_MASTER_ANOC_SNOC },
651};
652
653static struct qcom_icc_node qns_anoc_snoc_gsi = {
654 .name = "qns_anoc_snoc_gsi",
655 .id = QDU1000_SLAVE_ANOC_SNOC_GSI,
656 .channels = 1,
657 .buswidth = 8,
658 .num_links = 1,
659 .links = { QDU1000_MASTER_ANOC_GSI },
660};
661
662static struct qcom_icc_node qns_ddrss_cfg = {
663 .name = "qns_ddrss_cfg",
664 .id = QDU1000_SLAVE_DDRSS_CFG,
665 .channels = 1,
666 .buswidth = 4,
667 .num_links = 0,
668};
669
670static struct qcom_icc_node qns_ecpri_gemnoc = {
671 .name = "qns_ecpri_gemnoc",
672 .id = QDU1000_SLAVE_ECPRI_GEMNOC,
673 .channels = 2,
674 .buswidth = 32,
675 .num_links = 1,
676 .links = { QDU1000_MASTER_GEMNOC_ECPRI_DMA },
677};
678
679static struct qcom_icc_node qns_gemnoc_gc = {
680 .name = "qns_gemnoc_gc",
681 .id = QDU1000_SLAVE_SNOC_GEM_NOC_GC,
682 .channels = 1,
683 .buswidth = 8,
684 .num_links = 1,
685 .links = { QDU1000_MASTER_SNOC_GC_MEM_NOC },
686};
687
688static struct qcom_icc_node qns_gemnoc_sf = {
689 .name = "qns_gemnoc_sf",
690 .id = QDU1000_SLAVE_SNOC_GEM_NOC_SF,
691 .channels = 1,
692 .buswidth = 16,
693 .num_links = 1,
694 .links = { QDU1000_MASTER_SNOC_SF_MEM_NOC },
695};
696
697static struct qcom_icc_node qns_modem = {
698 .name = "qns_modem",
699 .id = QDU1000_SLAVE_MODEM_OFFLINE,
700 .channels = 1,
701 .buswidth = 32,
702 .num_links = 0,
703};
704
705static struct qcom_icc_node qns_pcie_gemnoc = {
706 .name = "qns_pcie_gemnoc",
707 .id = QDU1000_SLAVE_ANOC_PCIE_GEM_NOC,
708 .channels = 1,
709 .buswidth = 64,
710 .num_links = 1,
711 .links = { QDU1000_MASTER_ANOC_PCIE_GEM_NOC },
712};
713
714static struct qcom_icc_node qxs_imem = {
715 .name = "qxs_imem",
716 .id = QDU1000_SLAVE_IMEM,
717 .channels = 1,
718 .buswidth = 8,
719 .num_links = 0,
720};
721
722static struct qcom_icc_node qxs_pimem = {
723 .name = "qxs_pimem",
724 .id = QDU1000_SLAVE_PIMEM,
725 .channels = 1,
726 .buswidth = 8,
727 .num_links = 0,
728};
729
730static struct qcom_icc_node srvc_system_noc = {
731 .name = "srvc_system_noc",
732 .id = QDU1000_SLAVE_SERVICE_SNOC,
733 .channels = 1,
734 .buswidth = 4,
735 .num_links = 0,
736};
737
738static struct qcom_icc_node xs_ethernet_ss = {
739 .name = "xs_ethernet_ss",
740 .id = QDU1000_SLAVE_ETHERNET_SS,
741 .channels = 1,
742 .buswidth = 32,
743 .num_links = 0,
744};
745
746static struct qcom_icc_node xs_pcie = {
747 .name = "xs_pcie",
748 .id = QDU1000_SLAVE_PCIE_0,
749 .channels = 1,
750 .buswidth = 64,
751 .num_links = 0,
752};
753
754static struct qcom_icc_node xs_qdss_stm = {
755 .name = "xs_qdss_stm",
756 .id = QDU1000_SLAVE_QDSS_STM,
757 .channels = 1,
758 .buswidth = 4,
759 .num_links = 0,
760};
761
762static struct qcom_icc_node xs_sys_tcu_cfg = {
763 .name = "xs_sys_tcu_cfg",
764 .id = QDU1000_SLAVE_TCU,
765 .channels = 1,
766 .buswidth = 8,
767 .num_links = 0,
768};
769
770static struct qcom_icc_bcm bcm_acv = {
771 .name = "ACV",
772 .enable_mask = BIT(3),
773 .num_nodes = 1,
774 .nodes = { &ebi },
775};
776
777static struct qcom_icc_bcm bcm_ce0 = {
778 .name = "CE0",
779 .num_nodes = 1,
780 .nodes = { &qxm_crypto },
781};
782
783static struct qcom_icc_bcm bcm_cn0 = {
784 .name = "CN0",
785 .num_nodes = 44,
786 .nodes = { &qhm_qpic, &qhm_qspi,
787 &qnm_gemnoc_cnoc, &qnm_gemnoc_modem_slave,
788 &qnm_gemnoc_pcie, &xm_sdc,
789 &xm_usb3, &qhs_ahb2phy0_south,
790 &qhs_ahb2phy1_north, &qhs_ahb2phy2_east,
791 &qhs_aoss, &qhs_clk_ctl,
792 &qhs_cpr_cx, &qhs_cpr_mx,
793 &qhs_crypto_cfg, &qhs_ecpri_cfg,
794 &qhs_imem_cfg, &qhs_ipc_router,
795 &qhs_mss_cfg, &qhs_pcie_cfg,
796 &qhs_pdm, &qhs_pimem_cfg,
797 &qhs_prng, &qhs_qdss_cfg,
798 &qhs_qpic, &qhs_qspi,
799 &qhs_qup0, &qhs_qup1,
800 &qhs_sdc2, &qhs_smbus_cfg,
801 &qhs_system_noc_cfg, &qhs_tcsr,
802 &qhs_tlmm, &qhs_tme_cfg,
803 &qhs_tsc_cfg, &qhs_usb3,
804 &qhs_vsense_ctrl_cfg, &qns_ddrss_cfg,
805 &qns_modem, &qxs_imem,
806 &qxs_pimem, &xs_ethernet_ss,
807 &xs_qdss_stm, &xs_sys_tcu_cfg
808 },
809};
810
811static struct qcom_icc_bcm bcm_mc0 = {
812 .name = "MC0",
813 .num_nodes = 1,
814 .nodes = { &ebi },
815};
816
817static struct qcom_icc_bcm bcm_qup0 = {
818 .name = "QUP0",
819 .num_nodes = 2,
820 .nodes = { &qup0_core_slave, &qup1_core_slave },
821};
822
823static struct qcom_icc_bcm bcm_sh0 = {
824 .name = "SH0",
825 .num_nodes = 1,
826 .nodes = { &qns_llcc },
827};
828
829static struct qcom_icc_bcm bcm_sh1 = {
830 .name = "SH1",
831 .num_nodes = 11,
832 .nodes = { &alm_sys_tcu, &chm_apps,
833 &qnm_ecpri_dma, &qnm_fec_2_gemnoc,
834 &qnm_pcie, &qnm_snoc_gc,
835 &qnm_snoc_sf, &qxm_mdsp,
836 &qns_gem_noc_cnoc, &qns_modem_slave,
837 &qns_pcie
838 },
839};
840
841static struct qcom_icc_bcm bcm_sn0 = {
842 .name = "SN0",
843 .num_nodes = 1,
844 .nodes = { &qns_gemnoc_sf },
845};
846
847static struct qcom_icc_bcm bcm_sn1 = {
848 .name = "SN1",
849 .num_nodes = 6,
850 .nodes = { &qhm_gic, &qxm_pimem,
851 &xm_gic, &xm_qdss_etr0,
852 &xm_qdss_etr1, &qns_gemnoc_gc
853 },
854};
855
856static struct qcom_icc_bcm bcm_sn2 = {
857 .name = "SN2",
858 .num_nodes = 5,
859 .nodes = { &qnm_aggre_noc, &qxm_ecpri_gsi,
860 &xm_ecpri_dma, &qns_anoc_snoc_gsi,
861 &qns_ecpri_gemnoc
862 },
863};
864
865static struct qcom_icc_bcm bcm_sn7 = {
866 .name = "SN7",
867 .num_nodes = 2,
868 .nodes = { &qns_pcie_gemnoc, &xs_pcie },
869};
870
871static struct qcom_icc_bcm * const clk_virt_bcms[] = {
872 &bcm_qup0,
873};
874
875static struct qcom_icc_node * const clk_virt_nodes[] = {
876 [MASTER_QUP_CORE_0] = &qup0_core_master,
877 [MASTER_QUP_CORE_1] = &qup1_core_master,
878 [SLAVE_QUP_CORE_0] = &qup0_core_slave,
879 [SLAVE_QUP_CORE_1] = &qup1_core_slave,
880};
881
882static const struct qcom_icc_desc qdu1000_clk_virt = {
883 .nodes = clk_virt_nodes,
884 .num_nodes = ARRAY_SIZE(clk_virt_nodes),
885 .bcms = clk_virt_bcms,
886 .num_bcms = ARRAY_SIZE(clk_virt_bcms),
887};
888
889static struct qcom_icc_bcm * const gem_noc_bcms[] = {
890 &bcm_sh0,
891 &bcm_sh1,
892};
893
894static struct qcom_icc_node * const gem_noc_nodes[] = {
895 [MASTER_SYS_TCU] = &alm_sys_tcu,
896 [MASTER_APPSS_PROC] = &chm_apps,
897 [MASTER_GEMNOC_ECPRI_DMA] = &qnm_ecpri_dma,
898 [MASTER_FEC_2_GEMNOC] = &qnm_fec_2_gemnoc,
899 [MASTER_ANOC_PCIE_GEM_NOC] = &qnm_pcie,
900 [MASTER_SNOC_GC_MEM_NOC] = &qnm_snoc_gc,
901 [MASTER_SNOC_SF_MEM_NOC] = &qnm_snoc_sf,
902 [MASTER_MSS_PROC] = &qxm_mdsp,
903 [SLAVE_GEM_NOC_CNOC] = &qns_gem_noc_cnoc,
904 [SLAVE_LLCC] = &qns_llcc,
905 [SLAVE_GEMNOC_MODEM_CNOC] = &qns_modem_slave,
906 [SLAVE_MEM_NOC_PCIE_SNOC] = &qns_pcie,
907};
908
909static const struct qcom_icc_desc qdu1000_gem_noc = {
910 .nodes = gem_noc_nodes,
911 .num_nodes = ARRAY_SIZE(gem_noc_nodes),
912 .bcms = gem_noc_bcms,
913 .num_bcms = ARRAY_SIZE(gem_noc_bcms),
914};
915
916static struct qcom_icc_bcm * const mc_virt_bcms[] = {
917 &bcm_acv,
918 &bcm_mc0,
919};
920
921static struct qcom_icc_node * const mc_virt_nodes[] = {
922 [MASTER_LLCC] = &llcc_mc,
923 [SLAVE_EBI1] = &ebi,
924};
925
926static const struct qcom_icc_desc qdu1000_mc_virt = {
927 .nodes = mc_virt_nodes,
928 .num_nodes = ARRAY_SIZE(mc_virt_nodes),
929 .bcms = mc_virt_bcms,
930 .num_bcms = ARRAY_SIZE(mc_virt_bcms),
931};
932
933static struct qcom_icc_bcm * const system_noc_bcms[] = {
934 &bcm_ce0,
935 &bcm_cn0,
936 &bcm_sn0,
937 &bcm_sn1,
938 &bcm_sn2,
939 &bcm_sn7,
940};
941
942static struct qcom_icc_node * const system_noc_nodes[] = {
943 [MASTER_GIC_AHB] = &qhm_gic,
944 [MASTER_QDSS_BAM] = &qhm_qdss_bam,
945 [MASTER_QPIC] = &qhm_qpic,
946 [MASTER_QSPI_0] = &qhm_qspi,
947 [MASTER_QUP_0] = &qhm_qup0,
948 [MASTER_QUP_1] = &qhm_qup1,
949 [MASTER_SNOC_CFG] = &qhm_system_noc_cfg,
950 [MASTER_ANOC_SNOC] = &qnm_aggre_noc,
951 [MASTER_ANOC_GSI] = &qnm_aggre_noc_gsi,
952 [MASTER_GEM_NOC_CNOC] = &qnm_gemnoc_cnoc,
953 [MASTER_GEMNOC_MODEM_CNOC] = &qnm_gemnoc_modem_slave,
954 [MASTER_GEM_NOC_PCIE_SNOC] = &qnm_gemnoc_pcie,
955 [MASTER_CRYPTO] = &qxm_crypto,
956 [MASTER_ECPRI_GSI] = &qxm_ecpri_gsi,
957 [MASTER_PIMEM] = &qxm_pimem,
958 [MASTER_SNOC_ECPRI_DMA] = &xm_ecpri_dma,
959 [MASTER_GIC] = &xm_gic,
960 [MASTER_PCIE] = &xm_pcie,
961 [MASTER_QDSS_ETR] = &xm_qdss_etr0,
962 [MASTER_QDSS_ETR_1] = &xm_qdss_etr1,
963 [MASTER_SDCC_1] = &xm_sdc,
964 [MASTER_USB3] = &xm_usb3,
965 [SLAVE_AHB2PHY_SOUTH] = &qhs_ahb2phy0_south,
966 [SLAVE_AHB2PHY_NORTH] = &qhs_ahb2phy1_north,
967 [SLAVE_AHB2PHY_EAST] = &qhs_ahb2phy2_east,
968 [SLAVE_AOSS] = &qhs_aoss,
969 [SLAVE_CLK_CTL] = &qhs_clk_ctl,
970 [SLAVE_RBCPR_CX_CFG] = &qhs_cpr_cx,
971 [SLAVE_RBCPR_MX_CFG] = &qhs_cpr_mx,
972 [SLAVE_CRYPTO_0_CFG] = &qhs_crypto_cfg,
973 [SLAVE_ECPRI_CFG] = &qhs_ecpri_cfg,
974 [SLAVE_IMEM_CFG] = &qhs_imem_cfg,
975 [SLAVE_IPC_ROUTER_CFG] = &qhs_ipc_router,
976 [SLAVE_CNOC_MSS] = &qhs_mss_cfg,
977 [SLAVE_PCIE_CFG] = &qhs_pcie_cfg,
978 [SLAVE_PDM] = &qhs_pdm,
979 [SLAVE_PIMEM_CFG] = &qhs_pimem_cfg,
980 [SLAVE_PRNG] = &qhs_prng,
981 [SLAVE_QDSS_CFG] = &qhs_qdss_cfg,
982 [SLAVE_QPIC] = &qhs_qpic,
983 [SLAVE_QSPI_0] = &qhs_qspi,
984 [SLAVE_QUP_0] = &qhs_qup0,
985 [SLAVE_QUP_1] = &qhs_qup1,
986 [SLAVE_SDCC_2] = &qhs_sdc2,
987 [SLAVE_SMBUS_CFG] = &qhs_smbus_cfg,
988 [SLAVE_SNOC_CFG] = &qhs_system_noc_cfg,
989 [SLAVE_TCSR] = &qhs_tcsr,
990 [SLAVE_TLMM] = &qhs_tlmm,
991 [SLAVE_TME_CFG] = &qhs_tme_cfg,
992 [SLAVE_TSC_CFG] = &qhs_tsc_cfg,
993 [SLAVE_USB3_0] = &qhs_usb3,
994 [SLAVE_VSENSE_CTRL_CFG] = &qhs_vsense_ctrl_cfg,
995 [SLAVE_A1NOC_SNOC] = &qns_a1noc_snoc,
996 [SLAVE_ANOC_SNOC_GSI] = &qns_anoc_snoc_gsi,
997 [SLAVE_DDRSS_CFG] = &qns_ddrss_cfg,
998 [SLAVE_ECPRI_GEMNOC] = &qns_ecpri_gemnoc,
999 [SLAVE_SNOC_GEM_NOC_GC] = &qns_gemnoc_gc,
1000 [SLAVE_SNOC_GEM_NOC_SF] = &qns_gemnoc_sf,
1001 [SLAVE_MODEM_OFFLINE] = &qns_modem,
1002 [SLAVE_ANOC_PCIE_GEM_NOC] = &qns_pcie_gemnoc,
1003 [SLAVE_IMEM] = &qxs_imem,
1004 [SLAVE_PIMEM] = &qxs_pimem,
1005 [SLAVE_SERVICE_SNOC] = &srvc_system_noc,
1006 [SLAVE_ETHERNET_SS] = &xs_ethernet_ss,
1007 [SLAVE_PCIE_0] = &xs_pcie,
1008 [SLAVE_QDSS_STM] = &xs_qdss_stm,
1009 [SLAVE_TCU] = &xs_sys_tcu_cfg,
1010};
1011
1012static const struct qcom_icc_desc qdu1000_system_noc = {
1013 .nodes = system_noc_nodes,
1014 .num_nodes = ARRAY_SIZE(system_noc_nodes),
1015 .bcms = system_noc_bcms,
1016 .num_bcms = ARRAY_SIZE(system_noc_bcms),
1017};
1018
1019static int qnoc_probe(struct platform_device *pdev)
1020{
1021 int ret;
1022
1023 ret = qcom_icc_rpmh_probe(pdev);
1024 if (ret)
1025 dev_err(&pdev->dev, "failed to register ICC provider\n");
1026
1027 return ret;
1028}
1029
1030static const struct of_device_id qnoc_of_match[] = {
1031 { .compatible = "qcom,qdu1000-clk-virt",
1032 .data = &qdu1000_clk_virt
1033 },
1034 { .compatible = "qcom,qdu1000-gem-noc",
1035 .data = &qdu1000_gem_noc
1036 },
1037 { .compatible = "qcom,qdu1000-mc-virt",
1038 .data = &qdu1000_mc_virt
1039 },
1040 { .compatible = "qcom,qdu1000-system-noc",
1041 .data = &qdu1000_system_noc
1042 },
1043 { }
1044};
1045MODULE_DEVICE_TABLE(of, qnoc_of_match);
1046
1047static struct platform_driver qnoc_driver = {
1048 .probe = qnoc_probe,
1049 .remove_new = qcom_icc_rpmh_remove,
1050 .driver = {
1051 .name = "qnoc-qdu1000",
1052 .of_match_table = qnoc_of_match,
1053 },
1054};
1055
1056static int __init qnoc_driver_init(void)
1057{
1058 return platform_driver_register(&qnoc_driver);
1059}
1060core_initcall(qnoc_driver_init);
1061
1062static void __exit qnoc_driver_exit(void)
1063{
1064 platform_driver_unregister(&qnoc_driver);
1065}
1066module_exit(qnoc_driver_exit);
1067
1068MODULE_DESCRIPTION("QDU1000 NoC driver");
1069MODULE_LICENSE("GPL");
1070

source code of linux/drivers/interconnect/qcom/qdu1000.c