xref: /rk3399_ARM-atf/plat/mediatek/mt8192/drivers/dcm/mtk_dcm_utils.c (revision 77990838a4486bc266377243af3e328c0daa9f3e)
1*43d7bbccSNina Wu /*
2*43d7bbccSNina Wu  * Copyright (c) 2020, MediaTek Inc. All rights reserved.
3*43d7bbccSNina Wu  *
4*43d7bbccSNina Wu  * SPDX-License-Identifier: BSD-3-Clause
5*43d7bbccSNina Wu  */
6*43d7bbccSNina Wu 
7*43d7bbccSNina Wu #include <lib/mmio.h>
8*43d7bbccSNina Wu #include <lib/utils_def.h>
9*43d7bbccSNina Wu #include <mtk_dcm_utils.h>
10*43d7bbccSNina Wu 
11*43d7bbccSNina Wu #define MP_CPUSYS_TOP_ADB_DCM_REG0_MASK (BIT(17))
12*43d7bbccSNina Wu #define MP_CPUSYS_TOP_ADB_DCM_REG1_MASK (BIT(15) | \
13*43d7bbccSNina Wu 			BIT(16) | \
14*43d7bbccSNina Wu 			BIT(17) | \
15*43d7bbccSNina Wu 			BIT(18) | \
16*43d7bbccSNina Wu 			BIT(21))
17*43d7bbccSNina Wu #define MP_CPUSYS_TOP_ADB_DCM_REG2_MASK (BIT(15) | \
18*43d7bbccSNina Wu 			BIT(16) | \
19*43d7bbccSNina Wu 			BIT(17) | \
20*43d7bbccSNina Wu 			BIT(18))
21*43d7bbccSNina Wu #define MP_CPUSYS_TOP_ADB_DCM_REG0_ON (BIT(17))
22*43d7bbccSNina Wu #define MP_CPUSYS_TOP_ADB_DCM_REG1_ON (BIT(15) | \
23*43d7bbccSNina Wu 			BIT(16) | \
24*43d7bbccSNina Wu 			BIT(17) | \
25*43d7bbccSNina Wu 			BIT(18) | \
26*43d7bbccSNina Wu 			BIT(21))
27*43d7bbccSNina Wu #define MP_CPUSYS_TOP_ADB_DCM_REG2_ON (BIT(15) | \
28*43d7bbccSNina Wu 			BIT(16) | \
29*43d7bbccSNina Wu 			BIT(17) | \
30*43d7bbccSNina Wu 			BIT(18))
31*43d7bbccSNina Wu #define MP_CPUSYS_TOP_ADB_DCM_REG0_OFF ((0x0 << 17))
32*43d7bbccSNina Wu #define MP_CPUSYS_TOP_ADB_DCM_REG1_OFF ((0x0 << 15) | \
33*43d7bbccSNina Wu 			(0x0 << 16) | \
34*43d7bbccSNina Wu 			(0x0 << 17) | \
35*43d7bbccSNina Wu 			(0x0 << 18) | \
36*43d7bbccSNina Wu 			(0x0 << 21))
37*43d7bbccSNina Wu #define MP_CPUSYS_TOP_ADB_DCM_REG2_OFF ((0x0 << 15) | \
38*43d7bbccSNina Wu 			(0x0 << 16) | \
39*43d7bbccSNina Wu 			(0x0 << 17) | \
40*43d7bbccSNina Wu 			(0x0 << 18))
41*43d7bbccSNina Wu 
dcm_mp_cpusys_top_adb_dcm_is_on(void)42*43d7bbccSNina Wu bool dcm_mp_cpusys_top_adb_dcm_is_on(void)
43*43d7bbccSNina Wu {
44*43d7bbccSNina Wu 	bool ret = true;
45*43d7bbccSNina Wu 
46*43d7bbccSNina Wu 	ret &= ((mmio_read_32(MP_ADB_DCM_CFG0) &
47*43d7bbccSNina Wu 		MP_CPUSYS_TOP_ADB_DCM_REG0_MASK) ==
48*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_ADB_DCM_REG0_ON);
49*43d7bbccSNina Wu 	ret &= ((mmio_read_32(MP_ADB_DCM_CFG4) &
50*43d7bbccSNina Wu 		MP_CPUSYS_TOP_ADB_DCM_REG1_MASK) ==
51*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_ADB_DCM_REG1_ON);
52*43d7bbccSNina Wu 	ret &= ((mmio_read_32(MCUSYS_DCM_CFG0) &
53*43d7bbccSNina Wu 		MP_CPUSYS_TOP_ADB_DCM_REG2_MASK) ==
54*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_ADB_DCM_REG2_ON);
55*43d7bbccSNina Wu 
56*43d7bbccSNina Wu 	return ret;
57*43d7bbccSNina Wu }
58*43d7bbccSNina Wu 
dcm_mp_cpusys_top_adb_dcm(bool on)59*43d7bbccSNina Wu void dcm_mp_cpusys_top_adb_dcm(bool on)
60*43d7bbccSNina Wu {
61*43d7bbccSNina Wu 	if (on) {
62*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_adb_dcm'" */
63*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP_ADB_DCM_CFG0,
64*43d7bbccSNina Wu 			MP_CPUSYS_TOP_ADB_DCM_REG0_MASK,
65*43d7bbccSNina Wu 			MP_CPUSYS_TOP_ADB_DCM_REG0_ON);
66*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP_ADB_DCM_CFG4,
67*43d7bbccSNina Wu 			MP_CPUSYS_TOP_ADB_DCM_REG1_MASK,
68*43d7bbccSNina Wu 			MP_CPUSYS_TOP_ADB_DCM_REG1_ON);
69*43d7bbccSNina Wu 		mmio_clrsetbits_32(MCUSYS_DCM_CFG0,
70*43d7bbccSNina Wu 			MP_CPUSYS_TOP_ADB_DCM_REG2_MASK,
71*43d7bbccSNina Wu 			MP_CPUSYS_TOP_ADB_DCM_REG2_ON);
72*43d7bbccSNina Wu 	} else {
73*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_adb_dcm'" */
74*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP_ADB_DCM_CFG0,
75*43d7bbccSNina Wu 			MP_CPUSYS_TOP_ADB_DCM_REG0_MASK,
76*43d7bbccSNina Wu 			MP_CPUSYS_TOP_ADB_DCM_REG0_OFF);
77*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP_ADB_DCM_CFG4,
78*43d7bbccSNina Wu 			MP_CPUSYS_TOP_ADB_DCM_REG1_MASK,
79*43d7bbccSNina Wu 			MP_CPUSYS_TOP_ADB_DCM_REG1_OFF);
80*43d7bbccSNina Wu 		mmio_clrsetbits_32(MCUSYS_DCM_CFG0,
81*43d7bbccSNina Wu 			MP_CPUSYS_TOP_ADB_DCM_REG2_MASK,
82*43d7bbccSNina Wu 			MP_CPUSYS_TOP_ADB_DCM_REG2_OFF);
83*43d7bbccSNina Wu 	}
84*43d7bbccSNina Wu }
85*43d7bbccSNina Wu 
86*43d7bbccSNina Wu #define MP_CPUSYS_TOP_APB_DCM_REG0_MASK (BIT(5))
87*43d7bbccSNina Wu #define MP_CPUSYS_TOP_APB_DCM_REG1_MASK (BIT(8))
88*43d7bbccSNina Wu #define MP_CPUSYS_TOP_APB_DCM_REG2_MASK (BIT(16))
89*43d7bbccSNina Wu #define MP_CPUSYS_TOP_APB_DCM_REG0_ON (BIT(5))
90*43d7bbccSNina Wu #define MP_CPUSYS_TOP_APB_DCM_REG1_ON (BIT(8))
91*43d7bbccSNina Wu #define MP_CPUSYS_TOP_APB_DCM_REG2_ON (BIT(16))
92*43d7bbccSNina Wu #define MP_CPUSYS_TOP_APB_DCM_REG0_OFF ((0x0 << 5))
93*43d7bbccSNina Wu #define MP_CPUSYS_TOP_APB_DCM_REG1_OFF ((0x0 << 8))
94*43d7bbccSNina Wu #define MP_CPUSYS_TOP_APB_DCM_REG2_OFF ((0x0 << 16))
95*43d7bbccSNina Wu 
dcm_mp_cpusys_top_apb_dcm_is_on(void)96*43d7bbccSNina Wu bool dcm_mp_cpusys_top_apb_dcm_is_on(void)
97*43d7bbccSNina Wu {
98*43d7bbccSNina Wu 	bool ret = true;
99*43d7bbccSNina Wu 
100*43d7bbccSNina Wu 	ret &= ((mmio_read_32(MP_MISC_DCM_CFG0) &
101*43d7bbccSNina Wu 		MP_CPUSYS_TOP_APB_DCM_REG0_MASK) ==
102*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_APB_DCM_REG0_ON);
103*43d7bbccSNina Wu 	ret &= ((mmio_read_32(MCUSYS_DCM_CFG0) &
104*43d7bbccSNina Wu 		MP_CPUSYS_TOP_APB_DCM_REG1_MASK) ==
105*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_APB_DCM_REG1_ON);
106*43d7bbccSNina Wu 	ret &= ((mmio_read_32(MP0_DCM_CFG0) &
107*43d7bbccSNina Wu 		MP_CPUSYS_TOP_APB_DCM_REG2_MASK) ==
108*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_APB_DCM_REG2_ON);
109*43d7bbccSNina Wu 
110*43d7bbccSNina Wu 	return ret;
111*43d7bbccSNina Wu }
112*43d7bbccSNina Wu 
dcm_mp_cpusys_top_apb_dcm(bool on)113*43d7bbccSNina Wu void dcm_mp_cpusys_top_apb_dcm(bool on)
114*43d7bbccSNina Wu {
115*43d7bbccSNina Wu 	if (on) {
116*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_apb_dcm'" */
117*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP_MISC_DCM_CFG0,
118*43d7bbccSNina Wu 			MP_CPUSYS_TOP_APB_DCM_REG0_MASK,
119*43d7bbccSNina Wu 			MP_CPUSYS_TOP_APB_DCM_REG0_ON);
120*43d7bbccSNina Wu 		mmio_clrsetbits_32(MCUSYS_DCM_CFG0,
121*43d7bbccSNina Wu 			MP_CPUSYS_TOP_APB_DCM_REG1_MASK,
122*43d7bbccSNina Wu 			MP_CPUSYS_TOP_APB_DCM_REG1_ON);
123*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP0_DCM_CFG0,
124*43d7bbccSNina Wu 			MP_CPUSYS_TOP_APB_DCM_REG2_MASK,
125*43d7bbccSNina Wu 			MP_CPUSYS_TOP_APB_DCM_REG2_ON);
126*43d7bbccSNina Wu 	} else {
127*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_apb_dcm'" */
128*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP_MISC_DCM_CFG0,
129*43d7bbccSNina Wu 			MP_CPUSYS_TOP_APB_DCM_REG0_MASK,
130*43d7bbccSNina Wu 			MP_CPUSYS_TOP_APB_DCM_REG0_OFF);
131*43d7bbccSNina Wu 		mmio_clrsetbits_32(MCUSYS_DCM_CFG0,
132*43d7bbccSNina Wu 			MP_CPUSYS_TOP_APB_DCM_REG1_MASK,
133*43d7bbccSNina Wu 			MP_CPUSYS_TOP_APB_DCM_REG1_OFF);
134*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP0_DCM_CFG0,
135*43d7bbccSNina Wu 			MP_CPUSYS_TOP_APB_DCM_REG2_MASK,
136*43d7bbccSNina Wu 			MP_CPUSYS_TOP_APB_DCM_REG2_OFF);
137*43d7bbccSNina Wu 	}
138*43d7bbccSNina Wu }
139*43d7bbccSNina Wu 
140*43d7bbccSNina Wu #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK (BIT(11))
141*43d7bbccSNina Wu #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON (BIT(11))
142*43d7bbccSNina Wu #define MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_OFF ((0x0 << 11))
143*43d7bbccSNina Wu 
dcm_mp_cpusys_top_bus_pll_div_dcm_is_on(void)144*43d7bbccSNina Wu bool dcm_mp_cpusys_top_bus_pll_div_dcm_is_on(void)
145*43d7bbccSNina Wu {
146*43d7bbccSNina Wu 	bool ret = true;
147*43d7bbccSNina Wu 
148*43d7bbccSNina Wu 	ret &= ((mmio_read_32(BUS_PLLDIV_CFG) &
149*43d7bbccSNina Wu 		MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK) ==
150*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON);
151*43d7bbccSNina Wu 
152*43d7bbccSNina Wu 	return ret;
153*43d7bbccSNina Wu }
154*43d7bbccSNina Wu 
dcm_mp_cpusys_top_bus_pll_div_dcm(bool on)155*43d7bbccSNina Wu void dcm_mp_cpusys_top_bus_pll_div_dcm(bool on)
156*43d7bbccSNina Wu {
157*43d7bbccSNina Wu 	if (on) {
158*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_bus_pll_div_dcm'" */
159*43d7bbccSNina Wu 		mmio_clrsetbits_32(BUS_PLLDIV_CFG,
160*43d7bbccSNina Wu 			MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK,
161*43d7bbccSNina Wu 			MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_ON);
162*43d7bbccSNina Wu 	} else {
163*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_bus_pll_div_dcm'" */
164*43d7bbccSNina Wu 		mmio_clrsetbits_32(BUS_PLLDIV_CFG,
165*43d7bbccSNina Wu 			MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_MASK,
166*43d7bbccSNina Wu 			MP_CPUSYS_TOP_BUS_PLL_DIV_DCM_REG0_OFF);
167*43d7bbccSNina Wu 	}
168*43d7bbccSNina Wu }
169*43d7bbccSNina Wu 
170*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK (BIT(0))
171*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON (BIT(0))
172*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_OFF ((0x0 << 0))
173*43d7bbccSNina Wu 
dcm_mp_cpusys_top_core_stall_dcm_is_on(void)174*43d7bbccSNina Wu bool dcm_mp_cpusys_top_core_stall_dcm_is_on(void)
175*43d7bbccSNina Wu {
176*43d7bbccSNina Wu 	bool ret = true;
177*43d7bbccSNina Wu 
178*43d7bbccSNina Wu 	ret &= ((mmio_read_32(MP0_DCM_CFG7) &
179*43d7bbccSNina Wu 		MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK) ==
180*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON);
181*43d7bbccSNina Wu 
182*43d7bbccSNina Wu 	return ret;
183*43d7bbccSNina Wu }
184*43d7bbccSNina Wu 
dcm_mp_cpusys_top_core_stall_dcm(bool on)185*43d7bbccSNina Wu void dcm_mp_cpusys_top_core_stall_dcm(bool on)
186*43d7bbccSNina Wu {
187*43d7bbccSNina Wu 	if (on) {
188*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_core_stall_dcm'" */
189*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP0_DCM_CFG7,
190*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK,
191*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_ON);
192*43d7bbccSNina Wu 	} else {
193*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_core_stall_dcm'" */
194*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP0_DCM_CFG7,
195*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_MASK,
196*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CORE_STALL_DCM_REG0_OFF);
197*43d7bbccSNina Wu 	}
198*43d7bbccSNina Wu }
199*43d7bbccSNina Wu 
200*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK ((0xffff << 0))
201*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON ((0xffff << 0))
202*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPUBIU_DCM_REG0_OFF ((0x0 << 0))
203*43d7bbccSNina Wu 
dcm_mp_cpusys_top_cpubiu_dcm_is_on(void)204*43d7bbccSNina Wu bool dcm_mp_cpusys_top_cpubiu_dcm_is_on(void)
205*43d7bbccSNina Wu {
206*43d7bbccSNina Wu 	bool ret = true;
207*43d7bbccSNina Wu 
208*43d7bbccSNina Wu 	ret &= ((mmio_read_32(MCSI_DCM0) &
209*43d7bbccSNina Wu 		MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK) ==
210*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON);
211*43d7bbccSNina Wu 
212*43d7bbccSNina Wu 	return ret;
213*43d7bbccSNina Wu }
214*43d7bbccSNina Wu 
dcm_mp_cpusys_top_cpubiu_dcm(bool on)215*43d7bbccSNina Wu void dcm_mp_cpusys_top_cpubiu_dcm(bool on)
216*43d7bbccSNina Wu {
217*43d7bbccSNina Wu 	if (on) {
218*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_cpubiu_dcm'" */
219*43d7bbccSNina Wu 		mmio_clrsetbits_32(MCSI_DCM0,
220*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK,
221*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPUBIU_DCM_REG0_ON);
222*43d7bbccSNina Wu 	} else {
223*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpubiu_dcm'" */
224*43d7bbccSNina Wu 		mmio_clrsetbits_32(MCSI_DCM0,
225*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPUBIU_DCM_REG0_MASK,
226*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPUBIU_DCM_REG0_OFF);
227*43d7bbccSNina Wu 	}
228*43d7bbccSNina Wu }
229*43d7bbccSNina Wu 
230*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK (BIT(11))
231*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON (BIT(11))
232*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_OFF ((0x0 << 11))
233*43d7bbccSNina Wu 
dcm_mp_cpusys_top_cpu_pll_div_0_dcm_is_on(void)234*43d7bbccSNina Wu bool dcm_mp_cpusys_top_cpu_pll_div_0_dcm_is_on(void)
235*43d7bbccSNina Wu {
236*43d7bbccSNina Wu 	bool ret = true;
237*43d7bbccSNina Wu 
238*43d7bbccSNina Wu 	ret &= ((mmio_read_32(CPU_PLLDIV_CFG0) &
239*43d7bbccSNina Wu 		MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK) ==
240*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON);
241*43d7bbccSNina Wu 
242*43d7bbccSNina Wu 	return ret;
243*43d7bbccSNina Wu }
244*43d7bbccSNina Wu 
dcm_mp_cpusys_top_cpu_pll_div_0_dcm(bool on)245*43d7bbccSNina Wu void dcm_mp_cpusys_top_cpu_pll_div_0_dcm(bool on)
246*43d7bbccSNina Wu {
247*43d7bbccSNina Wu 	if (on) {
248*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_0_dcm'" */
249*43d7bbccSNina Wu 		mmio_clrsetbits_32(CPU_PLLDIV_CFG0,
250*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK,
251*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_ON);
252*43d7bbccSNina Wu 	} else {
253*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_0_dcm'" */
254*43d7bbccSNina Wu 		mmio_clrsetbits_32(CPU_PLLDIV_CFG0,
255*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_MASK,
256*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_0_DCM_REG0_OFF);
257*43d7bbccSNina Wu 	}
258*43d7bbccSNina Wu }
259*43d7bbccSNina Wu 
260*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK (BIT(11))
261*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON (BIT(11))
262*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_OFF ((0x0 << 11))
263*43d7bbccSNina Wu 
dcm_mp_cpusys_top_cpu_pll_div_1_dcm_is_on(void)264*43d7bbccSNina Wu bool dcm_mp_cpusys_top_cpu_pll_div_1_dcm_is_on(void)
265*43d7bbccSNina Wu {
266*43d7bbccSNina Wu 	bool ret = true;
267*43d7bbccSNina Wu 
268*43d7bbccSNina Wu 	ret &= ((mmio_read_32(CPU_PLLDIV_CFG1) &
269*43d7bbccSNina Wu 		MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK) ==
270*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON);
271*43d7bbccSNina Wu 
272*43d7bbccSNina Wu 	return ret;
273*43d7bbccSNina Wu }
274*43d7bbccSNina Wu 
dcm_mp_cpusys_top_cpu_pll_div_1_dcm(bool on)275*43d7bbccSNina Wu void dcm_mp_cpusys_top_cpu_pll_div_1_dcm(bool on)
276*43d7bbccSNina Wu {
277*43d7bbccSNina Wu 	if (on) {
278*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_1_dcm'" */
279*43d7bbccSNina Wu 		mmio_clrsetbits_32(CPU_PLLDIV_CFG1,
280*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK,
281*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_ON);
282*43d7bbccSNina Wu 	} else {
283*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_1_dcm'" */
284*43d7bbccSNina Wu 		mmio_clrsetbits_32(CPU_PLLDIV_CFG1,
285*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_MASK,
286*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_1_DCM_REG0_OFF);
287*43d7bbccSNina Wu 	}
288*43d7bbccSNina Wu }
289*43d7bbccSNina Wu 
290*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_MASK (BIT(11))
291*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_ON (BIT(11))
292*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_OFF ((0x0 << 11))
293*43d7bbccSNina Wu 
dcm_mp_cpusys_top_cpu_pll_div_2_dcm_is_on(void)294*43d7bbccSNina Wu bool dcm_mp_cpusys_top_cpu_pll_div_2_dcm_is_on(void)
295*43d7bbccSNina Wu {
296*43d7bbccSNina Wu 	bool ret = true;
297*43d7bbccSNina Wu 
298*43d7bbccSNina Wu 	ret &= ((mmio_read_32(CPU_PLLDIV_CFG2) &
299*43d7bbccSNina Wu 		MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_MASK) ==
300*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_ON);
301*43d7bbccSNina Wu 
302*43d7bbccSNina Wu 	return ret;
303*43d7bbccSNina Wu }
304*43d7bbccSNina Wu 
dcm_mp_cpusys_top_cpu_pll_div_2_dcm(bool on)305*43d7bbccSNina Wu void dcm_mp_cpusys_top_cpu_pll_div_2_dcm(bool on)
306*43d7bbccSNina Wu {
307*43d7bbccSNina Wu 	if (on) {
308*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_2_dcm'" */
309*43d7bbccSNina Wu 		mmio_clrsetbits_32(CPU_PLLDIV_CFG2,
310*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_MASK,
311*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_ON);
312*43d7bbccSNina Wu 	} else {
313*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_2_dcm'" */
314*43d7bbccSNina Wu 		mmio_clrsetbits_32(CPU_PLLDIV_CFG2,
315*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_MASK,
316*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_2_DCM_REG0_OFF);
317*43d7bbccSNina Wu 	}
318*43d7bbccSNina Wu }
319*43d7bbccSNina Wu 
320*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_3_DCM_REG0_MASK (BIT(11))
321*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_3_DCM_REG0_ON (BIT(11))
322*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_3_DCM_REG0_OFF ((0x0 << 11))
323*43d7bbccSNina Wu 
dcm_mp_cpusys_top_cpu_pll_div_3_dcm_is_on(void)324*43d7bbccSNina Wu bool dcm_mp_cpusys_top_cpu_pll_div_3_dcm_is_on(void)
325*43d7bbccSNina Wu {
326*43d7bbccSNina Wu 	bool ret = true;
327*43d7bbccSNina Wu 
328*43d7bbccSNina Wu 	ret &= ((mmio_read_32(CPU_PLLDIV_CFG3) &
329*43d7bbccSNina Wu 		MP_CPUSYS_TOP_CPU_PLL_DIV_3_DCM_REG0_MASK) ==
330*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_CPU_PLL_DIV_3_DCM_REG0_ON);
331*43d7bbccSNina Wu 
332*43d7bbccSNina Wu 	return ret;
333*43d7bbccSNina Wu }
334*43d7bbccSNina Wu 
dcm_mp_cpusys_top_cpu_pll_div_3_dcm(bool on)335*43d7bbccSNina Wu void dcm_mp_cpusys_top_cpu_pll_div_3_dcm(bool on)
336*43d7bbccSNina Wu {
337*43d7bbccSNina Wu 	if (on) {
338*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_3_dcm'" */
339*43d7bbccSNina Wu 		mmio_clrsetbits_32(CPU_PLLDIV_CFG3,
340*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_3_DCM_REG0_MASK,
341*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_3_DCM_REG0_ON);
342*43d7bbccSNina Wu 	} else {
343*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_3_dcm'" */
344*43d7bbccSNina Wu 		mmio_clrsetbits_32(CPU_PLLDIV_CFG3,
345*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_3_DCM_REG0_MASK,
346*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_3_DCM_REG0_OFF);
347*43d7bbccSNina Wu 	}
348*43d7bbccSNina Wu }
349*43d7bbccSNina Wu 
350*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_4_DCM_REG0_MASK (BIT(11))
351*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_4_DCM_REG0_ON (BIT(11))
352*43d7bbccSNina Wu #define MP_CPUSYS_TOP_CPU_PLL_DIV_4_DCM_REG0_OFF ((0x0 << 11))
353*43d7bbccSNina Wu 
dcm_mp_cpusys_top_cpu_pll_div_4_dcm_is_on(void)354*43d7bbccSNina Wu bool dcm_mp_cpusys_top_cpu_pll_div_4_dcm_is_on(void)
355*43d7bbccSNina Wu {
356*43d7bbccSNina Wu 	bool ret = true;
357*43d7bbccSNina Wu 
358*43d7bbccSNina Wu 	ret &= ((mmio_read_32(CPU_PLLDIV_CFG4) &
359*43d7bbccSNina Wu 		MP_CPUSYS_TOP_CPU_PLL_DIV_4_DCM_REG0_MASK) ==
360*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_CPU_PLL_DIV_4_DCM_REG0_ON);
361*43d7bbccSNina Wu 
362*43d7bbccSNina Wu 	return ret;
363*43d7bbccSNina Wu }
364*43d7bbccSNina Wu 
dcm_mp_cpusys_top_cpu_pll_div_4_dcm(bool on)365*43d7bbccSNina Wu void dcm_mp_cpusys_top_cpu_pll_div_4_dcm(bool on)
366*43d7bbccSNina Wu {
367*43d7bbccSNina Wu 	if (on) {
368*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_cpu_pll_div_4_dcm'" */
369*43d7bbccSNina Wu 		mmio_clrsetbits_32(CPU_PLLDIV_CFG4,
370*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_4_DCM_REG0_MASK,
371*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_4_DCM_REG0_ON);
372*43d7bbccSNina Wu 	} else {
373*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_cpu_pll_div_4_dcm'" */
374*43d7bbccSNina Wu 		mmio_clrsetbits_32(CPU_PLLDIV_CFG4,
375*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_4_DCM_REG0_MASK,
376*43d7bbccSNina Wu 			MP_CPUSYS_TOP_CPU_PLL_DIV_4_DCM_REG0_OFF);
377*43d7bbccSNina Wu 	}
378*43d7bbccSNina Wu }
379*43d7bbccSNina Wu 
380*43d7bbccSNina Wu #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK (BIT(4))
381*43d7bbccSNina Wu #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON (BIT(4))
382*43d7bbccSNina Wu #define MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_OFF ((0x0 << 4))
383*43d7bbccSNina Wu 
dcm_mp_cpusys_top_fcm_stall_dcm_is_on(void)384*43d7bbccSNina Wu bool dcm_mp_cpusys_top_fcm_stall_dcm_is_on(void)
385*43d7bbccSNina Wu {
386*43d7bbccSNina Wu 	bool ret = true;
387*43d7bbccSNina Wu 
388*43d7bbccSNina Wu 	ret &= ((mmio_read_32(MP0_DCM_CFG7) &
389*43d7bbccSNina Wu 		MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK) ==
390*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON);
391*43d7bbccSNina Wu 
392*43d7bbccSNina Wu 	return ret;
393*43d7bbccSNina Wu }
394*43d7bbccSNina Wu 
dcm_mp_cpusys_top_fcm_stall_dcm(bool on)395*43d7bbccSNina Wu void dcm_mp_cpusys_top_fcm_stall_dcm(bool on)
396*43d7bbccSNina Wu {
397*43d7bbccSNina Wu 	if (on) {
398*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_fcm_stall_dcm'" */
399*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP0_DCM_CFG7,
400*43d7bbccSNina Wu 			MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK,
401*43d7bbccSNina Wu 			MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_ON);
402*43d7bbccSNina Wu 	} else {
403*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_fcm_stall_dcm'" */
404*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP0_DCM_CFG7,
405*43d7bbccSNina Wu 			MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_MASK,
406*43d7bbccSNina Wu 			MP_CPUSYS_TOP_FCM_STALL_DCM_REG0_OFF);
407*43d7bbccSNina Wu 	}
408*43d7bbccSNina Wu }
409*43d7bbccSNina Wu 
410*43d7bbccSNina Wu #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK ((0x1U << 31))
411*43d7bbccSNina Wu #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON ((0x1U << 31))
412*43d7bbccSNina Wu #define MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_OFF ((0x0U << 31))
413*43d7bbccSNina Wu 
dcm_mp_cpusys_top_last_cor_idle_dcm_is_on(void)414*43d7bbccSNina Wu bool dcm_mp_cpusys_top_last_cor_idle_dcm_is_on(void)
415*43d7bbccSNina Wu {
416*43d7bbccSNina Wu 	bool ret = true;
417*43d7bbccSNina Wu 
418*43d7bbccSNina Wu 	ret &= ((mmio_read_32(BUS_PLLDIV_CFG) &
419*43d7bbccSNina Wu 		MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK) ==
420*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON);
421*43d7bbccSNina Wu 
422*43d7bbccSNina Wu 	return ret;
423*43d7bbccSNina Wu }
424*43d7bbccSNina Wu 
dcm_mp_cpusys_top_last_cor_idle_dcm(bool on)425*43d7bbccSNina Wu void dcm_mp_cpusys_top_last_cor_idle_dcm(bool on)
426*43d7bbccSNina Wu {
427*43d7bbccSNina Wu 	if (on) {
428*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_last_cor_idle_dcm'" */
429*43d7bbccSNina Wu 		mmio_clrsetbits_32(BUS_PLLDIV_CFG,
430*43d7bbccSNina Wu 			MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK,
431*43d7bbccSNina Wu 			MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_ON);
432*43d7bbccSNina Wu 	} else {
433*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_last_cor_idle_dcm'" */
434*43d7bbccSNina Wu 		mmio_clrsetbits_32(BUS_PLLDIV_CFG,
435*43d7bbccSNina Wu 			MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_MASK,
436*43d7bbccSNina Wu 			MP_CPUSYS_TOP_LAST_COR_IDLE_DCM_REG0_OFF);
437*43d7bbccSNina Wu 	}
438*43d7bbccSNina Wu }
439*43d7bbccSNina Wu 
440*43d7bbccSNina Wu #define MP_CPUSYS_TOP_MISC_DCM_REG0_MASK (BIT(1) | \
441*43d7bbccSNina Wu 			BIT(4))
442*43d7bbccSNina Wu #define MP_CPUSYS_TOP_MISC_DCM_REG0_ON (BIT(1) | \
443*43d7bbccSNina Wu 			BIT(4))
444*43d7bbccSNina Wu #define MP_CPUSYS_TOP_MISC_DCM_REG0_OFF ((0x0 << 1) | \
445*43d7bbccSNina Wu 			(0x0 << 4))
446*43d7bbccSNina Wu 
dcm_mp_cpusys_top_misc_dcm_is_on(void)447*43d7bbccSNina Wu bool dcm_mp_cpusys_top_misc_dcm_is_on(void)
448*43d7bbccSNina Wu {
449*43d7bbccSNina Wu 	bool ret = true;
450*43d7bbccSNina Wu 
451*43d7bbccSNina Wu 	ret &= ((mmio_read_32(MP_MISC_DCM_CFG0) &
452*43d7bbccSNina Wu 		MP_CPUSYS_TOP_MISC_DCM_REG0_MASK) ==
453*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_MISC_DCM_REG0_ON);
454*43d7bbccSNina Wu 
455*43d7bbccSNina Wu 	return ret;
456*43d7bbccSNina Wu }
457*43d7bbccSNina Wu 
dcm_mp_cpusys_top_misc_dcm(bool on)458*43d7bbccSNina Wu void dcm_mp_cpusys_top_misc_dcm(bool on)
459*43d7bbccSNina Wu {
460*43d7bbccSNina Wu 	if (on) {
461*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_misc_dcm'" */
462*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP_MISC_DCM_CFG0,
463*43d7bbccSNina Wu 			MP_CPUSYS_TOP_MISC_DCM_REG0_MASK,
464*43d7bbccSNina Wu 			MP_CPUSYS_TOP_MISC_DCM_REG0_ON);
465*43d7bbccSNina Wu 	} else {
466*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_misc_dcm'" */
467*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP_MISC_DCM_CFG0,
468*43d7bbccSNina Wu 			MP_CPUSYS_TOP_MISC_DCM_REG0_MASK,
469*43d7bbccSNina Wu 			MP_CPUSYS_TOP_MISC_DCM_REG0_OFF);
470*43d7bbccSNina Wu 	}
471*43d7bbccSNina Wu }
472*43d7bbccSNina Wu 
473*43d7bbccSNina Wu #define MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK (BIT(3))
474*43d7bbccSNina Wu #define MP_CPUSYS_TOP_MP0_QDCM_REG1_MASK (BIT(0) | \
475*43d7bbccSNina Wu 			BIT(1) | \
476*43d7bbccSNina Wu 			BIT(2) | \
477*43d7bbccSNina Wu 			BIT(3))
478*43d7bbccSNina Wu #define MP_CPUSYS_TOP_MP0_QDCM_REG0_ON (BIT(3))
479*43d7bbccSNina Wu #define MP_CPUSYS_TOP_MP0_QDCM_REG1_ON (BIT(0) | \
480*43d7bbccSNina Wu 			BIT(1) | \
481*43d7bbccSNina Wu 			BIT(2) | \
482*43d7bbccSNina Wu 			BIT(3))
483*43d7bbccSNina Wu #define MP_CPUSYS_TOP_MP0_QDCM_REG0_OFF ((0x0 << 3))
484*43d7bbccSNina Wu #define MP_CPUSYS_TOP_MP0_QDCM_REG1_OFF ((0x0 << 0) | \
485*43d7bbccSNina Wu 			(0x0 << 1) | \
486*43d7bbccSNina Wu 			(0x0 << 2) | \
487*43d7bbccSNina Wu 			(0x0 << 3))
488*43d7bbccSNina Wu 
dcm_mp_cpusys_top_mp0_qdcm_is_on(void)489*43d7bbccSNina Wu bool dcm_mp_cpusys_top_mp0_qdcm_is_on(void)
490*43d7bbccSNina Wu {
491*43d7bbccSNina Wu 	bool ret = true;
492*43d7bbccSNina Wu 
493*43d7bbccSNina Wu 	ret &= ((mmio_read_32(MP_MISC_DCM_CFG0) &
494*43d7bbccSNina Wu 		MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK) ==
495*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_MP0_QDCM_REG0_ON);
496*43d7bbccSNina Wu 	ret &= ((mmio_read_32(MP0_DCM_CFG0) &
497*43d7bbccSNina Wu 		MP_CPUSYS_TOP_MP0_QDCM_REG1_MASK) ==
498*43d7bbccSNina Wu 		(unsigned int) MP_CPUSYS_TOP_MP0_QDCM_REG1_ON);
499*43d7bbccSNina Wu 
500*43d7bbccSNina Wu 	return ret;
501*43d7bbccSNina Wu }
502*43d7bbccSNina Wu 
dcm_mp_cpusys_top_mp0_qdcm(bool on)503*43d7bbccSNina Wu void dcm_mp_cpusys_top_mp0_qdcm(bool on)
504*43d7bbccSNina Wu {
505*43d7bbccSNina Wu 	if (on) {
506*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'mp_cpusys_top_mp0_qdcm'" */
507*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP_MISC_DCM_CFG0,
508*43d7bbccSNina Wu 			MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK,
509*43d7bbccSNina Wu 			MP_CPUSYS_TOP_MP0_QDCM_REG0_ON);
510*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP0_DCM_CFG0,
511*43d7bbccSNina Wu 			MP_CPUSYS_TOP_MP0_QDCM_REG1_MASK,
512*43d7bbccSNina Wu 			MP_CPUSYS_TOP_MP0_QDCM_REG1_ON);
513*43d7bbccSNina Wu 	} else {
514*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'mp_cpusys_top_mp0_qdcm'" */
515*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP_MISC_DCM_CFG0,
516*43d7bbccSNina Wu 			MP_CPUSYS_TOP_MP0_QDCM_REG0_MASK,
517*43d7bbccSNina Wu 			MP_CPUSYS_TOP_MP0_QDCM_REG0_OFF);
518*43d7bbccSNina Wu 		mmio_clrsetbits_32(MP0_DCM_CFG0,
519*43d7bbccSNina Wu 			MP_CPUSYS_TOP_MP0_QDCM_REG1_MASK,
520*43d7bbccSNina Wu 			MP_CPUSYS_TOP_MP0_QDCM_REG1_OFF);
521*43d7bbccSNina Wu 	}
522*43d7bbccSNina Wu }
523*43d7bbccSNina Wu 
524*43d7bbccSNina Wu #define CPCCFG_REG_EMI_WFIFO_REG0_MASK (BIT(0) | \
525*43d7bbccSNina Wu 			BIT(1) | \
526*43d7bbccSNina Wu 			BIT(2) | \
527*43d7bbccSNina Wu 			BIT(3))
528*43d7bbccSNina Wu #define CPCCFG_REG_EMI_WFIFO_REG0_ON (BIT(0) | \
529*43d7bbccSNina Wu 			BIT(1) | \
530*43d7bbccSNina Wu 			BIT(2) | \
531*43d7bbccSNina Wu 			BIT(3))
532*43d7bbccSNina Wu #define CPCCFG_REG_EMI_WFIFO_REG0_OFF ((0x0 << 0) | \
533*43d7bbccSNina Wu 			(0x0 << 1) | \
534*43d7bbccSNina Wu 			(0x0 << 2) | \
535*43d7bbccSNina Wu 			(0x0 << 3))
536*43d7bbccSNina Wu 
dcm_cpccfg_reg_emi_wfifo_is_on(void)537*43d7bbccSNina Wu bool dcm_cpccfg_reg_emi_wfifo_is_on(void)
538*43d7bbccSNina Wu {
539*43d7bbccSNina Wu 	bool ret = true;
540*43d7bbccSNina Wu 
541*43d7bbccSNina Wu 	ret &= ((mmio_read_32(EMI_WFIFO) &
542*43d7bbccSNina Wu 		CPCCFG_REG_EMI_WFIFO_REG0_MASK) ==
543*43d7bbccSNina Wu 		(unsigned int) CPCCFG_REG_EMI_WFIFO_REG0_ON);
544*43d7bbccSNina Wu 
545*43d7bbccSNina Wu 	return ret;
546*43d7bbccSNina Wu }
547*43d7bbccSNina Wu 
dcm_cpccfg_reg_emi_wfifo(bool on)548*43d7bbccSNina Wu void dcm_cpccfg_reg_emi_wfifo(bool on)
549*43d7bbccSNina Wu {
550*43d7bbccSNina Wu 	if (on) {
551*43d7bbccSNina Wu 		/* TINFO = "Turn ON DCM 'cpccfg_reg_emi_wfifo'" */
552*43d7bbccSNina Wu 		mmio_clrsetbits_32(EMI_WFIFO,
553*43d7bbccSNina Wu 			CPCCFG_REG_EMI_WFIFO_REG0_MASK,
554*43d7bbccSNina Wu 			CPCCFG_REG_EMI_WFIFO_REG0_ON);
555*43d7bbccSNina Wu 	} else {
556*43d7bbccSNina Wu 		/* TINFO = "Turn OFF DCM 'cpccfg_reg_emi_wfifo'" */
557*43d7bbccSNina Wu 		mmio_clrsetbits_32(EMI_WFIFO,
558*43d7bbccSNina Wu 			CPCCFG_REG_EMI_WFIFO_REG0_MASK,
559*43d7bbccSNina Wu 			CPCCFG_REG_EMI_WFIFO_REG0_OFF);
560*43d7bbccSNina Wu 	}
561*43d7bbccSNina Wu }
562*43d7bbccSNina Wu 
563