xref: /linux/drivers/interconnect/mediatek/mt8196.c (revision c17ee635fd3a482b2ad2bf5e269755c2eae5f25e)
1*ce69a970SAngeloGioacchino Del Regno // SPDX-License-Identifier: GPL-2.0
2*ce69a970SAngeloGioacchino Del Regno /*
3*ce69a970SAngeloGioacchino Del Regno  * Copyright (c) 2025 Collabora Ltd.
4*ce69a970SAngeloGioacchino Del Regno  *                    AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
5*ce69a970SAngeloGioacchino Del Regno  */
6*ce69a970SAngeloGioacchino Del Regno 
7*ce69a970SAngeloGioacchino Del Regno #include <linux/device.h>
8*ce69a970SAngeloGioacchino Del Regno #include <linux/interconnect.h>
9*ce69a970SAngeloGioacchino Del Regno #include <linux/interconnect-provider.h>
10*ce69a970SAngeloGioacchino Del Regno #include <linux/mod_devicetable.h>
11*ce69a970SAngeloGioacchino Del Regno #include <linux/module.h>
12*ce69a970SAngeloGioacchino Del Regno #include <linux/platform_device.h>
13*ce69a970SAngeloGioacchino Del Regno #include <dt-bindings/interconnect/mediatek,mt8196.h>
14*ce69a970SAngeloGioacchino Del Regno 
15*ce69a970SAngeloGioacchino Del Regno #include "icc-emi.h"
16*ce69a970SAngeloGioacchino Del Regno 
17*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node ddr_emi = {
18*ce69a970SAngeloGioacchino Del Regno 	.name = "ddr-emi",
19*ce69a970SAngeloGioacchino Del Regno 	.id = SLAVE_DDR_EMI,
20*ce69a970SAngeloGioacchino Del Regno 	.ep = 1,
21*ce69a970SAngeloGioacchino Del Regno };
22*ce69a970SAngeloGioacchino Del Regno 
23*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mcusys = {
24*ce69a970SAngeloGioacchino Del Regno 	.name = "mcusys",
25*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MCUSYS,
26*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
27*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
28*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
29*ce69a970SAngeloGioacchino Del Regno };
30*ce69a970SAngeloGioacchino Del Regno 
31*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mcu_port0 = {
32*ce69a970SAngeloGioacchino Del Regno 	.name = "mcu-port0",
33*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MCU_0,
34*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
35*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
36*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
37*ce69a970SAngeloGioacchino Del Regno };
38*ce69a970SAngeloGioacchino Del Regno 
39*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mcu_port1 = {
40*ce69a970SAngeloGioacchino Del Regno 	.name = "mcu-port1",
41*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MCU_1,
42*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
43*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
44*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
45*ce69a970SAngeloGioacchino Del Regno };
46*ce69a970SAngeloGioacchino Del Regno 
47*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mcu_port2 = {
48*ce69a970SAngeloGioacchino Del Regno 	.name = "mcu-port2",
49*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MCU_2,
50*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
51*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
52*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
53*ce69a970SAngeloGioacchino Del Regno };
54*ce69a970SAngeloGioacchino Del Regno 
55*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mcu_port3 = {
56*ce69a970SAngeloGioacchino Del Regno 	.name = "mcu-port3",
57*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MCU_3,
58*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
59*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
60*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
61*ce69a970SAngeloGioacchino Del Regno };
62*ce69a970SAngeloGioacchino Del Regno 
63*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mcu_port4 = {
64*ce69a970SAngeloGioacchino Del Regno 	.name = "mcu-port4",
65*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MCU_4,
66*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
67*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
68*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
69*ce69a970SAngeloGioacchino Del Regno };
70*ce69a970SAngeloGioacchino Del Regno 
71*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node gpu = {
72*ce69a970SAngeloGioacchino Del Regno 	.name = "gpu",
73*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_GPUSYS,
74*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
75*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
76*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
77*ce69a970SAngeloGioacchino Del Regno };
78*ce69a970SAngeloGioacchino Del Regno 
79*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mmsys = {
80*ce69a970SAngeloGioacchino Del Regno 	.name = "mmsys",
81*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MMSYS,
82*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
83*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
84*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
85*ce69a970SAngeloGioacchino Del Regno };
86*ce69a970SAngeloGioacchino Del Regno 
87*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_vpu = {
88*ce69a970SAngeloGioacchino Del Regno 	.name = "mm-vpu",
89*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MM_VPU,
90*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
91*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
92*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
93*ce69a970SAngeloGioacchino Del Regno };
94*ce69a970SAngeloGioacchino Del Regno 
95*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_disp = {
96*ce69a970SAngeloGioacchino Del Regno 	.name = "mm-disp",
97*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MM_DISP,
98*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
99*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
100*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
101*ce69a970SAngeloGioacchino Del Regno };
102*ce69a970SAngeloGioacchino Del Regno 
103*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_vdec = {
104*ce69a970SAngeloGioacchino Del Regno 	.name = "mm-vdec",
105*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MM_VDEC,
106*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
107*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
108*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
109*ce69a970SAngeloGioacchino Del Regno };
110*ce69a970SAngeloGioacchino Del Regno 
111*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_venc = {
112*ce69a970SAngeloGioacchino Del Regno 	.name = "mm-venc",
113*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MM_VENC,
114*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
115*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
116*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
117*ce69a970SAngeloGioacchino Del Regno };
118*ce69a970SAngeloGioacchino Del Regno 
119*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_cam = {
120*ce69a970SAngeloGioacchino Del Regno 	.name = "mm-cam",
121*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MM_CAM,
122*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
123*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
124*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
125*ce69a970SAngeloGioacchino Del Regno };
126*ce69a970SAngeloGioacchino Del Regno 
127*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_img = {
128*ce69a970SAngeloGioacchino Del Regno 	.name = "mm-img",
129*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MM_IMG,
130*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
131*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
132*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
133*ce69a970SAngeloGioacchino Del Regno };
134*ce69a970SAngeloGioacchino Del Regno 
135*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_mdp = {
136*ce69a970SAngeloGioacchino Del Regno 	.name = "mm-mdp",
137*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MM_MDP,
138*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
139*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
140*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_MMSYS }
141*ce69a970SAngeloGioacchino Del Regno };
142*ce69a970SAngeloGioacchino Del Regno 
143*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node vpusys = {
144*ce69a970SAngeloGioacchino Del Regno 	.name = "vpusys",
145*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_VPUSYS,
146*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
147*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
148*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
149*ce69a970SAngeloGioacchino Del Regno };
150*ce69a970SAngeloGioacchino Del Regno 
151*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node vpu_port0 = {
152*ce69a970SAngeloGioacchino Del Regno 	.name = "vpu-port0",
153*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_VPU_0,
154*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
155*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
156*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_VPUSYS }
157*ce69a970SAngeloGioacchino Del Regno };
158*ce69a970SAngeloGioacchino Del Regno 
159*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node vpu_port1 = {
160*ce69a970SAngeloGioacchino Del Regno 	.name = "vpu-port1",
161*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_VPU_1,
162*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
163*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
164*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_VPUSYS }
165*ce69a970SAngeloGioacchino Del Regno };
166*ce69a970SAngeloGioacchino Del Regno 
167*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mdlasys = {
168*ce69a970SAngeloGioacchino Del Regno 	.name = "mdlasys",
169*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MDLASYS,
170*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
171*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
172*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
173*ce69a970SAngeloGioacchino Del Regno };
174*ce69a970SAngeloGioacchino Del Regno 
175*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mdla_port0 = {
176*ce69a970SAngeloGioacchino Del Regno 	.name = "mdla-port0",
177*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_MDLA_0,
178*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
179*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
180*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_MDLASYS }
181*ce69a970SAngeloGioacchino Del Regno };
182*ce69a970SAngeloGioacchino Del Regno 
183*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node ufs = {
184*ce69a970SAngeloGioacchino Del Regno 	.name = "ufs",
185*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_UFS,
186*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
187*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
188*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
189*ce69a970SAngeloGioacchino Del Regno };
190*ce69a970SAngeloGioacchino Del Regno 
191*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node pcie = {
192*ce69a970SAngeloGioacchino Del Regno 	.name = "pcie",
193*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_PCIE,
194*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
195*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
196*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
197*ce69a970SAngeloGioacchino Del Regno };
198*ce69a970SAngeloGioacchino Del Regno 
199*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node usb = {
200*ce69a970SAngeloGioacchino Del Regno 	.name = "usb",
201*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_USB,
202*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
203*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
204*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
205*ce69a970SAngeloGioacchino Del Regno };
206*ce69a970SAngeloGioacchino Del Regno 
207*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node wifi = {
208*ce69a970SAngeloGioacchino Del Regno 	.name = "wifi",
209*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_WIFI,
210*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
211*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
212*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
213*ce69a970SAngeloGioacchino Del Regno };
214*ce69a970SAngeloGioacchino Del Regno 
215*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node bt = {
216*ce69a970SAngeloGioacchino Del Regno 	.name = "bt",
217*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_BT,
218*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
219*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
220*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
221*ce69a970SAngeloGioacchino Del Regno };
222*ce69a970SAngeloGioacchino Del Regno 
223*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node netsys = {
224*ce69a970SAngeloGioacchino Del Regno 	.name = "netsys",
225*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_NETSYS,
226*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
227*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
228*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
229*ce69a970SAngeloGioacchino Del Regno };
230*ce69a970SAngeloGioacchino Del Regno 
231*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node dbgif = {
232*ce69a970SAngeloGioacchino Del Regno 	.name = "dbgif",
233*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_DBGIF,
234*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
235*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
236*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_DDR_EMI }
237*ce69a970SAngeloGioacchino Del Regno };
238*ce69a970SAngeloGioacchino Del Regno 
239*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_ddr_emi = {
240*ce69a970SAngeloGioacchino Del Regno 	.name = "hrt-ddr-emi",
241*ce69a970SAngeloGioacchino Del Regno 	.id = SLAVE_HRT_DDR_EMI,
242*ce69a970SAngeloGioacchino Del Regno 	.ep = 2,
243*ce69a970SAngeloGioacchino Del Regno };
244*ce69a970SAngeloGioacchino Del Regno 
245*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mmsys = {
246*ce69a970SAngeloGioacchino Del Regno 	.name = "hrt-mmsys",
247*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MMSYS,
248*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
249*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
250*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_HRT_DDR_EMI }
251*ce69a970SAngeloGioacchino Del Regno };
252*ce69a970SAngeloGioacchino Del Regno 
253*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_disp = {
254*ce69a970SAngeloGioacchino Del Regno 	.name = "hrt-mm-disp",
255*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MM_DISP,
256*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
257*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
258*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_HRT_MMSYS }
259*ce69a970SAngeloGioacchino Del Regno };
260*ce69a970SAngeloGioacchino Del Regno 
261*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_vdec = {
262*ce69a970SAngeloGioacchino Del Regno 	.name = "hrt-mm-vdec",
263*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MM_VDEC,
264*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
265*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
266*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_HRT_MMSYS }
267*ce69a970SAngeloGioacchino Del Regno };
268*ce69a970SAngeloGioacchino Del Regno 
269*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_venc = {
270*ce69a970SAngeloGioacchino Del Regno 	.name = "hrt-mm-venc",
271*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MM_VENC,
272*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
273*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
274*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_HRT_MMSYS }
275*ce69a970SAngeloGioacchino Del Regno };
276*ce69a970SAngeloGioacchino Del Regno 
277*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_cam = {
278*ce69a970SAngeloGioacchino Del Regno 	.name = "hrt-mm-cam",
279*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MM_CAM,
280*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
281*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
282*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_HRT_MMSYS }
283*ce69a970SAngeloGioacchino Del Regno };
284*ce69a970SAngeloGioacchino Del Regno 
285*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_img = {
286*ce69a970SAngeloGioacchino Del Regno 	.name = "hrt-mm-img",
287*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MM_IMG,
288*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
289*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
290*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_HRT_MMSYS }
291*ce69a970SAngeloGioacchino Del Regno };
292*ce69a970SAngeloGioacchino Del Regno 
293*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_mdp = {
294*ce69a970SAngeloGioacchino Del Regno 	.name = "hrt-mm-mdp",
295*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_HRT_MM_MDP,
296*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
297*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
298*ce69a970SAngeloGioacchino Del Regno 	.links = { MASTER_HRT_MMSYS }
299*ce69a970SAngeloGioacchino Del Regno };
300*ce69a970SAngeloGioacchino Del Regno 
301*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_adsp = {
302*ce69a970SAngeloGioacchino Del Regno 	.name = "hrt-adsp",
303*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_HRT_ADSP,
304*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
305*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
306*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_HRT_DDR_EMI }
307*ce69a970SAngeloGioacchino Del Regno };
308*ce69a970SAngeloGioacchino Del Regno 
309*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_dbgif = {
310*ce69a970SAngeloGioacchino Del Regno 	.name = "hrt-dbgif",
311*ce69a970SAngeloGioacchino Del Regno 	.id = MASTER_HRT_DBGIF,
312*ce69a970SAngeloGioacchino Del Regno 	.ep = 0,
313*ce69a970SAngeloGioacchino Del Regno 	.num_links = 1,
314*ce69a970SAngeloGioacchino Del Regno 	.links = { SLAVE_HRT_DDR_EMI }
315*ce69a970SAngeloGioacchino Del Regno };
316*ce69a970SAngeloGioacchino Del Regno 
317*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node *mt8196_emi_icc_nodes[] = {
318*ce69a970SAngeloGioacchino Del Regno 	[SLAVE_DDR_EMI] = &ddr_emi,
319*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MCUSYS] = &mcusys,
320*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MCU_0] = &mcu_port0,
321*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MCU_1] = &mcu_port1,
322*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MCU_2] = &mcu_port2,
323*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MCU_3] = &mcu_port3,
324*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MCU_4] = &mcu_port4,
325*ce69a970SAngeloGioacchino Del Regno 	[MASTER_GPUSYS] = &gpu,
326*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MMSYS] = &mmsys,
327*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MM_VPU] = &mm_vpu,
328*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MM_DISP] = &mm_disp,
329*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MM_VDEC] = &mm_vdec,
330*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MM_VENC] = &mm_venc,
331*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MM_CAM] = &mm_cam,
332*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MM_IMG] = &mm_img,
333*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MM_MDP] = &mm_mdp,
334*ce69a970SAngeloGioacchino Del Regno 	[MASTER_VPUSYS] = &vpusys,
335*ce69a970SAngeloGioacchino Del Regno 	[MASTER_VPU_0] = &vpu_port0,
336*ce69a970SAngeloGioacchino Del Regno 	[MASTER_VPU_1] = &vpu_port1,
337*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MDLASYS] = &mdlasys,
338*ce69a970SAngeloGioacchino Del Regno 	[MASTER_MDLA_0] = &mdla_port0,
339*ce69a970SAngeloGioacchino Del Regno 	[MASTER_UFS] = &ufs,
340*ce69a970SAngeloGioacchino Del Regno 	[MASTER_PCIE] = &pcie,
341*ce69a970SAngeloGioacchino Del Regno 	[MASTER_USB] = &usb,
342*ce69a970SAngeloGioacchino Del Regno 	[MASTER_WIFI] = &wifi,
343*ce69a970SAngeloGioacchino Del Regno 	[MASTER_BT] = &bt,
344*ce69a970SAngeloGioacchino Del Regno 	[MASTER_NETSYS] = &netsys,
345*ce69a970SAngeloGioacchino Del Regno 	[MASTER_DBGIF] = &dbgif,
346*ce69a970SAngeloGioacchino Del Regno 	[SLAVE_HRT_DDR_EMI] = &hrt_ddr_emi,
347*ce69a970SAngeloGioacchino Del Regno 	[MASTER_HRT_MMSYS] = &hrt_mmsys,
348*ce69a970SAngeloGioacchino Del Regno 	[MASTER_HRT_MM_DISP] = &hrt_mm_disp,
349*ce69a970SAngeloGioacchino Del Regno 	[MASTER_HRT_MM_VDEC] = &hrt_mm_vdec,
350*ce69a970SAngeloGioacchino Del Regno 	[MASTER_HRT_MM_VENC] = &hrt_mm_venc,
351*ce69a970SAngeloGioacchino Del Regno 	[MASTER_HRT_MM_CAM] = &hrt_mm_cam,
352*ce69a970SAngeloGioacchino Del Regno 	[MASTER_HRT_MM_IMG] = &hrt_mm_img,
353*ce69a970SAngeloGioacchino Del Regno 	[MASTER_HRT_MM_MDP] = &hrt_mm_mdp,
354*ce69a970SAngeloGioacchino Del Regno 	[MASTER_HRT_ADSP] = &hrt_adsp,
355*ce69a970SAngeloGioacchino Del Regno 	[MASTER_HRT_DBGIF] = &hrt_dbgif
356*ce69a970SAngeloGioacchino Del Regno };
357*ce69a970SAngeloGioacchino Del Regno 
358*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_desc mt8196_emi_icc = {
359*ce69a970SAngeloGioacchino Del Regno 	.nodes = mt8196_emi_icc_nodes,
360*ce69a970SAngeloGioacchino Del Regno 	.num_nodes = ARRAY_SIZE(mt8196_emi_icc_nodes),
361*ce69a970SAngeloGioacchino Del Regno };
362*ce69a970SAngeloGioacchino Del Regno 
363*ce69a970SAngeloGioacchino Del Regno static const struct of_device_id mtk_mt8196_emi_icc_of_match[] = {
364*ce69a970SAngeloGioacchino Del Regno 	{ .compatible = "mediatek,mt8196-emi", .data = &mt8196_emi_icc },
365*ce69a970SAngeloGioacchino Del Regno 	{ /* sentinel */ },
366*ce69a970SAngeloGioacchino Del Regno };
367*ce69a970SAngeloGioacchino Del Regno MODULE_DEVICE_TABLE(of, mtk_mt8196_emi_icc_of_match);
368*ce69a970SAngeloGioacchino Del Regno 
369*ce69a970SAngeloGioacchino Del Regno static struct platform_driver mtk_emi_icc_mt8196_driver = {
370*ce69a970SAngeloGioacchino Del Regno 	.driver = {
371*ce69a970SAngeloGioacchino Del Regno 		.name = "emi-icc-mt8196",
372*ce69a970SAngeloGioacchino Del Regno 		.of_match_table = mtk_mt8196_emi_icc_of_match,
373*ce69a970SAngeloGioacchino Del Regno 		.sync_state = icc_sync_state,
374*ce69a970SAngeloGioacchino Del Regno 	},
375*ce69a970SAngeloGioacchino Del Regno 	.probe = mtk_emi_icc_probe,
376*ce69a970SAngeloGioacchino Del Regno 	.remove = mtk_emi_icc_remove,
377*ce69a970SAngeloGioacchino Del Regno 
378*ce69a970SAngeloGioacchino Del Regno };
379*ce69a970SAngeloGioacchino Del Regno module_platform_driver(mtk_emi_icc_mt8196_driver);
380*ce69a970SAngeloGioacchino Del Regno 
381*ce69a970SAngeloGioacchino Del Regno MODULE_AUTHOR("AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>");
382*ce69a970SAngeloGioacchino Del Regno MODULE_DESCRIPTION("MediaTek MT8196 EMI ICC driver");
383*ce69a970SAngeloGioacchino Del Regno MODULE_LICENSE("GPL");
384