xref: /rk3399_ARM-atf/plat/mediatek/mt8196/drivers/dcm/mtk_dcm_utils.c (revision 06f3c7058c42a9f1a9f7df75ea2de71a000855e8)
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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