1*6fba6e04STony Xie /* 2*6fba6e04STony Xie * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. 3*6fba6e04STony Xie * 4*6fba6e04STony Xie * Redistribution and use in source and binary forms, with or without 5*6fba6e04STony Xie * modification, are permitted provided that the following conditions are met: 6*6fba6e04STony Xie * 7*6fba6e04STony Xie * Redistributions of source code must retain the above copyright notice, this 8*6fba6e04STony Xie * list of conditions and the following disclaimer. 9*6fba6e04STony Xie * 10*6fba6e04STony Xie * Redistributions in binary form must reproduce the above copyright notice, 11*6fba6e04STony Xie * this list of conditions and the following disclaimer in the documentation 12*6fba6e04STony Xie * and/or other materials provided with the distribution. 13*6fba6e04STony Xie * 14*6fba6e04STony Xie * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 15*6fba6e04STony Xie * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*6fba6e04STony Xie * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*6fba6e04STony Xie * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 18*6fba6e04STony Xie * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19*6fba6e04STony Xie * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20*6fba6e04STony Xie * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21*6fba6e04STony Xie * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 22*6fba6e04STony Xie * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 23*6fba6e04STony Xie * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 24*6fba6e04STony Xie * POSSIBILITY OF SUCH DAMAGE. 25*6fba6e04STony Xie */ 26*6fba6e04STony Xie 27*6fba6e04STony Xie #ifndef __PMU_H__ 28*6fba6e04STony Xie #define __PMU_H__ 29*6fba6e04STony Xie 30*6fba6e04STony Xie /* Allocate sp reginon in pmusram */ 31*6fba6e04STony Xie #define PSRAM_SP_SIZE 0x80 32*6fba6e04STony Xie #define PSRAM_SP_BOTTOM (PSRAM_SP_TOP - PSRAM_SP_SIZE) 33*6fba6e04STony Xie 34*6fba6e04STony Xie /***************************************************************************** 35*6fba6e04STony Xie * pmu con,reg 36*6fba6e04STony Xie *****************************************************************************/ 37*6fba6e04STony Xie #define PMU_WKUP_CFG0 0x0 38*6fba6e04STony Xie #define PMU_WKUP_CFG1 0x4 39*6fba6e04STony Xie #define PMU_WKUP_CFG2 0x8 40*6fba6e04STony Xie #define PMU_TIMEOUT_CNT 0x7c 41*6fba6e04STony Xie #define PMU_PWRDN_CON 0xc 42*6fba6e04STony Xie #define PMU_PWRDN_ST 0x10 43*6fba6e04STony Xie #define PMU_CORE_PWR_ST 0x38 44*6fba6e04STony Xie 45*6fba6e04STony Xie #define PMU_PWRMD_CORE 0x14 46*6fba6e04STony Xie #define PMU_PWRMD_COM 0x18 47*6fba6e04STony Xie #define PMU_SFT_CON 0x1c 48*6fba6e04STony Xie #define PMU_BUS_IDE_REQ 0x3c 49*6fba6e04STony Xie #define PMU_BUS_IDE_ST 0x40 50*6fba6e04STony Xie #define PMU_OSC_CNT 0x48 51*6fba6e04STony Xie #define PMU_PLLLOCK_CNT 0x4c 52*6fba6e04STony Xie #define PMU_PLLRST_CNT 0x50 53*6fba6e04STony Xie #define PMU_STABLE_CNT 0x54 54*6fba6e04STony Xie #define PMU_DDRIO_PWR_CNT 0x58 55*6fba6e04STony Xie #define PMU_WKUPRST_CNT 0x5c 56*6fba6e04STony Xie 57*6fba6e04STony Xie enum pmu_powermode_core { 58*6fba6e04STony Xie pmu_mdcr_global_int_dis = 0, 59*6fba6e04STony Xie pmu_mdcr_core_src_gt, 60*6fba6e04STony Xie pmu_mdcr_clr_cci, 61*6fba6e04STony Xie pmu_mdcr_cpu0_pd, 62*6fba6e04STony Xie pmu_mdcr_clr_clst_l = 4, 63*6fba6e04STony Xie pmu_mdcr_clr_core, 64*6fba6e04STony Xie pmu_mdcr_scu_l_pd, 65*6fba6e04STony Xie pmu_mdcr_core_pd, 66*6fba6e04STony Xie pmu_mdcr_l2_idle = 8, 67*6fba6e04STony Xie pmu_mdcr_l2_flush 68*6fba6e04STony Xie }; 69*6fba6e04STony Xie 70*6fba6e04STony Xie /* 71*6fba6e04STony Xie * the shift of bits for cores status 72*6fba6e04STony Xie */ 73*6fba6e04STony Xie enum pmu_core_pwrst_shift { 74*6fba6e04STony Xie clstl_cpu_wfe = 2, 75*6fba6e04STony Xie clstl_cpu_wfi = 6, 76*6fba6e04STony Xie clstb_cpu_wfe = 12, 77*6fba6e04STony Xie clstb_cpu_wfi = 16 78*6fba6e04STony Xie }; 79*6fba6e04STony Xie 80*6fba6e04STony Xie enum pmu_pdid { 81*6fba6e04STony Xie PD_CPUL0 = 0, 82*6fba6e04STony Xie PD_CPUL1, 83*6fba6e04STony Xie PD_CPUL2, 84*6fba6e04STony Xie PD_CPUL3, 85*6fba6e04STony Xie PD_SCUL, 86*6fba6e04STony Xie PD_CPUB0 = 5, 87*6fba6e04STony Xie PD_CPUB1, 88*6fba6e04STony Xie PD_CPUB2, 89*6fba6e04STony Xie PD_CPUB3, 90*6fba6e04STony Xie PD_SCUB = 9, 91*6fba6e04STony Xie PD_PERI = 13, 92*6fba6e04STony Xie PD_VIDEO, 93*6fba6e04STony Xie PD_VIO, 94*6fba6e04STony Xie PD_GPU0, 95*6fba6e04STony Xie PD_GPU1, 96*6fba6e04STony Xie PD_END 97*6fba6e04STony Xie }; 98*6fba6e04STony Xie 99*6fba6e04STony Xie enum pmu_bus_ide { 100*6fba6e04STony Xie bus_ide_req_clst_l = 0, 101*6fba6e04STony Xie bus_ide_req_clst_b, 102*6fba6e04STony Xie bus_ide_req_gpu, 103*6fba6e04STony Xie bus_ide_req_core, 104*6fba6e04STony Xie bus_ide_req_bus = 4, 105*6fba6e04STony Xie bus_ide_req_dma, 106*6fba6e04STony Xie bus_ide_req_peri, 107*6fba6e04STony Xie bus_ide_req_video, 108*6fba6e04STony Xie bus_ide_req_vio = 8, 109*6fba6e04STony Xie bus_ide_req_res0, 110*6fba6e04STony Xie bus_ide_req_cxcs, 111*6fba6e04STony Xie bus_ide_req_alive, 112*6fba6e04STony Xie bus_ide_req_pmu = 12, 113*6fba6e04STony Xie bus_ide_req_msch, 114*6fba6e04STony Xie bus_ide_req_cci, 115*6fba6e04STony Xie bus_ide_req_cci400 = 15, 116*6fba6e04STony Xie bus_ide_req_end 117*6fba6e04STony Xie }; 118*6fba6e04STony Xie 119*6fba6e04STony Xie enum pmu_powermode_common { 120*6fba6e04STony Xie pmu_mode_en = 0, 121*6fba6e04STony Xie pmu_mode_res0, 122*6fba6e04STony Xie pmu_mode_bus_pd, 123*6fba6e04STony Xie pmu_mode_wkup_rst, 124*6fba6e04STony Xie pmu_mode_pll_pd = 4, 125*6fba6e04STony Xie pmu_mode_pwr_off, 126*6fba6e04STony Xie pmu_mode_pmu_use_if, 127*6fba6e04STony Xie pmu_mode_pmu_alive_use_if, 128*6fba6e04STony Xie pmu_mode_osc_dis = 8, 129*6fba6e04STony Xie pmu_mode_input_clamp, 130*6fba6e04STony Xie pmu_mode_sref_enter, 131*6fba6e04STony Xie pmu_mode_ddrc_gt, 132*6fba6e04STony Xie pmu_mode_ddrio_ret = 12, 133*6fba6e04STony Xie pmu_mode_ddrio_ret_deq, 134*6fba6e04STony Xie pmu_mode_clr_pmu, 135*6fba6e04STony Xie pmu_mode_clr_alive, 136*6fba6e04STony Xie pmu_mode_clr_bus = 16, 137*6fba6e04STony Xie pmu_mode_clr_dma, 138*6fba6e04STony Xie pmu_mode_clr_msch, 139*6fba6e04STony Xie pmu_mode_clr_peri, 140*6fba6e04STony Xie pmu_mode_clr_video = 20, 141*6fba6e04STony Xie pmu_mode_clr_vio, 142*6fba6e04STony Xie pmu_mode_clr_gpu, 143*6fba6e04STony Xie pmu_mode_clr_mcu, 144*6fba6e04STony Xie pmu_mode_clr_cxcs = 24, 145*6fba6e04STony Xie pmu_mode_clr_cci400, 146*6fba6e04STony Xie pmu_mode_res1, 147*6fba6e04STony Xie pmu_mode_res2, 148*6fba6e04STony Xie pmu_mode_res3 = 28, 149*6fba6e04STony Xie pmu_mode_mclst 150*6fba6e04STony Xie }; 151*6fba6e04STony Xie 152*6fba6e04STony Xie enum pmu_core_power_st { 153*6fba6e04STony Xie clst_l_cpu_wfe = 2, 154*6fba6e04STony Xie clst_l_cpu_wfi = 6, 155*6fba6e04STony Xie clst_b_l2_flsh_done = 10, 156*6fba6e04STony Xie clst_b_l2_wfi = 11, 157*6fba6e04STony Xie clst_b_cpu_wfe = 12, 158*6fba6e04STony Xie clst_b_cpu_wfi = 16, 159*6fba6e04STony Xie mcu_sleeping = 20, 160*6fba6e04STony Xie }; 161*6fba6e04STony Xie 162*6fba6e04STony Xie enum pmu_sft_con { 163*6fba6e04STony Xie pmu_sft_acinactm_clst_b = 5, 164*6fba6e04STony Xie pmu_sft_l2flsh_clst_b, 165*6fba6e04STony Xie pmu_sft_glbl_int_dis_b = 9, 166*6fba6e04STony Xie pmu_sft_ddrio_ret_cfg = 11, 167*6fba6e04STony Xie }; 168*6fba6e04STony Xie 169*6fba6e04STony Xie enum pmu_wkup_cfg2 { 170*6fba6e04STony Xie pmu_cluster_l_wkup_en = 0, 171*6fba6e04STony Xie pmu_cluster_b_wkup_en, 172*6fba6e04STony Xie pmu_gpio_wkup_en, 173*6fba6e04STony Xie pmu_sdio_wkup_en, 174*6fba6e04STony Xie pmu_sdmmc_wkup_en, 175*6fba6e04STony Xie pmu_sim_wkup_en, 176*6fba6e04STony Xie pmu_timer_wkup_en, 177*6fba6e04STony Xie pmu_usbdev_wkup_en, 178*6fba6e04STony Xie pmu_sft_wkup_en, 179*6fba6e04STony Xie pmu_wdt_mcu_wkup_en, 180*6fba6e04STony Xie pmu_timeout_wkup_en, 181*6fba6e04STony Xie }; 182*6fba6e04STony Xie 183*6fba6e04STony Xie enum pmu_bus_idle_st { 184*6fba6e04STony Xie pmu_idle_ack_cluster_l = 0, 185*6fba6e04STony Xie pmu_idle_ack_cluster_b, 186*6fba6e04STony Xie pmu_idle_ack_gpu, 187*6fba6e04STony Xie pmu_idle_ack_core, 188*6fba6e04STony Xie pmu_idle_ack_bus, 189*6fba6e04STony Xie pmu_idle_ack_dma, 190*6fba6e04STony Xie pmu_idle_ack_peri, 191*6fba6e04STony Xie pmu_idle_ack_video, 192*6fba6e04STony Xie pmu_idle_ack_vio, 193*6fba6e04STony Xie pmu_idle_ack_cci = 10, 194*6fba6e04STony Xie pmu_idle_ack_msch, 195*6fba6e04STony Xie pmu_idle_ack_alive, 196*6fba6e04STony Xie pmu_idle_ack_pmu, 197*6fba6e04STony Xie pmu_idle_ack_cxcs, 198*6fba6e04STony Xie pmu_idle_ack_cci400, 199*6fba6e04STony Xie pmu_inactive_cluster_l, 200*6fba6e04STony Xie pmu_inactive_cluster_b, 201*6fba6e04STony Xie pmu_idle_gpu, 202*6fba6e04STony Xie pmu_idle_core, 203*6fba6e04STony Xie pmu_idle_bus, 204*6fba6e04STony Xie pmu_idle_dma, 205*6fba6e04STony Xie pmu_idle_peri, 206*6fba6e04STony Xie pmu_idle_video, 207*6fba6e04STony Xie pmu_idle_vio, 208*6fba6e04STony Xie pmu_idle_cci = 26, 209*6fba6e04STony Xie pmu_idle_msch, 210*6fba6e04STony Xie pmu_idle_alive, 211*6fba6e04STony Xie pmu_idle_pmu, 212*6fba6e04STony Xie pmu_active_cxcs, 213*6fba6e04STony Xie pmu_active_cci, 214*6fba6e04STony Xie }; 215*6fba6e04STony Xie 216*6fba6e04STony Xie #define PM_PWRDM_CPUSB_MSK (0xf << 5) 217*6fba6e04STony Xie 218*6fba6e04STony Xie #define CKECK_WFE_MSK 0x1 219*6fba6e04STony Xie #define CKECK_WFI_MSK 0x10 220*6fba6e04STony Xie #define CKECK_WFEI_MSK 0x11 221*6fba6e04STony Xie 222*6fba6e04STony Xie #define PD_CTR_LOOP 500 223*6fba6e04STony Xie #define CHK_CPU_LOOP 500 224*6fba6e04STony Xie 225*6fba6e04STony Xie #define MAX_WAIT_CONUT 1000 226*6fba6e04STony Xie 227*6fba6e04STony Xie #endif /* __PMU_H__ */ 228