xref: /rk3399_ARM-atf/plat/rockchip/rk3399/drivers/pmu/pmu.h (revision 1830f7901e110a6407d449506a0fc93146af6833)
16fba6e04STony Xie /*
26fba6e04STony Xie  * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
36fba6e04STony Xie  *
46fba6e04STony Xie  * Redistribution and use in source and binary forms, with or without
56fba6e04STony Xie  * modification, are permitted provided that the following conditions are met:
66fba6e04STony Xie  *
76fba6e04STony Xie  * Redistributions of source code must retain the above copyright notice, this
86fba6e04STony Xie  * list of conditions and the following disclaimer.
96fba6e04STony Xie  *
106fba6e04STony Xie  * Redistributions in binary form must reproduce the above copyright notice,
116fba6e04STony Xie  * this list of conditions and the following disclaimer in the documentation
126fba6e04STony Xie  * and/or other materials provided with the distribution.
136fba6e04STony Xie  *
146fba6e04STony Xie  * Neither the name of ARM nor the names of its contributors may be used
156fba6e04STony Xie  * to endorse or promote products derived from this software without specific
166fba6e04STony Xie  * prior written permission.
176fba6e04STony Xie  *
186fba6e04STony Xie  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
196fba6e04STony Xie  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
206fba6e04STony Xie  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
216fba6e04STony Xie  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
226fba6e04STony Xie  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
236fba6e04STony Xie  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
246fba6e04STony Xie  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
256fba6e04STony Xie  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
266fba6e04STony Xie  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
276fba6e04STony Xie  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
286fba6e04STony Xie  * POSSIBILITY OF SUCH DAMAGE.
296fba6e04STony Xie  */
306fba6e04STony Xie 
316fba6e04STony Xie #ifndef __PMU_H__
326fba6e04STony Xie #define __PMU_H__
336fba6e04STony Xie 
34*1830f790SXing Zheng #include <pmu_bits.h>
359c68748eSCaesar Wang #include <pmu_regs.h>
364c127e68SCaesar Wang #include <soc.h>
379c68748eSCaesar Wang 
386fba6e04STony Xie /* Allocate sp reginon in pmusram */
396fba6e04STony Xie #define PSRAM_SP_SIZE		0x80
406fba6e04STony Xie #define PSRAM_SP_BOTTOM		(PSRAM_SP_TOP - PSRAM_SP_SIZE)
416fba6e04STony Xie 
426fba6e04STony Xie /*****************************************************************************
436fba6e04STony Xie  * Common define for per soc pmu.h
446fba6e04STony Xie  *****************************************************************************/
456fba6e04STony Xie /* The ways of cores power domain contorlling */
466fba6e04STony Xie enum cores_pm_ctr_mode {
476fba6e04STony Xie 	core_pwr_pd = 0,
486fba6e04STony Xie 	core_pwr_wfi = 1,
496fba6e04STony Xie 	core_pwr_wfi_int = 2
506fba6e04STony Xie };
516fba6e04STony Xie 
526fba6e04STony Xie /*****************************************************************************
536fba6e04STony Xie  * pmu con,reg
546fba6e04STony Xie  *****************************************************************************/
556fba6e04STony Xie #define PMU_WKUP_CFG(n)	((n) * 4)
566fba6e04STony Xie 
576fba6e04STony Xie #define PMU_CORE_PM_CON(cpu)		(0xc0 + (cpu * 4))
586fba6e04STony Xie 
596fba6e04STony Xie /* the shift of bits for cores status */
606fba6e04STony Xie enum pmu_core_pwrst_shift {
616fba6e04STony Xie 	clstl_cpu_wfe = 2,
626fba6e04STony Xie 	clstl_cpu_wfi = 6,
636fba6e04STony Xie 	clstb_cpu_wfe = 12,
646fba6e04STony Xie 	clstb_cpu_wfi = 16
656fba6e04STony Xie };
666fba6e04STony Xie 
676fba6e04STony Xie #define CKECK_WFE_MSK		0x1
686fba6e04STony Xie #define CKECK_WFI_MSK		0x10
696fba6e04STony Xie #define CKECK_WFEI_MSK		0x11
706fba6e04STony Xie 
719c68748eSCaesar Wang /* Specific features required  */
72f47a25ddSCaesar Wang #define AP_PWROFF		0x0a
73e6517abdSCaesar Wang 
749d5aee2bSCaesar Wang #define GPIO0A0_SMT_ENABLE	BITS_WITH_WMASK(1, 3, 0)
7586c253e4SCaesar Wang #define GPIO1A6_IOMUX		BITS_WITH_WMASK(0, 3, 12)
76e6517abdSCaesar Wang 
7786c253e4SCaesar Wang #define TSADC_INT_PIN		38
786fba6e04STony Xie #define CORES_PM_DISABLE	0x0
796fba6e04STony Xie 
806fba6e04STony Xie #define PD_CTR_LOOP		500
816fba6e04STony Xie #define CHK_CPU_LOOP		500
829ec78bdfSTony Xie #define MAX_WAIT_COUNT		1000
836fba6e04STony Xie 
849ec78bdfSTony Xie #define	GRF_SOC_CON4		0x0e210
852bff35bbSCaesar Wang 
869d5aee2bSCaesar Wang #define PMUGRF_GPIO0A_SMT	0x0120
879ec78bdfSTony Xie #define PMUGRF_SOC_CON0		0x0180
889ec78bdfSTony Xie 
899ec78bdfSTony Xie #define CCI_FORCE_WAKEUP	WMSK_BIT(8)
909ec78bdfSTony Xie #define EXTERNAL_32K		WMSK_BIT(0)
919ec78bdfSTony Xie 
929ec78bdfSTony Xie #define PLL_PD_HW		0xff
939ec78bdfSTony Xie #define IOMUX_CLK_32K		0x00030002
949ec78bdfSTony Xie #define NOC_AUTO_ENABLE		0x3fffffff
959ec78bdfSTony Xie 
969ec78bdfSTony Xie #define SAVE_QOS(array, NAME) \
979ec78bdfSTony Xie 	RK3399_CPU_AXI_SAVE_QOS(array, CPU_AXI_##NAME##_QOS_BASE)
989ec78bdfSTony Xie #define RESTORE_QOS(array, NAME) \
999ec78bdfSTony Xie 	RK3399_CPU_AXI_RESTORE_QOS(array, CPU_AXI_##NAME##_QOS_BASE)
1009ec78bdfSTony Xie 
1019ec78bdfSTony Xie #define RK3399_CPU_AXI_SAVE_QOS(array, base) do { \
1029ec78bdfSTony Xie 	array[0] = mmio_read_32(base + CPU_AXI_QOS_ID_COREID); \
1039ec78bdfSTony Xie 	array[1] = mmio_read_32(base + CPU_AXI_QOS_REVISIONID); \
1049ec78bdfSTony Xie 	array[2] = mmio_read_32(base + CPU_AXI_QOS_PRIORITY); \
1059ec78bdfSTony Xie 	array[3] = mmio_read_32(base + CPU_AXI_QOS_MODE); \
1069ec78bdfSTony Xie 	array[4] = mmio_read_32(base + CPU_AXI_QOS_BANDWIDTH); \
1079ec78bdfSTony Xie 	array[5] = mmio_read_32(base + CPU_AXI_QOS_SATURATION); \
1089ec78bdfSTony Xie 	array[6] = mmio_read_32(base + CPU_AXI_QOS_EXTCONTROL); \
1099ec78bdfSTony Xie } while (0)
1109ec78bdfSTony Xie 
1119ec78bdfSTony Xie #define RK3399_CPU_AXI_RESTORE_QOS(array, base) do { \
1129ec78bdfSTony Xie 	mmio_write_32(base + CPU_AXI_QOS_ID_COREID, array[0]); \
1139ec78bdfSTony Xie 	mmio_write_32(base + CPU_AXI_QOS_REVISIONID, array[1]); \
1149ec78bdfSTony Xie 	mmio_write_32(base + CPU_AXI_QOS_PRIORITY, array[2]); \
1159ec78bdfSTony Xie 	mmio_write_32(base + CPU_AXI_QOS_MODE, array[3]); \
1169ec78bdfSTony Xie 	mmio_write_32(base + CPU_AXI_QOS_BANDWIDTH, array[4]); \
1179ec78bdfSTony Xie 	mmio_write_32(base + CPU_AXI_QOS_SATURATION, array[5]); \
1189ec78bdfSTony Xie 	mmio_write_32(base + CPU_AXI_QOS_EXTCONTROL, array[6]); \
1199ec78bdfSTony Xie } while (0)
1209ec78bdfSTony Xie 
1219ec78bdfSTony Xie struct pmu_slpdata_s {
1229ec78bdfSTony Xie 	uint32_t cci_m0_qos[CPU_AXI_QOS_NUM_REGS];
1239ec78bdfSTony Xie 	uint32_t cci_m1_qos[CPU_AXI_QOS_NUM_REGS];
1249ec78bdfSTony Xie 	uint32_t dmac0_qos[CPU_AXI_QOS_NUM_REGS];
1259ec78bdfSTony Xie 	uint32_t dmac1_qos[CPU_AXI_QOS_NUM_REGS];
1269ec78bdfSTony Xie 	uint32_t dcf_qos[CPU_AXI_QOS_NUM_REGS];
1279ec78bdfSTony Xie 	uint32_t crypto0_qos[CPU_AXI_QOS_NUM_REGS];
1289ec78bdfSTony Xie 	uint32_t crypto1_qos[CPU_AXI_QOS_NUM_REGS];
1299ec78bdfSTony Xie 	uint32_t pmu_cm0_qos[CPU_AXI_QOS_NUM_REGS];
1309ec78bdfSTony Xie 	uint32_t peri_cm1_qos[CPU_AXI_QOS_NUM_REGS];
1319ec78bdfSTony Xie 	uint32_t gic_qos[CPU_AXI_QOS_NUM_REGS];
1329ec78bdfSTony Xie 	uint32_t sdmmc_qos[CPU_AXI_QOS_NUM_REGS];
1339ec78bdfSTony Xie 	uint32_t gmac_qos[CPU_AXI_QOS_NUM_REGS];
1349ec78bdfSTony Xie 	uint32_t emmc_qos[CPU_AXI_QOS_NUM_REGS];
1359ec78bdfSTony Xie 	uint32_t usb_otg0_qos[CPU_AXI_QOS_NUM_REGS];
1369ec78bdfSTony Xie 	uint32_t usb_otg1_qos[CPU_AXI_QOS_NUM_REGS];
1379ec78bdfSTony Xie 	uint32_t usb_host0_qos[CPU_AXI_QOS_NUM_REGS];
1389ec78bdfSTony Xie 	uint32_t usb_host1_qos[CPU_AXI_QOS_NUM_REGS];
1399ec78bdfSTony Xie 	uint32_t gpu_qos[CPU_AXI_QOS_NUM_REGS];
1409ec78bdfSTony Xie 	uint32_t video_m0_qos[CPU_AXI_QOS_NUM_REGS];
1419ec78bdfSTony Xie 	uint32_t video_m1_r_qos[CPU_AXI_QOS_NUM_REGS];
1429ec78bdfSTony Xie 	uint32_t video_m1_w_qos[CPU_AXI_QOS_NUM_REGS];
1439ec78bdfSTony Xie 	uint32_t rga_r_qos[CPU_AXI_QOS_NUM_REGS];
1449ec78bdfSTony Xie 	uint32_t rga_w_qos[CPU_AXI_QOS_NUM_REGS];
1459ec78bdfSTony Xie 	uint32_t vop_big_r[CPU_AXI_QOS_NUM_REGS];
1469ec78bdfSTony Xie 	uint32_t vop_big_w[CPU_AXI_QOS_NUM_REGS];
1479ec78bdfSTony Xie 	uint32_t vop_little[CPU_AXI_QOS_NUM_REGS];
1489ec78bdfSTony Xie 	uint32_t iep_qos[CPU_AXI_QOS_NUM_REGS];
1499ec78bdfSTony Xie 	uint32_t isp1_m0_qos[CPU_AXI_QOS_NUM_REGS];
1509ec78bdfSTony Xie 	uint32_t isp1_m1_qos[CPU_AXI_QOS_NUM_REGS];
1519ec78bdfSTony Xie 	uint32_t isp0_m0_qos[CPU_AXI_QOS_NUM_REGS];
1529ec78bdfSTony Xie 	uint32_t isp0_m1_qos[CPU_AXI_QOS_NUM_REGS];
1539ec78bdfSTony Xie 	uint32_t hdcp_qos[CPU_AXI_QOS_NUM_REGS];
1549ec78bdfSTony Xie 	uint32_t perihp_nsp_qos[CPU_AXI_QOS_NUM_REGS];
1559ec78bdfSTony Xie 	uint32_t perilp_nsp_qos[CPU_AXI_QOS_NUM_REGS];
1569ec78bdfSTony Xie 	uint32_t perilpslv_nsp_qos[CPU_AXI_QOS_NUM_REGS];
1579ec78bdfSTony Xie 	uint32_t sdio_qos[CPU_AXI_QOS_NUM_REGS];
1589ec78bdfSTony Xie };
1599ec78bdfSTony Xie 
1609ec78bdfSTony Xie extern uint32_t clst_warmboot_data[PLATFORM_CLUSTER_COUNT];
1614c127e68SCaesar Wang 
1624c127e68SCaesar Wang extern void sram_func_set_ddrctl_pll(uint32_t pll_src);
1634c127e68SCaesar Wang 
1646fba6e04STony Xie #endif /* __PMU_H__ */
165