xref: /rk3399_ARM-atf/plat/rockchip/rk3368/drivers/pmu/pmu.h (revision 82cb2c1ad9897473743f08437d0a3995bed561b9)
16fba6e04STony Xie /*
26fba6e04STony Xie  * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
36fba6e04STony Xie  *
4*82cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
56fba6e04STony Xie  */
66fba6e04STony Xie 
76fba6e04STony Xie #ifndef __PMU_H__
86fba6e04STony Xie #define __PMU_H__
96fba6e04STony Xie 
106fba6e04STony Xie /* Allocate sp reginon in pmusram */
116fba6e04STony Xie #define PSRAM_SP_SIZE		0x80
126fba6e04STony Xie #define PSRAM_SP_BOTTOM		(PSRAM_SP_TOP - PSRAM_SP_SIZE)
136fba6e04STony Xie 
146fba6e04STony Xie /*****************************************************************************
156fba6e04STony Xie  * pmu con,reg
166fba6e04STony Xie  *****************************************************************************/
176fba6e04STony Xie #define PMU_WKUP_CFG0		0x0
186fba6e04STony Xie #define PMU_WKUP_CFG1		0x4
196fba6e04STony Xie #define PMU_WKUP_CFG2		0x8
206fba6e04STony Xie #define PMU_TIMEOUT_CNT		0x7c
216fba6e04STony Xie #define PMU_PWRDN_CON		0xc
226fba6e04STony Xie #define PMU_PWRDN_ST		0x10
236fba6e04STony Xie #define PMU_CORE_PWR_ST		0x38
246fba6e04STony Xie 
256fba6e04STony Xie #define PMU_PWRMD_CORE		0x14
266fba6e04STony Xie #define PMU_PWRMD_COM		0x18
276fba6e04STony Xie #define PMU_SFT_CON			0x1c
286fba6e04STony Xie #define PMU_BUS_IDE_REQ		0x3c
296fba6e04STony Xie #define PMU_BUS_IDE_ST		0x40
306fba6e04STony Xie #define PMU_OSC_CNT			0x48
316fba6e04STony Xie #define PMU_PLLLOCK_CNT		0x4c
326fba6e04STony Xie #define PMU_PLLRST_CNT		0x50
336fba6e04STony Xie #define PMU_STABLE_CNT		0x54
346fba6e04STony Xie #define PMU_DDRIO_PWR_CNT	0x58
356fba6e04STony Xie #define PMU_WKUPRST_CNT		0x5c
366fba6e04STony Xie 
376fba6e04STony Xie enum pmu_powermode_core {
386fba6e04STony Xie 	pmu_mdcr_global_int_dis = 0,
396fba6e04STony Xie 	pmu_mdcr_core_src_gt,
406fba6e04STony Xie 	pmu_mdcr_clr_cci,
416fba6e04STony Xie 	pmu_mdcr_cpu0_pd,
426fba6e04STony Xie 	pmu_mdcr_clr_clst_l = 4,
436fba6e04STony Xie 	pmu_mdcr_clr_core,
446fba6e04STony Xie 	pmu_mdcr_scu_l_pd,
456fba6e04STony Xie 	pmu_mdcr_core_pd,
466fba6e04STony Xie 	pmu_mdcr_l2_idle = 8,
476fba6e04STony Xie 	pmu_mdcr_l2_flush
486fba6e04STony Xie };
496fba6e04STony Xie 
506fba6e04STony Xie /*
516fba6e04STony Xie  * the shift of bits for cores status
526fba6e04STony Xie  */
536fba6e04STony Xie enum pmu_core_pwrst_shift {
546fba6e04STony Xie 	clstl_cpu_wfe = 2,
556fba6e04STony Xie 	clstl_cpu_wfi = 6,
566fba6e04STony Xie 	clstb_cpu_wfe = 12,
576fba6e04STony Xie 	clstb_cpu_wfi = 16
586fba6e04STony Xie };
596fba6e04STony Xie 
606fba6e04STony Xie enum pmu_pdid {
616fba6e04STony Xie 	PD_CPUL0 = 0,
626fba6e04STony Xie 	PD_CPUL1,
636fba6e04STony Xie 	PD_CPUL2,
646fba6e04STony Xie 	PD_CPUL3,
656fba6e04STony Xie 	PD_SCUL,
666fba6e04STony Xie 	PD_CPUB0 = 5,
676fba6e04STony Xie 	PD_CPUB1,
686fba6e04STony Xie 	PD_CPUB2,
696fba6e04STony Xie 	PD_CPUB3,
706fba6e04STony Xie 	PD_SCUB = 9,
716fba6e04STony Xie 	PD_PERI = 13,
726fba6e04STony Xie 	PD_VIDEO,
736fba6e04STony Xie 	PD_VIO,
746fba6e04STony Xie 	PD_GPU0,
756fba6e04STony Xie 	PD_GPU1,
766fba6e04STony Xie 	PD_END
776fba6e04STony Xie };
786fba6e04STony Xie 
796fba6e04STony Xie enum pmu_bus_ide {
806fba6e04STony Xie 	bus_ide_req_clst_l = 0,
816fba6e04STony Xie 	bus_ide_req_clst_b,
826fba6e04STony Xie 	bus_ide_req_gpu,
836fba6e04STony Xie 	bus_ide_req_core,
846fba6e04STony Xie 	bus_ide_req_bus = 4,
856fba6e04STony Xie 	bus_ide_req_dma,
866fba6e04STony Xie 	bus_ide_req_peri,
876fba6e04STony Xie 	bus_ide_req_video,
886fba6e04STony Xie 	bus_ide_req_vio = 8,
896fba6e04STony Xie 	bus_ide_req_res0,
906fba6e04STony Xie 	bus_ide_req_cxcs,
916fba6e04STony Xie 	bus_ide_req_alive,
926fba6e04STony Xie 	bus_ide_req_pmu = 12,
936fba6e04STony Xie 	bus_ide_req_msch,
946fba6e04STony Xie 	bus_ide_req_cci,
956fba6e04STony Xie 	bus_ide_req_cci400 = 15,
966fba6e04STony Xie 	bus_ide_req_end
976fba6e04STony Xie };
986fba6e04STony Xie 
996fba6e04STony Xie enum pmu_powermode_common {
1006fba6e04STony Xie 	pmu_mode_en = 0,
1016fba6e04STony Xie 	pmu_mode_res0,
1026fba6e04STony Xie 	pmu_mode_bus_pd,
1036fba6e04STony Xie 	pmu_mode_wkup_rst,
1046fba6e04STony Xie 	pmu_mode_pll_pd = 4,
1056fba6e04STony Xie 	pmu_mode_pwr_off,
1066fba6e04STony Xie 	pmu_mode_pmu_use_if,
1076fba6e04STony Xie 	pmu_mode_pmu_alive_use_if,
1086fba6e04STony Xie 	pmu_mode_osc_dis = 8,
1096fba6e04STony Xie 	pmu_mode_input_clamp,
1106fba6e04STony Xie 	pmu_mode_sref_enter,
1116fba6e04STony Xie 	pmu_mode_ddrc_gt,
1126fba6e04STony Xie 	pmu_mode_ddrio_ret = 12,
1136fba6e04STony Xie 	pmu_mode_ddrio_ret_deq,
1146fba6e04STony Xie 	pmu_mode_clr_pmu,
1156fba6e04STony Xie 	pmu_mode_clr_alive,
1166fba6e04STony Xie 	pmu_mode_clr_bus = 16,
1176fba6e04STony Xie 	pmu_mode_clr_dma,
1186fba6e04STony Xie 	pmu_mode_clr_msch,
1196fba6e04STony Xie 	pmu_mode_clr_peri,
1206fba6e04STony Xie 	pmu_mode_clr_video = 20,
1216fba6e04STony Xie 	pmu_mode_clr_vio,
1226fba6e04STony Xie 	pmu_mode_clr_gpu,
1236fba6e04STony Xie 	pmu_mode_clr_mcu,
1246fba6e04STony Xie 	pmu_mode_clr_cxcs = 24,
1256fba6e04STony Xie 	pmu_mode_clr_cci400,
1266fba6e04STony Xie 	pmu_mode_res1,
1276fba6e04STony Xie 	pmu_mode_res2,
1286fba6e04STony Xie 	pmu_mode_res3 = 28,
1296fba6e04STony Xie 	pmu_mode_mclst
1306fba6e04STony Xie };
1316fba6e04STony Xie 
1326fba6e04STony Xie enum pmu_core_power_st {
1336fba6e04STony Xie 	clst_l_cpu_wfe = 2,
1346fba6e04STony Xie 	clst_l_cpu_wfi = 6,
1356fba6e04STony Xie 	clst_b_l2_flsh_done = 10,
1366fba6e04STony Xie 	clst_b_l2_wfi = 11,
1376fba6e04STony Xie 	clst_b_cpu_wfe = 12,
1386fba6e04STony Xie 	clst_b_cpu_wfi = 16,
1396fba6e04STony Xie 	mcu_sleeping = 20,
1406fba6e04STony Xie };
1416fba6e04STony Xie 
1426fba6e04STony Xie enum pmu_sft_con {
1436fba6e04STony Xie 	pmu_sft_acinactm_clst_b = 5,
1446fba6e04STony Xie 	pmu_sft_l2flsh_clst_b,
1456fba6e04STony Xie 	pmu_sft_glbl_int_dis_b = 9,
1466fba6e04STony Xie 	pmu_sft_ddrio_ret_cfg = 11,
1476fba6e04STony Xie };
1486fba6e04STony Xie 
1496fba6e04STony Xie enum pmu_wkup_cfg2 {
1506fba6e04STony Xie 	pmu_cluster_l_wkup_en = 0,
1516fba6e04STony Xie 	pmu_cluster_b_wkup_en,
1526fba6e04STony Xie 	pmu_gpio_wkup_en,
1536fba6e04STony Xie 	pmu_sdio_wkup_en,
1546fba6e04STony Xie 	pmu_sdmmc_wkup_en,
1556fba6e04STony Xie 	pmu_sim_wkup_en,
1566fba6e04STony Xie 	pmu_timer_wkup_en,
1576fba6e04STony Xie 	pmu_usbdev_wkup_en,
1586fba6e04STony Xie 	pmu_sft_wkup_en,
1596fba6e04STony Xie 	pmu_wdt_mcu_wkup_en,
1606fba6e04STony Xie 	pmu_timeout_wkup_en,
1616fba6e04STony Xie };
1626fba6e04STony Xie 
1636fba6e04STony Xie enum pmu_bus_idle_st {
1646fba6e04STony Xie 	pmu_idle_ack_cluster_l = 0,
1656fba6e04STony Xie 	pmu_idle_ack_cluster_b,
1666fba6e04STony Xie 	pmu_idle_ack_gpu,
1676fba6e04STony Xie 	pmu_idle_ack_core,
1686fba6e04STony Xie 	pmu_idle_ack_bus,
1696fba6e04STony Xie 	pmu_idle_ack_dma,
1706fba6e04STony Xie 	pmu_idle_ack_peri,
1716fba6e04STony Xie 	pmu_idle_ack_video,
1726fba6e04STony Xie 	pmu_idle_ack_vio,
1736fba6e04STony Xie 	pmu_idle_ack_cci = 10,
1746fba6e04STony Xie 	pmu_idle_ack_msch,
1756fba6e04STony Xie 	pmu_idle_ack_alive,
1766fba6e04STony Xie 	pmu_idle_ack_pmu,
1776fba6e04STony Xie 	pmu_idle_ack_cxcs,
1786fba6e04STony Xie 	pmu_idle_ack_cci400,
1796fba6e04STony Xie 	pmu_inactive_cluster_l,
1806fba6e04STony Xie 	pmu_inactive_cluster_b,
1816fba6e04STony Xie 	pmu_idle_gpu,
1826fba6e04STony Xie 	pmu_idle_core,
1836fba6e04STony Xie 	pmu_idle_bus,
1846fba6e04STony Xie 	pmu_idle_dma,
1856fba6e04STony Xie 	pmu_idle_peri,
1866fba6e04STony Xie 	pmu_idle_video,
1876fba6e04STony Xie 	pmu_idle_vio,
1886fba6e04STony Xie 	pmu_idle_cci = 26,
1896fba6e04STony Xie 	pmu_idle_msch,
1906fba6e04STony Xie 	pmu_idle_alive,
1916fba6e04STony Xie 	pmu_idle_pmu,
1926fba6e04STony Xie 	pmu_active_cxcs,
1936fba6e04STony Xie 	pmu_active_cci,
1946fba6e04STony Xie };
1956fba6e04STony Xie 
1966fba6e04STony Xie #define PM_PWRDM_CPUSB_MSK (0xf << 5)
1976fba6e04STony Xie 
1986fba6e04STony Xie #define CKECK_WFE_MSK		0x1
1996fba6e04STony Xie #define CKECK_WFI_MSK		0x10
2006fba6e04STony Xie #define CKECK_WFEI_MSK		0x11
2016fba6e04STony Xie 
2026fba6e04STony Xie #define PD_CTR_LOOP		500
2036fba6e04STony Xie #define CHK_CPU_LOOP		500
2046fba6e04STony Xie 
2056fba6e04STony Xie #define MAX_WAIT_CONUT 1000
2066fba6e04STony Xie 
2076fba6e04STony Xie #endif /* __PMU_H__ */
208