xref: /arm-trusted-firmware/plat/rockchip/rk3328/drivers/pmu/pmu.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2017, 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 #include <soc.h>
11*91f16700Schasinglulu 
12*91f16700Schasinglulu struct rk3328_sleep_ddr_data {
13*91f16700Schasinglulu 	uint32_t pmu_debug_enable;
14*91f16700Schasinglulu 	uint32_t debug_iomux_save;
15*91f16700Schasinglulu 	uint32_t pmic_sleep_save;
16*91f16700Schasinglulu 	uint32_t pmu_wakeup_conf0;
17*91f16700Schasinglulu 	uint32_t pmu_pwrmd_com;
18*91f16700Schasinglulu 	uint32_t cru_mode_save;
19*91f16700Schasinglulu 	uint32_t clk_sel0, clk_sel1, clk_sel18,
20*91f16700Schasinglulu 		 clk_sel20, clk_sel24, clk_sel38;
21*91f16700Schasinglulu 	uint32_t clk_ungt_save[CRU_CLKGATE_NUMS];
22*91f16700Schasinglulu 	uint32_t cru_plls_con_save[MAX_PLL][CRU_PLL_CON_NUMS];
23*91f16700Schasinglulu };
24*91f16700Schasinglulu 
25*91f16700Schasinglulu struct rk3328_sleep_sram_data {
26*91f16700Schasinglulu 	uint32_t pmic_sleep_save;
27*91f16700Schasinglulu 	uint32_t pmic_sleep_gpio_save[2];
28*91f16700Schasinglulu 	uint32_t ddr_grf_con0;
29*91f16700Schasinglulu 	uint32_t dpll_con_save[CRU_PLL_CON_NUMS];
30*91f16700Schasinglulu 	uint32_t pd_sr_idle_save;
31*91f16700Schasinglulu 	uint32_t uart2_ier;
32*91f16700Schasinglulu };
33*91f16700Schasinglulu 
34*91f16700Schasinglulu /*****************************************************************************
35*91f16700Schasinglulu  * The ways of cores power domain contorlling
36*91f16700Schasinglulu  *****************************************************************************/
37*91f16700Schasinglulu enum cores_pm_ctr_mode {
38*91f16700Schasinglulu 	core_pwr_pd = 0,
39*91f16700Schasinglulu 	core_pwr_wfi = 1,
40*91f16700Schasinglulu 	core_pwr_wfi_int = 2
41*91f16700Schasinglulu };
42*91f16700Schasinglulu 
43*91f16700Schasinglulu enum pmu_cores_pm_by_wfi {
44*91f16700Schasinglulu 	core_pm_en = 0,
45*91f16700Schasinglulu 	core_pm_int_wakeup_en,
46*91f16700Schasinglulu 	core_pm_dis_int,
47*91f16700Schasinglulu 	core_pm_sft_wakeup_en
48*91f16700Schasinglulu };
49*91f16700Schasinglulu 
50*91f16700Schasinglulu extern void *pmu_cpuson_entrypoint_start;
51*91f16700Schasinglulu extern void *pmu_cpuson_entrypoint_end;
52*91f16700Schasinglulu 
53*91f16700Schasinglulu #define CORES_PM_DISABLE	0x0
54*91f16700Schasinglulu 
55*91f16700Schasinglulu /*****************************************************************************
56*91f16700Schasinglulu  * pmu con,reg
57*91f16700Schasinglulu  *****************************************************************************/
58*91f16700Schasinglulu #define PMU_WAKEUP_CFG0		0x00
59*91f16700Schasinglulu #define PMU_PWRDN_CON		0x0c
60*91f16700Schasinglulu #define PMU_PWRDN_ST		0x10
61*91f16700Schasinglulu #define PMU_PWRMD_COM		0x18
62*91f16700Schasinglulu #define PMU_SFT_CON		0x1c
63*91f16700Schasinglulu #define PMU_INT_CON		0x20
64*91f16700Schasinglulu #define PMU_INT_ST		0x24
65*91f16700Schasinglulu #define PMU_POWER_ST		0x44
66*91f16700Schasinglulu #define PMU_CPUAPM_CON(n)	(0x80 + (n) * 4)
67*91f16700Schasinglulu #define PMU_SYS_REG(n)		(0xa0 + (n) * 4)
68*91f16700Schasinglulu 
69*91f16700Schasinglulu #define CHECK_CPU_WFIE_BASE		(GRF_BASE + GRF_CPU_STATUS(1))
70*91f16700Schasinglulu 
71*91f16700Schasinglulu enum pmu_core_pwrst_shift {
72*91f16700Schasinglulu 	clst_cpu_wfe = 0,
73*91f16700Schasinglulu 	clst_cpu_wfi = 4,
74*91f16700Schasinglulu };
75*91f16700Schasinglulu 
76*91f16700Schasinglulu #define clstl_cpu_wfe (clst_cpu_wfe)
77*91f16700Schasinglulu #define clstb_cpu_wfe (clst_cpu_wfe)
78*91f16700Schasinglulu 
79*91f16700Schasinglulu enum pmu_pd_id {
80*91f16700Schasinglulu 	PD_CPU0 = 0,
81*91f16700Schasinglulu 	PD_CPU1,
82*91f16700Schasinglulu 	PD_CPU2,
83*91f16700Schasinglulu 	PD_CPU3,
84*91f16700Schasinglulu };
85*91f16700Schasinglulu 
86*91f16700Schasinglulu enum pmu_power_mode_common {
87*91f16700Schasinglulu 	pmu_mode_en = 0,
88*91f16700Schasinglulu 	sref_enter_en,
89*91f16700Schasinglulu 	global_int_disable_cfg,
90*91f16700Schasinglulu 	cpu0_pd_en,
91*91f16700Schasinglulu 	wait_wakeup_begin_cfg = 4,
92*91f16700Schasinglulu 	l2_flush_en,
93*91f16700Schasinglulu 	l2_idle_en,
94*91f16700Schasinglulu 	ddrio_ret_de_req,
95*91f16700Schasinglulu 	ddrio_ret_en = 8,
96*91f16700Schasinglulu };
97*91f16700Schasinglulu 
98*91f16700Schasinglulu enum pmu_sft_con {
99*91f16700Schasinglulu 	upctl_c_sysreq_cfg = 0,
100*91f16700Schasinglulu 	l2flushreq_req,
101*91f16700Schasinglulu 	ddr_io_ret_cfg,
102*91f16700Schasinglulu 	pmu_sft_ret_cfg,
103*91f16700Schasinglulu };
104*91f16700Schasinglulu 
105*91f16700Schasinglulu #define CKECK_WFE_MSK		0x1
106*91f16700Schasinglulu #define CKECK_WFI_MSK		0x10
107*91f16700Schasinglulu #define CKECK_WFEI_MSK		0x11
108*91f16700Schasinglulu 
109*91f16700Schasinglulu #define PD_CTR_LOOP		500
110*91f16700Schasinglulu #define CHK_CPU_LOOP		500
111*91f16700Schasinglulu #define MAX_WAIT_CONUT		1000
112*91f16700Schasinglulu 
113*91f16700Schasinglulu #define WAKEUP_INT_CLUSTER_EN	0x1
114*91f16700Schasinglulu #define PMIC_SLEEP_REG		0x34
115*91f16700Schasinglulu 
116*91f16700Schasinglulu #define PLL_IS_NORM_MODE(mode, pll_id)	\
117*91f16700Schasinglulu 		((mode & (PLL_NORM_MODE(pll_id)) & 0xffff) != 0)
118*91f16700Schasinglulu 
119*91f16700Schasinglulu #define CTLR_ENABLE_G1_BIT	BIT(1)
120*91f16700Schasinglulu #define UART_FIFO_EMPTY		BIT(6)
121*91f16700Schasinglulu 
122*91f16700Schasinglulu #define UART_IER		0x04
123*91f16700Schasinglulu #define UART_FCR		0x08
124*91f16700Schasinglulu #define UART_LSR		0x14
125*91f16700Schasinglulu 
126*91f16700Schasinglulu #define UART_INT_DISABLE	0x00
127*91f16700Schasinglulu #define UART_FIFO_RESET		0x07
128*91f16700Schasinglulu 
129*91f16700Schasinglulu #endif /* PMU_H */
130