xref: /rk3399_ARM-atf/plat/rockchip/rk3588/drivers/pmu/pmu.h (revision 44418fce30938ee483fbfc79cc32fde33753d1aa)
1*e3ec6ff4SXiaoDong Huang /*
2*e3ec6ff4SXiaoDong Huang  * Copyright (c) 2024, Rockchip, Inc. All rights reserved.
3*e3ec6ff4SXiaoDong Huang  *
4*e3ec6ff4SXiaoDong Huang  * SPDX-License-Identifier: BSD-3-Clause
5*e3ec6ff4SXiaoDong Huang  */
6*e3ec6ff4SXiaoDong Huang 
7*e3ec6ff4SXiaoDong Huang #ifndef __PMU_H__
8*e3ec6ff4SXiaoDong Huang #define __PMU_H__
9*e3ec6ff4SXiaoDong Huang 
10*e3ec6ff4SXiaoDong Huang #include <lib/mmio.h>
11*e3ec6ff4SXiaoDong Huang 
12*e3ec6ff4SXiaoDong Huang #define PMU0_PWR_CON			0x0000
13*e3ec6ff4SXiaoDong Huang #define PMU0_WAKEUP_INT_CON		0x0008
14*e3ec6ff4SXiaoDong Huang #define PMU0_WAKEUP_INT_ST		0x000c
15*e3ec6ff4SXiaoDong Huang #define PMU0_PMIC_STABLE_CNT_THRES	0x0010
16*e3ec6ff4SXiaoDong Huang #define PMU0_WAKEUP_RST_CLR_CNT_THRES	0x0014
17*e3ec6ff4SXiaoDong Huang #define PMU0_OSC_STABLE_CNT_THRES	0x0018
18*e3ec6ff4SXiaoDong Huang #define PMU0_PWR_CHAIN_STABLE_CON	0x001c
19*e3ec6ff4SXiaoDong Huang #define PMU0_DDR_RET_CON(i)		(0x0020 + (i) * 4)
20*e3ec6ff4SXiaoDong Huang #define PMU0_INFO_TX_CON		0x0030
21*e3ec6ff4SXiaoDong Huang 
22*e3ec6ff4SXiaoDong Huang #define PMU1_VERSION_ID			0x4000
23*e3ec6ff4SXiaoDong Huang #define PMU1_PWR_CON			0x4004
24*e3ec6ff4SXiaoDong Huang #define PMU1_PWR_FSM			0x4008
25*e3ec6ff4SXiaoDong Huang #define PMU1_INT_MASK_CON		0x400c
26*e3ec6ff4SXiaoDong Huang #define PMU1_WAKEUP_INT_CON		0x4010
27*e3ec6ff4SXiaoDong Huang #define PMU1_WAKEUP_INT_ST		0x4014
28*e3ec6ff4SXiaoDong Huang #define PMU1_WAKEUP_EDGE_CON		0x4018
29*e3ec6ff4SXiaoDong Huang #define PMU1_WAKEUP_EDGE_ST		0x401c
30*e3ec6ff4SXiaoDong Huang #define PMU1_DDR_PWR_CON(i)		(0x4020 + (i) * 4)
31*e3ec6ff4SXiaoDong Huang #define PMU1_DDR_PWR_SFTCON(i)		(0x4030 + (i) * 4)
32*e3ec6ff4SXiaoDong Huang #define PMU1_DDR_PWR_FSM		0x4040
33*e3ec6ff4SXiaoDong Huang #define PMU1_DDR_PWR_ST			0x4044
34*e3ec6ff4SXiaoDong Huang #define PMU1_CRU_PWR_CON		0x4050
35*e3ec6ff4SXiaoDong Huang #define PMU1_CRU_PWR_SFTCON		0x4054
36*e3ec6ff4SXiaoDong Huang #define PMU1_CRU_PWR_FSM		0x4058
37*e3ec6ff4SXiaoDong Huang #define PMU1_PLLPD_CON(i)		(0x4060 + (i) * 4)
38*e3ec6ff4SXiaoDong Huang #define PMU1_PLLPD_SFTCON(i)		(0x4068 + (i) * 4)
39*e3ec6ff4SXiaoDong Huang #define PMU1_STABLE_CNT_THRESH		0x4080
40*e3ec6ff4SXiaoDong Huang #define PMU1_OSC_STABLE_CNT_THRESH	0x4084
41*e3ec6ff4SXiaoDong Huang #define PMU1_WAKEUP_RST_CLR_CNT_THRESH	0x4088
42*e3ec6ff4SXiaoDong Huang #define PMU1_PLL_LOCK_CNT_THRESH	0x408c
43*e3ec6ff4SXiaoDong Huang #define PMU1_WAKEUP_TIMEOUT_THRESH	0x4094
44*e3ec6ff4SXiaoDong Huang #define PMU1_PWM_SWITCH_CNT_THRESH	0x4098
45*e3ec6ff4SXiaoDong Huang #define PMU1_SYS_REG(i)			(0x4100 + (i) * 4)
46*e3ec6ff4SXiaoDong Huang 
47*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_CON1			0x8000
48*e3ec6ff4SXiaoDong Huang #define PMU2_DSU_PWR_CON		0x8004
49*e3ec6ff4SXiaoDong Huang #define PMU2_DSU_PWR_SFTCON		0x8008
50*e3ec6ff4SXiaoDong Huang #define PMU2_DSU_AUTO_PWR_CON		0x800c
51*e3ec6ff4SXiaoDong Huang #define PMU2_CPU_AUTO_PWR_CON(i)	(0x8010 + (i) * 4)
52*e3ec6ff4SXiaoDong Huang #define PMU2_CPU_PWR_SFTCON(i)		(0x8030 + (i) * 4)
53*e3ec6ff4SXiaoDong Huang #define PMU2_CORE_PWR_CON(i)		(0x8050 + (i) * 4)
54*e3ec6ff4SXiaoDong Huang #define PMU2_CORE_PWR_SFTCON(i)		(0x8058 + (i) * 4)
55*e3ec6ff4SXiaoDong Huang #define PMU2_CORE_AUTO_PWR_CON(i)	(0x8060 + (i) * 4)
56*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_NOC_AUTO_CON	0x8068
57*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_DBG_PWR_CON	0x806c
58*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_IDLE_CON		0x8070
59*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_IDLE_SFTCON	0x8074
60*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_IDLE_ACK		0x8078
61*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_IDLE_ST		0x807c
62*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_ST			0x8080
63*e3ec6ff4SXiaoDong Huang #define PMU2_SCU_PWR_FSM_STATUS(i)	(0x8084 + (i) * 4)
64*e3ec6ff4SXiaoDong Huang #define PMU2_CORE_PCHANNEL_STATUS(i)	(0x808c + (i) * 4)
65*e3ec6ff4SXiaoDong Huang #define PMU2_CPU_PWR_CHAIN_STABLE_CON	0x8098
66*e3ec6ff4SXiaoDong Huang #define PMU2_CLUSTER_MEMPWR_GATE_SFTCON	0x809c
67*e3ec6ff4SXiaoDong Huang #define PMU2_DSU_STABLE_CNT_THRESH	0x80b0
68*e3ec6ff4SXiaoDong Huang #define PMU2_DSU_PWRUP_CNT_THRESH	0x80b4
69*e3ec6ff4SXiaoDong Huang #define PMU2_DSU_PWRDN_CNT_THRESH	0x80b8
70*e3ec6ff4SXiaoDong Huang #define PMU2_CORE0_STABLE_CNT_THRESH	0x80bc
71*e3ec6ff4SXiaoDong Huang #define PMU2_CORE0_PWRUP_CNT_THRESH	0x80c0
72*e3ec6ff4SXiaoDong Huang #define PMU2_CORE0_PWRDN_CNT_THRESH	0x80c4
73*e3ec6ff4SXiaoDong Huang #define PMU2_CORE1_STABLE_CNT_THRESH	0x80c8
74*e3ec6ff4SXiaoDong Huang #define PMU2_CORE1_PWRUP_CNT_THRESH	0x80cc
75*e3ec6ff4SXiaoDong Huang #define PMU2_CORE1_PWRDN_CNT_THRESH	0x80d0
76*e3ec6ff4SXiaoDong Huang #define PMU2_DBG_RST_CNT_THRESH(i)	(0x80d4 + (i) * 4)
77*e3ec6ff4SXiaoDong Huang #define PMU2_BUS_IDLE_CON(i)		(0x8100 + (i) * 4)
78*e3ec6ff4SXiaoDong Huang #define PMU2_BUS_IDLE_SFTCON(i)		(0x810c + (i) * 4)
79*e3ec6ff4SXiaoDong Huang #define PMU2_BUS_IDLE_ACK(i)		(0x8118 + (i) * 4)
80*e3ec6ff4SXiaoDong Huang #define PMU2_BUS_IDLE_ST(i)		(0x8120 + (i) * 4)
81*e3ec6ff4SXiaoDong Huang #define PMU2_BIU_AUTO_CON(i)		(0x8128 + (i) * 4)
82*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_GATE_CON(i)		(0x8140 + (i) * 4)
83*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_GATE_SFTCON(i)		(0x814c + (i) * 4)
84*e3ec6ff4SXiaoDong Huang #define PMU2_VOL_GATE_CON(i)		(0x8158 + (i) * 4)
85*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_UP_CHAIN_STABLE_CON(i)	(0x8164 + (i) * 4)
86*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_DWN_CHAIN_STABLE_CON(i)(0x8170 + (i) * 4)
87*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_STABLE_CHAIN_CNT_THRES	0x817c
88*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_GATE_ST(i)		(0x8180 + (i) * 4)
89*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_GATE_FSM		0x8188
90*e3ec6ff4SXiaoDong Huang #define PMU2_VOL_GATE_FAST_CON		0x818c
91*e3ec6ff4SXiaoDong Huang #define PMU2_GPU_PWRUP_CNT		0x8190
92*e3ec6ff4SXiaoDong Huang #define PMU2_GPU_PWRDN_CNT		0x8194
93*e3ec6ff4SXiaoDong Huang #define PMU2_NPU_PWRUP_CNT		0x8198
94*e3ec6ff4SXiaoDong Huang #define PMU2_NPU_PWRDN_CNT		0x819c
95*e3ec6ff4SXiaoDong Huang #define PMU2_MEMPWR_GATE_SFTCON(i)	(0x81a0 + (i) * 4)
96*e3ec6ff4SXiaoDong Huang #define PMU2_MEMPWR_MD_GATE_SFTCON(i)	(0x81b0 + (i) * 4)
97*e3ec6ff4SXiaoDong Huang #define PMU2_MEMPWR_MD_GATE_STATUS	0x81bc
98*e3ec6ff4SXiaoDong Huang #define PMU2_SUBMEM_PWR_ACK_BYPASS(i)	(0x81c0 + (i) * 4)
99*e3ec6ff4SXiaoDong Huang #define PMU2_QCHANNEL_PWR_CON		0x81d0
100*e3ec6ff4SXiaoDong Huang #define PMU2_QCHANNEL_PWR_SFTCON	0x81d4
101*e3ec6ff4SXiaoDong Huang #define PMU2_QCHANNEL_STATUS		0x81d8
102*e3ec6ff4SXiaoDong Huang #define PMU2_DEBUG_INFO_SEL		0x81e0
103*e3ec6ff4SXiaoDong Huang #define PMU2_VOP_SUBPD_STATE		0x81e4
104*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_CHAIN0_ST(i)		(0x81e8 + (i) * 4)
105*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_CHAIN1_ST(i)		(0x81f0 + (i) * 4)
106*e3ec6ff4SXiaoDong Huang #define PMU2_PWR_MEM_ST(i)		(0x81f8 + (i) * 4)
107*e3ec6ff4SXiaoDong Huang #define PMU2_BISR_CON(i)		(0x8200 + (i) * 4)
108*e3ec6ff4SXiaoDong Huang #define PMU2_BISR_STATUS(i)		(0x8280 + (i) * 4)
109*e3ec6ff4SXiaoDong Huang 
110*e3ec6ff4SXiaoDong Huang #define PMU2_QCH_PWR_MSK		0x7f
111*e3ec6ff4SXiaoDong Huang 
112*e3ec6ff4SXiaoDong Huang #define PD_CTR_LOOP			500
113*e3ec6ff4SXiaoDong Huang #define PD_CHECK_LOOP			500
114*e3ec6ff4SXiaoDong Huang #define WFEI_CHECK_LOOP			500
115*e3ec6ff4SXiaoDong Huang #define BUS_IDLE_LOOP			1000
116*e3ec6ff4SXiaoDong Huang #define QCH_PWR_LOOP			5000
117*e3ec6ff4SXiaoDong Huang 
118*e3ec6ff4SXiaoDong Huang /* PMU1SCRU */
119*e3ec6ff4SXiaoDong Huang #define PMU1SCRU_GATE_CON(i)		(0x800 + (i) * 4)
120*e3ec6ff4SXiaoDong Huang 
121*e3ec6ff4SXiaoDong Huang /* PMU_GRF */
122*e3ec6ff4SXiaoDong Huang #define PMU0_GRF_SOC_CON(i)		((i) * 4)
123*e3ec6ff4SXiaoDong Huang #define PMU0_GRF_OS_REGS(i)		(0x80 + ((i) - 8) * 4)
124*e3ec6ff4SXiaoDong Huang #define PMU1_GRF_SOC_CON(i)		((i) * 4)
125*e3ec6ff4SXiaoDong Huang #define PMU0_GRF_IO_RET_CON(i)		(0x20 + (i) * 4)
126*e3ec6ff4SXiaoDong Huang 
127*e3ec6ff4SXiaoDong Huang /* PMU_SGRF */
128*e3ec6ff4SXiaoDong Huang #define PMU0_SGRF_SOC_CON(i)		((i) * 4)
129*e3ec6ff4SXiaoDong Huang #define PMU1_SGRF_SOC_CON(i)		((i) * 4)
130*e3ec6ff4SXiaoDong Huang 
131*e3ec6ff4SXiaoDong Huang /* sys grf */
132*e3ec6ff4SXiaoDong Huang #define GRF_CPU_STATUS0			0x0420
133*e3ec6ff4SXiaoDong Huang 
134*e3ec6ff4SXiaoDong Huang #define CORES_PM_DISABLE		0x0
135*e3ec6ff4SXiaoDong Huang #define PD_CHECK_LOOP			500
136*e3ec6ff4SXiaoDong Huang #define WFEI_CHECK_LOOP			500
137*e3ec6ff4SXiaoDong Huang 
138*e3ec6ff4SXiaoDong Huang /* The ways of cores power domain contorlling */
139*e3ec6ff4SXiaoDong Huang enum cores_pm_ctr_mode {
140*e3ec6ff4SXiaoDong Huang 	core_pwr_pd = 0,
141*e3ec6ff4SXiaoDong Huang 	core_pwr_wfi = 1,
142*e3ec6ff4SXiaoDong Huang 	core_pwr_wfi_int = 2
143*e3ec6ff4SXiaoDong Huang };
144*e3ec6ff4SXiaoDong Huang 
145*e3ec6ff4SXiaoDong Huang /* PMU0_PWR_CON */
146*e3ec6ff4SXiaoDong Huang enum pmu0_pwr_con {
147*e3ec6ff4SXiaoDong Huang 	pmu0_powermode_en = 0,
148*e3ec6ff4SXiaoDong Huang 	pmu0_pmu1_pwr_bypass = 1,
149*e3ec6ff4SXiaoDong Huang 	pmu0_pmu1_bus_bypass = 2,
150*e3ec6ff4SXiaoDong Huang 	pmu0_wkup_bypass = 3,
151*e3ec6ff4SXiaoDong Huang 	pmu0_pmic_bypass = 4,
152*e3ec6ff4SXiaoDong Huang 	pmu0_reset_bypass = 5,
153*e3ec6ff4SXiaoDong Huang 	pmu0_freq_sw_bypass = 6,
154*e3ec6ff4SXiaoDong Huang 	pmu0_osc_dis_bypass = 7,
155*e3ec6ff4SXiaoDong Huang 	pmu0_pmu1_pwr_gt_en = 8,
156*e3ec6ff4SXiaoDong Huang 	pmu0_pmu1_pwr_gt_sft_en = 9,
157*e3ec6ff4SXiaoDong Huang 	pmu0_pmu1_mem_gt_sft_en = 10,
158*e3ec6ff4SXiaoDong Huang 	pmu0_pmu1_bus_idle_en = 11,
159*e3ec6ff4SXiaoDong Huang 	pmu0_pmu1_bus_idle_sft_en = 12,
160*e3ec6ff4SXiaoDong Huang 	pmu0_pmu1_biu_auto_en = 13,
161*e3ec6ff4SXiaoDong Huang 	pmu0_pwr_off_io_en = 14,
162*e3ec6ff4SXiaoDong Huang };
163*e3ec6ff4SXiaoDong Huang 
164*e3ec6ff4SXiaoDong Huang /* PMU1_PWR_CON */
165*e3ec6ff4SXiaoDong Huang enum pmu1_pwr_con {
166*e3ec6ff4SXiaoDong Huang 	powermode_en = 0,
167*e3ec6ff4SXiaoDong Huang 	dsu_bypass = 1,
168*e3ec6ff4SXiaoDong Huang 	bus_bypass = 4,
169*e3ec6ff4SXiaoDong Huang 	ddr_bypass = 5,
170*e3ec6ff4SXiaoDong Huang 	pwrdn_bypass = 6,
171*e3ec6ff4SXiaoDong Huang 	cru_bypass = 7,
172*e3ec6ff4SXiaoDong Huang 	qch_bypass = 8,
173*e3ec6ff4SXiaoDong Huang 	core_bypass = 9,
174*e3ec6ff4SXiaoDong Huang 	cpu_sleep_wfi_dis = 12,
175*e3ec6ff4SXiaoDong Huang };
176*e3ec6ff4SXiaoDong Huang 
177*e3ec6ff4SXiaoDong Huang /* PMU1_DDR_PWR_CON */
178*e3ec6ff4SXiaoDong Huang enum pmu1_ddr_pwr_con {
179*e3ec6ff4SXiaoDong Huang 	ddr_sref_en = 0,
180*e3ec6ff4SXiaoDong Huang 	ddr_sref_a_en = 1,
181*e3ec6ff4SXiaoDong Huang 	ddrio_ret_en = 2,
182*e3ec6ff4SXiaoDong Huang 	ddrio_ret_exit_en = 5,
183*e3ec6ff4SXiaoDong Huang 	ddrio_rstiov_en = 6,
184*e3ec6ff4SXiaoDong Huang 	ddrio_rstiov_exit_en = 7,
185*e3ec6ff4SXiaoDong Huang 	ddr_gating_a_en = 8,
186*e3ec6ff4SXiaoDong Huang 	ddr_gating_c_en = 9,
187*e3ec6ff4SXiaoDong Huang 	ddr_gating_p_en = 10,
188*e3ec6ff4SXiaoDong Huang };
189*e3ec6ff4SXiaoDong Huang 
190*e3ec6ff4SXiaoDong Huang /* PMU_CRU_PWR_CON */
191*e3ec6ff4SXiaoDong Huang enum pmu1_cru_pwr_con {
192*e3ec6ff4SXiaoDong Huang 	alive_32k_en = 0,
193*e3ec6ff4SXiaoDong Huang 	osc_dis_en = 1,
194*e3ec6ff4SXiaoDong Huang 	wakeup_rst_en = 2,
195*e3ec6ff4SXiaoDong Huang 	input_clamp_en = 3,
196*e3ec6ff4SXiaoDong Huang 	alive_osc_mode_en = 4,
197*e3ec6ff4SXiaoDong Huang 	power_off_en = 5,
198*e3ec6ff4SXiaoDong Huang 	pwm_switch_en = 6,
199*e3ec6ff4SXiaoDong Huang 	pwm_gpio_ioe_en = 7,
200*e3ec6ff4SXiaoDong Huang 	pwm_switch_io = 8,
201*e3ec6ff4SXiaoDong Huang 	pd_clk_src_gate_en = 9,
202*e3ec6ff4SXiaoDong Huang };
203*e3ec6ff4SXiaoDong Huang 
204*e3ec6ff4SXiaoDong Huang /* PMU_PLLPD_CON */
205*e3ec6ff4SXiaoDong Huang enum pmu1_pllpd_con {
206*e3ec6ff4SXiaoDong Huang 	B0PLL_PD_EN,
207*e3ec6ff4SXiaoDong Huang 	B1PLL_PD_EN,
208*e3ec6ff4SXiaoDong Huang 	LPLL_PD_EN,
209*e3ec6ff4SXiaoDong Huang 	D0APLL_PD_EN,
210*e3ec6ff4SXiaoDong Huang 	D0BPLL_PD_EN,
211*e3ec6ff4SXiaoDong Huang 	D1APLL_PD_EN,
212*e3ec6ff4SXiaoDong Huang 	D1BPLL_PD_EN,
213*e3ec6ff4SXiaoDong Huang 	D2APLL_PD_EN,
214*e3ec6ff4SXiaoDong Huang 	D2BPLL_PD_EN,
215*e3ec6ff4SXiaoDong Huang 	D3APLL_PD_EN,
216*e3ec6ff4SXiaoDong Huang 	D3BPLL_PD_EN,
217*e3ec6ff4SXiaoDong Huang 	V0PLL_PD_EN,
218*e3ec6ff4SXiaoDong Huang 	AUPLL_PD_EN,
219*e3ec6ff4SXiaoDong Huang 	GPLL_PD_EN,
220*e3ec6ff4SXiaoDong Huang 	CPLL_PD_EN,
221*e3ec6ff4SXiaoDong Huang 	NPLL_PD_EN,
222*e3ec6ff4SXiaoDong Huang 	PPLL_PD_EN = 0,
223*e3ec6ff4SXiaoDong Huang 	SPLL_PD_EN = 1,
224*e3ec6ff4SXiaoDong Huang };
225*e3ec6ff4SXiaoDong Huang 
226*e3ec6ff4SXiaoDong Huang enum pmu1_wakeup_int {
227*e3ec6ff4SXiaoDong Huang 	WAKEUP_CPU0_INT_EN,
228*e3ec6ff4SXiaoDong Huang 	WAKEUP_CPU1_INT_EN,
229*e3ec6ff4SXiaoDong Huang 	WAKEUP_CPU2_INT_EN,
230*e3ec6ff4SXiaoDong Huang 	WAKEUP_CPU3_INT_EN,
231*e3ec6ff4SXiaoDong Huang 	WAKEUP_CPU4_INT_EN,
232*e3ec6ff4SXiaoDong Huang 	WAKEUP_CPU5_INT_EN,
233*e3ec6ff4SXiaoDong Huang 	WAKEUP_CPU6_INT_EN,
234*e3ec6ff4SXiaoDong Huang 	WAKEUP_CPU7_INT_EN,
235*e3ec6ff4SXiaoDong Huang 	WAKEUP_GPIO0_INT_EN,
236*e3ec6ff4SXiaoDong Huang 	WAKEUP_SDMMC_EN,
237*e3ec6ff4SXiaoDong Huang 	WAKEUP_SDIO_EN,
238*e3ec6ff4SXiaoDong Huang 	WAKEUP_USBDEV_EN,
239*e3ec6ff4SXiaoDong Huang 	WAKEUP_UART0_EN,
240*e3ec6ff4SXiaoDong Huang 	WAKEUP_VAD_EN,
241*e3ec6ff4SXiaoDong Huang 	WAKEUP_TIMER_EN,
242*e3ec6ff4SXiaoDong Huang 	WAKEUP_SOC_INT_EN,
243*e3ec6ff4SXiaoDong Huang 	WAKEUP_TIMEROUT_EN,
244*e3ec6ff4SXiaoDong Huang 	WAKEUP_PMUMCU_CEC_EN = 20,
245*e3ec6ff4SXiaoDong Huang };
246*e3ec6ff4SXiaoDong Huang 
247*e3ec6ff4SXiaoDong Huang enum pmu2_dsu_auto_pwr_con {
248*e3ec6ff4SXiaoDong Huang 	dsu_pm_en = 0,
249*e3ec6ff4SXiaoDong Huang 	dsu_pm_int_wakeup_en = 1,
250*e3ec6ff4SXiaoDong Huang 	dsu_pm_sft_wakeup_en = 3,
251*e3ec6ff4SXiaoDong Huang };
252*e3ec6ff4SXiaoDong Huang 
253*e3ec6ff4SXiaoDong Huang enum pmu2_cpu_auto_pwr_con {
254*e3ec6ff4SXiaoDong Huang 	cpu_pm_en = 0,
255*e3ec6ff4SXiaoDong Huang 	cpu_pm_int_wakeup_en = 1,
256*e3ec6ff4SXiaoDong Huang 	cpu_pm_sft_wakeup_en = 3,
257*e3ec6ff4SXiaoDong Huang };
258*e3ec6ff4SXiaoDong Huang 
259*e3ec6ff4SXiaoDong Huang enum pmu2_core_auto_pwr_con {
260*e3ec6ff4SXiaoDong Huang 	core_pm_en = 0,
261*e3ec6ff4SXiaoDong Huang 	core_pm_int_wakeup_en = 1,
262*e3ec6ff4SXiaoDong Huang 	core_pm_int_wakeup_glb_msk = 2,
263*e3ec6ff4SXiaoDong Huang 	core_pm_sft_wakeup_en = 3,
264*e3ec6ff4SXiaoDong Huang };
265*e3ec6ff4SXiaoDong Huang 
266*e3ec6ff4SXiaoDong Huang enum pmu2_dsu_power_con {
267*e3ec6ff4SXiaoDong Huang 	DSU_PWRDN_EN,
268*e3ec6ff4SXiaoDong Huang 	DSU_PWROFF_EN,
269*e3ec6ff4SXiaoDong Huang 	BIT_FULL_EN,
270*e3ec6ff4SXiaoDong Huang 	DSU_RET_EN,
271*e3ec6ff4SXiaoDong Huang 	CLUSTER_CLK_SRC_GT_EN,
272*e3ec6ff4SXiaoDong Huang };
273*e3ec6ff4SXiaoDong Huang 
274*e3ec6ff4SXiaoDong Huang enum pmu2_core_power_con {
275*e3ec6ff4SXiaoDong Huang 	CORE_PWRDN_EN,
276*e3ec6ff4SXiaoDong Huang 	CORE_PWROFF_EN,
277*e3ec6ff4SXiaoDong Huang 	CORE_CPU_PWRDN_EN,
278*e3ec6ff4SXiaoDong Huang 	CORE_PWR_CNT_EN,
279*e3ec6ff4SXiaoDong Huang };
280*e3ec6ff4SXiaoDong Huang 
281*e3ec6ff4SXiaoDong Huang enum pmu2_cluster_idle_con {
282*e3ec6ff4SXiaoDong Huang 	IDLE_REQ_BIGCORE0_EN = 0,
283*e3ec6ff4SXiaoDong Huang 	IDLE_REQ_BIGCORE1_EN = 2,
284*e3ec6ff4SXiaoDong Huang 	IDLE_REQ_DSU_EN = 4,
285*e3ec6ff4SXiaoDong Huang 	IDLE_REQ_LITDSU_EN = 5,
286*e3ec6ff4SXiaoDong Huang 	IDLE_REQ_ADB400_CORE_QCH_EN = 6,
287*e3ec6ff4SXiaoDong Huang };
288*e3ec6ff4SXiaoDong Huang 
289*e3ec6ff4SXiaoDong Huang enum qos_id {
290*e3ec6ff4SXiaoDong Huang 	QOS_ISP0_MWO = 0,
291*e3ec6ff4SXiaoDong Huang 	QOS_ISP0_MRO = 1,
292*e3ec6ff4SXiaoDong Huang 	QOS_ISP1_MWO = 2,
293*e3ec6ff4SXiaoDong Huang 	QOS_ISP1_MRO = 3,
294*e3ec6ff4SXiaoDong Huang 	QOS_VICAP_M0 = 4,
295*e3ec6ff4SXiaoDong Huang 	QOS_VICAP_M1 = 5,
296*e3ec6ff4SXiaoDong Huang 	QOS_FISHEYE0 = 6,
297*e3ec6ff4SXiaoDong Huang 	QOS_FISHEYE1 = 7,
298*e3ec6ff4SXiaoDong Huang 	QOS_VOP_M0 = 8,
299*e3ec6ff4SXiaoDong Huang 	QOS_VOP_M1 = 9,
300*e3ec6ff4SXiaoDong Huang 	QOS_RKVDEC0 = 10,
301*e3ec6ff4SXiaoDong Huang 	QOS_RKVDEC1 = 11,
302*e3ec6ff4SXiaoDong Huang 	QOS_AV1 = 12,
303*e3ec6ff4SXiaoDong Huang 	QOS_RKVENC0_M0RO = 13,
304*e3ec6ff4SXiaoDong Huang 	QOS_RKVENC0_M1RO = 14,
305*e3ec6ff4SXiaoDong Huang 	QOS_RKVENC0_M2WO = 15,
306*e3ec6ff4SXiaoDong Huang 	QOS_RKVENC1_M0RO = 16,
307*e3ec6ff4SXiaoDong Huang 	QOS_RKVENC1_M1RO = 17,
308*e3ec6ff4SXiaoDong Huang 	QOS_RKVENC1_M2WO = 18,
309*e3ec6ff4SXiaoDong Huang 	QOS_DSU_M0 = 19,
310*e3ec6ff4SXiaoDong Huang 	QOS_DSU_M1 = 20,
311*e3ec6ff4SXiaoDong Huang 	QOS_DSU_MP = 21,
312*e3ec6ff4SXiaoDong Huang 	QOS_DEBUG = 22,
313*e3ec6ff4SXiaoDong Huang 	QOS_GPU_M0 = 23,
314*e3ec6ff4SXiaoDong Huang 	QOS_GPU_M1 = 24,
315*e3ec6ff4SXiaoDong Huang 	QOS_GPU_M2 = 25,
316*e3ec6ff4SXiaoDong Huang 	QOS_GPU_M3 = 26,
317*e3ec6ff4SXiaoDong Huang 	QOS_NPU1 = 27,
318*e3ec6ff4SXiaoDong Huang 	QOS_NPU0_MRO = 28,
319*e3ec6ff4SXiaoDong Huang 	QOS_NPU2 = 29,
320*e3ec6ff4SXiaoDong Huang 	QOS_NPU0_MWR = 30,
321*e3ec6ff4SXiaoDong Huang 	QOS_MCU_NPU = 31,
322*e3ec6ff4SXiaoDong Huang 	QOS_JPEG_DEC = 32,
323*e3ec6ff4SXiaoDong Huang 	QOS_JPEG_ENC0 = 33,
324*e3ec6ff4SXiaoDong Huang 	QOS_JPEG_ENC1 = 34,
325*e3ec6ff4SXiaoDong Huang 	QOS_JPEG_ENC2 = 35,
326*e3ec6ff4SXiaoDong Huang 	QOS_JPEG_ENC3 = 36,
327*e3ec6ff4SXiaoDong Huang 	QOS_RGA2_MRO = 37,
328*e3ec6ff4SXiaoDong Huang 	QOS_RGA2_MWO = 38,
329*e3ec6ff4SXiaoDong Huang 	QOS_RGA3_0 = 39,
330*e3ec6ff4SXiaoDong Huang 	QOS_RGA3_1 = 40,
331*e3ec6ff4SXiaoDong Huang 	QOS_VDPU = 41,
332*e3ec6ff4SXiaoDong Huang 	QOS_IEP = 42,
333*e3ec6ff4SXiaoDong Huang 	QOS_HDCP0 = 43,
334*e3ec6ff4SXiaoDong Huang 	QOS_HDCP1 = 44,
335*e3ec6ff4SXiaoDong Huang 	QOS_HDMIRX = 45,
336*e3ec6ff4SXiaoDong Huang 	QOS_GIC600_M0 = 46,
337*e3ec6ff4SXiaoDong Huang 	QOS_GIC600_M1 = 47,
338*e3ec6ff4SXiaoDong Huang 	QOS_MMU600PCIE_TCU = 48,
339*e3ec6ff4SXiaoDong Huang 	QOS_MMU600PHP_TBU = 49,
340*e3ec6ff4SXiaoDong Huang 	QOS_MMU600PHP_TCU = 50,
341*e3ec6ff4SXiaoDong Huang 	QOS_USB3_0 = 51,
342*e3ec6ff4SXiaoDong Huang 	QOS_USB3_1 = 52,
343*e3ec6ff4SXiaoDong Huang 	QOS_USBHOST_0 = 53,
344*e3ec6ff4SXiaoDong Huang 	QOS_USBHOST_1 = 54,
345*e3ec6ff4SXiaoDong Huang 	QOS_EMMC = 55,
346*e3ec6ff4SXiaoDong Huang 	QOS_FSPI = 56,
347*e3ec6ff4SXiaoDong Huang 	QOS_SDIO = 57,
348*e3ec6ff4SXiaoDong Huang 	QOS_DECOM = 58,
349*e3ec6ff4SXiaoDong Huang 	QOS_DMAC0 = 59,
350*e3ec6ff4SXiaoDong Huang 	QOS_DMAC1 = 60,
351*e3ec6ff4SXiaoDong Huang 	QOS_DMAC2 = 61,
352*e3ec6ff4SXiaoDong Huang 	QOS_GIC600M = 62,
353*e3ec6ff4SXiaoDong Huang 	QOS_DMA2DDR = 63,
354*e3ec6ff4SXiaoDong Huang 	QOS_MCU_DDR = 64,
355*e3ec6ff4SXiaoDong Huang 	QOS_VAD = 65,
356*e3ec6ff4SXiaoDong Huang 	QOS_MCU_PMU = 66,
357*e3ec6ff4SXiaoDong Huang 	QOS_CRYPTOS = 67,
358*e3ec6ff4SXiaoDong Huang 	QOS_CRYPTONS = 68,
359*e3ec6ff4SXiaoDong Huang 	QOS_DCF = 69,
360*e3ec6ff4SXiaoDong Huang 	QOS_SDMMC = 70,
361*e3ec6ff4SXiaoDong Huang };
362*e3ec6ff4SXiaoDong Huang 
363*e3ec6ff4SXiaoDong Huang enum pmu2_pdid {
364*e3ec6ff4SXiaoDong Huang 	PD_GPU = 0,
365*e3ec6ff4SXiaoDong Huang 	PD_NPU = 1,
366*e3ec6ff4SXiaoDong Huang 	PD_VCODEC = 2,
367*e3ec6ff4SXiaoDong Huang 	PD_NPUTOP = 3,
368*e3ec6ff4SXiaoDong Huang 	PD_NPU1 = 4,
369*e3ec6ff4SXiaoDong Huang 	PD_NPU2 = 5,
370*e3ec6ff4SXiaoDong Huang 	PD_VENC0 = 6,
371*e3ec6ff4SXiaoDong Huang 	PD_VENC1 = 7,
372*e3ec6ff4SXiaoDong Huang 	PD_RKVDEC0 = 8,
373*e3ec6ff4SXiaoDong Huang 	PD_RKVDEC1 = 9,
374*e3ec6ff4SXiaoDong Huang 	PD_VDPU = 10,
375*e3ec6ff4SXiaoDong Huang 	PD_RGA30 = 11,
376*e3ec6ff4SXiaoDong Huang 	PD_AV1 = 12,
377*e3ec6ff4SXiaoDong Huang 	PD_VI = 13,
378*e3ec6ff4SXiaoDong Huang 	PD_FEC = 14,
379*e3ec6ff4SXiaoDong Huang 	PD_ISP1 = 15,
380*e3ec6ff4SXiaoDong Huang 	PD_RGA31 = 16,
381*e3ec6ff4SXiaoDong Huang 	PD_VOP = 17,
382*e3ec6ff4SXiaoDong Huang 	PD_VO0 = 18,
383*e3ec6ff4SXiaoDong Huang 	PD_VO1 = 19,
384*e3ec6ff4SXiaoDong Huang 	PD_AUDIO = 20,
385*e3ec6ff4SXiaoDong Huang 	PD_PHP = 21,
386*e3ec6ff4SXiaoDong Huang 	PD_GMAC = 22,
387*e3ec6ff4SXiaoDong Huang 	PD_PCIE = 23,
388*e3ec6ff4SXiaoDong Huang 	PD_NVM = 24,
389*e3ec6ff4SXiaoDong Huang 	PD_NVM0 = 25,
390*e3ec6ff4SXiaoDong Huang 	PD_SDIO = 26,
391*e3ec6ff4SXiaoDong Huang 	PD_USB = 27,
392*e3ec6ff4SXiaoDong Huang 	PD_SECURE = 28,
393*e3ec6ff4SXiaoDong Huang 	PD_SDMMC = 29,
394*e3ec6ff4SXiaoDong Huang 	PD_CRYPTO = 30,
395*e3ec6ff4SXiaoDong Huang 	PD_CENTER = 31,
396*e3ec6ff4SXiaoDong Huang 	PD_DDR01 = 32,
397*e3ec6ff4SXiaoDong Huang 	PD_DDR23 = 33,
398*e3ec6ff4SXiaoDong Huang };
399*e3ec6ff4SXiaoDong Huang 
400*e3ec6ff4SXiaoDong Huang enum pmu2_pd_repair_id {
401*e3ec6ff4SXiaoDong Huang 	PD_RPR_PMU = 0,
402*e3ec6ff4SXiaoDong Huang 	PD_RPR_GPU = 1,
403*e3ec6ff4SXiaoDong Huang 	PD_RPR_NPUTOP = 2,
404*e3ec6ff4SXiaoDong Huang 	PD_RPR_NPU1 = 3,
405*e3ec6ff4SXiaoDong Huang 	PD_RPR_NPU2 = 4,
406*e3ec6ff4SXiaoDong Huang 	PD_RPR_VENC0 = 5,
407*e3ec6ff4SXiaoDong Huang 	PD_RPR_VENC1 = 6,
408*e3ec6ff4SXiaoDong Huang 	PD_RPR_RKVDEC0 = 7,
409*e3ec6ff4SXiaoDong Huang 	PD_RPR_RKVDEC1 = 8,
410*e3ec6ff4SXiaoDong Huang 	PD_RPR_VDPU = 9,
411*e3ec6ff4SXiaoDong Huang 	PD_RPR_RGA30 = 10,
412*e3ec6ff4SXiaoDong Huang 	PD_RPR_AV1 = 11,
413*e3ec6ff4SXiaoDong Huang 	PD_RPR_VI = 12,
414*e3ec6ff4SXiaoDong Huang 	PD_RPR_FEC = 13,
415*e3ec6ff4SXiaoDong Huang 	PD_RPR_ISP1 = 14,
416*e3ec6ff4SXiaoDong Huang 	PD_RPR_RGA31 = 15,
417*e3ec6ff4SXiaoDong Huang 	PD_RPR_VOP = 16,
418*e3ec6ff4SXiaoDong Huang 	PD_RPR_VO0 = 17,
419*e3ec6ff4SXiaoDong Huang 	PD_RPR_VO1 = 18,
420*e3ec6ff4SXiaoDong Huang 	PD_RPR_AUDIO = 19,
421*e3ec6ff4SXiaoDong Huang 	PD_RPR_PHP = 20,
422*e3ec6ff4SXiaoDong Huang 	PD_RPR_GMAC = 21,
423*e3ec6ff4SXiaoDong Huang 	PD_RPR_PCIE = 22,
424*e3ec6ff4SXiaoDong Huang 	PD_RPR_NVM0 = 23,
425*e3ec6ff4SXiaoDong Huang 	PD_RPR_SDIO = 24,
426*e3ec6ff4SXiaoDong Huang 	PD_RPR_USB = 25,
427*e3ec6ff4SXiaoDong Huang 	PD_RPR_SDMMC = 26,
428*e3ec6ff4SXiaoDong Huang 	PD_RPR_CRYPTO = 27,
429*e3ec6ff4SXiaoDong Huang 	PD_RPR_CENTER = 28,
430*e3ec6ff4SXiaoDong Huang 	PD_RPR_DDR01 = 29,
431*e3ec6ff4SXiaoDong Huang 	PD_RPR_DDR23 = 30,
432*e3ec6ff4SXiaoDong Huang 	PD_RPR_BUS = 31,
433*e3ec6ff4SXiaoDong Huang };
434*e3ec6ff4SXiaoDong Huang 
435*e3ec6ff4SXiaoDong Huang enum pmu2_bus_id {
436*e3ec6ff4SXiaoDong Huang 	BUS_ID_GPU = 0,
437*e3ec6ff4SXiaoDong Huang 	BUS_ID_NPUTOP = 1,
438*e3ec6ff4SXiaoDong Huang 	BUS_ID_NPU1 = 2,
439*e3ec6ff4SXiaoDong Huang 	BUS_ID_NPU2 = 3,
440*e3ec6ff4SXiaoDong Huang 	BUS_ID_RKVENC0 = 4,
441*e3ec6ff4SXiaoDong Huang 	BUS_ID_RKVENC1 = 5,
442*e3ec6ff4SXiaoDong Huang 	BUS_ID_RKVDEC0 = 6,
443*e3ec6ff4SXiaoDong Huang 	BUS_ID_RKVDEC1 = 7,
444*e3ec6ff4SXiaoDong Huang 	BUS_ID_VDPU = 8,
445*e3ec6ff4SXiaoDong Huang 	BUS_ID_AV1 = 9,
446*e3ec6ff4SXiaoDong Huang 	BUS_ID_VI = 10,
447*e3ec6ff4SXiaoDong Huang 	BUS_ID_ISP = 11,
448*e3ec6ff4SXiaoDong Huang 	BUS_ID_RGA31 = 12,
449*e3ec6ff4SXiaoDong Huang 	BUS_ID_VOP = 13,
450*e3ec6ff4SXiaoDong Huang 	BUS_ID_VOP_CHANNEL = 14,
451*e3ec6ff4SXiaoDong Huang 	BUS_ID_VO0 = 15,
452*e3ec6ff4SXiaoDong Huang 	BUS_ID_VO1 = 16,
453*e3ec6ff4SXiaoDong Huang 	BUS_ID_AUDIO = 17,
454*e3ec6ff4SXiaoDong Huang 	BUS_ID_NVM = 18,
455*e3ec6ff4SXiaoDong Huang 	BUS_ID_SDIO = 19,
456*e3ec6ff4SXiaoDong Huang 	BUS_ID_USB = 20,
457*e3ec6ff4SXiaoDong Huang 	BUS_ID_PHP = 21,
458*e3ec6ff4SXiaoDong Huang 	BUS_ID_VO1USBTOP = 22,
459*e3ec6ff4SXiaoDong Huang 	BUS_ID_SECURE = 23,
460*e3ec6ff4SXiaoDong Huang 	BUS_ID_SECURE_CENTER_CHANNEL = 24,
461*e3ec6ff4SXiaoDong Huang 	BUS_ID_SECURE_VO1USB_CHANNEL = 25,
462*e3ec6ff4SXiaoDong Huang 	BUS_ID_CENTER = 26,
463*e3ec6ff4SXiaoDong Huang 	BUS_ID_CENTER_CHANNEL = 27,
464*e3ec6ff4SXiaoDong Huang 	BUS_ID_MSCH0 = 28,
465*e3ec6ff4SXiaoDong Huang 	BUS_ID_MSCH1 = 29,
466*e3ec6ff4SXiaoDong Huang 	BUS_ID_MSCH2 = 30,
467*e3ec6ff4SXiaoDong Huang 	BUS_ID_MSCH3 = 31,
468*e3ec6ff4SXiaoDong Huang 	BUS_ID_MSCH = 32,
469*e3ec6ff4SXiaoDong Huang 	BUS_ID_BUS = 33,
470*e3ec6ff4SXiaoDong Huang 	BUS_ID_TOP = 34,
471*e3ec6ff4SXiaoDong Huang };
472*e3ec6ff4SXiaoDong Huang 
473*e3ec6ff4SXiaoDong Huang enum pmu2_mem_st {
474*e3ec6ff4SXiaoDong Huang 	PD_NPU_TOP_MEM_ST = 11,
475*e3ec6ff4SXiaoDong Huang 	PD_NPU1_MEM_ST = 12,
476*e3ec6ff4SXiaoDong Huang 	PD_NPU2_MEM_ST = 13,
477*e3ec6ff4SXiaoDong Huang 	PD_VENC0_MEM_ST = 14,
478*e3ec6ff4SXiaoDong Huang 	PD_VENC1_MEM_ST = 15,
479*e3ec6ff4SXiaoDong Huang 	PD_RKVDEC0_MEM_ST = 16,
480*e3ec6ff4SXiaoDong Huang 	PD_RKVDEC1_MEM_ST = 17,
481*e3ec6ff4SXiaoDong Huang 	PD_RGA30_MEM_ST = 19,
482*e3ec6ff4SXiaoDong Huang 	PD_AV1_MEM_ST = 20,
483*e3ec6ff4SXiaoDong Huang 	PD_VI_MEM_ST = 21,
484*e3ec6ff4SXiaoDong Huang 	PD_FEC_MEM_ST = 22,
485*e3ec6ff4SXiaoDong Huang 	PD_ISP1_MEM_ST = 23,
486*e3ec6ff4SXiaoDong Huang 	PD_RGA31_MEM_ST = 24,
487*e3ec6ff4SXiaoDong Huang 	PD_VOP_MEM_ST = 25,
488*e3ec6ff4SXiaoDong Huang 	PD_VO0_MEM_ST = 26,
489*e3ec6ff4SXiaoDong Huang 	PD_VO1_MEM_ST = 27,
490*e3ec6ff4SXiaoDong Huang 	PD_AUDIO_MEM_ST = 28,
491*e3ec6ff4SXiaoDong Huang 	PD_PHP_MEM_ST = 29,
492*e3ec6ff4SXiaoDong Huang 	PD_GMAC_MEM_ST = 30,
493*e3ec6ff4SXiaoDong Huang 	PD_PCIE_MEM_ST = 31,
494*e3ec6ff4SXiaoDong Huang 	PD_NVM0_MEM_ST = 33,
495*e3ec6ff4SXiaoDong Huang 	PD_SDIO_MEM_ST = 34,
496*e3ec6ff4SXiaoDong Huang 	PD_USB_MEM_ST = 35,
497*e3ec6ff4SXiaoDong Huang 	PD_SDMMC_MEM_ST = 37,
498*e3ec6ff4SXiaoDong Huang };
499*e3ec6ff4SXiaoDong Huang 
500*e3ec6ff4SXiaoDong Huang enum pmu2_qid {
501*e3ec6ff4SXiaoDong Huang 	QID_PHPMMU_TBU = 0,
502*e3ec6ff4SXiaoDong Huang 	QID_PHPMMU_TCU = 1,
503*e3ec6ff4SXiaoDong Huang 	QID_PCIEMMU_TBU0 = 2,
504*e3ec6ff4SXiaoDong Huang 	QID_PCIEMU_TCU = 3,
505*e3ec6ff4SXiaoDong Huang 	QID_PHP_GICITS = 4,
506*e3ec6ff4SXiaoDong Huang 	QID_BUS_GICITS0 = 5,
507*e3ec6ff4SXiaoDong Huang 	QID_BUS_GICITS1 = 6,
508*e3ec6ff4SXiaoDong Huang };
509*e3ec6ff4SXiaoDong Huang 
510*e3ec6ff4SXiaoDong Huang /* PMU_DSU_PWR_CON */
511*e3ec6ff4SXiaoDong Huang enum pmu_dsu_pwr_con {
512*e3ec6ff4SXiaoDong Huang 	DSU_PWRDN_ENA = 2,
513*e3ec6ff4SXiaoDong Huang 	DSU_PWROFF_ENA,
514*e3ec6ff4SXiaoDong Huang 	DSU_RET_ENA = 6,
515*e3ec6ff4SXiaoDong Huang 	CLUSTER_CLK_SRC_GATE_ENA,
516*e3ec6ff4SXiaoDong Huang 	DSU_PWR_CON_END
517*e3ec6ff4SXiaoDong Huang };
518*e3ec6ff4SXiaoDong Huang 
519*e3ec6ff4SXiaoDong Huang enum cpu_power_state {
520*e3ec6ff4SXiaoDong Huang 	CPU_POWER_ON,
521*e3ec6ff4SXiaoDong Huang 	CPU_POWER_OFF,
522*e3ec6ff4SXiaoDong Huang 	CPU_EMULATION_OFF,
523*e3ec6ff4SXiaoDong Huang 	CPU_RETENTION,
524*e3ec6ff4SXiaoDong Huang 	CPU_DEBUG
525*e3ec6ff4SXiaoDong Huang };
526*e3ec6ff4SXiaoDong Huang 
527*e3ec6ff4SXiaoDong Huang enum dsu_power_state {
528*e3ec6ff4SXiaoDong Huang 	DSU_POWER_ON,
529*e3ec6ff4SXiaoDong Huang 	CLUSTER_TRANSFER_IDLE,
530*e3ec6ff4SXiaoDong Huang 	DSU_POWER_DOWN,
531*e3ec6ff4SXiaoDong Huang 	DSU_OFF,
532*e3ec6ff4SXiaoDong Huang 	DSU_WAKEUP,
533*e3ec6ff4SXiaoDong Huang 	DSU_POWER_UP,
534*e3ec6ff4SXiaoDong Huang 	CLUSTER_TRANSFER_RESUME,
535*e3ec6ff4SXiaoDong Huang 	DSU_FUNCTION_RETENTION
536*e3ec6ff4SXiaoDong Huang };
537*e3ec6ff4SXiaoDong Huang 
538*e3ec6ff4SXiaoDong Huang /* PMU2_CLUSTER_STS 0x8080 */
539*e3ec6ff4SXiaoDong Huang enum pmu2_cluster_sts_bits {
540*e3ec6ff4SXiaoDong Huang 	pd_cpu0_dwn = 0,
541*e3ec6ff4SXiaoDong Huang 	pd_cpu1_dwn,
542*e3ec6ff4SXiaoDong Huang 	pd_cpu2_dwn,
543*e3ec6ff4SXiaoDong Huang 	pd_cpu3_dwn,
544*e3ec6ff4SXiaoDong Huang 	pd_cpu4_dwn,
545*e3ec6ff4SXiaoDong Huang 	pd_cpu5_dwn,
546*e3ec6ff4SXiaoDong Huang 	pd_cpu6_dwn,
547*e3ec6ff4SXiaoDong Huang 	pd_cpu7_dwn,
548*e3ec6ff4SXiaoDong Huang 	pd_core0_dwn,
549*e3ec6ff4SXiaoDong Huang 	pd_core1_dwn
550*e3ec6ff4SXiaoDong Huang };
551*e3ec6ff4SXiaoDong Huang 
552*e3ec6ff4SXiaoDong Huang #define CLUSTER_STS_NONBOOT_CPUS_DWN	0xfe
553*e3ec6ff4SXiaoDong Huang 
554*e3ec6ff4SXiaoDong Huang enum cpu_off_trigger {
555*e3ec6ff4SXiaoDong Huang 	CPU_OFF_TRIGGER_WFE = 0,
556*e3ec6ff4SXiaoDong Huang 	CPU_OFF_TRIGGER_REQ_EML,
557*e3ec6ff4SXiaoDong Huang 	CPU_OFF_TRIGGER_REQ_WFI,
558*e3ec6ff4SXiaoDong Huang 	CPU_OFF_TRIGGER_REQ_WFI_NBT_CPU,
559*e3ec6ff4SXiaoDong Huang 	CPU_OFF_TRIGGER_REQ_WFI_NBT_CPU_SRAM
560*e3ec6ff4SXiaoDong Huang };
561*e3ec6ff4SXiaoDong Huang 
562*e3ec6ff4SXiaoDong Huang /*****************************************************************************
563*e3ec6ff4SXiaoDong Huang  * power domain on or off
564*e3ec6ff4SXiaoDong Huang  *****************************************************************************/
565*e3ec6ff4SXiaoDong Huang enum pmu_pd_state {
566*e3ec6ff4SXiaoDong Huang 	pmu_pd_on = 0,
567*e3ec6ff4SXiaoDong Huang 	pmu_pd_off = 1
568*e3ec6ff4SXiaoDong Huang };
569*e3ec6ff4SXiaoDong Huang 
570*e3ec6ff4SXiaoDong Huang enum bus_state {
571*e3ec6ff4SXiaoDong Huang 	bus_active,
572*e3ec6ff4SXiaoDong Huang 	bus_idle,
573*e3ec6ff4SXiaoDong Huang };
574*e3ec6ff4SXiaoDong Huang 
575*e3ec6ff4SXiaoDong Huang #define RK_CPU_STATUS_OFF		0
576*e3ec6ff4SXiaoDong Huang #define RK_CPU_STATUS_ON		1
577*e3ec6ff4SXiaoDong Huang #define RK_CPU_STATUS_BUSY		-1
578*e3ec6ff4SXiaoDong Huang 
579*e3ec6ff4SXiaoDong Huang #define PD_CTR_LOOP			500
580*e3ec6ff4SXiaoDong Huang #define MAX_WAIT_COUNT			500
581*e3ec6ff4SXiaoDong Huang 
582*e3ec6ff4SXiaoDong Huang #define pmu_bus_idle_st(id)	\
583*e3ec6ff4SXiaoDong Huang 	(!!(mmio_read_32(PMU_BASE + PMU2_BUS_IDLE_ST((id) / 32)) & BIT((id) % 32)))
584*e3ec6ff4SXiaoDong Huang 
585*e3ec6ff4SXiaoDong Huang #define pmu_bus_idle_ack(id)	\
586*e3ec6ff4SXiaoDong Huang 	(!!(mmio_read_32(PMU_BASE + PMU2_BUS_IDLE_ACK((id) / 32)) & BIT((id) % 32)))
587*e3ec6ff4SXiaoDong Huang 
588*e3ec6ff4SXiaoDong Huang void pm_pll_wait_lock(uint32_t pll_base);
589*e3ec6ff4SXiaoDong Huang #endif /* __PMU_H__ */
590