10d5ec955Stony.xie /* 20d5ec955Stony.xie * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 30d5ec955Stony.xie * 4c3e70be1Sdp-arm * SPDX-License-Identifier: BSD-3-Clause 50d5ec955Stony.xie */ 60d5ec955Stony.xie 7*c3cf06f1SAntonio Nino Diaz #ifndef PMU_H 8*c3cf06f1SAntonio Nino Diaz #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 530d5ec955Stony.xie #define CORES_PM_DISABLE 0x0 540d5ec955Stony.xie 550d5ec955Stony.xie /***************************************************************************** 560d5ec955Stony.xie * pmu con,reg 570d5ec955Stony.xie *****************************************************************************/ 580d5ec955Stony.xie #define PMU_WAKEUP_CFG0 0x00 590d5ec955Stony.xie #define PMU_PWRDN_CON 0x0c 600d5ec955Stony.xie #define PMU_PWRDN_ST 0x10 610d5ec955Stony.xie #define PMU_PWRMD_COM 0x18 620d5ec955Stony.xie #define PMU_SFT_CON 0x1c 630d5ec955Stony.xie #define PMU_INT_CON 0x20 640d5ec955Stony.xie #define PMU_INT_ST 0x24 650d5ec955Stony.xie #define PMU_POWER_ST 0x44 660d5ec955Stony.xie #define PMU_CPUAPM_CON(n) (0x80 + (n) * 4) 670d5ec955Stony.xie #define PMU_SYS_REG(n) (0xa0 + (n) * 4) 680d5ec955Stony.xie 690d5ec955Stony.xie #define CHECK_CPU_WFIE_BASE (GRF_BASE + GRF_CPU_STATUS(1)) 700d5ec955Stony.xie 710d5ec955Stony.xie enum pmu_core_pwrst_shift { 720d5ec955Stony.xie clst_cpu_wfe = 0, 730d5ec955Stony.xie clst_cpu_wfi = 4, 740d5ec955Stony.xie }; 750d5ec955Stony.xie 760d5ec955Stony.xie #define clstl_cpu_wfe (clst_cpu_wfe) 770d5ec955Stony.xie #define clstb_cpu_wfe (clst_cpu_wfe) 780d5ec955Stony.xie 790d5ec955Stony.xie enum pmu_pd_id { 800d5ec955Stony.xie PD_CPU0 = 0, 810d5ec955Stony.xie PD_CPU1, 820d5ec955Stony.xie PD_CPU2, 830d5ec955Stony.xie PD_CPU3, 840d5ec955Stony.xie }; 850d5ec955Stony.xie 860d5ec955Stony.xie enum pmu_power_mode_common { 870d5ec955Stony.xie pmu_mode_en = 0, 880d5ec955Stony.xie sref_enter_en, 890d5ec955Stony.xie global_int_disable_cfg, 900d5ec955Stony.xie cpu0_pd_en, 910d5ec955Stony.xie wait_wakeup_begin_cfg = 4, 920d5ec955Stony.xie l2_flush_en, 930d5ec955Stony.xie l2_idle_en, 940d5ec955Stony.xie ddrio_ret_de_req, 950d5ec955Stony.xie ddrio_ret_en = 8, 960d5ec955Stony.xie }; 970d5ec955Stony.xie 980d5ec955Stony.xie enum pmu_sft_con { 990d5ec955Stony.xie upctl_c_sysreq_cfg = 0, 1000d5ec955Stony.xie l2flushreq_req, 1010d5ec955Stony.xie ddr_io_ret_cfg, 1020d5ec955Stony.xie pmu_sft_ret_cfg, 1030d5ec955Stony.xie }; 1040d5ec955Stony.xie 1050d5ec955Stony.xie #define CKECK_WFE_MSK 0x1 1060d5ec955Stony.xie #define CKECK_WFI_MSK 0x10 1070d5ec955Stony.xie #define CKECK_WFEI_MSK 0x11 1080d5ec955Stony.xie 1090d5ec955Stony.xie #define PD_CTR_LOOP 500 1100d5ec955Stony.xie #define CHK_CPU_LOOP 500 1110d5ec955Stony.xie #define MAX_WAIT_CONUT 1000 1120d5ec955Stony.xie 1130d5ec955Stony.xie #define WAKEUP_INT_CLUSTER_EN 0x1 1140d5ec955Stony.xie #define PMIC_SLEEP_REG 0x34 1150d5ec955Stony.xie 1160d5ec955Stony.xie #define PLL_IS_NORM_MODE(mode, pll_id) \ 1170d5ec955Stony.xie ((mode & (PLL_NORM_MODE(pll_id)) & 0xffff) != 0) 1180d5ec955Stony.xie 1190d5ec955Stony.xie #define CTLR_ENABLE_G1_BIT BIT(1) 1200d5ec955Stony.xie #define UART_FIFO_EMPTY BIT(6) 1210d5ec955Stony.xie 1220d5ec955Stony.xie #define UART_IER 0x04 1230d5ec955Stony.xie #define UART_FCR 0x08 1240d5ec955Stony.xie #define UART_LSR 0x14 1250d5ec955Stony.xie 1260d5ec955Stony.xie #define UART_INT_DISABLE 0x00 1270d5ec955Stony.xie #define UART_FIFO_RESET 0x07 1280d5ec955Stony.xie 129*c3cf06f1SAntonio Nino Diaz #endif /* PMU_H */ 130