10d5ec955Stony.xie /* 20d5ec955Stony.xie * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 30d5ec955Stony.xie * 4*c3e70be1Sdp-arm * SPDX-License-Identifier: BSD-3-Clause 50d5ec955Stony.xie */ 60d5ec955Stony.xie 70d5ec955Stony.xie #ifndef __PMU_H__ 80d5ec955Stony.xie #define __PMU_H__ 90d5ec955Stony.xie 100d5ec955Stony.xie #include <soc.h> 110d5ec955Stony.xie 120d5ec955Stony.xie struct rk3328_sleep_ddr_data { 130d5ec955Stony.xie uint32_t pmu_debug_enable; 140d5ec955Stony.xie uint32_t debug_iomux_save; 150d5ec955Stony.xie uint32_t pmic_sleep_save; 160d5ec955Stony.xie uint32_t pmu_wakeup_conf0; 170d5ec955Stony.xie uint32_t pmu_pwrmd_com; 180d5ec955Stony.xie uint32_t cru_mode_save; 190d5ec955Stony.xie uint32_t clk_sel0, clk_sel1, clk_sel18, 200d5ec955Stony.xie clk_sel20, clk_sel24, clk_sel38; 210d5ec955Stony.xie uint32_t clk_ungt_save[CRU_CLKGATE_NUMS]; 220d5ec955Stony.xie uint32_t cru_plls_con_save[MAX_PLL][CRU_PLL_CON_NUMS]; 230d5ec955Stony.xie }; 240d5ec955Stony.xie 250d5ec955Stony.xie struct rk3328_sleep_sram_data { 260d5ec955Stony.xie uint32_t pmic_sleep_save; 270d5ec955Stony.xie uint32_t pmic_sleep_gpio_save[2]; 280d5ec955Stony.xie uint32_t ddr_grf_con0; 290d5ec955Stony.xie uint32_t dpll_con_save[CRU_PLL_CON_NUMS]; 300d5ec955Stony.xie uint32_t pd_sr_idle_save; 310d5ec955Stony.xie uint32_t uart2_ier; 320d5ec955Stony.xie }; 330d5ec955Stony.xie 340d5ec955Stony.xie /***************************************************************************** 350d5ec955Stony.xie * The ways of cores power domain contorlling 360d5ec955Stony.xie *****************************************************************************/ 370d5ec955Stony.xie enum cores_pm_ctr_mode { 380d5ec955Stony.xie core_pwr_pd = 0, 390d5ec955Stony.xie core_pwr_wfi = 1, 400d5ec955Stony.xie core_pwr_wfi_int = 2 410d5ec955Stony.xie }; 420d5ec955Stony.xie 430d5ec955Stony.xie enum pmu_cores_pm_by_wfi { 440d5ec955Stony.xie core_pm_en = 0, 450d5ec955Stony.xie core_pm_int_wakeup_en, 460d5ec955Stony.xie core_pm_dis_int, 470d5ec955Stony.xie core_pm_sft_wakeup_en 480d5ec955Stony.xie }; 490d5ec955Stony.xie 500d5ec955Stony.xie extern void *pmu_cpuson_entrypoint_start; 510d5ec955Stony.xie extern void *pmu_cpuson_entrypoint_end; 520d5ec955Stony.xie extern uint64_t cpuson_entry_point[PLATFORM_CORE_COUNT]; 530d5ec955Stony.xie extern uint32_t cpuson_flags[PLATFORM_CORE_COUNT]; 540d5ec955Stony.xie 550d5ec955Stony.xie #define CORES_PM_DISABLE 0x0 560d5ec955Stony.xie 570d5ec955Stony.xie /***************************************************************************** 580d5ec955Stony.xie * pmu con,reg 590d5ec955Stony.xie *****************************************************************************/ 600d5ec955Stony.xie #define PMU_WAKEUP_CFG0 0x00 610d5ec955Stony.xie #define PMU_PWRDN_CON 0x0c 620d5ec955Stony.xie #define PMU_PWRDN_ST 0x10 630d5ec955Stony.xie #define PMU_PWRMD_COM 0x18 640d5ec955Stony.xie #define PMU_SFT_CON 0x1c 650d5ec955Stony.xie #define PMU_INT_CON 0x20 660d5ec955Stony.xie #define PMU_INT_ST 0x24 670d5ec955Stony.xie #define PMU_POWER_ST 0x44 680d5ec955Stony.xie #define PMU_CPUAPM_CON(n) (0x80 + (n) * 4) 690d5ec955Stony.xie #define PMU_SYS_REG(n) (0xa0 + (n) * 4) 700d5ec955Stony.xie 710d5ec955Stony.xie #define CHECK_CPU_WFIE_BASE (GRF_BASE + GRF_CPU_STATUS(1)) 720d5ec955Stony.xie 730d5ec955Stony.xie enum pmu_core_pwrst_shift { 740d5ec955Stony.xie clst_cpu_wfe = 0, 750d5ec955Stony.xie clst_cpu_wfi = 4, 760d5ec955Stony.xie }; 770d5ec955Stony.xie 780d5ec955Stony.xie #define clstl_cpu_wfe (clst_cpu_wfe) 790d5ec955Stony.xie #define clstb_cpu_wfe (clst_cpu_wfe) 800d5ec955Stony.xie 810d5ec955Stony.xie enum pmu_pd_id { 820d5ec955Stony.xie PD_CPU0 = 0, 830d5ec955Stony.xie PD_CPU1, 840d5ec955Stony.xie PD_CPU2, 850d5ec955Stony.xie PD_CPU3, 860d5ec955Stony.xie }; 870d5ec955Stony.xie 880d5ec955Stony.xie enum pmu_power_mode_common { 890d5ec955Stony.xie pmu_mode_en = 0, 900d5ec955Stony.xie sref_enter_en, 910d5ec955Stony.xie global_int_disable_cfg, 920d5ec955Stony.xie cpu0_pd_en, 930d5ec955Stony.xie wait_wakeup_begin_cfg = 4, 940d5ec955Stony.xie l2_flush_en, 950d5ec955Stony.xie l2_idle_en, 960d5ec955Stony.xie ddrio_ret_de_req, 970d5ec955Stony.xie ddrio_ret_en = 8, 980d5ec955Stony.xie }; 990d5ec955Stony.xie 1000d5ec955Stony.xie enum pmu_sft_con { 1010d5ec955Stony.xie upctl_c_sysreq_cfg = 0, 1020d5ec955Stony.xie l2flushreq_req, 1030d5ec955Stony.xie ddr_io_ret_cfg, 1040d5ec955Stony.xie pmu_sft_ret_cfg, 1050d5ec955Stony.xie }; 1060d5ec955Stony.xie 1070d5ec955Stony.xie #define CKECK_WFE_MSK 0x1 1080d5ec955Stony.xie #define CKECK_WFI_MSK 0x10 1090d5ec955Stony.xie #define CKECK_WFEI_MSK 0x11 1100d5ec955Stony.xie 1110d5ec955Stony.xie #define PD_CTR_LOOP 500 1120d5ec955Stony.xie #define CHK_CPU_LOOP 500 1130d5ec955Stony.xie #define MAX_WAIT_CONUT 1000 1140d5ec955Stony.xie 1150d5ec955Stony.xie #define WAKEUP_INT_CLUSTER_EN 0x1 1160d5ec955Stony.xie #define PMIC_SLEEP_REG 0x34 1170d5ec955Stony.xie 1180d5ec955Stony.xie #define PLL_IS_NORM_MODE(mode, pll_id) \ 1190d5ec955Stony.xie ((mode & (PLL_NORM_MODE(pll_id)) & 0xffff) != 0) 1200d5ec955Stony.xie 1210d5ec955Stony.xie #define CTLR_ENABLE_G1_BIT BIT(1) 1220d5ec955Stony.xie #define UART_FIFO_EMPTY BIT(6) 1230d5ec955Stony.xie 1240d5ec955Stony.xie #define UART_IER 0x04 1250d5ec955Stony.xie #define UART_FCR 0x08 1260d5ec955Stony.xie #define UART_LSR 0x14 1270d5ec955Stony.xie 1280d5ec955Stony.xie #define UART_INT_DISABLE 0x00 1290d5ec955Stony.xie #define UART_FIFO_RESET 0x07 1300d5ec955Stony.xie 1310d5ec955Stony.xie #endif /* __PMU_H__ */ 132