1 /*
2 * Copyright (c) 2025, MediaTek Inc. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include <common/debug.h>
8 #include <lib/mmio.h>
9 #include <mtk_dcm_utils.h>
10 #include <mtk_mmap_pool.h>
11
12 static const mmap_region_t dcm_mmap[] = {
13 MAP_REGION_FLAT(MCUSYS_PAR_WRAP_BASE, MCUSYS_PAR_WRAP_SIZE,
14 MT_DEVICE | MT_RW | MT_SECURE),
15 MAP_REGION_FLAT(APINFRA_IO_CTRL_AO, APINFRA_IO_CTRL_AO_SIZE,
16 MT_DEVICE | MT_RW | MT_SECURE),
17 MAP_REGION_FLAT(APINFRA_IO_NOC_AO, APINFRA_IO_NOC_AO_SIZE,
18 MT_DEVICE | MT_RW | MT_SECURE),
19 MAP_REGION_FLAT(APINFRA_MEM_INTF_NOC_AO, APINFRA_MEM_INTF_NOC_AO_SIZE,
20 MT_DEVICE | MT_RW | MT_SECURE),
21 MAP_REGION_FLAT(APINFRA_MEM_CTRL_AO, APINFRA_MEM_CTRL_AO_SIZE,
22 MT_DEVICE | MT_RW | MT_SECURE),
23 MAP_REGION_FLAT(PERI_AO_BCRM_BASE, PERI_AO_BCRM_BASE_SIZE,
24 MT_DEVICE | MT_RW | MT_SECURE),
25 MAP_REGION_FLAT(VLP_AO_BCRM_BASE, VLP_AO_BCRM_BASE_SIZE,
26 MT_DEVICE | MT_RW | MT_SECURE),
27 { 0 }
28 };
29 DECLARE_MTK_MMAP_REGIONS(dcm_mmap);
30
dcm_check_state(uintptr_t addr,unsigned int mask,unsigned int state)31 static bool dcm_check_state(uintptr_t addr, unsigned int mask, unsigned int state)
32 {
33 return ((mmio_read_32(addr) & mask) == state);
34 }
35
dcm_mcusys_par_wrap_mcu_l3c_dcm_is_on(void)36 bool dcm_mcusys_par_wrap_mcu_l3c_dcm_is_on(void)
37 {
38 return dcm_check_state(MCUSYS_PAR_WRAP_L3_SHARE_DCM_CTRL,
39 MCUSYS_PAR_WRAP_MCU_L3C_DCM_REG0_MASK,
40 MCUSYS_PAR_WRAP_MCU_L3C_DCM_REG0_ON);
41 }
42
dcm_mcusys_par_wrap_mcu_l3c_dcm(bool on)43 void dcm_mcusys_par_wrap_mcu_l3c_dcm(bool on)
44 {
45 if (on)
46 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_L3_SHARE_DCM_CTRL,
47 MCUSYS_PAR_WRAP_MCU_L3C_DCM_REG0_MASK,
48 MCUSYS_PAR_WRAP_MCU_L3C_DCM_REG0_ON);
49 else
50 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_L3_SHARE_DCM_CTRL,
51 MCUSYS_PAR_WRAP_MCU_L3C_DCM_REG0_MASK,
52 MCUSYS_PAR_WRAP_MCU_L3C_DCM_REG0_OFF);
53 }
54
dcm_mcusys_par_wrap_mcu_acp_dcm_is_on(void)55 bool dcm_mcusys_par_wrap_mcu_acp_dcm_is_on(void)
56 {
57 return dcm_check_state(MCUSYS_PAR_WRAP_MP_ADB_DCM_CFG0,
58 MCUSYS_PAR_WRAP_MCU_ACP_DCM_REG0_MASK,
59 MCUSYS_PAR_WRAP_MCU_ACP_DCM_REG0_ON);
60
61 }
62
dcm_mcusys_par_wrap_mcu_acp_dcm(bool on)63 void dcm_mcusys_par_wrap_mcu_acp_dcm(bool on)
64 {
65 if (on)
66 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_MP_ADB_DCM_CFG0,
67 MCUSYS_PAR_WRAP_MCU_ACP_DCM_REG0_MASK,
68 MCUSYS_PAR_WRAP_MCU_ACP_DCM_REG0_ON);
69 else
70 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_MP_ADB_DCM_CFG0,
71 MCUSYS_PAR_WRAP_MCU_ACP_DCM_REG0_MASK,
72 MCUSYS_PAR_WRAP_MCU_ACP_DCM_REG0_OFF);
73 }
74
dcm_mcusys_par_wrap_mcu_adb_dcm_is_on(void)75 bool dcm_mcusys_par_wrap_mcu_adb_dcm_is_on(void)
76 {
77 return dcm_check_state(MCUSYS_PAR_WRAP_ADB_FIFO_DCM_EN,
78 MCUSYS_PAR_WRAP_MCU_ADB_DCM_REG0_MASK,
79 MCUSYS_PAR_WRAP_MCU_ADB_DCM_REG0_ON);
80 }
81
dcm_mcusys_par_wrap_mcu_adb_dcm(bool on)82 void dcm_mcusys_par_wrap_mcu_adb_dcm(bool on)
83 {
84 if (on)
85 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_ADB_FIFO_DCM_EN,
86 MCUSYS_PAR_WRAP_MCU_ADB_DCM_REG0_MASK,
87 MCUSYS_PAR_WRAP_MCU_ADB_DCM_REG0_ON);
88 else
89 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_ADB_FIFO_DCM_EN,
90 MCUSYS_PAR_WRAP_MCU_ADB_DCM_REG0_MASK,
91 MCUSYS_PAR_WRAP_MCU_ADB_DCM_REG0_OFF);
92 }
93
dcm_mcusys_par_wrap_mcu_stalldcm_is_on(void)94 bool dcm_mcusys_par_wrap_mcu_stalldcm_is_on(void)
95 {
96 return dcm_check_state(MCUSYS_PAR_WRAP_MP0_DCM_CFG0,
97 MCUSYS_PAR_WRAP_MCU_STALLDCM_REG0_MASK,
98 MCUSYS_PAR_WRAP_MCU_STALLDCM_REG0_ON);
99
100 }
101
dcm_mcusys_par_wrap_mcu_stalldcm(bool on)102 void dcm_mcusys_par_wrap_mcu_stalldcm(bool on)
103 {
104 if (on)
105 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_MP0_DCM_CFG0,
106 MCUSYS_PAR_WRAP_MCU_STALLDCM_REG0_MASK,
107 MCUSYS_PAR_WRAP_MCU_STALLDCM_REG0_ON);
108 else
109 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_MP0_DCM_CFG0,
110 MCUSYS_PAR_WRAP_MCU_STALLDCM_REG0_MASK,
111 MCUSYS_PAR_WRAP_MCU_STALLDCM_REG0_OFF);
112 }
113
dcm_mcusys_par_wrap_mcu_apb_dcm_is_on(void)114 bool dcm_mcusys_par_wrap_mcu_apb_dcm_is_on(void)
115 {
116 return dcm_check_state(MCUSYS_PAR_WRAP_MP0_DCM_CFG0,
117 MCUSYS_PAR_WRAP_MCU_APB_DCM_REG0_MASK,
118 MCUSYS_PAR_WRAP_MCU_APB_DCM_REG0_ON);
119 }
120
dcm_mcusys_par_wrap_mcu_apb_dcm(bool on)121 void dcm_mcusys_par_wrap_mcu_apb_dcm(bool on)
122 {
123 if (on)
124 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_MP0_DCM_CFG0,
125 MCUSYS_PAR_WRAP_MCU_APB_DCM_REG0_MASK,
126 MCUSYS_PAR_WRAP_MCU_APB_DCM_REG0_ON);
127 else
128 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_MP0_DCM_CFG0,
129 MCUSYS_PAR_WRAP_MCU_APB_DCM_REG0_MASK,
130 MCUSYS_PAR_WRAP_MCU_APB_DCM_REG0_OFF);
131 }
132
dcm_mcusys_par_wrap_mcu_io_dcm_is_on(void)133 bool dcm_mcusys_par_wrap_mcu_io_dcm_is_on(void)
134 {
135 bool ret = true;
136
137 ret &= dcm_check_state(MCUSYS_PAR_WRAP_QDCM_CONFIG0,
138 MCUSYS_PAR_WRAP_MCU_IO_DCM_REG0_MASK,
139 MCUSYS_PAR_WRAP_MCU_IO_DCM_REG0_ON);
140 ret &= dcm_check_state(MCUSYS_PAR_WRAP_L3GIC_ARCH_CG_CONFIG,
141 MCUSYS_PAR_WRAP_MCU_IO_DCM_REG1_MASK,
142 MCUSYS_PAR_WRAP_MCU_IO_DCM_REG1_ON);
143
144 return ret;
145 }
146
dcm_mcusys_par_wrap_mcu_io_dcm(bool on)147 void dcm_mcusys_par_wrap_mcu_io_dcm(bool on)
148 {
149 if (on) {
150 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_QDCM_CONFIG0,
151 MCUSYS_PAR_WRAP_MCU_IO_DCM_REG0_MASK,
152 MCUSYS_PAR_WRAP_MCU_IO_DCM_REG0_ON);
153 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_L3GIC_ARCH_CG_CONFIG,
154 MCUSYS_PAR_WRAP_MCU_IO_DCM_REG1_MASK,
155 MCUSYS_PAR_WRAP_MCU_IO_DCM_REG1_ON);
156 } else {
157 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_QDCM_CONFIG0,
158 MCUSYS_PAR_WRAP_MCU_IO_DCM_REG0_MASK,
159 MCUSYS_PAR_WRAP_MCU_IO_DCM_REG0_OFF);
160 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_L3GIC_ARCH_CG_CONFIG,
161 MCUSYS_PAR_WRAP_MCU_IO_DCM_REG1_MASK,
162 MCUSYS_PAR_WRAP_MCU_IO_DCM_REG1_OFF);
163 }
164 }
165
dcm_mcusys_par_wrap_mcu_bus_qdcm_is_on(void)166 bool dcm_mcusys_par_wrap_mcu_bus_qdcm_is_on(void)
167 {
168 bool ret = true;
169
170 ret &= dcm_check_state(MCUSYS_PAR_WRAP_QDCM_CONFIG0,
171 MCUSYS_PAR_WRAP_MCU_BUS_QDCM_REG0_MASK,
172 MCUSYS_PAR_WRAP_MCU_BUS_QDCM_REG0_ON);
173 ret &= dcm_check_state(MCUSYS_PAR_WRAP_QDCM_CONFIG1,
174 MCUSYS_PAR_WRAP_MCU_BUS_QDCM_REG1_MASK,
175 MCUSYS_PAR_WRAP_MCU_BUS_QDCM_REG1_ON);
176
177 return ret;
178 }
179
dcm_mcusys_par_wrap_mcu_bus_qdcm(bool on)180 void dcm_mcusys_par_wrap_mcu_bus_qdcm(bool on)
181 {
182 if (on) {
183 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_QDCM_CONFIG0,
184 MCUSYS_PAR_WRAP_MCU_BUS_QDCM_REG0_MASK,
185 MCUSYS_PAR_WRAP_MCU_BUS_QDCM_REG0_ON);
186 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_QDCM_CONFIG1,
187 MCUSYS_PAR_WRAP_MCU_BUS_QDCM_REG1_MASK,
188 MCUSYS_PAR_WRAP_MCU_BUS_QDCM_REG1_ON);
189 } else {
190 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_QDCM_CONFIG0,
191 MCUSYS_PAR_WRAP_MCU_BUS_QDCM_REG0_MASK,
192 MCUSYS_PAR_WRAP_MCU_BUS_QDCM_REG0_OFF);
193 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_QDCM_CONFIG1,
194 MCUSYS_PAR_WRAP_MCU_BUS_QDCM_REG1_MASK,
195 MCUSYS_PAR_WRAP_MCU_BUS_QDCM_REG1_OFF);
196 }
197 }
198
dcm_mcusys_par_wrap_mcu_core_qdcm_is_on(void)199 bool dcm_mcusys_par_wrap_mcu_core_qdcm_is_on(void)
200 {
201 bool ret = true;
202
203 ret &= dcm_check_state(MCUSYS_PAR_WRAP_QDCM_CONFIG2,
204 MCUSYS_PAR_WRAP_MCU_CORE_QDCM_REG0_MASK,
205 MCUSYS_PAR_WRAP_MCU_CORE_QDCM_REG0_ON);
206 ret &= dcm_check_state(MCUSYS_PAR_WRAP_QDCM_CONFIG3,
207 MCUSYS_PAR_WRAP_MCU_CORE_QDCM_REG1_MASK,
208 MCUSYS_PAR_WRAP_MCU_CORE_QDCM_REG1_ON);
209
210 return ret;
211 }
212
dcm_mcusys_par_wrap_mcu_core_qdcm(bool on)213 void dcm_mcusys_par_wrap_mcu_core_qdcm(bool on)
214 {
215 if (on) {
216 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_QDCM_CONFIG2,
217 MCUSYS_PAR_WRAP_MCU_CORE_QDCM_REG0_MASK,
218 MCUSYS_PAR_WRAP_MCU_CORE_QDCM_REG0_ON);
219 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_QDCM_CONFIG3,
220 MCUSYS_PAR_WRAP_MCU_CORE_QDCM_REG1_MASK,
221 MCUSYS_PAR_WRAP_MCU_CORE_QDCM_REG1_ON);
222 } else {
223 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_QDCM_CONFIG2,
224 MCUSYS_PAR_WRAP_MCU_CORE_QDCM_REG0_MASK,
225 MCUSYS_PAR_WRAP_MCU_CORE_QDCM_REG0_OFF);
226 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_QDCM_CONFIG3,
227 MCUSYS_PAR_WRAP_MCU_CORE_QDCM_REG1_MASK,
228 MCUSYS_PAR_WRAP_MCU_CORE_QDCM_REG1_OFF);
229 }
230 }
231
dcm_mcusys_par_wrap_mcu_bkr_ldcm1_is_on(void)232 bool dcm_mcusys_par_wrap_mcu_bkr_ldcm1_is_on(void)
233 {
234 return dcm_check_state(MCUSYS_PAR_WRAP_CI700_DCM_CTRL,
235 MCUSYS_PAR_WRAP_MCU_BKR_LDCM1_REG0_MASK,
236 MCUSYS_PAR_WRAP_MCU_BKR_LDCM1_REG0_ON);
237
238 }
239
dcm_mcusys_par_wrap_mcu_bkr_ldcm1(bool on)240 void dcm_mcusys_par_wrap_mcu_bkr_ldcm1(bool on)
241 {
242 if (on)
243 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CI700_DCM_CTRL,
244 MCUSYS_PAR_WRAP_MCU_BKR_LDCM1_REG0_MASK,
245 MCUSYS_PAR_WRAP_MCU_BKR_LDCM1_REG0_ON);
246 else
247 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CI700_DCM_CTRL,
248 MCUSYS_PAR_WRAP_MCU_BKR_LDCM1_REG0_MASK,
249 MCUSYS_PAR_WRAP_MCU_BKR_LDCM1_REG0_OFF);
250 }
251
dcm_mcusys_par_wrap_mcu_bkr_ldcm2_is_on(void)252 bool dcm_mcusys_par_wrap_mcu_bkr_ldcm2_is_on(void)
253 {
254 return dcm_check_state(MCUSYS_PAR_WRAP_CI700_DCM_CTRL,
255 MCUSYS_PAR_WRAP_MCU_BKR_LDCM2_REG0_MASK,
256 MCUSYS_PAR_WRAP_MCU_BKR_LDCM2_REG0_ON);
257
258 }
259
dcm_mcusys_par_wrap_mcu_bkr_ldcm2(bool on)260 void dcm_mcusys_par_wrap_mcu_bkr_ldcm2(bool on)
261 {
262 if (on)
263 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CI700_DCM_CTRL,
264 MCUSYS_PAR_WRAP_MCU_BKR_LDCM2_REG0_MASK,
265 MCUSYS_PAR_WRAP_MCU_BKR_LDCM2_REG0_ON);
266 else
267 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CI700_DCM_CTRL,
268 MCUSYS_PAR_WRAP_MCU_BKR_LDCM2_REG0_MASK,
269 MCUSYS_PAR_WRAP_MCU_BKR_LDCM2_REG0_OFF);
270 }
271
dcm_mcusys_par_wrap_mcu_cbip_dcm_is_on(void)272 bool dcm_mcusys_par_wrap_mcu_cbip_dcm_is_on(void)
273 {
274 bool ret = true;
275
276 ret &= dcm_check_state(MCUSYS_PAR_WRAP_CBIP_CABGEN_3TO1_CONFIG,
277 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG0_MASK,
278 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG0_ON);
279 ret &= dcm_check_state(MCUSYS_PAR_WRAP_CBIP_CABGEN_2TO1_CONFIG,
280 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG1_MASK,
281 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG1_ON);
282 ret &= dcm_check_state(MCUSYS_PAR_WRAP_CBIP_CABGEN_4TO2_CONFIG,
283 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG2_MASK,
284 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG2_ON);
285 ret &= dcm_check_state(MCUSYS_PAR_WRAP_CBIP_CABGEN_1TO2_CONFIG,
286 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG3_MASK,
287 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG3_ON);
288 ret &= dcm_check_state(MCUSYS_PAR_WRAP_CBIP_CABGEN_2TO5_CONFIG,
289 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG4_MASK,
290 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG4_ON);
291 ret &= dcm_check_state(MCUSYS_PAR_WRAP_CBIP_P2P_CONFIG0,
292 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG5_MASK,
293 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG5_ON);
294 ret &= dcm_check_state(MCUSYS_PAR_WRAP_CBIP_CABGEN_1TO2_L3GIC_CONFIG,
295 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG6_MASK,
296 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG6_ON);
297 ret &= dcm_check_state(MCUSYS_PAR_WRAP_CBIP_CABGEN_1TO2_INFRA_CONFIG,
298 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG7_MASK,
299 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG7_ON);
300
301 return ret;
302 }
303
dcm_mcusys_par_wrap_mcu_cbip_dcm(bool on)304 void dcm_mcusys_par_wrap_mcu_cbip_dcm(bool on)
305 {
306 if (on) {
307 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_3TO1_CONFIG,
308 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG0_MASK,
309 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG0_ON);
310 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_2TO1_CONFIG,
311 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG1_MASK,
312 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG1_ON);
313 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_4TO2_CONFIG,
314 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG2_MASK,
315 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG2_ON);
316 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_1TO2_CONFIG,
317 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG3_MASK,
318 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG3_ON);
319 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_2TO5_CONFIG,
320 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG4_MASK,
321 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG4_ON);
322 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_P2P_CONFIG0,
323 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG5_MASK,
324 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG5_ON);
325 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_1TO2_L3GIC_CONFIG,
326 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG6_MASK,
327 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG6_ON);
328 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_1TO2_INFRA_CONFIG,
329 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG7_MASK,
330 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG7_ON);
331 } else {
332 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_3TO1_CONFIG,
333 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG0_MASK,
334 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG0_OFF);
335 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_2TO1_CONFIG,
336 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG1_MASK,
337 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG1_OFF);
338 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_4TO2_CONFIG,
339 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG2_MASK,
340 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG2_OFF);
341 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_1TO2_CONFIG,
342 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG3_MASK,
343 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG3_OFF);
344 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_2TO5_CONFIG,
345 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG4_MASK,
346 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG4_OFF);
347 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_P2P_CONFIG0,
348 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG5_MASK,
349 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG5_OFF);
350 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_1TO2_L3GIC_CONFIG,
351 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG6_MASK,
352 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG6_OFF);
353 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_CBIP_CABGEN_1TO2_INFRA_CONFIG,
354 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG7_MASK,
355 MCUSYS_PAR_WRAP_MCU_CBIP_DCM_REG7_OFF);
356 }
357 }
358
dcm_mcusys_par_wrap_mcu_misc_dcm_is_on(void)359 bool dcm_mcusys_par_wrap_mcu_misc_dcm_is_on(void)
360 {
361 return dcm_check_state(MCUSYS_PAR_WRAP_MP_CENTRAL_FABRIC_SUB_CHANNEL_CG,
362 MCUSYS_PAR_WRAP_MCU_MISC_DCM_REG0_MASK,
363 MCUSYS_PAR_WRAP_MCU_MISC_DCM_REG0_ON);
364 }
365
dcm_mcusys_par_wrap_mcu_misc_dcm(bool on)366 void dcm_mcusys_par_wrap_mcu_misc_dcm(bool on)
367 {
368 if (on)
369 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_MP_CENTRAL_FABRIC_SUB_CHANNEL_CG,
370 MCUSYS_PAR_WRAP_MCU_MISC_DCM_REG0_MASK,
371 MCUSYS_PAR_WRAP_MCU_MISC_DCM_REG0_ON);
372 else
373 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_MP_CENTRAL_FABRIC_SUB_CHANNEL_CG,
374 MCUSYS_PAR_WRAP_MCU_MISC_DCM_REG0_MASK,
375 MCUSYS_PAR_WRAP_MCU_MISC_DCM_REG0_OFF);
376 }
377
dcm_mcusys_par_wrap_mcu_dsu_acp_dcm_is_on(void)378 bool dcm_mcusys_par_wrap_mcu_dsu_acp_dcm_is_on(void)
379 {
380 return dcm_check_state(MCUSYS_PAR_WRAP_ACP_SLAVE_DCM_EN,
381 MCUSYS_PAR_WRAP_MCU_DSU_ACP_DCM_REG0_MASK,
382 MCUSYS_PAR_WRAP_MCU_DSU_ACP_DCM_REG0_ON);
383 }
384
dcm_mcusys_par_wrap_mcu_dsu_acp_dcm(bool on)385 void dcm_mcusys_par_wrap_mcu_dsu_acp_dcm(bool on)
386 {
387 if (on)
388 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_ACP_SLAVE_DCM_EN,
389 MCUSYS_PAR_WRAP_MCU_DSU_ACP_DCM_REG0_MASK,
390 MCUSYS_PAR_WRAP_MCU_DSU_ACP_DCM_REG0_ON);
391 else
392 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_ACP_SLAVE_DCM_EN,
393 MCUSYS_PAR_WRAP_MCU_DSU_ACP_DCM_REG0_MASK,
394 MCUSYS_PAR_WRAP_MCU_DSU_ACP_DCM_REG0_OFF);
395 }
396
dcm_mcusys_par_wrap_mcu_chi_mon_dcm_is_on(void)397 bool dcm_mcusys_par_wrap_mcu_chi_mon_dcm_is_on(void)
398 {
399 return dcm_check_state(MCUSYS_PAR_WRAP_ACP_SLAVE_DCM_EN,
400 MCUSYS_PAR_WRAP_MCU_CHI_MON_DCM_REG0_MASK,
401 MCUSYS_PAR_WRAP_MCU_CHI_MON_DCM_REG0_ON);
402 }
403
dcm_mcusys_par_wrap_mcu_chi_mon_dcm(bool on)404 void dcm_mcusys_par_wrap_mcu_chi_mon_dcm(bool on)
405 {
406 if (on)
407 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_ACP_SLAVE_DCM_EN,
408 MCUSYS_PAR_WRAP_MCU_CHI_MON_DCM_REG0_MASK,
409 MCUSYS_PAR_WRAP_MCU_CHI_MON_DCM_REG0_ON);
410 else
411 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_ACP_SLAVE_DCM_EN,
412 MCUSYS_PAR_WRAP_MCU_CHI_MON_DCM_REG0_MASK,
413 MCUSYS_PAR_WRAP_MCU_CHI_MON_DCM_REG0_OFF);
414 }
415
dcm_mcusys_par_wrap_mcu_gic_spi_dcm_is_on(void)416 bool dcm_mcusys_par_wrap_mcu_gic_spi_dcm_is_on(void)
417 {
418 return dcm_check_state(MCUSYS_PAR_WRAP_GIC_SPI_SLOW_CK_CFG,
419 MCUSYS_PAR_WRAP_MCU_GIC_SPI_DCM_REG0_MASK,
420 MCUSYS_PAR_WRAP_MCU_GIC_SPI_DCM_REG0_ON);
421 }
422
dcm_mcusys_par_wrap_mcu_gic_spi_dcm(bool on)423 void dcm_mcusys_par_wrap_mcu_gic_spi_dcm(bool on)
424 {
425 if (on)
426 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_GIC_SPI_SLOW_CK_CFG,
427 MCUSYS_PAR_WRAP_MCU_GIC_SPI_DCM_REG0_MASK,
428 MCUSYS_PAR_WRAP_MCU_GIC_SPI_DCM_REG0_ON);
429 else
430 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_GIC_SPI_SLOW_CK_CFG,
431 MCUSYS_PAR_WRAP_MCU_GIC_SPI_DCM_REG0_MASK,
432 MCUSYS_PAR_WRAP_MCU_GIC_SPI_DCM_REG0_OFF);
433 }
434
dcm_mcusys_par_wrap_mcu_ebg_dcm_is_on(void)435 bool dcm_mcusys_par_wrap_mcu_ebg_dcm_is_on(void)
436 {
437 return dcm_check_state(MCUSYS_PAR_WRAP_EBG_CKE_WRAP_FIFO_CFG,
438 MCUSYS_PAR_WRAP_MCU_EBG_DCM_REG0_MASK,
439 MCUSYS_PAR_WRAP_MCU_EBG_DCM_REG0_ON);
440 }
441
dcm_mcusys_par_wrap_mcu_ebg_dcm(bool on)442 void dcm_mcusys_par_wrap_mcu_ebg_dcm(bool on)
443 {
444 if (on)
445 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_EBG_CKE_WRAP_FIFO_CFG,
446 MCUSYS_PAR_WRAP_MCU_EBG_DCM_REG0_MASK,
447 MCUSYS_PAR_WRAP_MCU_EBG_DCM_REG0_ON);
448 else
449 mmio_clrsetbits_32(MCUSYS_PAR_WRAP_EBG_CKE_WRAP_FIFO_CFG,
450 MCUSYS_PAR_WRAP_MCU_EBG_DCM_REG0_MASK,
451 MCUSYS_PAR_WRAP_MCU_EBG_DCM_REG0_OFF);
452 }
453
dcm_bcrm_apinfra_io_ctrl_ao_infra_bus_dcm_is_on(void)454 bool dcm_bcrm_apinfra_io_ctrl_ao_infra_bus_dcm_is_on(void)
455 {
456 return dcm_check_state(CLK_AXI_VDNR_DCM_TOP_APINFRA_IO_INTX_BUS_CTRL_0,
457 APINFRA_IO_CTRL_AO_INFRA_BUS_DCM_REG0_MASK,
458 APINFRA_IO_CTRL_AO_INFRA_BUS_DCM_REG0_ON);
459 }
460
dcm_bcrm_apinfra_io_ctrl_ao_infra_bus_dcm(bool on)461 void dcm_bcrm_apinfra_io_ctrl_ao_infra_bus_dcm(bool on)
462 {
463 if (on)
464 mmio_clrsetbits_32(CLK_AXI_VDNR_DCM_TOP_APINFRA_IO_INTX_BUS_CTRL_0,
465 APINFRA_IO_CTRL_AO_INFRA_BUS_DCM_REG0_MASK,
466 APINFRA_IO_CTRL_AO_INFRA_BUS_DCM_REG0_ON);
467 else
468 mmio_clrsetbits_32(CLK_AXI_VDNR_DCM_TOP_APINFRA_IO_INTX_BUS_CTRL_0,
469 APINFRA_IO_CTRL_AO_INFRA_BUS_DCM_REG0_MASK,
470 APINFRA_IO_CTRL_AO_INFRA_BUS_DCM_REG0_OFF);
471 }
472
dcm_bcrm_apinfra_io_noc_ao_infra_bus_dcm_is_on(void)473 bool dcm_bcrm_apinfra_io_noc_ao_infra_bus_dcm_is_on(void)
474 {
475 return dcm_check_state(CLK_IO_NOC_VDNR_DCM_TOP_APINFRA_IO_INTF_PAR_BUS_CTRL_0,
476 APINFRA_IO_NOC_AO_INFRA_BUS_DCM_REG0_MASK,
477 APINFRA_IO_NOC_AO_INFRA_BUS_DCM_REG0_ON);
478 }
479
dcm_bcrm_apinfra_io_noc_ao_infra_bus_dcm(bool on)480 void dcm_bcrm_apinfra_io_noc_ao_infra_bus_dcm(bool on)
481 {
482 if (on)
483 mmio_clrsetbits_32(CLK_IO_NOC_VDNR_DCM_TOP_APINFRA_IO_INTF_PAR_BUS_CTRL_0,
484 APINFRA_IO_NOC_AO_INFRA_BUS_DCM_REG0_MASK,
485 APINFRA_IO_NOC_AO_INFRA_BUS_DCM_REG0_ON);
486 else
487 mmio_clrsetbits_32(CLK_IO_NOC_VDNR_DCM_TOP_APINFRA_IO_INTF_PAR_BUS_CTRL_0,
488 APINFRA_IO_NOC_AO_INFRA_BUS_DCM_REG0_MASK,
489 APINFRA_IO_NOC_AO_INFRA_BUS_DCM_REG0_OFF);
490 }
491
dcm_bcrm_apinfra_mem_intf_noc_ao_infra_bus_dcm_is_on(void)492 bool dcm_bcrm_apinfra_mem_intf_noc_ao_infra_bus_dcm_is_on(void)
493 {
494 return dcm_check_state(VDNR_DCM_TOP_APINFRA_MEM_INTF_PAR_BUS_CTRL_0,
495 APINFRA_MEM_INTF_NOC_AO_INFRA_BUS_DCM_REG0_MASK,
496 APINFRA_MEM_INTF_NOC_AO_INFRA_BUS_DCM_REG0_ON);
497 }
498
dcm_bcrm_apinfra_mem_intf_noc_ao_infra_bus_dcm(bool on)499 void dcm_bcrm_apinfra_mem_intf_noc_ao_infra_bus_dcm(bool on)
500 {
501 if (on)
502 mmio_clrsetbits_32(VDNR_DCM_TOP_APINFRA_MEM_INTF_PAR_BUS_CTRL_0,
503 APINFRA_MEM_INTF_NOC_AO_INFRA_BUS_DCM_REG0_MASK,
504 APINFRA_MEM_INTF_NOC_AO_INFRA_BUS_DCM_REG0_ON);
505 else
506 mmio_clrsetbits_32(VDNR_DCM_TOP_APINFRA_MEM_INTF_PAR_BUS_CTRL_0,
507 APINFRA_MEM_INTF_NOC_AO_INFRA_BUS_DCM_REG0_MASK,
508 APINFRA_MEM_INTF_NOC_AO_INFRA_BUS_DCM_REG0_OFF);
509 }
510
dcm_bcrm_apinfra_mem_ctrl_ao_infra_bus_dcm_is_on(void)511 bool dcm_bcrm_apinfra_mem_ctrl_ao_infra_bus_dcm_is_on(void)
512 {
513 bool ret = true;
514
515 ret &= dcm_check_state(CLK_FMEM_SUB_CFG_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_0,
516 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG0_MASK,
517 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG0_ON);
518 ret &= dcm_check_state(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_0,
519 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG1_MASK,
520 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG1_ON);
521 ret &= dcm_check_state(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_1,
522 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG2_MASK,
523 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG2_ON);
524 ret &= dcm_check_state(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_2,
525 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG3_MASK,
526 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG3_ON);
527 ret &= dcm_check_state(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_3,
528 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG4_MASK,
529 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG4_ON);
530 ret &= dcm_check_state(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_4,
531 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG5_MASK,
532 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG5_ON);
533 ret &= dcm_check_state(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_5,
534 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG6_MASK,
535 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG6_ON);
536
537 return ret;
538 }
539
dcm_bcrm_apinfra_mem_ctrl_ao_infra_bus_dcm(bool on)540 void dcm_bcrm_apinfra_mem_ctrl_ao_infra_bus_dcm(bool on)
541 {
542 if (on) {
543 mmio_clrsetbits_32(CLK_FMEM_SUB_CFG_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_0,
544 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG0_MASK,
545 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG0_ON);
546 mmio_clrsetbits_32(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_0,
547 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG1_MASK,
548 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG1_ON);
549 mmio_clrsetbits_32(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_1,
550 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG2_MASK,
551 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG2_ON);
552 mmio_clrsetbits_32(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_2,
553 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG3_MASK,
554 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG3_ON);
555 mmio_clrsetbits_32(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_3,
556 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG4_MASK,
557 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG4_ON);
558 mmio_clrsetbits_32(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_4,
559 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG5_MASK,
560 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG5_ON);
561 mmio_clrsetbits_32(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_5,
562 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG6_MASK,
563 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG6_ON);
564 } else {
565 mmio_clrsetbits_32(CLK_FMEM_SUB_CFG_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_0,
566 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG0_MASK,
567 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG0_OFF);
568 mmio_clrsetbits_32(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_0,
569 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG1_MASK,
570 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG1_OFF);
571 mmio_clrsetbits_32(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_1,
572 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG2_MASK,
573 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG2_OFF);
574 mmio_clrsetbits_32(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_2,
575 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG3_MASK,
576 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG3_OFF);
577 mmio_clrsetbits_32(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_3,
578 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG4_MASK,
579 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG4_OFF);
580 mmio_clrsetbits_32(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_4,
581 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG5_MASK,
582 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG5_OFF);
583 mmio_clrsetbits_32(CLK_FMEM_SUB_VDNR_DCM_TOP_APINFRA_MEM_INTX_BUS_CTRL_5,
584 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG6_MASK,
585 APINFRA_MEM_CTRL_AO_INFRA_BUS_DCM_REG6_OFF);
586 }
587 }
588
dcm_peri_ao_bcrm_peri_bus1_dcm_is_on(void)589 bool dcm_peri_ao_bcrm_peri_bus1_dcm_is_on(void)
590 {
591 bool ret = true;
592
593 ret &= dcm_check_state(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL1_0,
594 PERI_AO_BCRM_PERI_BUS_DCM_REG0_MASK,
595 PERI_AO_BCRM_PERI_BUS_DCM_REG0_ON);
596 ret &= dcm_check_state(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL1_1,
597 PERI_AO_BCRM_PERI_BUS_DCM_REG1_MASK,
598 PERI_AO_BCRM_PERI_BUS_DCM_REG1_ON);
599 ret &= dcm_check_state(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL1_2,
600 PERI_AO_BCRM_PERI_BUS_DCM_REG2_MASK,
601 PERI_AO_BCRM_PERI_BUS_DCM_REG2_ON);
602 ret &= dcm_check_state(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL1_3,
603 PERI_AO_BCRM_PERI_BUS_DCM_REG3_MASK,
604 PERI_AO_BCRM_PERI_BUS_DCM_REG3_ON);
605
606 return ret;
607 }
608
dcm_peri_ao_bcrm_peri_bus1_dcm(bool on)609 void dcm_peri_ao_bcrm_peri_bus1_dcm(bool on)
610 {
611 if (on) {
612 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL1_0,
613 PERI_AO_BCRM_PERI_BUS_DCM_REG0_MASK,
614 PERI_AO_BCRM_PERI_BUS_DCM_REG0_ON);
615 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL1_1,
616 PERI_AO_BCRM_PERI_BUS_DCM_REG1_MASK,
617 PERI_AO_BCRM_PERI_BUS_DCM_REG1_ON);
618 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL1_2,
619 PERI_AO_BCRM_PERI_BUS_DCM_REG2_MASK,
620 PERI_AO_BCRM_PERI_BUS_DCM_REG2_ON);
621 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL1_3,
622 PERI_AO_BCRM_PERI_BUS_DCM_REG3_MASK,
623 PERI_AO_BCRM_PERI_BUS_DCM_REG3_ON);
624 } else {
625 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL1_0,
626 PERI_AO_BCRM_PERI_BUS_DCM_REG0_MASK,
627 PERI_AO_BCRM_PERI_BUS_DCM_REG0_OFF);
628 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL1_1,
629 PERI_AO_BCRM_PERI_BUS_DCM_REG1_MASK,
630 PERI_AO_BCRM_PERI_BUS_DCM_REG1_OFF);
631 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL1_2,
632 PERI_AO_BCRM_PERI_BUS_DCM_REG2_MASK,
633 PERI_AO_BCRM_PERI_BUS_DCM_REG2_OFF);
634 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL1_3,
635 PERI_AO_BCRM_PERI_BUS_DCM_REG3_MASK,
636 PERI_AO_BCRM_PERI_BUS_DCM_REG3_OFF);
637 }
638 }
639
dcm_peri_ao_bcrm_peri_bus2_dcm_is_on(void)640 bool dcm_peri_ao_bcrm_peri_bus2_dcm_is_on(void)
641 {
642 bool ret = true;
643
644 ret &= dcm_check_state(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL2_0,
645 PERI_AO_BCRM_PERI_BUS_DCM_REG0_MASK,
646 PERI_AO_BCRM_PERI_BUS_DCM_REG0_ON);
647 ret &= dcm_check_state(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL2_1,
648 PERI_AO_BCRM_PERI_BUS_DCM_REG1_MASK,
649 PERI_AO_BCRM_PERI_BUS_DCM_REG1_ON);
650 ret &= dcm_check_state(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL2_2,
651 PERI_AO_BCRM_PERI_BUS_DCM_REG2_MASK,
652 PERI_AO_BCRM_PERI_BUS_DCM_REG2_ON);
653 ret &= dcm_check_state(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL2_3,
654 PERI_AO_BCRM_PERI_BUS_DCM_REG3_MASK,
655 PERI_AO_BCRM_PERI_BUS_DCM_REG3_ON);
656
657 return ret;
658 }
659
dcm_peri_ao_bcrm_peri_bus2_dcm(bool on)660 void dcm_peri_ao_bcrm_peri_bus2_dcm(bool on)
661 {
662 if (on) {
663 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL2_0,
664 PERI_AO_BCRM_PERI_BUS_DCM_REG0_MASK,
665 PERI_AO_BCRM_PERI_BUS_DCM_REG0_ON);
666 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL2_1,
667 PERI_AO_BCRM_PERI_BUS_DCM_REG1_MASK,
668 PERI_AO_BCRM_PERI_BUS_DCM_REG1_ON);
669 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL2_2,
670 PERI_AO_BCRM_PERI_BUS_DCM_REG2_MASK,
671 PERI_AO_BCRM_PERI_BUS_DCM_REG2_ON);
672 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL2_3,
673 PERI_AO_BCRM_PERI_BUS_DCM_REG3_MASK,
674 PERI_AO_BCRM_PERI_BUS_DCM_REG3_ON);
675 } else {
676 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL2_0,
677 PERI_AO_BCRM_PERI_BUS_DCM_REG0_MASK,
678 PERI_AO_BCRM_PERI_BUS_DCM_REG0_OFF);
679 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL2_1,
680 PERI_AO_BCRM_PERI_BUS_DCM_REG1_MASK,
681 PERI_AO_BCRM_PERI_BUS_DCM_REG1_OFF);
682 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL2_2,
683 PERI_AO_BCRM_PERI_BUS_DCM_REG2_MASK,
684 PERI_AO_BCRM_PERI_BUS_DCM_REG2_OFF);
685 mmio_clrsetbits_32(VDNR_DCM_TOP_PERI_PAR_BUS_CTRL2_3,
686 PERI_AO_BCRM_PERI_BUS_DCM_REG3_MASK,
687 PERI_AO_BCRM_PERI_BUS_DCM_REG3_OFF);
688 }
689 }
690
dcm_vlp_ao_bcrm_vlp_bus_dcm_is_on(void)691 bool dcm_vlp_ao_bcrm_vlp_bus_dcm_is_on(void)
692 {
693 return dcm_check_state(VDNR_DCM_TOP_VLP_PAR_BUS_TOP_CTRL_0,
694 VLP_AO_BCRM_VLP_BUS_DCM_REG0_MASK,
695 VLP_AO_BCRM_VLP_BUS_DCM_REG0_ON);
696 }
697
dcm_vlp_ao_bcrm_vlp_bus_dcm(bool on)698 void dcm_vlp_ao_bcrm_vlp_bus_dcm(bool on)
699 {
700 if (on)
701 mmio_clrsetbits_32(VDNR_DCM_TOP_VLP_PAR_BUS_TOP_CTRL_0,
702 VLP_AO_BCRM_VLP_BUS_DCM_REG0_MASK,
703 VLP_AO_BCRM_VLP_BUS_DCM_REG0_ON);
704 else
705 mmio_clrsetbits_32(VDNR_DCM_TOP_VLP_PAR_BUS_TOP_CTRL_0,
706 VLP_AO_BCRM_VLP_BUS_DCM_REG0_MASK,
707 VLP_AO_BCRM_VLP_BUS_DCM_REG0_OFF);
708 }
709