xref: /rk3399_ARM-atf/plat/rockchip/rk3368/drivers/pmu/pmu.h (revision 6fba6e0490584036fe1210986d6db439b22cb03e)
1*6fba6e04STony Xie /*
2*6fba6e04STony Xie  * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3*6fba6e04STony Xie  *
4*6fba6e04STony Xie  * Redistribution and use in source and binary forms, with or without
5*6fba6e04STony Xie  * modification, are permitted provided that the following conditions are met:
6*6fba6e04STony Xie  *
7*6fba6e04STony Xie  * Redistributions of source code must retain the above copyright notice, this
8*6fba6e04STony Xie  * list of conditions and the following disclaimer.
9*6fba6e04STony Xie  *
10*6fba6e04STony Xie  * Redistributions in binary form must reproduce the above copyright notice,
11*6fba6e04STony Xie  * this list of conditions and the following disclaimer in the documentation
12*6fba6e04STony Xie  * and/or other materials provided with the distribution.
13*6fba6e04STony Xie  *
14*6fba6e04STony Xie  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15*6fba6e04STony Xie  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*6fba6e04STony Xie  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*6fba6e04STony Xie  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
18*6fba6e04STony Xie  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19*6fba6e04STony Xie  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20*6fba6e04STony Xie  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21*6fba6e04STony Xie  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22*6fba6e04STony Xie  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23*6fba6e04STony Xie  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24*6fba6e04STony Xie  * POSSIBILITY OF SUCH DAMAGE.
25*6fba6e04STony Xie  */
26*6fba6e04STony Xie 
27*6fba6e04STony Xie #ifndef __PMU_H__
28*6fba6e04STony Xie #define __PMU_H__
29*6fba6e04STony Xie 
30*6fba6e04STony Xie /* Allocate sp reginon in pmusram */
31*6fba6e04STony Xie #define PSRAM_SP_SIZE		0x80
32*6fba6e04STony Xie #define PSRAM_SP_BOTTOM		(PSRAM_SP_TOP - PSRAM_SP_SIZE)
33*6fba6e04STony Xie 
34*6fba6e04STony Xie /*****************************************************************************
35*6fba6e04STony Xie  * pmu con,reg
36*6fba6e04STony Xie  *****************************************************************************/
37*6fba6e04STony Xie #define PMU_WKUP_CFG0		0x0
38*6fba6e04STony Xie #define PMU_WKUP_CFG1		0x4
39*6fba6e04STony Xie #define PMU_WKUP_CFG2		0x8
40*6fba6e04STony Xie #define PMU_TIMEOUT_CNT		0x7c
41*6fba6e04STony Xie #define PMU_PWRDN_CON		0xc
42*6fba6e04STony Xie #define PMU_PWRDN_ST		0x10
43*6fba6e04STony Xie #define PMU_CORE_PWR_ST		0x38
44*6fba6e04STony Xie 
45*6fba6e04STony Xie #define PMU_PWRMD_CORE		0x14
46*6fba6e04STony Xie #define PMU_PWRMD_COM		0x18
47*6fba6e04STony Xie #define PMU_SFT_CON			0x1c
48*6fba6e04STony Xie #define PMU_BUS_IDE_REQ		0x3c
49*6fba6e04STony Xie #define PMU_BUS_IDE_ST		0x40
50*6fba6e04STony Xie #define PMU_OSC_CNT			0x48
51*6fba6e04STony Xie #define PMU_PLLLOCK_CNT		0x4c
52*6fba6e04STony Xie #define PMU_PLLRST_CNT		0x50
53*6fba6e04STony Xie #define PMU_STABLE_CNT		0x54
54*6fba6e04STony Xie #define PMU_DDRIO_PWR_CNT	0x58
55*6fba6e04STony Xie #define PMU_WKUPRST_CNT		0x5c
56*6fba6e04STony Xie 
57*6fba6e04STony Xie enum pmu_powermode_core {
58*6fba6e04STony Xie 	pmu_mdcr_global_int_dis = 0,
59*6fba6e04STony Xie 	pmu_mdcr_core_src_gt,
60*6fba6e04STony Xie 	pmu_mdcr_clr_cci,
61*6fba6e04STony Xie 	pmu_mdcr_cpu0_pd,
62*6fba6e04STony Xie 	pmu_mdcr_clr_clst_l = 4,
63*6fba6e04STony Xie 	pmu_mdcr_clr_core,
64*6fba6e04STony Xie 	pmu_mdcr_scu_l_pd,
65*6fba6e04STony Xie 	pmu_mdcr_core_pd,
66*6fba6e04STony Xie 	pmu_mdcr_l2_idle = 8,
67*6fba6e04STony Xie 	pmu_mdcr_l2_flush
68*6fba6e04STony Xie };
69*6fba6e04STony Xie 
70*6fba6e04STony Xie /*
71*6fba6e04STony Xie  * the shift of bits for cores status
72*6fba6e04STony Xie  */
73*6fba6e04STony Xie enum pmu_core_pwrst_shift {
74*6fba6e04STony Xie 	clstl_cpu_wfe = 2,
75*6fba6e04STony Xie 	clstl_cpu_wfi = 6,
76*6fba6e04STony Xie 	clstb_cpu_wfe = 12,
77*6fba6e04STony Xie 	clstb_cpu_wfi = 16
78*6fba6e04STony Xie };
79*6fba6e04STony Xie 
80*6fba6e04STony Xie enum pmu_pdid {
81*6fba6e04STony Xie 	PD_CPUL0 = 0,
82*6fba6e04STony Xie 	PD_CPUL1,
83*6fba6e04STony Xie 	PD_CPUL2,
84*6fba6e04STony Xie 	PD_CPUL3,
85*6fba6e04STony Xie 	PD_SCUL,
86*6fba6e04STony Xie 	PD_CPUB0 = 5,
87*6fba6e04STony Xie 	PD_CPUB1,
88*6fba6e04STony Xie 	PD_CPUB2,
89*6fba6e04STony Xie 	PD_CPUB3,
90*6fba6e04STony Xie 	PD_SCUB = 9,
91*6fba6e04STony Xie 	PD_PERI = 13,
92*6fba6e04STony Xie 	PD_VIDEO,
93*6fba6e04STony Xie 	PD_VIO,
94*6fba6e04STony Xie 	PD_GPU0,
95*6fba6e04STony Xie 	PD_GPU1,
96*6fba6e04STony Xie 	PD_END
97*6fba6e04STony Xie };
98*6fba6e04STony Xie 
99*6fba6e04STony Xie enum pmu_bus_ide {
100*6fba6e04STony Xie 	bus_ide_req_clst_l = 0,
101*6fba6e04STony Xie 	bus_ide_req_clst_b,
102*6fba6e04STony Xie 	bus_ide_req_gpu,
103*6fba6e04STony Xie 	bus_ide_req_core,
104*6fba6e04STony Xie 	bus_ide_req_bus = 4,
105*6fba6e04STony Xie 	bus_ide_req_dma,
106*6fba6e04STony Xie 	bus_ide_req_peri,
107*6fba6e04STony Xie 	bus_ide_req_video,
108*6fba6e04STony Xie 	bus_ide_req_vio = 8,
109*6fba6e04STony Xie 	bus_ide_req_res0,
110*6fba6e04STony Xie 	bus_ide_req_cxcs,
111*6fba6e04STony Xie 	bus_ide_req_alive,
112*6fba6e04STony Xie 	bus_ide_req_pmu = 12,
113*6fba6e04STony Xie 	bus_ide_req_msch,
114*6fba6e04STony Xie 	bus_ide_req_cci,
115*6fba6e04STony Xie 	bus_ide_req_cci400 = 15,
116*6fba6e04STony Xie 	bus_ide_req_end
117*6fba6e04STony Xie };
118*6fba6e04STony Xie 
119*6fba6e04STony Xie enum pmu_powermode_common {
120*6fba6e04STony Xie 	pmu_mode_en = 0,
121*6fba6e04STony Xie 	pmu_mode_res0,
122*6fba6e04STony Xie 	pmu_mode_bus_pd,
123*6fba6e04STony Xie 	pmu_mode_wkup_rst,
124*6fba6e04STony Xie 	pmu_mode_pll_pd = 4,
125*6fba6e04STony Xie 	pmu_mode_pwr_off,
126*6fba6e04STony Xie 	pmu_mode_pmu_use_if,
127*6fba6e04STony Xie 	pmu_mode_pmu_alive_use_if,
128*6fba6e04STony Xie 	pmu_mode_osc_dis = 8,
129*6fba6e04STony Xie 	pmu_mode_input_clamp,
130*6fba6e04STony Xie 	pmu_mode_sref_enter,
131*6fba6e04STony Xie 	pmu_mode_ddrc_gt,
132*6fba6e04STony Xie 	pmu_mode_ddrio_ret = 12,
133*6fba6e04STony Xie 	pmu_mode_ddrio_ret_deq,
134*6fba6e04STony Xie 	pmu_mode_clr_pmu,
135*6fba6e04STony Xie 	pmu_mode_clr_alive,
136*6fba6e04STony Xie 	pmu_mode_clr_bus = 16,
137*6fba6e04STony Xie 	pmu_mode_clr_dma,
138*6fba6e04STony Xie 	pmu_mode_clr_msch,
139*6fba6e04STony Xie 	pmu_mode_clr_peri,
140*6fba6e04STony Xie 	pmu_mode_clr_video = 20,
141*6fba6e04STony Xie 	pmu_mode_clr_vio,
142*6fba6e04STony Xie 	pmu_mode_clr_gpu,
143*6fba6e04STony Xie 	pmu_mode_clr_mcu,
144*6fba6e04STony Xie 	pmu_mode_clr_cxcs = 24,
145*6fba6e04STony Xie 	pmu_mode_clr_cci400,
146*6fba6e04STony Xie 	pmu_mode_res1,
147*6fba6e04STony Xie 	pmu_mode_res2,
148*6fba6e04STony Xie 	pmu_mode_res3 = 28,
149*6fba6e04STony Xie 	pmu_mode_mclst
150*6fba6e04STony Xie };
151*6fba6e04STony Xie 
152*6fba6e04STony Xie enum pmu_core_power_st {
153*6fba6e04STony Xie 	clst_l_cpu_wfe = 2,
154*6fba6e04STony Xie 	clst_l_cpu_wfi = 6,
155*6fba6e04STony Xie 	clst_b_l2_flsh_done = 10,
156*6fba6e04STony Xie 	clst_b_l2_wfi = 11,
157*6fba6e04STony Xie 	clst_b_cpu_wfe = 12,
158*6fba6e04STony Xie 	clst_b_cpu_wfi = 16,
159*6fba6e04STony Xie 	mcu_sleeping = 20,
160*6fba6e04STony Xie };
161*6fba6e04STony Xie 
162*6fba6e04STony Xie enum pmu_sft_con {
163*6fba6e04STony Xie 	pmu_sft_acinactm_clst_b = 5,
164*6fba6e04STony Xie 	pmu_sft_l2flsh_clst_b,
165*6fba6e04STony Xie 	pmu_sft_glbl_int_dis_b = 9,
166*6fba6e04STony Xie 	pmu_sft_ddrio_ret_cfg = 11,
167*6fba6e04STony Xie };
168*6fba6e04STony Xie 
169*6fba6e04STony Xie enum pmu_wkup_cfg2 {
170*6fba6e04STony Xie 	pmu_cluster_l_wkup_en = 0,
171*6fba6e04STony Xie 	pmu_cluster_b_wkup_en,
172*6fba6e04STony Xie 	pmu_gpio_wkup_en,
173*6fba6e04STony Xie 	pmu_sdio_wkup_en,
174*6fba6e04STony Xie 	pmu_sdmmc_wkup_en,
175*6fba6e04STony Xie 	pmu_sim_wkup_en,
176*6fba6e04STony Xie 	pmu_timer_wkup_en,
177*6fba6e04STony Xie 	pmu_usbdev_wkup_en,
178*6fba6e04STony Xie 	pmu_sft_wkup_en,
179*6fba6e04STony Xie 	pmu_wdt_mcu_wkup_en,
180*6fba6e04STony Xie 	pmu_timeout_wkup_en,
181*6fba6e04STony Xie };
182*6fba6e04STony Xie 
183*6fba6e04STony Xie enum pmu_bus_idle_st {
184*6fba6e04STony Xie 	pmu_idle_ack_cluster_l = 0,
185*6fba6e04STony Xie 	pmu_idle_ack_cluster_b,
186*6fba6e04STony Xie 	pmu_idle_ack_gpu,
187*6fba6e04STony Xie 	pmu_idle_ack_core,
188*6fba6e04STony Xie 	pmu_idle_ack_bus,
189*6fba6e04STony Xie 	pmu_idle_ack_dma,
190*6fba6e04STony Xie 	pmu_idle_ack_peri,
191*6fba6e04STony Xie 	pmu_idle_ack_video,
192*6fba6e04STony Xie 	pmu_idle_ack_vio,
193*6fba6e04STony Xie 	pmu_idle_ack_cci = 10,
194*6fba6e04STony Xie 	pmu_idle_ack_msch,
195*6fba6e04STony Xie 	pmu_idle_ack_alive,
196*6fba6e04STony Xie 	pmu_idle_ack_pmu,
197*6fba6e04STony Xie 	pmu_idle_ack_cxcs,
198*6fba6e04STony Xie 	pmu_idle_ack_cci400,
199*6fba6e04STony Xie 	pmu_inactive_cluster_l,
200*6fba6e04STony Xie 	pmu_inactive_cluster_b,
201*6fba6e04STony Xie 	pmu_idle_gpu,
202*6fba6e04STony Xie 	pmu_idle_core,
203*6fba6e04STony Xie 	pmu_idle_bus,
204*6fba6e04STony Xie 	pmu_idle_dma,
205*6fba6e04STony Xie 	pmu_idle_peri,
206*6fba6e04STony Xie 	pmu_idle_video,
207*6fba6e04STony Xie 	pmu_idle_vio,
208*6fba6e04STony Xie 	pmu_idle_cci = 26,
209*6fba6e04STony Xie 	pmu_idle_msch,
210*6fba6e04STony Xie 	pmu_idle_alive,
211*6fba6e04STony Xie 	pmu_idle_pmu,
212*6fba6e04STony Xie 	pmu_active_cxcs,
213*6fba6e04STony Xie 	pmu_active_cci,
214*6fba6e04STony Xie };
215*6fba6e04STony Xie 
216*6fba6e04STony Xie #define PM_PWRDM_CPUSB_MSK (0xf << 5)
217*6fba6e04STony Xie 
218*6fba6e04STony Xie #define CKECK_WFE_MSK		0x1
219*6fba6e04STony Xie #define CKECK_WFI_MSK		0x10
220*6fba6e04STony Xie #define CKECK_WFEI_MSK		0x11
221*6fba6e04STony Xie 
222*6fba6e04STony Xie #define PD_CTR_LOOP		500
223*6fba6e04STony Xie #define CHK_CPU_LOOP		500
224*6fba6e04STony Xie 
225*6fba6e04STony Xie #define MAX_WAIT_CONUT 1000
226*6fba6e04STony Xie 
227*6fba6e04STony Xie #endif /* __PMU_H__ */
228