1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2022, MediaTek Inc. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef MT_SPM_INTERNAL 8*91f16700Schasinglulu #define MT_SPM_INTERNAL 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include "mt_spm.h" 11*91f16700Schasinglulu 12*91f16700Schasinglulu /* Config and Parameter */ 13*91f16700Schasinglulu #define POWER_ON_VAL0_DEF (0x0000F100) 14*91f16700Schasinglulu #define POWER_ON_VAL1_DEF (0x80015860) 15*91f16700Schasinglulu #define PCM_WDT_TIMEOUT (30 * 32768) /* 30s */ 16*91f16700Schasinglulu #define PCM_TIMER_MAX (0xffffffff - PCM_WDT_TIMEOUT) 17*91f16700Schasinglulu 18*91f16700Schasinglulu /* Define and Declare */ 19*91f16700Schasinglulu /* PCM_PWR_IO_EN */ 20*91f16700Schasinglulu #define PCM_PWRIO_EN_R0 BIT(0) 21*91f16700Schasinglulu #define PCM_PWRIO_EN_R7 BIT(7) 22*91f16700Schasinglulu #define PCM_RF_SYNC_R0 BIT(16) 23*91f16700Schasinglulu #define PCM_RF_SYNC_R6 BIT(22) 24*91f16700Schasinglulu #define PCM_RF_SYNC_R7 BIT(23) 25*91f16700Schasinglulu 26*91f16700Schasinglulu /* SPM_SWINT */ 27*91f16700Schasinglulu #define PCM_SW_INT0 BIT(0) 28*91f16700Schasinglulu #define PCM_SW_INT1 BIT(1) 29*91f16700Schasinglulu #define PCM_SW_INT2 BIT(2) 30*91f16700Schasinglulu #define PCM_SW_INT3 BIT(3) 31*91f16700Schasinglulu #define PCM_SW_INT4 BIT(4) 32*91f16700Schasinglulu #define PCM_SW_INT5 BIT(5) 33*91f16700Schasinglulu #define PCM_SW_INT6 BIT(6) 34*91f16700Schasinglulu #define PCM_SW_INT7 BIT(7) 35*91f16700Schasinglulu #define PCM_SW_INT8 BIT(8) 36*91f16700Schasinglulu #define PCM_SW_INT9 BIT(9) 37*91f16700Schasinglulu #define PCM_SW_INT_ALL (PCM_SW_INT9 | PCM_SW_INT8 | PCM_SW_INT7 | \ 38*91f16700Schasinglulu PCM_SW_INT6 | PCM_SW_INT5 | PCM_SW_INT4 | \ 39*91f16700Schasinglulu PCM_SW_INT3 | PCM_SW_INT2 | PCM_SW_INT1 | \ 40*91f16700Schasinglulu PCM_SW_INT0) 41*91f16700Schasinglulu 42*91f16700Schasinglulu /* SPM_AP_STANDBY_CON */ 43*91f16700Schasinglulu #define WFI_OP_AND (1U) 44*91f16700Schasinglulu #define WFI_OP_OR (0U) 45*91f16700Schasinglulu 46*91f16700Schasinglulu /* SPM_IRQ_MASK */ 47*91f16700Schasinglulu #define ISRM_TWAM (1U << 2) 48*91f16700Schasinglulu #define ISRM_PCM_RETURN (1U << 3) 49*91f16700Schasinglulu #define ISRM_RET_IRQ0 (1U << 8) 50*91f16700Schasinglulu #define ISRM_RET_IRQ1 (1U << 9) 51*91f16700Schasinglulu #define ISRM_RET_IRQ2 (1U << 10) 52*91f16700Schasinglulu #define ISRM_RET_IRQ3 (1U << 11) 53*91f16700Schasinglulu #define ISRM_RET_IRQ4 (1U << 12) 54*91f16700Schasinglulu #define ISRM_RET_IRQ5 (1U << 13) 55*91f16700Schasinglulu #define ISRM_RET_IRQ6 (1U << 14) 56*91f16700Schasinglulu #define ISRM_RET_IRQ7 (1U << 15) 57*91f16700Schasinglulu #define ISRM_RET_IRQ8 (1U << 16) 58*91f16700Schasinglulu #define ISRM_RET_IRQ9 (1U << 17) 59*91f16700Schasinglulu #define ISRM_RET_IRQ_AUX ((ISRM_RET_IRQ9) | (ISRM_RET_IRQ8) | \ 60*91f16700Schasinglulu (ISRM_RET_IRQ7) | (ISRM_RET_IRQ6) | \ 61*91f16700Schasinglulu (ISRM_RET_IRQ5) | (ISRM_RET_IRQ4) | \ 62*91f16700Schasinglulu (ISRM_RET_IRQ3) | (ISRM_RET_IRQ2) | \ 63*91f16700Schasinglulu (ISRM_RET_IRQ1)) 64*91f16700Schasinglulu #define ISRM_ALL_EXC_TWAM (ISRM_RET_IRQ_AUX) 65*91f16700Schasinglulu #define ISRM_ALL (ISRM_ALL_EXC_TWAM | ISRM_TWAM) 66*91f16700Schasinglulu 67*91f16700Schasinglulu /* SPM_IRQ_STA */ 68*91f16700Schasinglulu #define ISRS_TWAM BIT(2) 69*91f16700Schasinglulu #define ISRS_PCM_RETURN BIT(3) 70*91f16700Schasinglulu #define ISRC_TWAM ISRS_TWAM 71*91f16700Schasinglulu #define ISRC_ALL_EXC_TWAM ISRS_PCM_RETURN 72*91f16700Schasinglulu #define ISRC_ALL (ISRC_ALL_EXC_TWAM | ISRC_TWAM) 73*91f16700Schasinglulu 74*91f16700Schasinglulu /* SPM_WAKEUP_MISC */ 75*91f16700Schasinglulu #define WAKE_MISC_GIC_WAKEUP (0x3FF) 76*91f16700Schasinglulu #define WAKE_MISC_DVFSRC_IRQ DVFSRC_IRQ_LSB 77*91f16700Schasinglulu #define WAKE_MISC_REG_CPU_WAKEUP SPM_WAKEUP_MISC_REG_CPU_WAKEUP_LSB 78*91f16700Schasinglulu #define WAKE_MISC_PCM_TIMER_EVENT PCM_TIMER_EVENT_LSB 79*91f16700Schasinglulu #define WAKE_MISC_PMIC_OUT_B ((1U << 19) | (1U << 20)) 80*91f16700Schasinglulu #define WAKE_MISC_TWAM_IRQ_B TWAM_IRQ_B_LSB 81*91f16700Schasinglulu #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_0 SPM_ACK_CHK_WAKEUP_0_LSB 82*91f16700Schasinglulu #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_1 SPM_ACK_CHK_WAKEUP_1_LSB 83*91f16700Schasinglulu #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_2 SPM_ACK_CHK_WAKEUP_2_LSB 84*91f16700Schasinglulu #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_3 SPM_ACK_CHK_WAKEUP_3_LSB 85*91f16700Schasinglulu #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_ALL SPM_ACK_CHK_WAKEUP_ALL_LSB 86*91f16700Schasinglulu #define WAKE_MISC_PMIC_IRQ_ACK PMIC_IRQ_ACK_LSB 87*91f16700Schasinglulu #define WAKE_MISC_PMIC_SCP_IRQ PMIC_SCP_IRQ_LSB 88*91f16700Schasinglulu 89*91f16700Schasinglulu /* ABORT MASK for DEBUG FOORTPRINT */ 90*91f16700Schasinglulu #define DEBUG_ABORT_MASK \ 91*91f16700Schasinglulu (SPM_DBG_DEBUG_IDX_DRAM_SREF_ABORT_IN_APSRC | \ 92*91f16700Schasinglulu SPM_DBG_DEBUG_IDX_DRAM_SREF_ABORT_IN_DDREN) 93*91f16700Schasinglulu 94*91f16700Schasinglulu #define DEBUG_ABORT_MASK_1 \ 95*91f16700Schasinglulu (SPM_DBG1_DEBUG_IDX_VRCXO_SLEEP_ABORT | \ 96*91f16700Schasinglulu SPM_DBG1_DEBUG_IDX_PWRAP_SLEEP_ACK_LOW_ABORT | \ 97*91f16700Schasinglulu SPM_DBG1_DEBUG_IDX_PWRAP_SLEEP_ACK_HIGH_ABORT | \ 98*91f16700Schasinglulu SPM_DBG1_DEBUG_IDX_EMI_SLP_IDLE_ABORT | \ 99*91f16700Schasinglulu SPM_DBG1_DEBUG_IDX_SCP_SLP_ACK_LOW_ABORT | \ 100*91f16700Schasinglulu SPM_DBG1_DEBUG_IDX_SCP_SLP_ACK_HIGH_ABORT | \ 101*91f16700Schasinglulu SPM_DBG1_DEBUG_IDX_SPM_DVFS_CMD_RDY_ABORT) 102*91f16700Schasinglulu 103*91f16700Schasinglulu #define MCUPM_MBOX_WAKEUP_CPU (0x0C55FD10) 104*91f16700Schasinglulu 105*91f16700Schasinglulu struct pwr_ctrl { 106*91f16700Schasinglulu uint32_t pcm_flags; 107*91f16700Schasinglulu uint32_t pcm_flags_cust; 108*91f16700Schasinglulu uint32_t pcm_flags_cust_set; 109*91f16700Schasinglulu uint32_t pcm_flags_cust_clr; 110*91f16700Schasinglulu uint32_t pcm_flags1; 111*91f16700Schasinglulu uint32_t pcm_flags1_cust; 112*91f16700Schasinglulu uint32_t pcm_flags1_cust_set; 113*91f16700Schasinglulu uint32_t pcm_flags1_cust_clr; 114*91f16700Schasinglulu uint32_t timer_val; 115*91f16700Schasinglulu uint32_t timer_val_cust; 116*91f16700Schasinglulu uint32_t timer_val_ramp_en; 117*91f16700Schasinglulu uint32_t timer_val_ramp_en_sec; 118*91f16700Schasinglulu uint32_t wake_src; 119*91f16700Schasinglulu uint32_t wake_src_cust; 120*91f16700Schasinglulu uint32_t wakelock_timer_val; 121*91f16700Schasinglulu uint8_t wdt_disable; 122*91f16700Schasinglulu 123*91f16700Schasinglulu /* Auto-gen Start */ 124*91f16700Schasinglulu 125*91f16700Schasinglulu /* SPM_AP_STANDBY_CON */ 126*91f16700Schasinglulu uint8_t reg_wfi_op; 127*91f16700Schasinglulu uint8_t reg_wfi_type; 128*91f16700Schasinglulu uint8_t reg_mp0_cputop_idle_mask; 129*91f16700Schasinglulu uint8_t reg_mp1_cputop_idle_mask; 130*91f16700Schasinglulu uint8_t reg_mcusys_idle_mask; 131*91f16700Schasinglulu uint8_t reg_md_apsrc_1_sel; 132*91f16700Schasinglulu uint8_t reg_md_apsrc_0_sel; 133*91f16700Schasinglulu uint8_t reg_conn_apsrc_sel; 134*91f16700Schasinglulu 135*91f16700Schasinglulu /* SPM_SRC6_MASK */ 136*91f16700Schasinglulu uint32_t reg_ccif_event_infra_req_mask_b; 137*91f16700Schasinglulu uint32_t reg_ccif_event_apsrc_req_mask_b; 138*91f16700Schasinglulu 139*91f16700Schasinglulu /* SPM_SRC_REQ */ 140*91f16700Schasinglulu uint8_t reg_spm_apsrc_req; 141*91f16700Schasinglulu uint8_t reg_spm_f26m_req; 142*91f16700Schasinglulu uint8_t reg_spm_infra_req; 143*91f16700Schasinglulu uint8_t reg_spm_vrf18_req; 144*91f16700Schasinglulu uint8_t reg_spm_ddren_req; 145*91f16700Schasinglulu uint8_t reg_spm_dvfs_req; 146*91f16700Schasinglulu uint8_t reg_spm_sw_mailbox_req; 147*91f16700Schasinglulu uint8_t reg_spm_sspm_mailbox_req; 148*91f16700Schasinglulu uint8_t reg_spm_adsp_mailbox_req; 149*91f16700Schasinglulu uint8_t reg_spm_scp_mailbox_req; 150*91f16700Schasinglulu 151*91f16700Schasinglulu /* SPM_SRC_MASK */ 152*91f16700Schasinglulu uint8_t reg_md_0_srcclkena_mask_b; 153*91f16700Schasinglulu uint8_t reg_md_0_infra_req_mask_b; 154*91f16700Schasinglulu uint8_t reg_md_0_apsrc_req_mask_b; 155*91f16700Schasinglulu uint8_t reg_md_0_vrf18_req_mask_b; 156*91f16700Schasinglulu uint8_t reg_md_0_ddren_req_mask_b; 157*91f16700Schasinglulu uint8_t reg_md_1_srcclkena_mask_b; 158*91f16700Schasinglulu uint8_t reg_md_1_infra_req_mask_b; 159*91f16700Schasinglulu uint8_t reg_md_1_apsrc_req_mask_b; 160*91f16700Schasinglulu uint8_t reg_md_1_vrf18_req_mask_b; 161*91f16700Schasinglulu uint8_t reg_md_1_ddren_req_mask_b; 162*91f16700Schasinglulu uint8_t reg_conn_srcclkena_mask_b; 163*91f16700Schasinglulu uint8_t reg_conn_srcclkenb_mask_b; 164*91f16700Schasinglulu uint8_t reg_conn_infra_req_mask_b; 165*91f16700Schasinglulu uint8_t reg_conn_apsrc_req_mask_b; 166*91f16700Schasinglulu uint8_t reg_conn_vrf18_req_mask_b; 167*91f16700Schasinglulu uint8_t reg_conn_ddren_req_mask_b; 168*91f16700Schasinglulu uint8_t reg_conn_vfe28_mask_b; 169*91f16700Schasinglulu uint8_t reg_srcclkeni_srcclkena_mask_b; 170*91f16700Schasinglulu uint8_t reg_srcclkeni_infra_req_mask_b; 171*91f16700Schasinglulu uint8_t reg_infrasys_apsrc_req_mask_b; 172*91f16700Schasinglulu uint8_t reg_infrasys_ddren_req_mask_b; 173*91f16700Schasinglulu uint8_t reg_sspm_srcclkena_mask_b; 174*91f16700Schasinglulu uint8_t reg_sspm_infra_req_mask_b; 175*91f16700Schasinglulu uint8_t reg_sspm_apsrc_req_mask_b; 176*91f16700Schasinglulu uint8_t reg_sspm_vrf18_req_mask_b; 177*91f16700Schasinglulu uint8_t reg_sspm_ddren_req_mask_b; 178*91f16700Schasinglulu 179*91f16700Schasinglulu /* SPM_SRC2_MASK */ 180*91f16700Schasinglulu uint8_t reg_scp_srcclkena_mask_b; 181*91f16700Schasinglulu uint8_t reg_scp_infra_req_mask_b; 182*91f16700Schasinglulu uint8_t reg_scp_apsrc_req_mask_b; 183*91f16700Schasinglulu uint8_t reg_scp_vrf18_req_mask_b; 184*91f16700Schasinglulu uint8_t reg_scp_ddren_req_mask_b; 185*91f16700Schasinglulu uint8_t reg_audio_dsp_srcclkena_mask_b; 186*91f16700Schasinglulu uint8_t reg_audio_dsp_infra_req_mask_b; 187*91f16700Schasinglulu uint8_t reg_audio_dsp_apsrc_req_mask_b; 188*91f16700Schasinglulu uint8_t reg_audio_dsp_vrf18_req_mask_b; 189*91f16700Schasinglulu uint8_t reg_audio_dsp_ddren_req_mask_b; 190*91f16700Schasinglulu uint8_t reg_ufs_srcclkena_mask_b; 191*91f16700Schasinglulu uint8_t reg_ufs_infra_req_mask_b; 192*91f16700Schasinglulu uint8_t reg_ufs_apsrc_req_mask_b; 193*91f16700Schasinglulu uint8_t reg_ufs_vrf18_req_mask_b; 194*91f16700Schasinglulu uint8_t reg_ufs_ddren_req_mask_b; 195*91f16700Schasinglulu uint8_t reg_disp0_apsrc_req_mask_b; 196*91f16700Schasinglulu uint8_t reg_disp0_ddren_req_mask_b; 197*91f16700Schasinglulu uint8_t reg_disp1_apsrc_req_mask_b; 198*91f16700Schasinglulu uint8_t reg_disp1_ddren_req_mask_b; 199*91f16700Schasinglulu uint8_t reg_gce_infra_req_mask_b; 200*91f16700Schasinglulu uint8_t reg_gce_apsrc_req_mask_b; 201*91f16700Schasinglulu uint8_t reg_gce_vrf18_req_mask_b; 202*91f16700Schasinglulu uint8_t reg_gce_ddren_req_mask_b; 203*91f16700Schasinglulu uint8_t reg_apu_srcclkena_mask_b; 204*91f16700Schasinglulu uint8_t reg_apu_infra_req_mask_b; 205*91f16700Schasinglulu uint8_t reg_apu_apsrc_req_mask_b; 206*91f16700Schasinglulu uint8_t reg_apu_vrf18_req_mask_b; 207*91f16700Schasinglulu uint8_t reg_apu_ddren_req_mask_b; 208*91f16700Schasinglulu uint8_t reg_cg_check_srcclkena_mask_b; 209*91f16700Schasinglulu uint8_t reg_cg_check_apsrc_req_mask_b; 210*91f16700Schasinglulu uint8_t reg_cg_check_vrf18_req_mask_b; 211*91f16700Schasinglulu uint8_t reg_cg_check_ddren_req_mask_b; 212*91f16700Schasinglulu 213*91f16700Schasinglulu /* SPM_SRC3_MASK */ 214*91f16700Schasinglulu uint8_t reg_dvfsrc_event_trigger_mask_b; 215*91f16700Schasinglulu uint8_t reg_sw2spm_wakeup_mask_b; 216*91f16700Schasinglulu uint8_t reg_adsp2spm_wakeup_mask_b; 217*91f16700Schasinglulu uint8_t reg_sspm2spm_wakeup_mask_b; 218*91f16700Schasinglulu uint8_t reg_scp2spm_wakeup_mask_b; 219*91f16700Schasinglulu uint8_t reg_csyspwrup_ack_mask; 220*91f16700Schasinglulu uint8_t reg_spm_reserved_srcclkena_mask_b; 221*91f16700Schasinglulu uint8_t reg_spm_reserved_infra_req_mask_b; 222*91f16700Schasinglulu uint8_t reg_spm_reserved_apsrc_req_mask_b; 223*91f16700Schasinglulu uint8_t reg_spm_reserved_vrf18_req_mask_b; 224*91f16700Schasinglulu uint8_t reg_spm_reserved_ddren_req_mask_b; 225*91f16700Schasinglulu uint8_t reg_mcupm_srcclkena_mask_b; 226*91f16700Schasinglulu uint8_t reg_mcupm_infra_req_mask_b; 227*91f16700Schasinglulu uint8_t reg_mcupm_apsrc_req_mask_b; 228*91f16700Schasinglulu uint8_t reg_mcupm_vrf18_req_mask_b; 229*91f16700Schasinglulu uint8_t reg_mcupm_ddren_req_mask_b; 230*91f16700Schasinglulu uint8_t reg_msdc0_srcclkena_mask_b; 231*91f16700Schasinglulu uint8_t reg_msdc0_infra_req_mask_b; 232*91f16700Schasinglulu uint8_t reg_msdc0_apsrc_req_mask_b; 233*91f16700Schasinglulu uint8_t reg_msdc0_vrf18_req_mask_b; 234*91f16700Schasinglulu uint8_t reg_msdc0_ddren_req_mask_b; 235*91f16700Schasinglulu uint8_t reg_msdc1_srcclkena_mask_b; 236*91f16700Schasinglulu uint8_t reg_msdc1_infra_req_mask_b; 237*91f16700Schasinglulu uint8_t reg_msdc1_apsrc_req_mask_b; 238*91f16700Schasinglulu uint8_t reg_msdc1_vrf18_req_mask_b; 239*91f16700Schasinglulu uint8_t reg_msdc1_ddren_req_mask_b; 240*91f16700Schasinglulu 241*91f16700Schasinglulu /* SPM_SRC4_MASK */ 242*91f16700Schasinglulu uint32_t reg_ccif_event_srcclkena_mask_b; 243*91f16700Schasinglulu uint8_t reg_bak_psri_srcclkena_mask_b; 244*91f16700Schasinglulu uint8_t reg_bak_psri_infra_req_mask_b; 245*91f16700Schasinglulu uint8_t reg_bak_psri_apsrc_req_mask_b; 246*91f16700Schasinglulu uint8_t reg_bak_psri_vrf18_req_mask_b; 247*91f16700Schasinglulu uint8_t reg_bak_psri_ddren_req_mask_b; 248*91f16700Schasinglulu uint8_t reg_dramc_md32_infra_req_mask_b; 249*91f16700Schasinglulu uint8_t reg_dramc_md32_vrf18_req_mask_b; 250*91f16700Schasinglulu uint8_t reg_conn_srcclkenb2pwrap_mask_b; 251*91f16700Schasinglulu uint8_t reg_dramc_md32_apsrc_req_mask_b; 252*91f16700Schasinglulu 253*91f16700Schasinglulu /* SPM_SRC5_MASK */ 254*91f16700Schasinglulu uint32_t reg_mcusys_merge_apsrc_req_mask_b; 255*91f16700Schasinglulu uint32_t reg_mcusys_merge_ddren_req_mask_b; 256*91f16700Schasinglulu uint8_t reg_afe_srcclkena_mask_b; 257*91f16700Schasinglulu uint8_t reg_afe_infra_req_mask_b; 258*91f16700Schasinglulu uint8_t reg_afe_apsrc_req_mask_b; 259*91f16700Schasinglulu uint8_t reg_afe_vrf18_req_mask_b; 260*91f16700Schasinglulu uint8_t reg_afe_ddren_req_mask_b; 261*91f16700Schasinglulu uint8_t reg_msdc2_srcclkena_mask_b; 262*91f16700Schasinglulu uint8_t reg_msdc2_infra_req_mask_b; 263*91f16700Schasinglulu uint8_t reg_msdc2_apsrc_req_mask_b; 264*91f16700Schasinglulu uint8_t reg_msdc2_vrf18_req_mask_b; 265*91f16700Schasinglulu uint8_t reg_msdc2_ddren_req_mask_b; 266*91f16700Schasinglulu 267*91f16700Schasinglulu /* SPM_WAKEUP_EVENT_MASK */ 268*91f16700Schasinglulu uint32_t reg_wakeup_event_mask; 269*91f16700Schasinglulu 270*91f16700Schasinglulu /* SPM_WAKEUP_EVENT_EXT_MASK */ 271*91f16700Schasinglulu uint32_t reg_ext_wakeup_event_mask; 272*91f16700Schasinglulu 273*91f16700Schasinglulu /* SPM_SRC7_MASK */ 274*91f16700Schasinglulu uint8_t reg_pcie_srcclkena_mask_b; 275*91f16700Schasinglulu uint8_t reg_pcie_infra_req_mask_b; 276*91f16700Schasinglulu uint8_t reg_pcie_apsrc_req_mask_b; 277*91f16700Schasinglulu uint8_t reg_pcie_vrf18_req_mask_b; 278*91f16700Schasinglulu uint8_t reg_pcie_ddren_req_mask_b; 279*91f16700Schasinglulu uint8_t reg_dpmaif_srcclkena_mask_b; 280*91f16700Schasinglulu uint8_t reg_dpmaif_infra_req_mask_b; 281*91f16700Schasinglulu uint8_t reg_dpmaif_apsrc_req_mask_b; 282*91f16700Schasinglulu uint8_t reg_dpmaif_vrf18_req_mask_b; 283*91f16700Schasinglulu uint8_t reg_dpmaif_ddren_req_mask_b; 284*91f16700Schasinglulu 285*91f16700Schasinglulu /* Auto-gen End */ 286*91f16700Schasinglulu }; 287*91f16700Schasinglulu 288*91f16700Schasinglulu /* code gen by spm_pwr_ctrl_atf.pl, need struct pwr_ctrl */ 289*91f16700Schasinglulu enum pwr_ctrl_enum { 290*91f16700Schasinglulu PW_PCM_FLAGS, 291*91f16700Schasinglulu PW_PCM_FLAGS_CUST, 292*91f16700Schasinglulu PW_PCM_FLAGS_CUST_SET, 293*91f16700Schasinglulu PW_PCM_FLAGS_CUST_CLR, 294*91f16700Schasinglulu PW_PCM_FLAGS1, 295*91f16700Schasinglulu PW_PCM_FLAGS1_CUST, 296*91f16700Schasinglulu PW_PCM_FLAGS1_CUST_SET, 297*91f16700Schasinglulu PW_PCM_FLAGS1_CUST_CLR, 298*91f16700Schasinglulu PW_TIMER_VAL, 299*91f16700Schasinglulu PW_TIMER_VAL_CUST, 300*91f16700Schasinglulu PW_TIMER_VAL_RAMP_EN, 301*91f16700Schasinglulu PW_TIMER_VAL_RAMP_EN_SEC, 302*91f16700Schasinglulu PW_WAKE_SRC, 303*91f16700Schasinglulu PW_WAKE_SRC_CUST, 304*91f16700Schasinglulu PW_WAKELOCK_TIMER_VAL, 305*91f16700Schasinglulu PW_WDT_DISABLE, 306*91f16700Schasinglulu 307*91f16700Schasinglulu /* SPM_AP_STANDBY_CON */ 308*91f16700Schasinglulu PW_REG_WFI_OP, 309*91f16700Schasinglulu PW_REG_WFI_TYPE, 310*91f16700Schasinglulu PW_REG_MP0_CPUTOP_IDLE_MASK, 311*91f16700Schasinglulu PW_REG_MP1_CPUTOP_IDLE_MASK, 312*91f16700Schasinglulu PW_REG_MCUSYS_IDLE_MASK, 313*91f16700Schasinglulu PW_REG_MD_APSRC_1_SEL, 314*91f16700Schasinglulu PW_REG_MD_APSRC_0_SEL, 315*91f16700Schasinglulu PW_REG_CONN_APSRC_SEL, 316*91f16700Schasinglulu 317*91f16700Schasinglulu /* SPM_SRC6_MASK */ 318*91f16700Schasinglulu PW_REG_CCIF_EVENT_INFRA_REQ_MASK_B, 319*91f16700Schasinglulu PW_REG_CCIF_EVENT_APSRC_REQ_MASK_B, 320*91f16700Schasinglulu 321*91f16700Schasinglulu /* SPM_WAKEUP_EVENT_SENS */ 322*91f16700Schasinglulu PW_REG_WAKEUP_EVENT_SENS, 323*91f16700Schasinglulu 324*91f16700Schasinglulu /* SPM_SRC_REQ */ 325*91f16700Schasinglulu PW_REG_SPM_APSRC_REQ, 326*91f16700Schasinglulu PW_REG_SPM_F26M_REQ, 327*91f16700Schasinglulu PW_REG_SPM_INFRA_REQ, 328*91f16700Schasinglulu PW_REG_SPM_VRF18_REQ, 329*91f16700Schasinglulu PW_REG_SPM_DDREN_REQ, 330*91f16700Schasinglulu PW_REG_SPM_DVFS_REQ, 331*91f16700Schasinglulu PW_REG_SPM_SW_MAILBOX_REQ, 332*91f16700Schasinglulu PW_REG_SPM_SSPM_MAILBOX_REQ, 333*91f16700Schasinglulu PW_REG_SPM_ADSP_MAILBOX_REQ, 334*91f16700Schasinglulu PW_REG_SPM_SCP_MAILBOX_REQ, 335*91f16700Schasinglulu 336*91f16700Schasinglulu /* SPM_SRC_MASK */ 337*91f16700Schasinglulu PW_REG_MD_0_SRCCLKENA_MASK_B, 338*91f16700Schasinglulu PW_REG_MD_0_INFRA_REQ_MASK_B, 339*91f16700Schasinglulu PW_REG_MD_0_APSRC_REQ_MASK_B, 340*91f16700Schasinglulu PW_REG_MD_0_VRF18_REQ_MASK_B, 341*91f16700Schasinglulu PW_REG_MD_0_DDREN_REQ_MASK_B, 342*91f16700Schasinglulu PW_REG_MD_1_SRCCLKENA_MASK_B, 343*91f16700Schasinglulu PW_REG_MD_1_INFRA_REQ_MASK_B, 344*91f16700Schasinglulu PW_REG_MD_1_APSRC_REQ_MASK_B, 345*91f16700Schasinglulu PW_REG_MD_1_VRF18_REQ_MASK_B, 346*91f16700Schasinglulu PW_REG_MD_1_DDREN_REQ_MASK_B, 347*91f16700Schasinglulu PW_REG_CONN_SRCCLKENA_MASK_B, 348*91f16700Schasinglulu PW_REG_CONN_SRCCLKENB_MASK_B, 349*91f16700Schasinglulu PW_REG_CONN_INFRA_REQ_MASK_B, 350*91f16700Schasinglulu PW_REG_CONN_APSRC_REQ_MASK_B, 351*91f16700Schasinglulu PW_REG_CONN_VRF18_REQ_MASK_B, 352*91f16700Schasinglulu PW_REG_CONN_DDREN_REQ_MASK_B, 353*91f16700Schasinglulu PW_REG_CONN_VFE28_MASK_B, 354*91f16700Schasinglulu PW_REG_SRCCLKENI_SRCCLKENA_MASK_B, 355*91f16700Schasinglulu PW_REG_SRCCLKENI_INFRA_REQ_MASK_B, 356*91f16700Schasinglulu PW_REG_INFRASYS_APSRC_REQ_MASK_B, 357*91f16700Schasinglulu PW_REG_INFRASYS_DDREN_REQ_MASK_B, 358*91f16700Schasinglulu PW_REG_SSPM_SRCCLKENA_MASK_B, 359*91f16700Schasinglulu PW_REG_SSPM_INFRA_REQ_MASK_B, 360*91f16700Schasinglulu PW_REG_SSPM_APSRC_REQ_MASK_B, 361*91f16700Schasinglulu PW_REG_SSPM_VRF18_REQ_MASK_B, 362*91f16700Schasinglulu PW_REG_SSPM_DDREN_REQ_MASK_B, 363*91f16700Schasinglulu 364*91f16700Schasinglulu /* SPM_SRC2_MASK */ 365*91f16700Schasinglulu PW_REG_SCP_SRCCLKENA_MASK_B, 366*91f16700Schasinglulu PW_REG_SCP_INFRA_REQ_MASK_B, 367*91f16700Schasinglulu PW_REG_SCP_APSRC_REQ_MASK_B, 368*91f16700Schasinglulu PW_REG_SCP_VRF18_REQ_MASK_B, 369*91f16700Schasinglulu PW_REG_SCP_DDREN_REQ_MASK_B, 370*91f16700Schasinglulu PW_REG_AUDIO_DSP_SRCCLKENA_MASK_B, 371*91f16700Schasinglulu PW_REG_AUDIO_DSP_INFRA_REQ_MASK_B, 372*91f16700Schasinglulu PW_REG_AUDIO_DSP_APSRC_REQ_MASK_B, 373*91f16700Schasinglulu PW_REG_AUDIO_DSP_VRF18_REQ_MASK_B, 374*91f16700Schasinglulu PW_REG_AUDIO_DSP_DDREN_REQ_MASK_B, 375*91f16700Schasinglulu PW_REG_UFS_SRCCLKENA_MASK_B, 376*91f16700Schasinglulu PW_REG_UFS_INFRA_REQ_MASK_B, 377*91f16700Schasinglulu PW_REG_UFS_APSRC_REQ_MASK_B, 378*91f16700Schasinglulu PW_REG_UFS_VRF18_REQ_MASK_B, 379*91f16700Schasinglulu PW_REG_UFS_DDREN_REQ_MASK_B, 380*91f16700Schasinglulu PW_REG_DISP0_APSRC_REQ_MASK_B, 381*91f16700Schasinglulu PW_REG_DISP0_DDREN_REQ_MASK_B, 382*91f16700Schasinglulu PW_REG_DISP1_APSRC_REQ_MASK_B, 383*91f16700Schasinglulu PW_REG_DISP1_DDREN_REQ_MASK_B, 384*91f16700Schasinglulu PW_REG_GCE_INFRA_REQ_MASK_B, 385*91f16700Schasinglulu PW_REG_GCE_APSRC_REQ_MASK_B, 386*91f16700Schasinglulu PW_REG_GCE_VRF18_REQ_MASK_B, 387*91f16700Schasinglulu PW_REG_GCE_DDREN_REQ_MASK_B, 388*91f16700Schasinglulu PW_REG_APU_SRCCLKENA_MASK_B, 389*91f16700Schasinglulu PW_REG_APU_INFRA_REQ_MASK_B, 390*91f16700Schasinglulu PW_REG_APU_APSRC_REQ_MASK_B, 391*91f16700Schasinglulu PW_REG_APU_VRF18_REQ_MASK_B, 392*91f16700Schasinglulu PW_REG_APU_DDREN_REQ_MASK_B, 393*91f16700Schasinglulu PW_REG_CG_CHECK_SRCCLKENA_MASK_B, 394*91f16700Schasinglulu PW_REG_CG_CHECK_APSRC_REQ_MASK_B, 395*91f16700Schasinglulu PW_REG_CG_CHECK_VRF18_REQ_MASK_B, 396*91f16700Schasinglulu PW_REG_CG_CHECK_DDREN_REQ_MASK_B, 397*91f16700Schasinglulu 398*91f16700Schasinglulu /* SPM_SRC3_MASK */ 399*91f16700Schasinglulu PW_REG_DVFSRC_EVENT_TRIGGER_MASK_B, 400*91f16700Schasinglulu PW_REG_SW2SPM_WAKEUP_MASK_B, 401*91f16700Schasinglulu PW_REG_ADSP2SPM_WAKEUP_MASK_B, 402*91f16700Schasinglulu PW_REG_SSPM2SPM_WAKEUP_MASK_B, 403*91f16700Schasinglulu PW_REG_SCP2SPM_WAKEUP_MASK_B, 404*91f16700Schasinglulu PW_REG_CSYSPWRUP_ACK_MASK, 405*91f16700Schasinglulu PW_REG_SPM_RESERVED_SRCCLKENA_MASK_B, 406*91f16700Schasinglulu PW_REG_SPM_RESERVED_INFRA_REQ_MASK_B, 407*91f16700Schasinglulu PW_REG_SPM_RESERVED_APSRC_REQ_MASK_B, 408*91f16700Schasinglulu PW_REG_SPM_RESERVED_VRF18_REQ_MASK_B, 409*91f16700Schasinglulu PW_REG_SPM_RESERVED_DDREN_REQ_MASK_B, 410*91f16700Schasinglulu PW_REG_MCUPM_SRCCLKENA_MASK_B, 411*91f16700Schasinglulu PW_REG_MCUPM_INFRA_REQ_MASK_B, 412*91f16700Schasinglulu PW_REG_MCUPM_APSRC_REQ_MASK_B, 413*91f16700Schasinglulu PW_REG_MCUPM_VRF18_REQ_MASK_B, 414*91f16700Schasinglulu PW_REG_MCUPM_DDREN_REQ_MASK_B, 415*91f16700Schasinglulu PW_REG_MSDC0_SRCCLKENA_MASK_B, 416*91f16700Schasinglulu PW_REG_MSDC0_INFRA_REQ_MASK_B, 417*91f16700Schasinglulu PW_REG_MSDC0_APSRC_REQ_MASK_B, 418*91f16700Schasinglulu PW_REG_MSDC0_VRF18_REQ_MASK_B, 419*91f16700Schasinglulu PW_REG_MSDC0_DDREN_REQ_MASK_B, 420*91f16700Schasinglulu PW_REG_MSDC1_SRCCLKENA_MASK_B, 421*91f16700Schasinglulu PW_REG_MSDC1_INFRA_REQ_MASK_B, 422*91f16700Schasinglulu PW_REG_MSDC1_APSRC_REQ_MASK_B, 423*91f16700Schasinglulu PW_REG_MSDC1_VRF18_REQ_MASK_B, 424*91f16700Schasinglulu PW_REG_MSDC1_DDREN_REQ_MASK_B, 425*91f16700Schasinglulu 426*91f16700Schasinglulu /* SPM_SRC4_MASK */ 427*91f16700Schasinglulu PW_REG_CCIF_EVENT_SRCCLKENA_MASK_B, 428*91f16700Schasinglulu PW_REG_BAK_PSRI_SRCCLKENA_MASK_B, 429*91f16700Schasinglulu PW_REG_BAK_PSRI_INFRA_REQ_MASK_B, 430*91f16700Schasinglulu PW_REG_BAK_PSRI_APSRC_REQ_MASK_B, 431*91f16700Schasinglulu PW_REG_BAK_PSRI_VRF18_REQ_MASK_B, 432*91f16700Schasinglulu PW_REG_BAK_PSRI_DDREN_REQ_MASK_B, 433*91f16700Schasinglulu PW_REG_DRAMC_MD32_INFRA_REQ_MASK_B, 434*91f16700Schasinglulu PW_REG_DRAMC_MD32_VRF18_REQ_MASK_B, 435*91f16700Schasinglulu PW_REG_CONN_SRCCLKENB2PWRAP_MASK_B, 436*91f16700Schasinglulu PW_REG_DRAMC_MD32_APSRC_REQ_MASK_B, 437*91f16700Schasinglulu 438*91f16700Schasinglulu /* SPM_SRC5_MASK */ 439*91f16700Schasinglulu PW_REG_MCUSYS_MERGE_APSRC_REQ_MASK_B, 440*91f16700Schasinglulu PW_REG_MCUSYS_MERGE_DDREN_REQ_MASK_B, 441*91f16700Schasinglulu PW_REG_AFE_SRCCLKENA_MASK_B, 442*91f16700Schasinglulu PW_REG_AFE_INFRA_REQ_MASK_B, 443*91f16700Schasinglulu PW_REG_AFE_APSRC_REQ_MASK_B, 444*91f16700Schasinglulu PW_REG_AFE_VRF18_REQ_MASK_B, 445*91f16700Schasinglulu PW_REG_AFE_DDREN_REQ_MASK_B, 446*91f16700Schasinglulu PW_REG_MSDC2_SRCCLKENA_MASK_B, 447*91f16700Schasinglulu PW_REG_MSDC2_INFRA_REQ_MASK_B, 448*91f16700Schasinglulu PW_REG_MSDC2_APSRC_REQ_MASK_B, 449*91f16700Schasinglulu PW_REG_MSDC2_VRF18_REQ_MASK_B, 450*91f16700Schasinglulu PW_REG_MSDC2_DDREN_REQ_MASK_B, 451*91f16700Schasinglulu 452*91f16700Schasinglulu /* SPM_WAKEUP_EVENT_MASK */ 453*91f16700Schasinglulu PW_REG_WAKEUP_EVENT_MASK, 454*91f16700Schasinglulu 455*91f16700Schasinglulu /* SPM_WAKEUP_EVENT_EXT_MASK */ 456*91f16700Schasinglulu PW_REG_EXT_WAKEUP_EVENT_MASK, 457*91f16700Schasinglulu 458*91f16700Schasinglulu /* SPM_SRC7_MASK */ 459*91f16700Schasinglulu PW_REG_PCIE_SRCCLKENA_MASK_B, 460*91f16700Schasinglulu PW_REG_PCIE_INFRA_REQ_MASK_B, 461*91f16700Schasinglulu PW_REG_PCIE_APSRC_REQ_MASK_B, 462*91f16700Schasinglulu PW_REG_PCIE_VRF18_REQ_MASK_B, 463*91f16700Schasinglulu PW_REG_PCIE_DDREN_REQ_MASK_B, 464*91f16700Schasinglulu PW_REG_DPMAIF_SRCCLKENA_MASK_B, 465*91f16700Schasinglulu PW_REG_DPMAIF_INFRA_REQ_MASK_B, 466*91f16700Schasinglulu PW_REG_DPMAIF_APSRC_REQ_MASK_B, 467*91f16700Schasinglulu PW_REG_DPMAIF_VRF18_REQ_MASK_B, 468*91f16700Schasinglulu PW_REG_DPMAIF_DDREN_REQ_MASK_B, 469*91f16700Schasinglulu 470*91f16700Schasinglulu PW_MAX_COUNT, 471*91f16700Schasinglulu }; 472*91f16700Schasinglulu 473*91f16700Schasinglulu /* 474*91f16700Schasinglulu * ACK HW MODE SETTING 475*91f16700Schasinglulu * 0: trigger(1) 476*91f16700Schasinglulu * 1: trigger(0) 477*91f16700Schasinglulu * 2: trigger(1) and target(0) 478*91f16700Schasinglulu * 3: trigger(0) and target(1) 479*91f16700Schasinglulu * 4: trigger(1) and target(1) 480*91f16700Schasinglulu * 5: trigger(0) and target(0) 481*91f16700Schasinglulu */ 482*91f16700Schasinglulu #define TRIG_H_TAR_L (2U) 483*91f16700Schasinglulu #define TRIG_L_TAR_H (3U) 484*91f16700Schasinglulu #define TRIG_H_TAR_H (4U) 485*91f16700Schasinglulu #define TRIG_L_TAR_L (5U) 486*91f16700Schasinglulu 487*91f16700Schasinglulu #define SPM_INTERNAL_STATUS_HW_S1 (1U << 0) 488*91f16700Schasinglulu #define SPM_ACK_CHK_3_SEL_HW_S1 (0x00350098) 489*91f16700Schasinglulu #define SPM_ACK_CHK_3_HW_S1_CNT (1U) 490*91f16700Schasinglulu #define SPM_ACK_CHK_3_CON_HW_MODE_TRIG (TRIG_L_TAR_H << 9u) 491*91f16700Schasinglulu #define SPM_ACK_CHK_3_CON_EN (0x110) 492*91f16700Schasinglulu #define SPM_ACK_CHK_3_CON_CLR_ALL (0x2) 493*91f16700Schasinglulu #define SPM_ACK_CHK_3_CON_RESULT (0x8000) 494*91f16700Schasinglulu 495*91f16700Schasinglulu struct wake_status_trace_comm { 496*91f16700Schasinglulu uint32_t debug_flag; /* PCM_WDT_LATCH_SPARE_0 */ 497*91f16700Schasinglulu uint32_t debug_flag1; /* PCM_WDT_LATCH_SPARE_1 */ 498*91f16700Schasinglulu uint32_t timer_out; /* SPM_SW_RSV_6*/ 499*91f16700Schasinglulu uint32_t b_sw_flag0; /* SPM_SW_RSV_7 */ 500*91f16700Schasinglulu uint32_t b_sw_flag1; /* SPM_SW_RSV_7 */ 501*91f16700Schasinglulu uint32_t r12; /* SPM_SW_RSV_0 */ 502*91f16700Schasinglulu uint32_t r13; /* PCM_REG13_DATA */ 503*91f16700Schasinglulu uint32_t req_sta0; /* SRC_REQ_STA_0 */ 504*91f16700Schasinglulu uint32_t req_sta1; /* SRC_REQ_STA_1 */ 505*91f16700Schasinglulu uint32_t req_sta2; /* SRC_REQ_STA_2 */ 506*91f16700Schasinglulu uint32_t req_sta3; /* SRC_REQ_STA_3 */ 507*91f16700Schasinglulu uint32_t req_sta4; /* SRC_REQ_STA_4 */ 508*91f16700Schasinglulu uint32_t raw_sta; /* SPM_WAKEUP_STA */ 509*91f16700Schasinglulu uint32_t times_h; /* timestamp high bits */ 510*91f16700Schasinglulu uint32_t times_l; /* timestamp low bits */ 511*91f16700Schasinglulu uint32_t resumetime; /* timestamp low bits */ 512*91f16700Schasinglulu }; 513*91f16700Schasinglulu 514*91f16700Schasinglulu struct wake_status_trace { 515*91f16700Schasinglulu struct wake_status_trace_comm comm; 516*91f16700Schasinglulu }; 517*91f16700Schasinglulu 518*91f16700Schasinglulu struct wake_status { 519*91f16700Schasinglulu struct wake_status_trace tr; 520*91f16700Schasinglulu uint32_t r12; /* SPM_BK_WAKE_EVENT */ 521*91f16700Schasinglulu uint32_t r12_ext; /* SPM_WAKEUP_EXT_STA */ 522*91f16700Schasinglulu uint32_t raw_sta; /* SPM_WAKEUP_STA */ 523*91f16700Schasinglulu uint32_t raw_ext_sta; /* SPM_WAKEUP_EXT_STA */ 524*91f16700Schasinglulu uint32_t md32pcm_wakeup_sta; /* MD32CPM_WAKEUP_STA */ 525*91f16700Schasinglulu uint32_t md32pcm_event_sta; /* MD32PCM_EVENT_STA */ 526*91f16700Schasinglulu uint32_t wake_misc; /* SPM_BK_WAKE_MISC */ 527*91f16700Schasinglulu uint32_t timer_out; /* SPM_BK_PCM_TIMER */ 528*91f16700Schasinglulu uint32_t r13; /* PCM_REG13_DATA */ 529*91f16700Schasinglulu uint32_t idle_sta; /* SUBSYS_IDLE_STA */ 530*91f16700Schasinglulu uint32_t req_sta0; /* SRC_REQ_STA_0 */ 531*91f16700Schasinglulu uint32_t req_sta1; /* SRC_REQ_STA_1 */ 532*91f16700Schasinglulu uint32_t req_sta2; /* SRC_REQ_STA_2 */ 533*91f16700Schasinglulu uint32_t req_sta3; /* SRC_REQ_STA_3 */ 534*91f16700Schasinglulu uint32_t req_sta4; /* SRC_REQ_STA_4 */ 535*91f16700Schasinglulu uint32_t cg_check_sta; /* SPM_CG_CHECK_STA */ 536*91f16700Schasinglulu uint32_t debug_flag; /* PCM_WDT_LATCH_SPARE_0 */ 537*91f16700Schasinglulu uint32_t debug_flag1; /* PCM_WDT_LATCH_SPARE_1 */ 538*91f16700Schasinglulu uint32_t b_sw_flag0; /* SPM_SW_RSV_7 */ 539*91f16700Schasinglulu uint32_t b_sw_flag1; /* SPM_SW_RSV_8 */ 540*91f16700Schasinglulu uint32_t isr; /* SPM_IRQ_STA */ 541*91f16700Schasinglulu uint32_t sw_flag0; /* SPM_SW_FLAG_0 */ 542*91f16700Schasinglulu uint32_t sw_flag1; /* SPM_SW_FLAG_1 */ 543*91f16700Schasinglulu uint32_t clk_settle; /* SPM_CLK_SETTLE */ 544*91f16700Schasinglulu uint32_t src_req; /* SPM_SRC_REQ */ 545*91f16700Schasinglulu uint32_t log_index; 546*91f16700Schasinglulu uint32_t abort; 547*91f16700Schasinglulu uint32_t rt_req_sta0; /* SPM_SW_RSV_2 */ 548*91f16700Schasinglulu uint32_t rt_req_sta1; /* SPM_SW_RSV_3 */ 549*91f16700Schasinglulu uint32_t rt_req_sta2; /* SPM_SW_RSV_4 */ 550*91f16700Schasinglulu uint32_t rt_req_sta3; /* SPM_SW_RSV_5 */ 551*91f16700Schasinglulu uint32_t rt_req_sta4; /* SPM_SW_RSV_6 */ 552*91f16700Schasinglulu uint32_t mcupm_req_sta; 553*91f16700Schasinglulu }; 554*91f16700Schasinglulu 555*91f16700Schasinglulu struct spm_lp_scen { 556*91f16700Schasinglulu struct pcm_desc *pcmdesc; 557*91f16700Schasinglulu struct pwr_ctrl *pwrctrl; 558*91f16700Schasinglulu }; 559*91f16700Schasinglulu 560*91f16700Schasinglulu extern struct spm_lp_scen __spm_vcorefs; 561*91f16700Schasinglulu 562*91f16700Schasinglulu extern void __spm_set_cpu_status(unsigned int cpu); 563*91f16700Schasinglulu extern void __spm_reset_and_init_pcm(const struct pcm_desc *pcmdesc); 564*91f16700Schasinglulu extern void __spm_kick_im_to_fetch(const struct pcm_desc *pcmdesc); 565*91f16700Schasinglulu extern void __spm_init_pcm_register(void); 566*91f16700Schasinglulu extern void __spm_src_req_update(const struct pwr_ctrl *pwrctrl, 567*91f16700Schasinglulu unsigned int resource_usage); 568*91f16700Schasinglulu extern void __spm_set_power_control(const struct pwr_ctrl *pwrctrl); 569*91f16700Schasinglulu extern void __spm_disable_pcm_timer(void); 570*91f16700Schasinglulu extern void __spm_set_wakeup_event(const struct pwr_ctrl *pwrctrl); 571*91f16700Schasinglulu extern void __spm_kick_pcm_to_run(struct pwr_ctrl *pwrctrl); 572*91f16700Schasinglulu extern void __spm_set_pcm_flags(struct pwr_ctrl *pwrctrl); 573*91f16700Schasinglulu extern void __spm_send_cpu_wakeup_event(void); 574*91f16700Schasinglulu 575*91f16700Schasinglulu extern void __spm_get_wakeup_status(struct wake_status *wakesta, 576*91f16700Schasinglulu unsigned int ext_status); 577*91f16700Schasinglulu extern void __spm_clean_after_wakeup(void); 578*91f16700Schasinglulu extern wake_reason_t __spm_output_wake_reason(int state_id, 579*91f16700Schasinglulu const struct wake_status *wakesta); 580*91f16700Schasinglulu extern void __spm_sync_vcore_dvfs_power_control(struct pwr_ctrl *dest_pwr_ctrl, 581*91f16700Schasinglulu const struct pwr_ctrl *src_pwr_ctrl); 582*91f16700Schasinglulu extern void __spm_set_pcm_wdt(int en); 583*91f16700Schasinglulu extern uint32_t _spm_get_wake_period(int pwake_time, wake_reason_t last_wr); 584*91f16700Schasinglulu extern void __spm_set_fw_resume_option(struct pwr_ctrl *pwrctrl); 585*91f16700Schasinglulu extern void __spm_ext_int_wakeup_req_clr(void); 586*91f16700Schasinglulu extern void __spm_xo_soc_bblpm(int en); 587*91f16700Schasinglulu 588*91f16700Schasinglulu static inline void set_pwrctrl_pcm_flags(struct pwr_ctrl *pwrctrl, 589*91f16700Schasinglulu uint32_t flags) 590*91f16700Schasinglulu { 591*91f16700Schasinglulu if (pwrctrl->pcm_flags_cust == 0U) { 592*91f16700Schasinglulu pwrctrl->pcm_flags = flags; 593*91f16700Schasinglulu } else { 594*91f16700Schasinglulu pwrctrl->pcm_flags = pwrctrl->pcm_flags_cust; 595*91f16700Schasinglulu } 596*91f16700Schasinglulu } 597*91f16700Schasinglulu 598*91f16700Schasinglulu static inline void set_pwrctrl_pcm_flags1(struct pwr_ctrl *pwrctrl, 599*91f16700Schasinglulu uint32_t flags) 600*91f16700Schasinglulu { 601*91f16700Schasinglulu if (pwrctrl->pcm_flags1_cust == 0U) { 602*91f16700Schasinglulu pwrctrl->pcm_flags1 = flags; 603*91f16700Schasinglulu } else { 604*91f16700Schasinglulu pwrctrl->pcm_flags1 = pwrctrl->pcm_flags1_cust; 605*91f16700Schasinglulu } 606*91f16700Schasinglulu } 607*91f16700Schasinglulu 608*91f16700Schasinglulu extern void __spm_hw_s1_state_monitor(int en, unsigned int *status); 609*91f16700Schasinglulu 610*91f16700Schasinglulu static inline void spm_hw_s1_state_monitor_resume(void) 611*91f16700Schasinglulu { 612*91f16700Schasinglulu __spm_hw_s1_state_monitor(1, NULL); 613*91f16700Schasinglulu } 614*91f16700Schasinglulu 615*91f16700Schasinglulu static inline void spm_hw_s1_state_monitor_pause(unsigned int *status) 616*91f16700Schasinglulu { 617*91f16700Schasinglulu __spm_hw_s1_state_monitor(0, status); 618*91f16700Schasinglulu } 619*91f16700Schasinglulu 620*91f16700Schasinglulu #endif /* MT_SPM_INTERNAL_H */ 621