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