1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (c) 2022 MediaTek Inc.
4 * Author: Chun-Jie Chen <chun-jie.chen@mediatek.com>
5 */
6
7#ifndef __SOC_MEDIATEK_MT8186_PM_DOMAINS_H
8#define __SOC_MEDIATEK_MT8186_PM_DOMAINS_H
9
10#include "mtk-pm-domains.h"
11#include <dt-bindings/power/mt8186-power.h>
12
13/*
14 * MT8186 power domain support
15 */
16
17static const struct scpsys_domain_data scpsys_domain_data_mt8186[] = {
18	[MT8186_POWER_DOMAIN_MFG0] = {
19		.name = "mfg0",
20		.sta_mask = BIT(2),
21		.ctl_offs = 0x308,
22		.pwr_sta_offs = 0x16C,
23		.pwr_sta2nd_offs = 0x170,
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	[MT8186_POWER_DOMAIN_MFG1] = {
29		.name = "mfg1",
30		.sta_mask = BIT(3),
31		.ctl_offs = 0x30c,
32		.pwr_sta_offs = 0x16C,
33		.pwr_sta2nd_offs = 0x170,
34		.sram_pdn_bits = BIT(8),
35		.sram_pdn_ack_bits = BIT(12),
36		.bp_infracfg = {
37			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP1,
38				MT8186_TOP_AXI_PROT_EN_1_SET,
39				MT8186_TOP_AXI_PROT_EN_1_CLR,
40				MT8186_TOP_AXI_PROT_EN_1_STA),
41			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_MFG1_STEP2,
42				MT8186_TOP_AXI_PROT_EN_SET,
43				MT8186_TOP_AXI_PROT_EN_CLR,
44				MT8186_TOP_AXI_PROT_EN_STA),
45			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_MFG1_STEP3,
46				MT8186_TOP_AXI_PROT_EN_SET,
47				MT8186_TOP_AXI_PROT_EN_CLR,
48				MT8186_TOP_AXI_PROT_EN_STA),
49			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP4,
50				MT8186_TOP_AXI_PROT_EN_1_SET,
51				MT8186_TOP_AXI_PROT_EN_1_CLR,
52				MT8186_TOP_AXI_PROT_EN_1_STA),
53		},
54		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
55	},
56	[MT8186_POWER_DOMAIN_MFG2] = {
57		.name = "mfg2",
58		.sta_mask = BIT(4),
59		.ctl_offs = 0x310,
60		.pwr_sta_offs = 0x16C,
61		.pwr_sta2nd_offs = 0x170,
62		.sram_pdn_bits = BIT(8),
63		.sram_pdn_ack_bits = BIT(12),
64		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
65	},
66	[MT8186_POWER_DOMAIN_MFG3] = {
67		.name = "mfg3",
68		.sta_mask = BIT(5),
69		.ctl_offs = 0x314,
70		.pwr_sta_offs = 0x16C,
71		.pwr_sta2nd_offs = 0x170,
72		.sram_pdn_bits = BIT(8),
73		.sram_pdn_ack_bits = BIT(12),
74		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
75	},
76	[MT8186_POWER_DOMAIN_SSUSB] = {
77		.name = "ssusb",
78		.sta_mask = BIT(20),
79		.ctl_offs = 0x9F0,
80		.pwr_sta_offs = 0x16C,
81		.pwr_sta2nd_offs = 0x170,
82		.sram_pdn_bits = BIT(8),
83		.sram_pdn_ack_bits = BIT(12),
84		.caps = MTK_SCPD_ACTIVE_WAKEUP,
85	},
86	[MT8186_POWER_DOMAIN_SSUSB_P1] = {
87		.name = "ssusb_p1",
88		.sta_mask = BIT(19),
89		.ctl_offs = 0x9F4,
90		.pwr_sta_offs = 0x16C,
91		.pwr_sta2nd_offs = 0x170,
92		.sram_pdn_bits = BIT(8),
93		.sram_pdn_ack_bits = BIT(12),
94		.caps = MTK_SCPD_ACTIVE_WAKEUP,
95	},
96	[MT8186_POWER_DOMAIN_DIS] = {
97		.name = "dis",
98		.sta_mask = BIT(21),
99		.ctl_offs = 0x354,
100		.pwr_sta_offs = 0x16C,
101		.pwr_sta2nd_offs = 0x170,
102		.sram_pdn_bits = BIT(8),
103		.sram_pdn_ack_bits = BIT(12),
104		.bp_infracfg = {
105			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_DIS_STEP1,
106				MT8186_TOP_AXI_PROT_EN_1_SET,
107				MT8186_TOP_AXI_PROT_EN_1_CLR,
108				MT8186_TOP_AXI_PROT_EN_1_STA),
109			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_DIS_STEP2,
110				MT8186_TOP_AXI_PROT_EN_SET,
111				MT8186_TOP_AXI_PROT_EN_CLR,
112				MT8186_TOP_AXI_PROT_EN_STA),
113		},
114	},
115	[MT8186_POWER_DOMAIN_IMG] = {
116		.name = "img",
117		.sta_mask = BIT(13),
118		.ctl_offs = 0x334,
119		.pwr_sta_offs = 0x16C,
120		.pwr_sta2nd_offs = 0x170,
121		.sram_pdn_bits = BIT(8),
122		.sram_pdn_ack_bits = BIT(12),
123		.bp_infracfg = {
124			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IMG_STEP1,
125				MT8186_TOP_AXI_PROT_EN_1_SET,
126				MT8186_TOP_AXI_PROT_EN_1_CLR,
127				MT8186_TOP_AXI_PROT_EN_1_STA),
128			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IMG_STEP2,
129				MT8186_TOP_AXI_PROT_EN_1_SET,
130				MT8186_TOP_AXI_PROT_EN_1_CLR,
131				MT8186_TOP_AXI_PROT_EN_1_STA),
132		},
133		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
134	},
135	[MT8186_POWER_DOMAIN_IMG2] = {
136		.name = "img2",
137		.sta_mask = BIT(14),
138		.ctl_offs = 0x338,
139		.pwr_sta_offs = 0x16C,
140		.pwr_sta2nd_offs = 0x170,
141		.sram_pdn_bits = BIT(8),
142		.sram_pdn_ack_bits = BIT(12),
143		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
144	},
145	[MT8186_POWER_DOMAIN_IPE] = {
146		.name = "ipe",
147		.sta_mask = BIT(15),
148		.ctl_offs = 0x33C,
149		.pwr_sta_offs = 0x16C,
150		.pwr_sta2nd_offs = 0x170,
151		.sram_pdn_bits = BIT(8),
152		.sram_pdn_ack_bits = BIT(12),
153		.bp_infracfg = {
154			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IPE_STEP1,
155				MT8186_TOP_AXI_PROT_EN_1_SET,
156				MT8186_TOP_AXI_PROT_EN_1_CLR,
157				MT8186_TOP_AXI_PROT_EN_1_STA),
158			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IPE_STEP2,
159				MT8186_TOP_AXI_PROT_EN_1_SET,
160				MT8186_TOP_AXI_PROT_EN_1_CLR,
161				MT8186_TOP_AXI_PROT_EN_1_STA),
162		},
163		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
164	},
165	[MT8186_POWER_DOMAIN_CAM] = {
166		.name = "cam",
167		.sta_mask = BIT(23),
168		.ctl_offs = 0x35C,
169		.pwr_sta_offs = 0x16C,
170		.pwr_sta2nd_offs = 0x170,
171		.sram_pdn_bits = BIT(8),
172		.sram_pdn_ack_bits = BIT(12),
173		.bp_infracfg = {
174			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CAM_STEP1,
175				MT8186_TOP_AXI_PROT_EN_1_SET,
176				MT8186_TOP_AXI_PROT_EN_1_CLR,
177				MT8186_TOP_AXI_PROT_EN_1_STA),
178			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CAM_STEP2,
179				MT8186_TOP_AXI_PROT_EN_1_SET,
180				MT8186_TOP_AXI_PROT_EN_1_CLR,
181				MT8186_TOP_AXI_PROT_EN_1_STA),
182		},
183		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
184	},
185	[MT8186_POWER_DOMAIN_CAM_RAWA] = {
186		.name = "cam_rawa",
187		.sta_mask = BIT(24),
188		.ctl_offs = 0x360,
189		.pwr_sta_offs = 0x16C,
190		.pwr_sta2nd_offs = 0x170,
191		.sram_pdn_bits = BIT(8),
192		.sram_pdn_ack_bits = BIT(12),
193		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
194	},
195	[MT8186_POWER_DOMAIN_CAM_RAWB] = {
196		.name = "cam_rawb",
197		.sta_mask = BIT(25),
198		.ctl_offs = 0x364,
199		.pwr_sta_offs = 0x16C,
200		.pwr_sta2nd_offs = 0x170,
201		.sram_pdn_bits = BIT(8),
202		.sram_pdn_ack_bits = BIT(12),
203		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
204	},
205	[MT8186_POWER_DOMAIN_VENC] = {
206		.name = "venc",
207		.sta_mask = BIT(18),
208		.ctl_offs = 0x348,
209		.pwr_sta_offs = 0x16C,
210		.pwr_sta2nd_offs = 0x170,
211		.sram_pdn_bits = BIT(8),
212		.sram_pdn_ack_bits = BIT(12),
213		.bp_infracfg = {
214			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VENC_STEP1,
215				MT8186_TOP_AXI_PROT_EN_1_SET,
216				MT8186_TOP_AXI_PROT_EN_1_CLR,
217				MT8186_TOP_AXI_PROT_EN_1_STA),
218			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VENC_STEP2,
219				MT8186_TOP_AXI_PROT_EN_1_SET,
220				MT8186_TOP_AXI_PROT_EN_1_CLR,
221				MT8186_TOP_AXI_PROT_EN_1_STA),
222		},
223		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
224	},
225	[MT8186_POWER_DOMAIN_VDEC] = {
226		.name = "vdec",
227		.sta_mask = BIT(16),
228		.ctl_offs = 0x340,
229		.pwr_sta_offs = 0x16C,
230		.pwr_sta2nd_offs = 0x170,
231		.sram_pdn_bits = BIT(8),
232		.sram_pdn_ack_bits = BIT(12),
233		.bp_infracfg = {
234			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP1,
235				MT8186_TOP_AXI_PROT_EN_1_SET,
236				MT8186_TOP_AXI_PROT_EN_1_CLR,
237				MT8186_TOP_AXI_PROT_EN_1_STA),
238			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP2,
239				MT8186_TOP_AXI_PROT_EN_1_SET,
240				MT8186_TOP_AXI_PROT_EN_1_CLR,
241				MT8186_TOP_AXI_PROT_EN_1_STA),
242		},
243		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
244	},
245	[MT8186_POWER_DOMAIN_WPE] = {
246		.name = "wpe",
247		.sta_mask = BIT(0),
248		.ctl_offs = 0x3F8,
249		.pwr_sta_offs = 0x16C,
250		.pwr_sta2nd_offs = 0x170,
251		.sram_pdn_bits = BIT(8),
252		.sram_pdn_ack_bits = BIT(12),
253		.bp_infracfg = {
254			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_2_WPE_STEP1,
255				MT8186_TOP_AXI_PROT_EN_2_SET,
256				MT8186_TOP_AXI_PROT_EN_2_CLR,
257				MT8186_TOP_AXI_PROT_EN_2_STA),
258			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_2_WPE_STEP2,
259				MT8186_TOP_AXI_PROT_EN_2_SET,
260				MT8186_TOP_AXI_PROT_EN_2_CLR,
261				MT8186_TOP_AXI_PROT_EN_2_STA),
262		},
263		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
264	},
265	[MT8186_POWER_DOMAIN_CONN_ON] = {
266		.name = "conn_on",
267		.sta_mask = BIT(1),
268		.ctl_offs = 0x304,
269		.pwr_sta_offs = 0x16C,
270		.pwr_sta2nd_offs = 0x170,
271		.bp_infracfg = {
272			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CONN_ON_STEP1,
273				MT8186_TOP_AXI_PROT_EN_1_SET,
274				MT8186_TOP_AXI_PROT_EN_1_CLR,
275				MT8186_TOP_AXI_PROT_EN_1_STA),
276			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP2,
277				MT8186_TOP_AXI_PROT_EN_SET,
278				MT8186_TOP_AXI_PROT_EN_CLR,
279				MT8186_TOP_AXI_PROT_EN_STA),
280			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP3,
281				MT8186_TOP_AXI_PROT_EN_SET,
282				MT8186_TOP_AXI_PROT_EN_CLR,
283				MT8186_TOP_AXI_PROT_EN_STA),
284			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP4,
285				MT8186_TOP_AXI_PROT_EN_SET,
286				MT8186_TOP_AXI_PROT_EN_CLR,
287				MT8186_TOP_AXI_PROT_EN_STA),
288		},
289		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
290	},
291	[MT8186_POWER_DOMAIN_CSIRX_TOP] = {
292		.name = "csirx_top",
293		.sta_mask = BIT(6),
294		.ctl_offs = 0x318,
295		.pwr_sta_offs = 0x16C,
296		.pwr_sta2nd_offs = 0x170,
297		.sram_pdn_bits = BIT(8),
298		.sram_pdn_ack_bits = BIT(12),
299		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
300	},
301	[MT8186_POWER_DOMAIN_ADSP_AO] = {
302		.name = "adsp_ao",
303		.sta_mask = BIT(17),
304		.ctl_offs = 0x9FC,
305		.pwr_sta_offs = 0x16C,
306		.pwr_sta2nd_offs = 0x170,
307	},
308	[MT8186_POWER_DOMAIN_ADSP_INFRA] = {
309		.name = "adsp_infra",
310		.sta_mask = BIT(10),
311		.ctl_offs = 0x9F8,
312		.pwr_sta_offs = 0x16C,
313		.pwr_sta2nd_offs = 0x170,
314	},
315	[MT8186_POWER_DOMAIN_ADSP_TOP] = {
316		.name = "adsp_top",
317		.sta_mask = BIT(31),
318		.ctl_offs = 0x3E4,
319		.pwr_sta_offs = 0x16C,
320		.pwr_sta2nd_offs = 0x170,
321		.sram_pdn_bits = BIT(8),
322		.sram_pdn_ack_bits = BIT(12),
323		.bp_infracfg = {
324			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP1,
325				MT8186_TOP_AXI_PROT_EN_3_SET,
326				MT8186_TOP_AXI_PROT_EN_3_CLR,
327				MT8186_TOP_AXI_PROT_EN_3_STA),
328			BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP2,
329				MT8186_TOP_AXI_PROT_EN_3_SET,
330				MT8186_TOP_AXI_PROT_EN_3_CLR,
331				MT8186_TOP_AXI_PROT_EN_3_STA),
332		},
333		.caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_ACTIVE_WAKEUP,
334	},
335};
336
337static const struct scpsys_soc_data mt8186_scpsys_data = {
338	.domains_data = scpsys_domain_data_mt8186,
339	.num_domains = ARRAY_SIZE(scpsys_domain_data_mt8186),
340};
341
342#endif /* __SOC_MEDIATEK_MT8186_PM_DOMAINS_H */
343