xref: /arm-trusted-firmware/plat/rockchip/rk3368/drivers/pmu/pmu.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef PMU_H
8*91f16700Schasinglulu #define PMU_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu /* Allocate sp reginon in pmusram */
11*91f16700Schasinglulu #define PSRAM_SP_SIZE		0x80
12*91f16700Schasinglulu #define PSRAM_SP_BOTTOM		(PSRAM_SP_TOP - PSRAM_SP_SIZE)
13*91f16700Schasinglulu 
14*91f16700Schasinglulu /*****************************************************************************
15*91f16700Schasinglulu  * pmu con,reg
16*91f16700Schasinglulu  *****************************************************************************/
17*91f16700Schasinglulu #define PMU_WKUP_CFG0		0x0
18*91f16700Schasinglulu #define PMU_WKUP_CFG1		0x4
19*91f16700Schasinglulu #define PMU_WKUP_CFG2		0x8
20*91f16700Schasinglulu #define PMU_TIMEOUT_CNT		0x7c
21*91f16700Schasinglulu #define PMU_PWRDN_CON		0xc
22*91f16700Schasinglulu #define PMU_PWRDN_ST		0x10
23*91f16700Schasinglulu #define PMU_CORE_PWR_ST		0x38
24*91f16700Schasinglulu 
25*91f16700Schasinglulu #define PMU_PWRMD_CORE		0x14
26*91f16700Schasinglulu #define PMU_PWRMD_COM		0x18
27*91f16700Schasinglulu #define PMU_SFT_CON			0x1c
28*91f16700Schasinglulu #define PMU_BUS_IDE_REQ		0x3c
29*91f16700Schasinglulu #define PMU_BUS_IDE_ST		0x40
30*91f16700Schasinglulu #define PMU_OSC_CNT			0x48
31*91f16700Schasinglulu #define PMU_PLLLOCK_CNT		0x4c
32*91f16700Schasinglulu #define PMU_PLLRST_CNT		0x50
33*91f16700Schasinglulu #define PMU_STABLE_CNT		0x54
34*91f16700Schasinglulu #define PMU_DDRIO_PWR_CNT	0x58
35*91f16700Schasinglulu #define PMU_WKUPRST_CNT		0x5c
36*91f16700Schasinglulu 
37*91f16700Schasinglulu enum pmu_powermode_core {
38*91f16700Schasinglulu 	pmu_mdcr_global_int_dis = 0,
39*91f16700Schasinglulu 	pmu_mdcr_core_src_gt,
40*91f16700Schasinglulu 	pmu_mdcr_clr_cci,
41*91f16700Schasinglulu 	pmu_mdcr_cpu0_pd,
42*91f16700Schasinglulu 	pmu_mdcr_clr_clst_l = 4,
43*91f16700Schasinglulu 	pmu_mdcr_clr_core,
44*91f16700Schasinglulu 	pmu_mdcr_scu_l_pd,
45*91f16700Schasinglulu 	pmu_mdcr_core_pd,
46*91f16700Schasinglulu 	pmu_mdcr_l2_idle = 8,
47*91f16700Schasinglulu 	pmu_mdcr_l2_flush
48*91f16700Schasinglulu };
49*91f16700Schasinglulu 
50*91f16700Schasinglulu /*
51*91f16700Schasinglulu  * the shift of bits for cores status
52*91f16700Schasinglulu  */
53*91f16700Schasinglulu enum pmu_core_pwrst_shift {
54*91f16700Schasinglulu 	clstl_cpu_wfe = 2,
55*91f16700Schasinglulu 	clstl_cpu_wfi = 6,
56*91f16700Schasinglulu 	clstb_cpu_wfe = 12,
57*91f16700Schasinglulu 	clstb_cpu_wfi = 16
58*91f16700Schasinglulu };
59*91f16700Schasinglulu 
60*91f16700Schasinglulu enum pmu_pdid {
61*91f16700Schasinglulu 	PD_CPUL0 = 0,
62*91f16700Schasinglulu 	PD_CPUL1,
63*91f16700Schasinglulu 	PD_CPUL2,
64*91f16700Schasinglulu 	PD_CPUL3,
65*91f16700Schasinglulu 	PD_SCUL,
66*91f16700Schasinglulu 	PD_CPUB0 = 5,
67*91f16700Schasinglulu 	PD_CPUB1,
68*91f16700Schasinglulu 	PD_CPUB2,
69*91f16700Schasinglulu 	PD_CPUB3,
70*91f16700Schasinglulu 	PD_SCUB = 9,
71*91f16700Schasinglulu 	PD_PERI = 13,
72*91f16700Schasinglulu 	PD_VIDEO,
73*91f16700Schasinglulu 	PD_VIO,
74*91f16700Schasinglulu 	PD_GPU0,
75*91f16700Schasinglulu 	PD_GPU1,
76*91f16700Schasinglulu 	PD_END
77*91f16700Schasinglulu };
78*91f16700Schasinglulu 
79*91f16700Schasinglulu enum pmu_bus_ide {
80*91f16700Schasinglulu 	bus_ide_req_clst_l = 0,
81*91f16700Schasinglulu 	bus_ide_req_clst_b,
82*91f16700Schasinglulu 	bus_ide_req_gpu,
83*91f16700Schasinglulu 	bus_ide_req_core,
84*91f16700Schasinglulu 	bus_ide_req_bus = 4,
85*91f16700Schasinglulu 	bus_ide_req_dma,
86*91f16700Schasinglulu 	bus_ide_req_peri,
87*91f16700Schasinglulu 	bus_ide_req_video,
88*91f16700Schasinglulu 	bus_ide_req_vio = 8,
89*91f16700Schasinglulu 	bus_ide_req_res0,
90*91f16700Schasinglulu 	bus_ide_req_cxcs,
91*91f16700Schasinglulu 	bus_ide_req_alive,
92*91f16700Schasinglulu 	bus_ide_req_pmu = 12,
93*91f16700Schasinglulu 	bus_ide_req_msch,
94*91f16700Schasinglulu 	bus_ide_req_cci,
95*91f16700Schasinglulu 	bus_ide_req_cci400 = 15,
96*91f16700Schasinglulu 	bus_ide_req_end
97*91f16700Schasinglulu };
98*91f16700Schasinglulu 
99*91f16700Schasinglulu enum pmu_powermode_common {
100*91f16700Schasinglulu 	pmu_mode_en = 0,
101*91f16700Schasinglulu 	pmu_mode_res0,
102*91f16700Schasinglulu 	pmu_mode_bus_pd,
103*91f16700Schasinglulu 	pmu_mode_wkup_rst,
104*91f16700Schasinglulu 	pmu_mode_pll_pd = 4,
105*91f16700Schasinglulu 	pmu_mode_pwr_off,
106*91f16700Schasinglulu 	pmu_mode_pmu_use_if,
107*91f16700Schasinglulu 	pmu_mode_pmu_alive_use_if,
108*91f16700Schasinglulu 	pmu_mode_osc_dis = 8,
109*91f16700Schasinglulu 	pmu_mode_input_clamp,
110*91f16700Schasinglulu 	pmu_mode_sref_enter,
111*91f16700Schasinglulu 	pmu_mode_ddrc_gt,
112*91f16700Schasinglulu 	pmu_mode_ddrio_ret = 12,
113*91f16700Schasinglulu 	pmu_mode_ddrio_ret_deq,
114*91f16700Schasinglulu 	pmu_mode_clr_pmu,
115*91f16700Schasinglulu 	pmu_mode_clr_alive,
116*91f16700Schasinglulu 	pmu_mode_clr_bus = 16,
117*91f16700Schasinglulu 	pmu_mode_clr_dma,
118*91f16700Schasinglulu 	pmu_mode_clr_msch,
119*91f16700Schasinglulu 	pmu_mode_clr_peri,
120*91f16700Schasinglulu 	pmu_mode_clr_video = 20,
121*91f16700Schasinglulu 	pmu_mode_clr_vio,
122*91f16700Schasinglulu 	pmu_mode_clr_gpu,
123*91f16700Schasinglulu 	pmu_mode_clr_mcu,
124*91f16700Schasinglulu 	pmu_mode_clr_cxcs = 24,
125*91f16700Schasinglulu 	pmu_mode_clr_cci400,
126*91f16700Schasinglulu 	pmu_mode_res1,
127*91f16700Schasinglulu 	pmu_mode_res2,
128*91f16700Schasinglulu 	pmu_mode_res3 = 28,
129*91f16700Schasinglulu 	pmu_mode_mclst
130*91f16700Schasinglulu };
131*91f16700Schasinglulu 
132*91f16700Schasinglulu enum pmu_core_power_st {
133*91f16700Schasinglulu 	clst_l_cpu_wfe = 2,
134*91f16700Schasinglulu 	clst_l_cpu_wfi = 6,
135*91f16700Schasinglulu 	clst_b_l2_flsh_done = 10,
136*91f16700Schasinglulu 	clst_b_l2_wfi = 11,
137*91f16700Schasinglulu 	clst_b_cpu_wfe = 12,
138*91f16700Schasinglulu 	clst_b_cpu_wfi = 16,
139*91f16700Schasinglulu 	mcu_sleeping = 20,
140*91f16700Schasinglulu };
141*91f16700Schasinglulu 
142*91f16700Schasinglulu enum pmu_sft_con {
143*91f16700Schasinglulu 	pmu_sft_acinactm_clst_b = 5,
144*91f16700Schasinglulu 	pmu_sft_l2flsh_clst_b,
145*91f16700Schasinglulu 	pmu_sft_glbl_int_dis_b = 9,
146*91f16700Schasinglulu 	pmu_sft_ddrio_ret_cfg = 11,
147*91f16700Schasinglulu };
148*91f16700Schasinglulu 
149*91f16700Schasinglulu enum pmu_wkup_cfg2 {
150*91f16700Schasinglulu 	pmu_cluster_l_wkup_en = 0,
151*91f16700Schasinglulu 	pmu_cluster_b_wkup_en,
152*91f16700Schasinglulu 	pmu_gpio_wkup_en,
153*91f16700Schasinglulu 	pmu_sdio_wkup_en,
154*91f16700Schasinglulu 	pmu_sdmmc_wkup_en,
155*91f16700Schasinglulu 	pmu_sim_wkup_en,
156*91f16700Schasinglulu 	pmu_timer_wkup_en,
157*91f16700Schasinglulu 	pmu_usbdev_wkup_en,
158*91f16700Schasinglulu 	pmu_sft_wkup_en,
159*91f16700Schasinglulu 	pmu_wdt_mcu_wkup_en,
160*91f16700Schasinglulu 	pmu_timeout_wkup_en,
161*91f16700Schasinglulu };
162*91f16700Schasinglulu 
163*91f16700Schasinglulu enum pmu_bus_idle_st {
164*91f16700Schasinglulu 	pmu_idle_ack_cluster_l = 0,
165*91f16700Schasinglulu 	pmu_idle_ack_cluster_b,
166*91f16700Schasinglulu 	pmu_idle_ack_gpu,
167*91f16700Schasinglulu 	pmu_idle_ack_core,
168*91f16700Schasinglulu 	pmu_idle_ack_bus,
169*91f16700Schasinglulu 	pmu_idle_ack_dma,
170*91f16700Schasinglulu 	pmu_idle_ack_peri,
171*91f16700Schasinglulu 	pmu_idle_ack_video,
172*91f16700Schasinglulu 	pmu_idle_ack_vio,
173*91f16700Schasinglulu 	pmu_idle_ack_cci = 10,
174*91f16700Schasinglulu 	pmu_idle_ack_msch,
175*91f16700Schasinglulu 	pmu_idle_ack_alive,
176*91f16700Schasinglulu 	pmu_idle_ack_pmu,
177*91f16700Schasinglulu 	pmu_idle_ack_cxcs,
178*91f16700Schasinglulu 	pmu_idle_ack_cci400,
179*91f16700Schasinglulu 	pmu_inactive_cluster_l,
180*91f16700Schasinglulu 	pmu_inactive_cluster_b,
181*91f16700Schasinglulu 	pmu_idle_gpu,
182*91f16700Schasinglulu 	pmu_idle_core,
183*91f16700Schasinglulu 	pmu_idle_bus,
184*91f16700Schasinglulu 	pmu_idle_dma,
185*91f16700Schasinglulu 	pmu_idle_peri,
186*91f16700Schasinglulu 	pmu_idle_video,
187*91f16700Schasinglulu 	pmu_idle_vio,
188*91f16700Schasinglulu 	pmu_idle_cci = 26,
189*91f16700Schasinglulu 	pmu_idle_msch,
190*91f16700Schasinglulu 	pmu_idle_alive,
191*91f16700Schasinglulu 	pmu_idle_pmu,
192*91f16700Schasinglulu 	pmu_active_cxcs,
193*91f16700Schasinglulu 	pmu_active_cci,
194*91f16700Schasinglulu };
195*91f16700Schasinglulu 
196*91f16700Schasinglulu #define PM_PWRDM_CPUSB_MSK (0xf << 5)
197*91f16700Schasinglulu 
198*91f16700Schasinglulu #define CKECK_WFE_MSK		0x1
199*91f16700Schasinglulu #define CKECK_WFI_MSK		0x10
200*91f16700Schasinglulu #define CKECK_WFEI_MSK		0x11
201*91f16700Schasinglulu 
202*91f16700Schasinglulu #define PD_CTR_LOOP		500
203*91f16700Schasinglulu #define CHK_CPU_LOOP		500
204*91f16700Schasinglulu 
205*91f16700Schasinglulu #define MAX_WAIT_CONUT 1000
206*91f16700Schasinglulu 
207*91f16700Schasinglulu #endif /* PMU_H */
208