1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (c) 2022 MediaTek Inc.
4 * Author: Garmin Chang <garmin.chang@mediatek.com>
5 */
6
7#ifndef __SOC_MEDIATEK_MT8188_PM_DOMAINS_H
8#define __SOC_MEDIATEK_MT8188_PM_DOMAINS_H
9
10#include "mtk-pm-domains.h"
11#include <dt-bindings/power/mediatek,mt8188-power.h>
12
13/*
14 * MT8188 power domain support
15 */
16
17static const struct scpsys_domain_data scpsys_domain_data_mt8188[] = {
18	[MT8188_POWER_DOMAIN_MFG0] = {
19		.name = "mfg0",
20		.sta_mask = BIT(1),
21		.ctl_offs = 0x300,
22		.pwr_sta_offs = 0x174,
23		.pwr_sta2nd_offs = 0x178,
24		.sram_pdn_bits = BIT(8),
25		.sram_pdn_ack_bits = BIT(12),
26		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
27	},
28	[MT8188_POWER_DOMAIN_MFG1] = {
29		.name = "mfg1",
30		.sta_mask = BIT(2),
31		.ctl_offs = 0x304,
32		.pwr_sta_offs = 0x174,
33		.pwr_sta2nd_offs = 0x178,
34		.sram_pdn_bits = BIT(8),
35		.sram_pdn_ack_bits = BIT(12),
36		.bp_infracfg = {
37			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MFG1_STEP1,
38				    MT8188_TOP_AXI_PROT_EN_SET,
39				    MT8188_TOP_AXI_PROT_EN_CLR,
40				    MT8188_TOP_AXI_PROT_EN_STA),
41			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP2,
42				    MT8188_TOP_AXI_PROT_EN_2_SET,
43				    MT8188_TOP_AXI_PROT_EN_2_CLR,
44				    MT8188_TOP_AXI_PROT_EN_2_STA),
45			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_1_MFG1_STEP3,
46				    MT8188_TOP_AXI_PROT_EN_1_SET,
47				    MT8188_TOP_AXI_PROT_EN_1_CLR,
48				    MT8188_TOP_AXI_PROT_EN_1_STA),
49			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP4,
50				    MT8188_TOP_AXI_PROT_EN_2_SET,
51				    MT8188_TOP_AXI_PROT_EN_2_CLR,
52				    MT8188_TOP_AXI_PROT_EN_2_STA),
53			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MFG1_STEP5,
54				    MT8188_TOP_AXI_PROT_EN_SET,
55				    MT8188_TOP_AXI_PROT_EN_CLR,
56				    MT8188_TOP_AXI_PROT_EN_STA),
57			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_MFG1_STEP6,
58				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
59				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
60				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA),
61		},
62		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
63	},
64	[MT8188_POWER_DOMAIN_MFG2] = {
65		.name = "mfg2",
66		.sta_mask = BIT(3),
67		.ctl_offs = 0x308,
68		.pwr_sta_offs = 0x174,
69		.pwr_sta2nd_offs = 0x178,
70		.sram_pdn_bits = BIT(8),
71		.sram_pdn_ack_bits = BIT(12),
72		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
73	},
74	[MT8188_POWER_DOMAIN_MFG3] = {
75		.name = "mfg3",
76		.sta_mask = BIT(4),
77		.ctl_offs = 0x30C,
78		.pwr_sta_offs = 0x174,
79		.pwr_sta2nd_offs = 0x178,
80		.sram_pdn_bits = BIT(8),
81		.sram_pdn_ack_bits = BIT(12),
82		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
83	},
84	[MT8188_POWER_DOMAIN_MFG4] = {
85		.name = "mfg4",
86		.sta_mask = BIT(5),
87		.ctl_offs = 0x310,
88		.pwr_sta_offs = 0x174,
89		.pwr_sta2nd_offs = 0x178,
90		.sram_pdn_bits = BIT(8),
91		.sram_pdn_ack_bits = BIT(12),
92		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
93	},
94	[MT8188_POWER_DOMAIN_PEXTP_MAC_P0] = {
95		.name = "pextp_mac_p0",
96		.sta_mask = BIT(10),
97		.ctl_offs = 0x324,
98		.pwr_sta_offs = 0x174,
99		.pwr_sta2nd_offs = 0x178,
100		.sram_pdn_bits = BIT(8),
101		.sram_pdn_ack_bits = BIT(12),
102		.bp_infracfg = {
103			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_PEXTP_MAC_P0_STEP1,
104				    MT8188_TOP_AXI_PROT_EN_SET,
105				    MT8188_TOP_AXI_PROT_EN_CLR,
106				    MT8188_TOP_AXI_PROT_EN_STA),
107			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_PEXTP_MAC_P0_STEP2,
108				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
109				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
110				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
111		},
112		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
113	},
114	[MT8188_POWER_DOMAIN_PEXTP_PHY_TOP] = {
115		.name = "pextp_phy_top",
116		.sta_mask = BIT(12),
117		.ctl_offs = 0x328,
118		.pwr_sta_offs = 0x174,
119		.pwr_sta2nd_offs = 0x178,
120		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
121	},
122	[MT8188_POWER_DOMAIN_CSIRX_TOP] = {
123		.name = "pextp_csirx_top",
124		.sta_mask = BIT(17),
125		.ctl_offs = 0x3C4,
126		.pwr_sta_offs = 0x174,
127		.pwr_sta2nd_offs = 0x178,
128		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
129	},
130	[MT8188_POWER_DOMAIN_ETHER] = {
131		.name = "ether",
132		.sta_mask = BIT(1),
133		.ctl_offs = 0x338,
134		.pwr_sta_offs = 0x16C,
135		.pwr_sta2nd_offs = 0x170,
136		.sram_pdn_bits = BIT(8),
137		.sram_pdn_ack_bits = BIT(12),
138		.bp_infracfg = {
139			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_ETHER_STEP1,
140				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
141				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
142				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
143		},
144		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
145	},
146	[MT8188_POWER_DOMAIN_HDMI_TX] = {
147		.name = "hdmi_tx",
148		.sta_mask = BIT(18),
149		.ctl_offs = 0x37C,
150		.pwr_sta_offs = 0x16C,
151		.pwr_sta2nd_offs = 0x170,
152		.sram_pdn_bits = BIT(8),
153		.sram_pdn_ack_bits = BIT(12),
154		.bp_infracfg = {
155			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_HDMI_TX_STEP1,
156				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
157				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
158				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
159		},
160		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
161	},
162	[MT8188_POWER_DOMAIN_ADSP_AO] = {
163		.name = "adsp_ao",
164		.sta_mask = BIT(10),
165		.ctl_offs = 0x35C,
166		.pwr_sta_offs = 0x16C,
167		.pwr_sta2nd_offs = 0x170,
168		.bp_infracfg = {
169			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP1,
170				    MT8188_TOP_AXI_PROT_EN_2_SET,
171				    MT8188_TOP_AXI_PROT_EN_2_CLR,
172				    MT8188_TOP_AXI_PROT_EN_2_STA),
173			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP2,
174				    MT8188_TOP_AXI_PROT_EN_2_SET,
175				    MT8188_TOP_AXI_PROT_EN_2_CLR,
176				    MT8188_TOP_AXI_PROT_EN_2_STA),
177		},
178		.caps = MTK_SCPD_ALWAYS_ON,
179	},
180	[MT8188_POWER_DOMAIN_ADSP_INFRA] = {
181		.name = "adsp_infra",
182		.sta_mask = BIT(9),
183		.ctl_offs = 0x358,
184		.pwr_sta_offs = 0x16C,
185		.pwr_sta2nd_offs = 0x170,
186		.sram_pdn_bits = BIT(8),
187		.sram_pdn_ack_bits = BIT(12),
188		.bp_infracfg = {
189			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP1,
190				    MT8188_TOP_AXI_PROT_EN_2_SET,
191				    MT8188_TOP_AXI_PROT_EN_2_CLR,
192				    MT8188_TOP_AXI_PROT_EN_2_STA),
193			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP2,
194				    MT8188_TOP_AXI_PROT_EN_2_SET,
195				    MT8188_TOP_AXI_PROT_EN_2_CLR,
196				    MT8188_TOP_AXI_PROT_EN_2_STA),
197		},
198		.caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_ALWAYS_ON,
199	},
200	[MT8188_POWER_DOMAIN_ADSP] = {
201		.name = "adsp",
202		.sta_mask = BIT(8),
203		.ctl_offs = 0x354,
204		.pwr_sta_offs = 0x16C,
205		.pwr_sta2nd_offs = 0x170,
206		.sram_pdn_bits = BIT(8),
207		.sram_pdn_ack_bits = BIT(12),
208		.bp_infracfg = {
209			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP1,
210				    MT8188_TOP_AXI_PROT_EN_2_SET,
211				    MT8188_TOP_AXI_PROT_EN_2_CLR,
212				    MT8188_TOP_AXI_PROT_EN_2_STA),
213			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP2,
214				    MT8188_TOP_AXI_PROT_EN_2_SET,
215				    MT8188_TOP_AXI_PROT_EN_2_CLR,
216				    MT8188_TOP_AXI_PROT_EN_2_STA),
217		},
218		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_SRAM_ISO | MTK_SCPD_ACTIVE_WAKEUP,
219	},
220	[MT8188_POWER_DOMAIN_AUDIO] = {
221		.name = "audio",
222		.sta_mask = BIT(6),
223		.ctl_offs = 0x34C,
224		.pwr_sta_offs = 0x16C,
225		.pwr_sta2nd_offs = 0x170,
226		.sram_pdn_bits = BIT(8),
227		.sram_pdn_ack_bits = BIT(12),
228		.bp_infracfg = {
229			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP1,
230				    MT8188_TOP_AXI_PROT_EN_2_SET,
231				    MT8188_TOP_AXI_PROT_EN_2_CLR,
232				    MT8188_TOP_AXI_PROT_EN_2_STA),
233			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP2,
234				    MT8188_TOP_AXI_PROT_EN_2_SET,
235				    MT8188_TOP_AXI_PROT_EN_2_CLR,
236				    MT8188_TOP_AXI_PROT_EN_2_STA),
237		},
238		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
239	},
240	[MT8188_POWER_DOMAIN_AUDIO_ASRC] = {
241		.name = "audio_asrc",
242		.sta_mask = BIT(7),
243		.ctl_offs = 0x350,
244		.pwr_sta_offs = 0x16C,
245		.pwr_sta2nd_offs = 0x170,
246		.sram_pdn_bits = BIT(8),
247		.sram_pdn_ack_bits = BIT(12),
248		.bp_infracfg = {
249			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP1,
250				    MT8188_TOP_AXI_PROT_EN_2_SET,
251				    MT8188_TOP_AXI_PROT_EN_2_CLR,
252				    MT8188_TOP_AXI_PROT_EN_2_STA),
253			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP2,
254				    MT8188_TOP_AXI_PROT_EN_2_SET,
255				    MT8188_TOP_AXI_PROT_EN_2_CLR,
256				    MT8188_TOP_AXI_PROT_EN_2_STA),
257		},
258		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
259	},
260	[MT8188_POWER_DOMAIN_VPPSYS0] = {
261		.name = "vppsys0",
262		.sta_mask = BIT(11),
263		.ctl_offs = 0x360,
264		.pwr_sta_offs = 0x16C,
265		.pwr_sta2nd_offs = 0x170,
266		.sram_pdn_bits = BIT(8),
267		.sram_pdn_ack_bits = BIT(12),
268		.bp_infracfg = {
269			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP1,
270				    MT8188_TOP_AXI_PROT_EN_SET,
271				    MT8188_TOP_AXI_PROT_EN_CLR,
272				    MT8188_TOP_AXI_PROT_EN_STA),
273			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP2,
274				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
275				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
276				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
277			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP3,
278				    MT8188_TOP_AXI_PROT_EN_SET,
279				    MT8188_TOP_AXI_PROT_EN_CLR,
280				    MT8188_TOP_AXI_PROT_EN_STA),
281			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP4,
282				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
283				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
284				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
285			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VPPSYS0_STEP5,
286				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
287				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
288				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA),
289		},
290	},
291	[MT8188_POWER_DOMAIN_VDOSYS0] = {
292		.name = "vdosys0",
293		.sta_mask = BIT(13),
294		.ctl_offs = 0x368,
295		.pwr_sta_offs = 0x16C,
296		.pwr_sta2nd_offs = 0x170,
297		.sram_pdn_bits = BIT(8),
298		.sram_pdn_ack_bits = BIT(12),
299		.bp_infracfg = {
300			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS0_STEP1,
301				    MT8188_TOP_AXI_PROT_EN_MM_SET,
302				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
303				    MT8188_TOP_AXI_PROT_EN_MM_STA),
304			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VDOSYS0_STEP2,
305				    MT8188_TOP_AXI_PROT_EN_SET,
306				    MT8188_TOP_AXI_PROT_EN_CLR,
307				    MT8188_TOP_AXI_PROT_EN_STA),
308			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VDOSYS0_STEP3,
309				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
310				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
311				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA),
312		},
313	},
314	[MT8188_POWER_DOMAIN_VDOSYS1] = {
315		.name = "vdosys1",
316		.sta_mask = BIT(14),
317		.ctl_offs = 0x36C,
318		.pwr_sta_offs = 0x16C,
319		.pwr_sta2nd_offs = 0x170,
320		.sram_pdn_bits = BIT(8),
321		.sram_pdn_ack_bits = BIT(12),
322		.bp_infracfg = {
323			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP1,
324				    MT8188_TOP_AXI_PROT_EN_MM_SET,
325				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
326				    MT8188_TOP_AXI_PROT_EN_MM_STA),
327			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP2,
328				    MT8188_TOP_AXI_PROT_EN_MM_SET,
329				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
330				    MT8188_TOP_AXI_PROT_EN_MM_STA),
331			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VDOSYS1_STEP3,
332				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
333				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
334				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
335		},
336	},
337	[MT8188_POWER_DOMAIN_DP_TX] = {
338		.name = "dp_tx",
339		.sta_mask = BIT(16),
340		.ctl_offs = 0x374,
341		.pwr_sta_offs = 0x16C,
342		.pwr_sta2nd_offs = 0x170,
343		.sram_pdn_bits = BIT(8),
344		.sram_pdn_ack_bits = BIT(12),
345		.bp_infracfg = {
346			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_DP_TX_STEP1,
347				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
348				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
349				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
350		},
351		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
352	},
353	[MT8188_POWER_DOMAIN_EDP_TX] = {
354		.name = "edp_tx",
355		.sta_mask = BIT(17),
356		.ctl_offs = 0x378,
357		.pwr_sta_offs = 0x16C,
358		.pwr_sta2nd_offs = 0x170,
359		.sram_pdn_bits = BIT(8),
360		.sram_pdn_ack_bits = BIT(12),
361		.bp_infracfg = {
362			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_EDP_TX_STEP1,
363				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
364				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
365				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
366		},
367		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
368	},
369	[MT8188_POWER_DOMAIN_VPPSYS1] = {
370		.name = "vppsys1",
371		.sta_mask = BIT(12),
372		.ctl_offs = 0x364,
373		.pwr_sta_offs = 0x16C,
374		.pwr_sta2nd_offs = 0x170,
375		.sram_pdn_bits = BIT(8),
376		.sram_pdn_ack_bits = BIT(12),
377		.bp_infracfg = {
378			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP1,
379				    MT8188_TOP_AXI_PROT_EN_MM_SET,
380				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
381				    MT8188_TOP_AXI_PROT_EN_MM_STA),
382			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP2,
383				    MT8188_TOP_AXI_PROT_EN_MM_SET,
384				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
385				    MT8188_TOP_AXI_PROT_EN_MM_STA),
386			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS1_STEP3,
387				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
388				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
389				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
390		},
391	},
392	[MT8188_POWER_DOMAIN_WPE] = {
393		.name = "wpe",
394		.sta_mask = BIT(15),
395		.ctl_offs = 0x370,
396		.pwr_sta_offs = 0x16C,
397		.pwr_sta2nd_offs = 0x170,
398		.sram_pdn_bits = BIT(8),
399		.sram_pdn_ack_bits = BIT(12),
400		.bp_infracfg = {
401			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP1,
402				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
403				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
404				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
405			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP2,
406				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
407				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
408				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
409		},
410		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
411	},
412	[MT8188_POWER_DOMAIN_VDEC0] = {
413		.name = "vdec0",
414		.sta_mask = BIT(19),
415		.ctl_offs = 0x380,
416		.pwr_sta_offs = 0x16C,
417		.pwr_sta2nd_offs = 0x170,
418		.sram_pdn_bits = BIT(8),
419		.sram_pdn_ack_bits = BIT(12),
420		.bp_infracfg = {
421			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC0_STEP1,
422				    MT8188_TOP_AXI_PROT_EN_MM_SET,
423				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
424				    MT8188_TOP_AXI_PROT_EN_MM_STA),
425			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VDEC0_STEP2,
426				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
427				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
428				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
429		},
430		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
431	},
432	[MT8188_POWER_DOMAIN_VDEC1] = {
433		.name = "vdec1",
434		.sta_mask = BIT(20),
435		.ctl_offs = 0x384,
436		.pwr_sta_offs = 0x16C,
437		.pwr_sta2nd_offs = 0x170,
438		.sram_pdn_bits = BIT(8),
439		.sram_pdn_ack_bits = BIT(12),
440		.bp_infracfg = {
441			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP1,
442				    MT8188_TOP_AXI_PROT_EN_MM_SET,
443				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
444				    MT8188_TOP_AXI_PROT_EN_MM_STA),
445			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP2,
446				    MT8188_TOP_AXI_PROT_EN_MM_SET,
447				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
448				    MT8188_TOP_AXI_PROT_EN_MM_STA),
449		},
450		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
451	},
452	[MT8188_POWER_DOMAIN_VENC] = {
453		.name = "venc",
454		.sta_mask = BIT(22),
455		.ctl_offs = 0x38C,
456		.pwr_sta_offs = 0x16C,
457		.pwr_sta2nd_offs = 0x170,
458		.sram_pdn_bits = BIT(8),
459		.sram_pdn_ack_bits = BIT(12),
460		.bp_infracfg = {
461			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP1,
462				    MT8188_TOP_AXI_PROT_EN_MM_SET,
463				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
464				    MT8188_TOP_AXI_PROT_EN_MM_STA),
465			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP2,
466				    MT8188_TOP_AXI_PROT_EN_MM_SET,
467				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
468				    MT8188_TOP_AXI_PROT_EN_MM_STA),
469			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VENC_STEP3,
470				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
471				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
472				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
473		},
474		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
475	},
476	[MT8188_POWER_DOMAIN_IMG_VCORE] = {
477		.name = "vcore",
478		.sta_mask = BIT(28),
479		.ctl_offs = 0x3A4,
480		.pwr_sta_offs = 0x16C,
481		.pwr_sta2nd_offs = 0x170,
482		.bp_infracfg = {
483			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP1,
484				    MT8188_TOP_AXI_PROT_EN_MM_SET,
485				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
486				    MT8188_TOP_AXI_PROT_EN_MM_STA),
487			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP2,
488				    MT8188_TOP_AXI_PROT_EN_MM_SET,
489				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
490				    MT8188_TOP_AXI_PROT_EN_MM_STA),
491			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_VCORE_STEP3,
492				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
493				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
494				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
495		},
496		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
497	},
498	[MT8188_POWER_DOMAIN_IMG_MAIN] = {
499		.name = "img_main",
500		.sta_mask = BIT(29),
501		.ctl_offs = 0x3A8,
502		.pwr_sta_offs = 0x16C,
503		.pwr_sta2nd_offs = 0x170,
504		.sram_pdn_bits = BIT(8),
505		.sram_pdn_ack_bits = BIT(12),
506		.bp_infracfg = {
507			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP1,
508				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
509				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
510				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
511			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP2,
512				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
513				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
514				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
515		},
516		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
517	},
518	[MT8188_POWER_DOMAIN_DIP] = {
519		.name = "dip",
520		.sta_mask = BIT(30),
521		.ctl_offs = 0x3AC,
522		.pwr_sta_offs = 0x16C,
523		.pwr_sta2nd_offs = 0x170,
524		.sram_pdn_bits = BIT(8),
525		.sram_pdn_ack_bits = BIT(12),
526		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
527	},
528	[MT8188_POWER_DOMAIN_IPE] = {
529		.name = "ipe",
530		.sta_mask = BIT(31),
531		.ctl_offs = 0x3B0,
532		.pwr_sta_offs = 0x16C,
533		.pwr_sta2nd_offs = 0x170,
534		.sram_pdn_bits = BIT(8),
535		.sram_pdn_ack_bits = BIT(12),
536		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
537	},
538	[MT8188_POWER_DOMAIN_CAM_VCORE] = {
539		.name = "cam_vcore",
540		.sta_mask = BIT(27),
541		.ctl_offs = 0x3A0,
542		.pwr_sta_offs = 0x16C,
543		.pwr_sta2nd_offs = 0x170,
544		.bp_infracfg = {
545			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP1,
546				    MT8188_TOP_AXI_PROT_EN_MM_SET,
547				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
548				    MT8188_TOP_AXI_PROT_EN_MM_STA),
549			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_VCORE_STEP2,
550				    MT8188_TOP_AXI_PROT_EN_2_SET,
551				    MT8188_TOP_AXI_PROT_EN_2_CLR,
552				    MT8188_TOP_AXI_PROT_EN_2_STA),
553			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_1_CAM_VCORE_STEP3,
554				    MT8188_TOP_AXI_PROT_EN_1_SET,
555				    MT8188_TOP_AXI_PROT_EN_1_CLR,
556				    MT8188_TOP_AXI_PROT_EN_1_STA),
557			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP4,
558				    MT8188_TOP_AXI_PROT_EN_MM_SET,
559				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
560				    MT8188_TOP_AXI_PROT_EN_MM_STA),
561			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_VCORE_STEP5,
562				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
563				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
564				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
565		},
566		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
567	},
568	[MT8188_POWER_DOMAIN_CAM_MAIN] = {
569		.name = "cam_main",
570		.sta_mask = BIT(24),
571		.ctl_offs = 0x394,
572		.pwr_sta_offs = 0x16C,
573		.pwr_sta2nd_offs = 0x170,
574		.sram_pdn_bits = BIT(8),
575		.sram_pdn_ack_bits = BIT(12),
576		.bp_infracfg = {
577			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP1,
578				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
579				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
580				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
581			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP2,
582				    MT8188_TOP_AXI_PROT_EN_2_SET,
583				    MT8188_TOP_AXI_PROT_EN_2_CLR,
584				    MT8188_TOP_AXI_PROT_EN_2_STA),
585			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP3,
586				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
587				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
588				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
589			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP4,
590				    MT8188_TOP_AXI_PROT_EN_2_SET,
591				    MT8188_TOP_AXI_PROT_EN_2_CLR,
592				    MT8188_TOP_AXI_PROT_EN_2_STA),
593		},
594		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
595	},
596	[MT8188_POWER_DOMAIN_CAM_SUBA] = {
597		.name = "cam_suba",
598		.sta_mask = BIT(25),
599		.ctl_offs = 0x398,
600		.pwr_sta_offs = 0x16C,
601		.pwr_sta2nd_offs = 0x170,
602		.sram_pdn_bits = BIT(8),
603		.sram_pdn_ack_bits = BIT(12),
604		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
605	},
606	[MT8188_POWER_DOMAIN_CAM_SUBB] = {
607		.name = "cam_subb",
608		.sta_mask = BIT(26),
609		.ctl_offs = 0x39C,
610		.pwr_sta_offs = 0x16C,
611		.pwr_sta2nd_offs = 0x170,
612		.sram_pdn_bits = BIT(8),
613		.sram_pdn_ack_bits = BIT(12),
614		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
615	},
616};
617
618static const struct scpsys_soc_data mt8188_scpsys_data = {
619	.domains_data = scpsys_domain_data_mt8188,
620	.num_domains = ARRAY_SIZE(scpsys_domain_data_mt8188),
621};
622
623#endif /* __SOC_MEDIATEK_MT8188_PM_DOMAINS_H */
624