xref: /arm-trusted-firmware/plat/rockchip/rk3399/drivers/pmu/pmu.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2016-2019, 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 <pmu_bits.h>
11*91f16700Schasinglulu #include <pmu_regs.h>
12*91f16700Schasinglulu #include <soc.h>
13*91f16700Schasinglulu 
14*91f16700Schasinglulu /* Allocate sp reginon in pmusram */
15*91f16700Schasinglulu #define PSRAM_SP_SIZE		0x80
16*91f16700Schasinglulu #define PSRAM_SP_BOTTOM		(PSRAM_SP_TOP - PSRAM_SP_SIZE)
17*91f16700Schasinglulu 
18*91f16700Schasinglulu /*****************************************************************************
19*91f16700Schasinglulu  * Common define for per soc pmu.h
20*91f16700Schasinglulu  *****************************************************************************/
21*91f16700Schasinglulu /* The ways of cores power domain contorlling */
22*91f16700Schasinglulu enum cores_pm_ctr_mode {
23*91f16700Schasinglulu 	core_pwr_pd = 0,
24*91f16700Schasinglulu 	core_pwr_wfi = 1,
25*91f16700Schasinglulu 	core_pwr_wfi_int = 2
26*91f16700Schasinglulu };
27*91f16700Schasinglulu 
28*91f16700Schasinglulu /*****************************************************************************
29*91f16700Schasinglulu  * pmu con,reg
30*91f16700Schasinglulu  *****************************************************************************/
31*91f16700Schasinglulu #define PMU_WKUP_CFG(n)	((n) * 4)
32*91f16700Schasinglulu 
33*91f16700Schasinglulu #define PMU_CORE_PM_CON(cpu)		(0xc0 + (cpu * 4))
34*91f16700Schasinglulu 
35*91f16700Schasinglulu /* the shift of bits for cores status */
36*91f16700Schasinglulu enum pmu_core_pwrst_shift {
37*91f16700Schasinglulu 	clstl_cpu_wfe = 2,
38*91f16700Schasinglulu 	clstl_cpu_wfi = 6,
39*91f16700Schasinglulu 	clstb_cpu_wfe = 12,
40*91f16700Schasinglulu 	clstb_cpu_wfi = 16
41*91f16700Schasinglulu };
42*91f16700Schasinglulu 
43*91f16700Schasinglulu #define CKECK_WFE_MSK		0x1
44*91f16700Schasinglulu #define CKECK_WFI_MSK		0x10
45*91f16700Schasinglulu #define CKECK_WFEI_MSK		0x11
46*91f16700Schasinglulu 
47*91f16700Schasinglulu /* Specific features required  */
48*91f16700Schasinglulu #define AP_PWROFF		0x0a
49*91f16700Schasinglulu 
50*91f16700Schasinglulu #define GPIO0A0_SMT_ENABLE	BITS_WITH_WMASK(1, 3, 0)
51*91f16700Schasinglulu #define GPIO1A6_IOMUX		BITS_WITH_WMASK(0, 3, 12)
52*91f16700Schasinglulu 
53*91f16700Schasinglulu #define TSADC_INT_PIN		38
54*91f16700Schasinglulu #define CORES_PM_DISABLE	0x0
55*91f16700Schasinglulu 
56*91f16700Schasinglulu #define PD_CTR_LOOP		10000
57*91f16700Schasinglulu #define CHK_CPU_LOOP		500
58*91f16700Schasinglulu #define MAX_WAIT_COUNT		1000
59*91f16700Schasinglulu 
60*91f16700Schasinglulu #define	GRF_SOC_CON4		0x0e210
61*91f16700Schasinglulu 
62*91f16700Schasinglulu #define PMUGRF_GPIO0A_SMT	0x0120
63*91f16700Schasinglulu #define PMUGRF_SOC_CON0		0x0180
64*91f16700Schasinglulu 
65*91f16700Schasinglulu #define CCI_FORCE_WAKEUP	WMSK_BIT(8)
66*91f16700Schasinglulu #define EXTERNAL_32K		WMSK_BIT(0)
67*91f16700Schasinglulu 
68*91f16700Schasinglulu #define PLL_PD_HW		0xff
69*91f16700Schasinglulu #define IOMUX_CLK_32K		0x00030002
70*91f16700Schasinglulu #define NOC_AUTO_ENABLE		0x3fffffff
71*91f16700Schasinglulu 
72*91f16700Schasinglulu #define SAVE_QOS(array, NAME) \
73*91f16700Schasinglulu 	RK3399_CPU_AXI_SAVE_QOS(array, CPU_AXI_##NAME##_QOS_BASE)
74*91f16700Schasinglulu #define RESTORE_QOS(array, NAME) \
75*91f16700Schasinglulu 	RK3399_CPU_AXI_RESTORE_QOS(array, CPU_AXI_##NAME##_QOS_BASE)
76*91f16700Schasinglulu 
77*91f16700Schasinglulu #define RK3399_CPU_AXI_SAVE_QOS(array, base) do { \
78*91f16700Schasinglulu 	array[0] = mmio_read_32(base + CPU_AXI_QOS_ID_COREID); \
79*91f16700Schasinglulu 	array[1] = mmio_read_32(base + CPU_AXI_QOS_REVISIONID); \
80*91f16700Schasinglulu 	array[2] = mmio_read_32(base + CPU_AXI_QOS_PRIORITY); \
81*91f16700Schasinglulu 	array[3] = mmio_read_32(base + CPU_AXI_QOS_MODE); \
82*91f16700Schasinglulu 	array[4] = mmio_read_32(base + CPU_AXI_QOS_BANDWIDTH); \
83*91f16700Schasinglulu 	array[5] = mmio_read_32(base + CPU_AXI_QOS_SATURATION); \
84*91f16700Schasinglulu 	array[6] = mmio_read_32(base + CPU_AXI_QOS_EXTCONTROL); \
85*91f16700Schasinglulu } while (0)
86*91f16700Schasinglulu 
87*91f16700Schasinglulu #define RK3399_CPU_AXI_RESTORE_QOS(array, base) do { \
88*91f16700Schasinglulu 	mmio_write_32(base + CPU_AXI_QOS_ID_COREID, array[0]); \
89*91f16700Schasinglulu 	mmio_write_32(base + CPU_AXI_QOS_REVISIONID, array[1]); \
90*91f16700Schasinglulu 	mmio_write_32(base + CPU_AXI_QOS_PRIORITY, array[2]); \
91*91f16700Schasinglulu 	mmio_write_32(base + CPU_AXI_QOS_MODE, array[3]); \
92*91f16700Schasinglulu 	mmio_write_32(base + CPU_AXI_QOS_BANDWIDTH, array[4]); \
93*91f16700Schasinglulu 	mmio_write_32(base + CPU_AXI_QOS_SATURATION, array[5]); \
94*91f16700Schasinglulu 	mmio_write_32(base + CPU_AXI_QOS_EXTCONTROL, array[6]); \
95*91f16700Schasinglulu } while (0)
96*91f16700Schasinglulu 
97*91f16700Schasinglulu struct pmu_slpdata_s {
98*91f16700Schasinglulu 	uint32_t cci_m0_qos[CPU_AXI_QOS_NUM_REGS];
99*91f16700Schasinglulu 	uint32_t cci_m1_qos[CPU_AXI_QOS_NUM_REGS];
100*91f16700Schasinglulu 	uint32_t dmac0_qos[CPU_AXI_QOS_NUM_REGS];
101*91f16700Schasinglulu 	uint32_t dmac1_qos[CPU_AXI_QOS_NUM_REGS];
102*91f16700Schasinglulu 	uint32_t dcf_qos[CPU_AXI_QOS_NUM_REGS];
103*91f16700Schasinglulu 	uint32_t crypto0_qos[CPU_AXI_QOS_NUM_REGS];
104*91f16700Schasinglulu 	uint32_t crypto1_qos[CPU_AXI_QOS_NUM_REGS];
105*91f16700Schasinglulu 	uint32_t pmu_cm0_qos[CPU_AXI_QOS_NUM_REGS];
106*91f16700Schasinglulu 	uint32_t peri_cm1_qos[CPU_AXI_QOS_NUM_REGS];
107*91f16700Schasinglulu 	uint32_t gic_qos[CPU_AXI_QOS_NUM_REGS];
108*91f16700Schasinglulu 	uint32_t sdmmc_qos[CPU_AXI_QOS_NUM_REGS];
109*91f16700Schasinglulu 	uint32_t gmac_qos[CPU_AXI_QOS_NUM_REGS];
110*91f16700Schasinglulu 	uint32_t emmc_qos[CPU_AXI_QOS_NUM_REGS];
111*91f16700Schasinglulu 	uint32_t usb_otg0_qos[CPU_AXI_QOS_NUM_REGS];
112*91f16700Schasinglulu 	uint32_t usb_otg1_qos[CPU_AXI_QOS_NUM_REGS];
113*91f16700Schasinglulu 	uint32_t usb_host0_qos[CPU_AXI_QOS_NUM_REGS];
114*91f16700Schasinglulu 	uint32_t usb_host1_qos[CPU_AXI_QOS_NUM_REGS];
115*91f16700Schasinglulu 	uint32_t gpu_qos[CPU_AXI_QOS_NUM_REGS];
116*91f16700Schasinglulu 	uint32_t video_m0_qos[CPU_AXI_QOS_NUM_REGS];
117*91f16700Schasinglulu 	uint32_t video_m1_r_qos[CPU_AXI_QOS_NUM_REGS];
118*91f16700Schasinglulu 	uint32_t video_m1_w_qos[CPU_AXI_QOS_NUM_REGS];
119*91f16700Schasinglulu 	uint32_t rga_r_qos[CPU_AXI_QOS_NUM_REGS];
120*91f16700Schasinglulu 	uint32_t rga_w_qos[CPU_AXI_QOS_NUM_REGS];
121*91f16700Schasinglulu 	uint32_t vop_big_r[CPU_AXI_QOS_NUM_REGS];
122*91f16700Schasinglulu 	uint32_t vop_big_w[CPU_AXI_QOS_NUM_REGS];
123*91f16700Schasinglulu 	uint32_t vop_little[CPU_AXI_QOS_NUM_REGS];
124*91f16700Schasinglulu 	uint32_t iep_qos[CPU_AXI_QOS_NUM_REGS];
125*91f16700Schasinglulu 	uint32_t isp1_m0_qos[CPU_AXI_QOS_NUM_REGS];
126*91f16700Schasinglulu 	uint32_t isp1_m1_qos[CPU_AXI_QOS_NUM_REGS];
127*91f16700Schasinglulu 	uint32_t isp0_m0_qos[CPU_AXI_QOS_NUM_REGS];
128*91f16700Schasinglulu 	uint32_t isp0_m1_qos[CPU_AXI_QOS_NUM_REGS];
129*91f16700Schasinglulu 	uint32_t hdcp_qos[CPU_AXI_QOS_NUM_REGS];
130*91f16700Schasinglulu 	uint32_t perihp_nsp_qos[CPU_AXI_QOS_NUM_REGS];
131*91f16700Schasinglulu 	uint32_t perilp_nsp_qos[CPU_AXI_QOS_NUM_REGS];
132*91f16700Schasinglulu 	uint32_t perilpslv_nsp_qos[CPU_AXI_QOS_NUM_REGS];
133*91f16700Schasinglulu 	uint32_t sdio_qos[CPU_AXI_QOS_NUM_REGS];
134*91f16700Schasinglulu };
135*91f16700Schasinglulu 
136*91f16700Schasinglulu extern uint32_t clst_warmboot_data[PLATFORM_CLUSTER_COUNT];
137*91f16700Schasinglulu 
138*91f16700Schasinglulu extern void sram_func_set_ddrctl_pll(uint32_t pll_src);
139*91f16700Schasinglulu void pmu_power_domains_on(void);
140*91f16700Schasinglulu 
141*91f16700Schasinglulu #endif /* PMU_H */
142