1*0d5ec955Stony.xie /* 2*0d5ec955Stony.xie * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 3*0d5ec955Stony.xie * 4*0d5ec955Stony.xie * Redistribution and use in source and binary forms, with or without 5*0d5ec955Stony.xie * modification, are permitted provided that the following conditions are met: 6*0d5ec955Stony.xie * 7*0d5ec955Stony.xie * Redistributions of source code must retain the above copyright notice, this 8*0d5ec955Stony.xie * list of conditions and the following disclaimer. 9*0d5ec955Stony.xie * 10*0d5ec955Stony.xie * Redistributions in binary form must reproduce the above copyright notice, 11*0d5ec955Stony.xie * this list of conditions and the following disclaimer in the documentation 12*0d5ec955Stony.xie * and/or other materials provided with the distribution. 13*0d5ec955Stony.xie * 14*0d5ec955Stony.xie * Neither the name of ARM nor the names of its contributors may be used 15*0d5ec955Stony.xie * to endorse or promote products derived from this software without specific 16*0d5ec955Stony.xie * prior written permission. 17*0d5ec955Stony.xie * 18*0d5ec955Stony.xie * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19*0d5ec955Stony.xie * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20*0d5ec955Stony.xie * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21*0d5ec955Stony.xie * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 22*0d5ec955Stony.xie * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23*0d5ec955Stony.xie * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24*0d5ec955Stony.xie * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25*0d5ec955Stony.xie * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26*0d5ec955Stony.xie * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27*0d5ec955Stony.xie * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28*0d5ec955Stony.xie * POSSIBILITY OF SUCH DAMAGE. 29*0d5ec955Stony.xie */ 30*0d5ec955Stony.xie 31*0d5ec955Stony.xie #ifndef __PMU_H__ 32*0d5ec955Stony.xie #define __PMU_H__ 33*0d5ec955Stony.xie 34*0d5ec955Stony.xie #include <soc.h> 35*0d5ec955Stony.xie 36*0d5ec955Stony.xie struct rk3328_sleep_ddr_data { 37*0d5ec955Stony.xie uint32_t pmu_debug_enable; 38*0d5ec955Stony.xie uint32_t debug_iomux_save; 39*0d5ec955Stony.xie uint32_t pmic_sleep_save; 40*0d5ec955Stony.xie uint32_t pmu_wakeup_conf0; 41*0d5ec955Stony.xie uint32_t pmu_pwrmd_com; 42*0d5ec955Stony.xie uint32_t cru_mode_save; 43*0d5ec955Stony.xie uint32_t clk_sel0, clk_sel1, clk_sel18, 44*0d5ec955Stony.xie clk_sel20, clk_sel24, clk_sel38; 45*0d5ec955Stony.xie uint32_t clk_ungt_save[CRU_CLKGATE_NUMS]; 46*0d5ec955Stony.xie uint32_t cru_plls_con_save[MAX_PLL][CRU_PLL_CON_NUMS]; 47*0d5ec955Stony.xie }; 48*0d5ec955Stony.xie 49*0d5ec955Stony.xie struct rk3328_sleep_sram_data { 50*0d5ec955Stony.xie uint32_t pmic_sleep_save; 51*0d5ec955Stony.xie uint32_t pmic_sleep_gpio_save[2]; 52*0d5ec955Stony.xie uint32_t ddr_grf_con0; 53*0d5ec955Stony.xie uint32_t dpll_con_save[CRU_PLL_CON_NUMS]; 54*0d5ec955Stony.xie uint32_t pd_sr_idle_save; 55*0d5ec955Stony.xie uint32_t uart2_ier; 56*0d5ec955Stony.xie }; 57*0d5ec955Stony.xie 58*0d5ec955Stony.xie /***************************************************************************** 59*0d5ec955Stony.xie * The ways of cores power domain contorlling 60*0d5ec955Stony.xie *****************************************************************************/ 61*0d5ec955Stony.xie enum cores_pm_ctr_mode { 62*0d5ec955Stony.xie core_pwr_pd = 0, 63*0d5ec955Stony.xie core_pwr_wfi = 1, 64*0d5ec955Stony.xie core_pwr_wfi_int = 2 65*0d5ec955Stony.xie }; 66*0d5ec955Stony.xie 67*0d5ec955Stony.xie enum pmu_cores_pm_by_wfi { 68*0d5ec955Stony.xie core_pm_en = 0, 69*0d5ec955Stony.xie core_pm_int_wakeup_en, 70*0d5ec955Stony.xie core_pm_dis_int, 71*0d5ec955Stony.xie core_pm_sft_wakeup_en 72*0d5ec955Stony.xie }; 73*0d5ec955Stony.xie 74*0d5ec955Stony.xie extern void *pmu_cpuson_entrypoint_start; 75*0d5ec955Stony.xie extern void *pmu_cpuson_entrypoint_end; 76*0d5ec955Stony.xie extern uint64_t cpuson_entry_point[PLATFORM_CORE_COUNT]; 77*0d5ec955Stony.xie extern uint32_t cpuson_flags[PLATFORM_CORE_COUNT]; 78*0d5ec955Stony.xie 79*0d5ec955Stony.xie #define CORES_PM_DISABLE 0x0 80*0d5ec955Stony.xie 81*0d5ec955Stony.xie /***************************************************************************** 82*0d5ec955Stony.xie * pmu con,reg 83*0d5ec955Stony.xie *****************************************************************************/ 84*0d5ec955Stony.xie #define PMU_WAKEUP_CFG0 0x00 85*0d5ec955Stony.xie #define PMU_PWRDN_CON 0x0c 86*0d5ec955Stony.xie #define PMU_PWRDN_ST 0x10 87*0d5ec955Stony.xie #define PMU_PWRMD_COM 0x18 88*0d5ec955Stony.xie #define PMU_SFT_CON 0x1c 89*0d5ec955Stony.xie #define PMU_INT_CON 0x20 90*0d5ec955Stony.xie #define PMU_INT_ST 0x24 91*0d5ec955Stony.xie #define PMU_POWER_ST 0x44 92*0d5ec955Stony.xie #define PMU_CPUAPM_CON(n) (0x80 + (n) * 4) 93*0d5ec955Stony.xie #define PMU_SYS_REG(n) (0xa0 + (n) * 4) 94*0d5ec955Stony.xie 95*0d5ec955Stony.xie #define CHECK_CPU_WFIE_BASE (GRF_BASE + GRF_CPU_STATUS(1)) 96*0d5ec955Stony.xie 97*0d5ec955Stony.xie enum pmu_core_pwrst_shift { 98*0d5ec955Stony.xie clst_cpu_wfe = 0, 99*0d5ec955Stony.xie clst_cpu_wfi = 4, 100*0d5ec955Stony.xie }; 101*0d5ec955Stony.xie 102*0d5ec955Stony.xie #define clstl_cpu_wfe (clst_cpu_wfe) 103*0d5ec955Stony.xie #define clstb_cpu_wfe (clst_cpu_wfe) 104*0d5ec955Stony.xie 105*0d5ec955Stony.xie enum pmu_pd_id { 106*0d5ec955Stony.xie PD_CPU0 = 0, 107*0d5ec955Stony.xie PD_CPU1, 108*0d5ec955Stony.xie PD_CPU2, 109*0d5ec955Stony.xie PD_CPU3, 110*0d5ec955Stony.xie }; 111*0d5ec955Stony.xie 112*0d5ec955Stony.xie enum pmu_power_mode_common { 113*0d5ec955Stony.xie pmu_mode_en = 0, 114*0d5ec955Stony.xie sref_enter_en, 115*0d5ec955Stony.xie global_int_disable_cfg, 116*0d5ec955Stony.xie cpu0_pd_en, 117*0d5ec955Stony.xie wait_wakeup_begin_cfg = 4, 118*0d5ec955Stony.xie l2_flush_en, 119*0d5ec955Stony.xie l2_idle_en, 120*0d5ec955Stony.xie ddrio_ret_de_req, 121*0d5ec955Stony.xie ddrio_ret_en = 8, 122*0d5ec955Stony.xie }; 123*0d5ec955Stony.xie 124*0d5ec955Stony.xie enum pmu_sft_con { 125*0d5ec955Stony.xie upctl_c_sysreq_cfg = 0, 126*0d5ec955Stony.xie l2flushreq_req, 127*0d5ec955Stony.xie ddr_io_ret_cfg, 128*0d5ec955Stony.xie pmu_sft_ret_cfg, 129*0d5ec955Stony.xie }; 130*0d5ec955Stony.xie 131*0d5ec955Stony.xie #define CKECK_WFE_MSK 0x1 132*0d5ec955Stony.xie #define CKECK_WFI_MSK 0x10 133*0d5ec955Stony.xie #define CKECK_WFEI_MSK 0x11 134*0d5ec955Stony.xie 135*0d5ec955Stony.xie #define PD_CTR_LOOP 500 136*0d5ec955Stony.xie #define CHK_CPU_LOOP 500 137*0d5ec955Stony.xie #define MAX_WAIT_CONUT 1000 138*0d5ec955Stony.xie 139*0d5ec955Stony.xie #define WAKEUP_INT_CLUSTER_EN 0x1 140*0d5ec955Stony.xie #define PMIC_SLEEP_REG 0x34 141*0d5ec955Stony.xie 142*0d5ec955Stony.xie #define PLL_IS_NORM_MODE(mode, pll_id) \ 143*0d5ec955Stony.xie ((mode & (PLL_NORM_MODE(pll_id)) & 0xffff) != 0) 144*0d5ec955Stony.xie 145*0d5ec955Stony.xie #define CTLR_ENABLE_G1_BIT BIT(1) 146*0d5ec955Stony.xie #define UART_FIFO_EMPTY BIT(6) 147*0d5ec955Stony.xie 148*0d5ec955Stony.xie #define UART_IER 0x04 149*0d5ec955Stony.xie #define UART_FCR 0x08 150*0d5ec955Stony.xie #define UART_LSR 0x14 151*0d5ec955Stony.xie 152*0d5ec955Stony.xie #define UART_INT_DISABLE 0x00 153*0d5ec955Stony.xie #define UART_FIFO_RESET 0x07 154*0d5ec955Stony.xie 155*0d5ec955Stony.xie #endif /* __PMU_H__ */ 156