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 
17 static 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 
337 static 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