1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2023, 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_H 8*91f16700Schasinglulu #define MT_SPM_INTERNAL_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <mt_spm.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu /* PCM_WDT_VAL */ 13*91f16700Schasinglulu #define PCM_WDT_TIMEOUT (30 * 32768) /* 30s */ 14*91f16700Schasinglulu /* PCM_TIMER_VAL */ 15*91f16700Schasinglulu #define PCM_TIMER_MAX (0xffffffff - PCM_WDT_TIMEOUT) 16*91f16700Schasinglulu 17*91f16700Schasinglulu /* PCM_PWR_IO_EN */ 18*91f16700Schasinglulu #define PCM_PWRIO_EN_R0 BIT(0) 19*91f16700Schasinglulu #define PCM_PWRIO_EN_R7 BIT(7) 20*91f16700Schasinglulu #define PCM_RF_SYNC_R0 BIT(16) 21*91f16700Schasinglulu #define PCM_RF_SYNC_R6 BIT(22) 22*91f16700Schasinglulu #define PCM_RF_SYNC_R7 BIT(23) 23*91f16700Schasinglulu 24*91f16700Schasinglulu /* SPM_SWINT */ 25*91f16700Schasinglulu #define PCM_SW_INT0 BIT(0) 26*91f16700Schasinglulu #define PCM_SW_INT1 BIT(1) 27*91f16700Schasinglulu #define PCM_SW_INT2 BIT(2) 28*91f16700Schasinglulu #define PCM_SW_INT3 BIT(3) 29*91f16700Schasinglulu #define PCM_SW_INT4 BIT(4) 30*91f16700Schasinglulu #define PCM_SW_INT5 BIT(5) 31*91f16700Schasinglulu #define PCM_SW_INT6 BIT(6) 32*91f16700Schasinglulu #define PCM_SW_INT7 BIT(7) 33*91f16700Schasinglulu #define PCM_SW_INT8 BIT(8) 34*91f16700Schasinglulu #define PCM_SW_INT9 BIT(9) 35*91f16700Schasinglulu #define PCM_SW_INT_ALL (PCM_SW_INT9 | PCM_SW_INT8 | PCM_SW_INT7 | \ 36*91f16700Schasinglulu PCM_SW_INT6 | PCM_SW_INT5 | PCM_SW_INT4 | \ 37*91f16700Schasinglulu PCM_SW_INT3 | PCM_SW_INT2 | PCM_SW_INT1 | \ 38*91f16700Schasinglulu PCM_SW_INT0) 39*91f16700Schasinglulu 40*91f16700Schasinglulu /* SPM_AP_STANDBY_CON */ 41*91f16700Schasinglulu #define WFI_OP_AND (1U) 42*91f16700Schasinglulu #define WFI_OP_OR (0U) 43*91f16700Schasinglulu 44*91f16700Schasinglulu /* SPM_IRQ_MASK */ 45*91f16700Schasinglulu #define ISRM_TWAM BIT(2) 46*91f16700Schasinglulu #define ISRM_PCM_RETURN BIT(3) 47*91f16700Schasinglulu #define ISRM_RET_IRQ0 BIT(8) 48*91f16700Schasinglulu #define ISRM_RET_IRQ1 BIT(9) 49*91f16700Schasinglulu #define ISRM_RET_IRQ2 BIT(10) 50*91f16700Schasinglulu #define ISRM_RET_IRQ3 BIT(11) 51*91f16700Schasinglulu #define ISRM_RET_IRQ4 BIT(12) 52*91f16700Schasinglulu #define ISRM_RET_IRQ5 BIT(13) 53*91f16700Schasinglulu #define ISRM_RET_IRQ6 BIT(14) 54*91f16700Schasinglulu #define ISRM_RET_IRQ7 BIT(15) 55*91f16700Schasinglulu #define ISRM_RET_IRQ8 BIT(16) 56*91f16700Schasinglulu #define ISRM_RET_IRQ9 BIT(17) 57*91f16700Schasinglulu #define ISRM_RET_IRQ_AUX ((ISRM_RET_IRQ9) | (ISRM_RET_IRQ8) | \ 58*91f16700Schasinglulu (ISRM_RET_IRQ7) | (ISRM_RET_IRQ6) | \ 59*91f16700Schasinglulu (ISRM_RET_IRQ5) | (ISRM_RET_IRQ4) | \ 60*91f16700Schasinglulu (ISRM_RET_IRQ3) | (ISRM_RET_IRQ2) | \ 61*91f16700Schasinglulu (ISRM_RET_IRQ1)) 62*91f16700Schasinglulu #define ISRM_ALL_EXC_TWAM ISRM_RET_IRQ_AUX 63*91f16700Schasinglulu #define ISRM_ALL (ISRM_ALL_EXC_TWAM | ISRM_TWAM) 64*91f16700Schasinglulu 65*91f16700Schasinglulu /* SPM_IRQ_STA */ 66*91f16700Schasinglulu #define ISRS_TWAM BIT(2) 67*91f16700Schasinglulu #define ISRS_PCM_RETURN BIT(3) 68*91f16700Schasinglulu #define ISRC_TWAM ISRS_TWAM 69*91f16700Schasinglulu #define ISRC_ALL_EXC_TWAM ISRS_PCM_RETURN 70*91f16700Schasinglulu #define ISRC_ALL (ISRC_ALL_EXC_TWAM | ISRC_TWAM) 71*91f16700Schasinglulu 72*91f16700Schasinglulu /* SPM_WAKEUP_MISC */ 73*91f16700Schasinglulu #define WAKE_MISC_GIC_WAKEUP (0x3FF) 74*91f16700Schasinglulu #define WAKE_MISC_DVFSRC_IRQ DVFSRC_IRQ_LSB 75*91f16700Schasinglulu #define WAKE_MISC_REG_CPU_WAKEUP SPM_WAKEUP_MISC_REG_CPU_WAKEUP_LSB 76*91f16700Schasinglulu #define WAKE_MISC_PCM_TIMER_EVENT PCM_TIMER_EVENT_LSB 77*91f16700Schasinglulu #define WAKE_MISC_TWAM_IRQ_B TWAM_IRQ_B_LSB 78*91f16700Schasinglulu #define WAKE_MISC_PMSR_IRQ_B_SET0 PMSR_IRQ_B_SET0_LSB 79*91f16700Schasinglulu #define WAKE_MISC_PMSR_IRQ_B_SET1 PMSR_IRQ_B_SET1_LSB 80*91f16700Schasinglulu #define WAKE_MISC_PMSR_IRQ_B_SET2 PMSR_IRQ_B_SET2_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 /* MD32PCM ADDR for SPM code fetch */ 90*91f16700Schasinglulu #define MD32PCM_BASE (SPM_BASE + 0x0A00) 91*91f16700Schasinglulu #define MD32PCM_CFGREG_SW_RSTN (MD32PCM_BASE + 0x0000) 92*91f16700Schasinglulu #define MD32PCM_DMA0_SRC (MD32PCM_BASE + 0x0200) 93*91f16700Schasinglulu #define MD32PCM_DMA0_DST (MD32PCM_BASE + 0x0204) 94*91f16700Schasinglulu #define MD32PCM_DMA0_WPPT (MD32PCM_BASE + 0x0208) 95*91f16700Schasinglulu #define MD32PCM_DMA0_WPTO (MD32PCM_BASE + 0x020C) 96*91f16700Schasinglulu #define MD32PCM_DMA0_COUNT (MD32PCM_BASE + 0x0210) 97*91f16700Schasinglulu #define MD32PCM_DMA0_CON (MD32PCM_BASE + 0x0214) 98*91f16700Schasinglulu #define MD32PCM_DMA0_START (MD32PCM_BASE + 0x0218) 99*91f16700Schasinglulu #define MD32PCM_DMA0_RLCT (MD32PCM_BASE + 0x0224) 100*91f16700Schasinglulu #define MD32PCM_INTC_IRQ_RAW_STA (MD32PCM_BASE + 0x033C) 101*91f16700Schasinglulu 102*91f16700Schasinglulu /* ABORT MASK for DEBUG FOORTPRINT */ 103*91f16700Schasinglulu #define DEBUG_ABORT_MASK (SPM_DBG_DEBUG_IDX_DRAM_SREF_ABORT_IN_APSRC | \ 104*91f16700Schasinglulu SPM_DBG_DEBUG_IDX_DRAM_SREF_ABORT_IN_DDREN) 105*91f16700Schasinglulu 106*91f16700Schasinglulu #define DEBUG_ABORT_MASK_1 (SPM_DBG1_DEBUG_IDX_VRCXO_SLEEP_ABORT | \ 107*91f16700Schasinglulu SPM_DBG1_DEBUG_IDX_PWRAP_SLEEP_ACK_LOW_ABORT | \ 108*91f16700Schasinglulu SPM_DBG1_DEBUG_IDX_PWRAP_SLEEP_ACK_HIGH_ABORT | \ 109*91f16700Schasinglulu SPM_DBG1_DEBUG_IDX_EMI_SLP_IDLE_ABORT | \ 110*91f16700Schasinglulu SPM_DBG1_DEBUG_IDX_SCP_SLP_ACK_LOW_ABORT | \ 111*91f16700Schasinglulu SPM_DBG1_DEBUG_IDX_SCP_SLP_ACK_HIGH_ABORT | \ 112*91f16700Schasinglulu SPM_DBG1_DEBUG_IDX_SPM_DVFS_CMD_RDY_ABORT) 113*91f16700Schasinglulu 114*91f16700Schasinglulu #define MCUPM_MBOX_WAKEUP_CPU (0x0C55FD10) 115*91f16700Schasinglulu 116*91f16700Schasinglulu struct pcm_desc { 117*91f16700Schasinglulu const char *version; /* PCM code version */ 118*91f16700Schasinglulu uint32_t *base; /* binary array base */ 119*91f16700Schasinglulu uintptr_t base_dma; /* dma addr of base */ 120*91f16700Schasinglulu uint32_t pmem_words; 121*91f16700Schasinglulu uint32_t total_words; 122*91f16700Schasinglulu uint32_t pmem_start; 123*91f16700Schasinglulu uint32_t dmem_start; 124*91f16700Schasinglulu }; 125*91f16700Schasinglulu 126*91f16700Schasinglulu struct pwr_ctrl { 127*91f16700Schasinglulu /* for SPM */ 128*91f16700Schasinglulu uint32_t pcm_flags; 129*91f16700Schasinglulu /* can override pcm_flags */ 130*91f16700Schasinglulu uint32_t pcm_flags_cust; 131*91f16700Schasinglulu /* set bit of pcm_flags, after pcm_flags_cust */ 132*91f16700Schasinglulu uint32_t pcm_flags_cust_set; 133*91f16700Schasinglulu /* clr bit of pcm_flags, after pcm_flags_cust */ 134*91f16700Schasinglulu uint32_t pcm_flags_cust_clr; 135*91f16700Schasinglulu uint32_t pcm_flags1; 136*91f16700Schasinglulu /* can override pcm_flags1 */ 137*91f16700Schasinglulu uint32_t pcm_flags1_cust; 138*91f16700Schasinglulu /* set bit of pcm_flags1, after pcm_flags1_cust */ 139*91f16700Schasinglulu uint32_t pcm_flags1_cust_set; 140*91f16700Schasinglulu /* clr bit of pcm_flags1, after pcm_flags1_cust */ 141*91f16700Schasinglulu uint32_t pcm_flags1_cust_clr; 142*91f16700Schasinglulu /* @ 1T 32K */ 143*91f16700Schasinglulu uint32_t timer_val; 144*91f16700Schasinglulu /* @ 1T 32K, can override timer_val */ 145*91f16700Schasinglulu uint32_t timer_val_cust; 146*91f16700Schasinglulu /* stress for dpidle */ 147*91f16700Schasinglulu uint32_t timer_val_ramp_en; 148*91f16700Schasinglulu /* stress for suspend */ 149*91f16700Schasinglulu uint32_t timer_val_ramp_en_sec; 150*91f16700Schasinglulu uint32_t wake_src; 151*91f16700Schasinglulu /* can override wake_src */ 152*91f16700Schasinglulu uint32_t wake_src_cust; 153*91f16700Schasinglulu /* disable wdt in suspend */ 154*91f16700Schasinglulu uint8_t wdt_disable; 155*91f16700Schasinglulu 156*91f16700Schasinglulu /* SPM_AP_STANDBY_CON */ 157*91f16700Schasinglulu /* [0] */ 158*91f16700Schasinglulu uint8_t reg_wfi_op; 159*91f16700Schasinglulu /* [1] */ 160*91f16700Schasinglulu uint8_t reg_wfi_type; 161*91f16700Schasinglulu /* [2] */ 162*91f16700Schasinglulu uint8_t reg_mp0_cputop_idle_mask; 163*91f16700Schasinglulu /* [3] */ 164*91f16700Schasinglulu uint8_t reg_mp1_cputop_idle_mask; 165*91f16700Schasinglulu /* [4] */ 166*91f16700Schasinglulu uint8_t reg_mcusys_idle_mask; 167*91f16700Schasinglulu /* [25] */ 168*91f16700Schasinglulu uint8_t reg_md_apsrc_1_sel; 169*91f16700Schasinglulu /* [26] */ 170*91f16700Schasinglulu uint8_t reg_md_apsrc_0_sel; 171*91f16700Schasinglulu /* [29] */ 172*91f16700Schasinglulu uint8_t reg_conn_apsrc_sel; 173*91f16700Schasinglulu 174*91f16700Schasinglulu /* SPM_SRC_REQ */ 175*91f16700Schasinglulu /* [0] */ 176*91f16700Schasinglulu uint8_t reg_spm_apsrc_req; 177*91f16700Schasinglulu /* [1] */ 178*91f16700Schasinglulu uint8_t reg_spm_f26m_req; 179*91f16700Schasinglulu /* [3] */ 180*91f16700Schasinglulu uint8_t reg_spm_infra_req; 181*91f16700Schasinglulu /* [4] */ 182*91f16700Schasinglulu uint8_t reg_spm_vrf18_req; 183*91f16700Schasinglulu /* [7] */ 184*91f16700Schasinglulu uint8_t reg_spm_ddr_en_req; 185*91f16700Schasinglulu /* [8] */ 186*91f16700Schasinglulu uint8_t reg_spm_dvfs_req; 187*91f16700Schasinglulu /* [9] */ 188*91f16700Schasinglulu uint8_t reg_spm_sw_mailbox_req; 189*91f16700Schasinglulu /* [10] */ 190*91f16700Schasinglulu uint8_t reg_spm_sspm_mailbox_req; 191*91f16700Schasinglulu /* [11] */ 192*91f16700Schasinglulu uint8_t reg_spm_adsp_mailbox_req; 193*91f16700Schasinglulu /* [12] */ 194*91f16700Schasinglulu uint8_t reg_spm_scp_mailbox_req; 195*91f16700Schasinglulu 196*91f16700Schasinglulu /* SPM_SRC_MASK */ 197*91f16700Schasinglulu /* [0] */ 198*91f16700Schasinglulu uint8_t reg_sspm_srcclkena_0_mask_b; 199*91f16700Schasinglulu /* [1] */ 200*91f16700Schasinglulu uint8_t reg_sspm_infra_req_0_mask_b; 201*91f16700Schasinglulu /* [2] */ 202*91f16700Schasinglulu uint8_t reg_sspm_apsrc_req_0_mask_b; 203*91f16700Schasinglulu /* [3] */ 204*91f16700Schasinglulu uint8_t reg_sspm_vrf18_req_0_mask_b; 205*91f16700Schasinglulu /* [4] */ 206*91f16700Schasinglulu uint8_t reg_sspm_ddr_en_0_mask_b; 207*91f16700Schasinglulu /* [5] */ 208*91f16700Schasinglulu uint8_t reg_scp_srcclkena_mask_b; 209*91f16700Schasinglulu /* [6] */ 210*91f16700Schasinglulu uint8_t reg_scp_infra_req_mask_b; 211*91f16700Schasinglulu /* [7] */ 212*91f16700Schasinglulu uint8_t reg_scp_apsrc_req_mask_b; 213*91f16700Schasinglulu /* [8] */ 214*91f16700Schasinglulu uint8_t reg_scp_vrf18_req_mask_b; 215*91f16700Schasinglulu /* [9] */ 216*91f16700Schasinglulu uint8_t reg_scp_ddr_en_mask_b; 217*91f16700Schasinglulu /* [10] */ 218*91f16700Schasinglulu uint8_t reg_audio_dsp_srcclkena_mask_b; 219*91f16700Schasinglulu /* [11] */ 220*91f16700Schasinglulu uint8_t reg_audio_dsp_infra_req_mask_b; 221*91f16700Schasinglulu /* [12] */ 222*91f16700Schasinglulu uint8_t reg_audio_dsp_apsrc_req_mask_b; 223*91f16700Schasinglulu /* [13] */ 224*91f16700Schasinglulu uint8_t reg_audio_dsp_vrf18_req_mask_b; 225*91f16700Schasinglulu /* [14] */ 226*91f16700Schasinglulu uint8_t reg_audio_dsp_ddr_en_mask_b; 227*91f16700Schasinglulu /* [15] */ 228*91f16700Schasinglulu uint8_t reg_apu_srcclkena_mask_b; 229*91f16700Schasinglulu /* [16] */ 230*91f16700Schasinglulu uint8_t reg_apu_infra_req_mask_b; 231*91f16700Schasinglulu /* [17] */ 232*91f16700Schasinglulu uint8_t reg_apu_apsrc_req_mask_b; 233*91f16700Schasinglulu /* [18] */ 234*91f16700Schasinglulu uint8_t reg_apu_vrf18_req_mask_b; 235*91f16700Schasinglulu /* [19] */ 236*91f16700Schasinglulu uint8_t reg_apu_ddr_en_mask_b; 237*91f16700Schasinglulu /* [20] */ 238*91f16700Schasinglulu uint8_t reg_cpueb_srcclkena_mask_b; 239*91f16700Schasinglulu /* [21] */ 240*91f16700Schasinglulu uint8_t reg_cpueb_infra_req_mask_b; 241*91f16700Schasinglulu /* [22] */ 242*91f16700Schasinglulu uint8_t reg_cpueb_apsrc_req_mask_b; 243*91f16700Schasinglulu /* [23] */ 244*91f16700Schasinglulu uint8_t reg_cpueb_vrf18_req_mask_b; 245*91f16700Schasinglulu /* [24] */ 246*91f16700Schasinglulu uint8_t reg_cpueb_ddr_en_mask_b; 247*91f16700Schasinglulu /* [25] */ 248*91f16700Schasinglulu uint8_t reg_bak_psri_srcclkena_mask_b; 249*91f16700Schasinglulu /* [26] */ 250*91f16700Schasinglulu uint8_t reg_bak_psri_infra_req_mask_b; 251*91f16700Schasinglulu /* [27] */ 252*91f16700Schasinglulu uint8_t reg_bak_psri_apsrc_req_mask_b; 253*91f16700Schasinglulu /* [28] */ 254*91f16700Schasinglulu uint8_t reg_bak_psri_vrf18_req_mask_b; 255*91f16700Schasinglulu /* [29] */ 256*91f16700Schasinglulu uint8_t reg_bak_psri_ddr_en_mask_b; 257*91f16700Schasinglulu /* [30] */ 258*91f16700Schasinglulu uint8_t reg_cam_ddren_req_mask_b; 259*91f16700Schasinglulu /* [31] */ 260*91f16700Schasinglulu uint8_t reg_img_ddren_req_mask_b; 261*91f16700Schasinglulu 262*91f16700Schasinglulu /* SPM_SRC2_MASK */ 263*91f16700Schasinglulu /* [0] */ 264*91f16700Schasinglulu uint8_t reg_msdc0_srcclkena_mask_b; 265*91f16700Schasinglulu /* [1] */ 266*91f16700Schasinglulu uint8_t reg_msdc0_infra_req_mask_b; 267*91f16700Schasinglulu /* [2] */ 268*91f16700Schasinglulu uint8_t reg_msdc0_apsrc_req_mask_b; 269*91f16700Schasinglulu /* [3] */ 270*91f16700Schasinglulu uint8_t reg_msdc0_vrf18_req_mask_b; 271*91f16700Schasinglulu /* [4] */ 272*91f16700Schasinglulu uint8_t reg_msdc0_ddr_en_mask_b; 273*91f16700Schasinglulu /* [5] */ 274*91f16700Schasinglulu uint8_t reg_msdc1_srcclkena_mask_b; 275*91f16700Schasinglulu /* [6] */ 276*91f16700Schasinglulu uint8_t reg_msdc1_infra_req_mask_b; 277*91f16700Schasinglulu /* [7] */ 278*91f16700Schasinglulu uint8_t reg_msdc1_apsrc_req_mask_b; 279*91f16700Schasinglulu /* [8] */ 280*91f16700Schasinglulu uint8_t reg_msdc1_vrf18_req_mask_b; 281*91f16700Schasinglulu /* [9] */ 282*91f16700Schasinglulu uint8_t reg_msdc1_ddr_en_mask_b; 283*91f16700Schasinglulu /* [10] */ 284*91f16700Schasinglulu uint8_t reg_msdc2_srcclkena_mask_b; 285*91f16700Schasinglulu /* [11] */ 286*91f16700Schasinglulu uint8_t reg_msdc2_infra_req_mask_b; 287*91f16700Schasinglulu /* [12] */ 288*91f16700Schasinglulu uint8_t reg_msdc2_apsrc_req_mask_b; 289*91f16700Schasinglulu /* [13] */ 290*91f16700Schasinglulu uint8_t reg_msdc2_vrf18_req_mask_b; 291*91f16700Schasinglulu /* [14] */ 292*91f16700Schasinglulu uint8_t reg_msdc2_ddr_en_mask_b; 293*91f16700Schasinglulu /* [15] */ 294*91f16700Schasinglulu uint8_t reg_ufs_srcclkena_mask_b; 295*91f16700Schasinglulu /* [16] */ 296*91f16700Schasinglulu uint8_t reg_ufs_infra_req_mask_b; 297*91f16700Schasinglulu /* [17] */ 298*91f16700Schasinglulu uint8_t reg_ufs_apsrc_req_mask_b; 299*91f16700Schasinglulu /* [18] */ 300*91f16700Schasinglulu uint8_t reg_ufs_vrf18_req_mask_b; 301*91f16700Schasinglulu /* [19] */ 302*91f16700Schasinglulu uint8_t reg_ufs_ddr_en_mask_b; 303*91f16700Schasinglulu /* [20] */ 304*91f16700Schasinglulu uint8_t reg_usb_srcclkena_mask_b; 305*91f16700Schasinglulu /* [21] */ 306*91f16700Schasinglulu uint8_t reg_usb_infra_req_mask_b; 307*91f16700Schasinglulu /* [22] */ 308*91f16700Schasinglulu uint8_t reg_usb_apsrc_req_mask_b; 309*91f16700Schasinglulu /* [23] */ 310*91f16700Schasinglulu uint8_t reg_usb_vrf18_req_mask_b; 311*91f16700Schasinglulu /* [24] */ 312*91f16700Schasinglulu uint8_t reg_usb_ddr_en_mask_b; 313*91f16700Schasinglulu /* [25] */ 314*91f16700Schasinglulu uint8_t reg_pextp_p0_srcclkena_mask_b; 315*91f16700Schasinglulu /* [26] */ 316*91f16700Schasinglulu uint8_t reg_pextp_p0_infra_req_mask_b; 317*91f16700Schasinglulu /* [27] */ 318*91f16700Schasinglulu uint8_t reg_pextp_p0_apsrc_req_mask_b; 319*91f16700Schasinglulu /* [28] */ 320*91f16700Schasinglulu uint8_t reg_pextp_p0_vrf18_req_mask_b; 321*91f16700Schasinglulu /* [29] */ 322*91f16700Schasinglulu uint8_t reg_pextp_p0_ddr_en_mask_b; 323*91f16700Schasinglulu 324*91f16700Schasinglulu /* SPM_SRC3_MASK */ 325*91f16700Schasinglulu /* [0] */ 326*91f16700Schasinglulu uint8_t reg_pextp_p1_srcclkena_mask_b; 327*91f16700Schasinglulu /* [1] */ 328*91f16700Schasinglulu uint8_t reg_pextp_p1_infra_req_mask_b; 329*91f16700Schasinglulu /* [2] */ 330*91f16700Schasinglulu uint8_t reg_pextp_p1_apsrc_req_mask_b; 331*91f16700Schasinglulu /* [3] */ 332*91f16700Schasinglulu uint8_t reg_pextp_p1_vrf18_req_mask_b; 333*91f16700Schasinglulu /* [4] */ 334*91f16700Schasinglulu uint8_t reg_pextp_p1_ddr_en_mask_b; 335*91f16700Schasinglulu /* [5] */ 336*91f16700Schasinglulu uint8_t reg_gce0_infra_req_mask_b; 337*91f16700Schasinglulu /* [6] */ 338*91f16700Schasinglulu uint8_t reg_gce0_apsrc_req_mask_b; 339*91f16700Schasinglulu /* [7] */ 340*91f16700Schasinglulu uint8_t reg_gce0_vrf18_req_mask_b; 341*91f16700Schasinglulu /* [8] */ 342*91f16700Schasinglulu uint8_t reg_gce0_ddr_en_mask_b; 343*91f16700Schasinglulu /* [9] */ 344*91f16700Schasinglulu uint8_t reg_gce1_infra_req_mask_b; 345*91f16700Schasinglulu /* [10] */ 346*91f16700Schasinglulu uint8_t reg_gce1_apsrc_req_mask_b; 347*91f16700Schasinglulu /* [11] */ 348*91f16700Schasinglulu uint8_t reg_gce1_vrf18_req_mask_b; 349*91f16700Schasinglulu /* [12] */ 350*91f16700Schasinglulu uint8_t reg_gce1_ddr_en_mask_b; 351*91f16700Schasinglulu /* [13] */ 352*91f16700Schasinglulu uint8_t reg_spm_srcclkena_reserved_mask_b; 353*91f16700Schasinglulu /* [14] */ 354*91f16700Schasinglulu uint8_t reg_spm_infra_req_reserved_mask_b; 355*91f16700Schasinglulu /* [15] */ 356*91f16700Schasinglulu uint8_t reg_spm_apsrc_req_reserved_mask_b; 357*91f16700Schasinglulu /* [16] */ 358*91f16700Schasinglulu uint8_t reg_spm_vrf18_req_reserved_mask_b; 359*91f16700Schasinglulu /* [17] */ 360*91f16700Schasinglulu uint8_t reg_spm_ddr_en_reserved_mask_b; 361*91f16700Schasinglulu /* [18] */ 362*91f16700Schasinglulu uint8_t reg_disp0_apsrc_req_mask_b; 363*91f16700Schasinglulu /* [19] */ 364*91f16700Schasinglulu uint8_t reg_disp0_ddr_en_mask_b; 365*91f16700Schasinglulu /* [20] */ 366*91f16700Schasinglulu uint8_t reg_disp1_apsrc_req_mask_b; 367*91f16700Schasinglulu /* [21] */ 368*91f16700Schasinglulu uint8_t reg_disp1_ddr_en_mask_b; 369*91f16700Schasinglulu /* [22] */ 370*91f16700Schasinglulu uint8_t reg_disp2_apsrc_req_mask_b; 371*91f16700Schasinglulu /* [23] */ 372*91f16700Schasinglulu uint8_t reg_disp2_ddr_en_mask_b; 373*91f16700Schasinglulu /* [24] */ 374*91f16700Schasinglulu uint8_t reg_disp3_apsrc_req_mask_b; 375*91f16700Schasinglulu /* [25] */ 376*91f16700Schasinglulu uint8_t reg_disp3_ddr_en_mask_b; 377*91f16700Schasinglulu /* [26] */ 378*91f16700Schasinglulu uint8_t reg_infrasys_apsrc_req_mask_b; 379*91f16700Schasinglulu /* [27] */ 380*91f16700Schasinglulu uint8_t reg_infrasys_ddr_en_mask_b; 381*91f16700Schasinglulu /* [28] */ 382*91f16700Schasinglulu uint8_t reg_cg_check_srcclkena_mask_b; 383*91f16700Schasinglulu /* [29] */ 384*91f16700Schasinglulu uint8_t reg_cg_check_apsrc_req_mask_b; 385*91f16700Schasinglulu /* [30] */ 386*91f16700Schasinglulu uint8_t reg_cg_check_vrf18_req_mask_b; 387*91f16700Schasinglulu /* [31] */ 388*91f16700Schasinglulu uint8_t reg_cg_check_ddr_en_mask_b; 389*91f16700Schasinglulu 390*91f16700Schasinglulu /* SPM_SRC4_MASK */ 391*91f16700Schasinglulu /* [8:0] */ 392*91f16700Schasinglulu uint32_t reg_mcusys_merge_apsrc_req_mask_b; 393*91f16700Schasinglulu /* [17:9] */ 394*91f16700Schasinglulu uint32_t reg_mcusys_merge_ddr_en_mask_b; 395*91f16700Schasinglulu /* [19:18] */ 396*91f16700Schasinglulu uint8_t reg_dramc_md32_infra_req_mask_b; 397*91f16700Schasinglulu /* [21:20] */ 398*91f16700Schasinglulu uint8_t reg_dramc_md32_vrf18_req_mask_b; 399*91f16700Schasinglulu /* [23:22] */ 400*91f16700Schasinglulu uint8_t reg_dramc_md32_ddr_en_mask_b; 401*91f16700Schasinglulu /* [24] */ 402*91f16700Schasinglulu uint8_t reg_dvfsrc_event_trigger_mask_b; 403*91f16700Schasinglulu 404*91f16700Schasinglulu /* SPM_WAKEUP_EVENT_MASK2 */ 405*91f16700Schasinglulu /* [3:0] */ 406*91f16700Schasinglulu uint8_t reg_sc_sw2spm_wakeup_mask_b; 407*91f16700Schasinglulu /* [4] */ 408*91f16700Schasinglulu uint8_t reg_sc_adsp2spm_wakeup_mask_b; 409*91f16700Schasinglulu /* [8:5] */ 410*91f16700Schasinglulu uint8_t reg_sc_sspm2spm_wakeup_mask_b; 411*91f16700Schasinglulu /* [9] */ 412*91f16700Schasinglulu uint8_t reg_sc_scp2spm_wakeup_mask_b; 413*91f16700Schasinglulu /* [10] */ 414*91f16700Schasinglulu uint8_t reg_csyspwrup_ack_mask; 415*91f16700Schasinglulu /* [11] */ 416*91f16700Schasinglulu uint8_t reg_csyspwrup_req_mask; 417*91f16700Schasinglulu 418*91f16700Schasinglulu /* SPM_WAKEUP_EVENT_MASK */ 419*91f16700Schasinglulu /* [31:0] */ 420*91f16700Schasinglulu uint32_t reg_wakeup_event_mask; 421*91f16700Schasinglulu 422*91f16700Schasinglulu /* SPM_WAKEUP_EVENT_EXT_MASK */ 423*91f16700Schasinglulu /* [31:0] */ 424*91f16700Schasinglulu uint32_t reg_ext_wakeup_event_mask; 425*91f16700Schasinglulu }; 426*91f16700Schasinglulu 427*91f16700Schasinglulu /* code gen by spm_pwr_ctrl_atf.pl, need struct pwr_ctrl */ 428*91f16700Schasinglulu enum pwr_ctrl_enum { 429*91f16700Schasinglulu PW_PCM_FLAGS, 430*91f16700Schasinglulu PW_PCM_FLAGS_CUST, 431*91f16700Schasinglulu PW_PCM_FLAGS_CUST_SET, 432*91f16700Schasinglulu PW_PCM_FLAGS_CUST_CLR, 433*91f16700Schasinglulu PW_PCM_FLAGS1, 434*91f16700Schasinglulu PW_PCM_FLAGS1_CUST, 435*91f16700Schasinglulu PW_PCM_FLAGS1_CUST_SET, 436*91f16700Schasinglulu PW_PCM_FLAGS1_CUST_CLR, 437*91f16700Schasinglulu PW_TIMER_VAL, 438*91f16700Schasinglulu PW_TIMER_VAL_CUST, 439*91f16700Schasinglulu PW_TIMER_VAL_RAMP_EN, 440*91f16700Schasinglulu PW_TIMER_VAL_RAMP_EN_SEC, 441*91f16700Schasinglulu PW_WAKE_SRC, 442*91f16700Schasinglulu PW_WAKE_SRC_CUST, 443*91f16700Schasinglulu PW_WDT_DISABLE, 444*91f16700Schasinglulu 445*91f16700Schasinglulu /* SPM_AP_STANDBY_CON */ 446*91f16700Schasinglulu PW_REG_WFI_OP, 447*91f16700Schasinglulu PW_REG_WFI_TYPE, 448*91f16700Schasinglulu PW_REG_MP0_CPUTOP_IDLE_MASK, 449*91f16700Schasinglulu PW_REG_MP1_CPUTOP_IDLE_MASK, 450*91f16700Schasinglulu PW_REG_MCUSYS_IDLE_MASK, 451*91f16700Schasinglulu PW_REG_MD_APSRC_1_SEL, 452*91f16700Schasinglulu PW_REG_MD_APSRC_0_SEL, 453*91f16700Schasinglulu PW_REG_CONN_APSRC_SEL, 454*91f16700Schasinglulu 455*91f16700Schasinglulu /* SPM_SRC_REQ */ 456*91f16700Schasinglulu PW_REG_SPM_APSRC_REQ, 457*91f16700Schasinglulu PW_REG_SPM_F26M_REQ, 458*91f16700Schasinglulu PW_REG_SPM_INFRA_REQ, 459*91f16700Schasinglulu PW_REG_SPM_VRF18_REQ, 460*91f16700Schasinglulu PW_REG_SPM_DDR_EN_REQ, 461*91f16700Schasinglulu PW_REG_SPM_DVFS_REQ, 462*91f16700Schasinglulu PW_REG_SPM_SW_MAILBOX_REQ, 463*91f16700Schasinglulu PW_REG_SPM_SSPM_MAILBOX_REQ, 464*91f16700Schasinglulu PW_REG_SPM_ADSP_MAILBOX_REQ, 465*91f16700Schasinglulu PW_REG_SPM_SCP_MAILBOX_REQ, 466*91f16700Schasinglulu 467*91f16700Schasinglulu /* SPM_SRC_MASK */ 468*91f16700Schasinglulu PW_REG_SSPM_SRCCLKENA_0_MASK_B, 469*91f16700Schasinglulu PW_REG_SSPM_INFRA_REQ_0_MASK_B, 470*91f16700Schasinglulu PW_REG_SSPM_APSRC_REQ_0_MASK_B, 471*91f16700Schasinglulu PW_REG_SSPM_VRF18_REQ_0_MASK_B, 472*91f16700Schasinglulu PW_REG_SSPM_DDR_EN_0_MASK_B, 473*91f16700Schasinglulu PW_REG_SCP_SRCCLKENA_MASK_B, 474*91f16700Schasinglulu PW_REG_SCP_INFRA_REQ_MASK_B, 475*91f16700Schasinglulu PW_REG_SCP_APSRC_REQ_MASK_B, 476*91f16700Schasinglulu PW_REG_SCP_VRF18_REQ_MASK_B, 477*91f16700Schasinglulu PW_REG_SCP_DDR_EN_MASK_B, 478*91f16700Schasinglulu PW_REG_AUDIO_DSP_SRCCLKENA_MASK_B, 479*91f16700Schasinglulu PW_REG_AUDIO_DSP_INFRA_REQ_MASK_B, 480*91f16700Schasinglulu PW_REG_AUDIO_DSP_APSRC_REQ_MASK_B, 481*91f16700Schasinglulu PW_REG_AUDIO_DSP_VRF18_REQ_MASK_B, 482*91f16700Schasinglulu PW_REG_AUDIO_DSP_DDR_EN_MASK_B, 483*91f16700Schasinglulu PW_REG_APU_SRCCLKENA_MASK_B, 484*91f16700Schasinglulu PW_REG_APU_INFRA_REQ_MASK_B, 485*91f16700Schasinglulu PW_REG_APU_APSRC_REQ_MASK_B, 486*91f16700Schasinglulu PW_REG_APU_VRF18_REQ_MASK_B, 487*91f16700Schasinglulu PW_REG_APU_DDR_EN_MASK_B, 488*91f16700Schasinglulu PW_REG_CPUEB_SRCCLKENA_MASK_B, 489*91f16700Schasinglulu PW_REG_CPUEB_INFRA_REQ_MASK_B, 490*91f16700Schasinglulu PW_REG_CPUEB_APSRC_REQ_MASK_B, 491*91f16700Schasinglulu PW_REG_CPUEB_VRF18_REQ_MASK_B, 492*91f16700Schasinglulu PW_REG_CPUEB_DDR_EN_MASK_B, 493*91f16700Schasinglulu PW_REG_BAK_PSRI_SRCCLKENA_MASK_B, 494*91f16700Schasinglulu PW_REG_BAK_PSRI_INFRA_REQ_MASK_B, 495*91f16700Schasinglulu PW_REG_BAK_PSRI_APSRC_REQ_MASK_B, 496*91f16700Schasinglulu PW_REG_BAK_PSRI_VRF18_REQ_MASK_B, 497*91f16700Schasinglulu PW_REG_BAK_PSRI_DDR_EN_MASK_B, 498*91f16700Schasinglulu PW_REG_CAM_DDREN_REQ_MASK_B, 499*91f16700Schasinglulu PW_REG_IMG_DDREN_REQ_MASK_B, 500*91f16700Schasinglulu 501*91f16700Schasinglulu /* SPM_SRC2_MASK */ 502*91f16700Schasinglulu PW_REG_MSDC0_SRCCLKENA_MASK_B, 503*91f16700Schasinglulu PW_REG_MSDC0_INFRA_REQ_MASK_B, 504*91f16700Schasinglulu PW_REG_MSDC0_APSRC_REQ_MASK_B, 505*91f16700Schasinglulu PW_REG_MSDC0_VRF18_REQ_MASK_B, 506*91f16700Schasinglulu PW_REG_MSDC0_DDR_EN_MASK_B, 507*91f16700Schasinglulu PW_REG_MSDC1_SRCCLKENA_MASK_B, 508*91f16700Schasinglulu PW_REG_MSDC1_INFRA_REQ_MASK_B, 509*91f16700Schasinglulu PW_REG_MSDC1_APSRC_REQ_MASK_B, 510*91f16700Schasinglulu PW_REG_MSDC1_VRF18_REQ_MASK_B, 511*91f16700Schasinglulu PW_REG_MSDC1_DDR_EN_MASK_B, 512*91f16700Schasinglulu PW_REG_MSDC2_SRCCLKENA_MASK_B, 513*91f16700Schasinglulu PW_REG_MSDC2_INFRA_REQ_MASK_B, 514*91f16700Schasinglulu PW_REG_MSDC2_APSRC_REQ_MASK_B, 515*91f16700Schasinglulu PW_REG_MSDC2_VRF18_REQ_MASK_B, 516*91f16700Schasinglulu PW_REG_MSDC2_DDR_EN_MASK_B, 517*91f16700Schasinglulu PW_REG_UFS_SRCCLKENA_MASK_B, 518*91f16700Schasinglulu PW_REG_UFS_INFRA_REQ_MASK_B, 519*91f16700Schasinglulu PW_REG_UFS_APSRC_REQ_MASK_B, 520*91f16700Schasinglulu PW_REG_UFS_VRF18_REQ_MASK_B, 521*91f16700Schasinglulu PW_REG_UFS_DDR_EN_MASK_B, 522*91f16700Schasinglulu PW_REG_USB_SRCCLKENA_MASK_B, 523*91f16700Schasinglulu PW_REG_USB_INFRA_REQ_MASK_B, 524*91f16700Schasinglulu PW_REG_USB_APSRC_REQ_MASK_B, 525*91f16700Schasinglulu PW_REG_USB_VRF18_REQ_MASK_B, 526*91f16700Schasinglulu PW_REG_USB_DDR_EN_MASK_B, 527*91f16700Schasinglulu PW_REG_PEXTP_P0_SRCCLKENA_MASK_B, 528*91f16700Schasinglulu PW_REG_PEXTP_P0_INFRA_REQ_MASK_B, 529*91f16700Schasinglulu PW_REG_PEXTP_P0_APSRC_REQ_MASK_B, 530*91f16700Schasinglulu PW_REG_PEXTP_P0_VRF18_REQ_MASK_B, 531*91f16700Schasinglulu PW_REG_PEXTP_P0_DDR_EN_MASK_B, 532*91f16700Schasinglulu 533*91f16700Schasinglulu /* SPM_SRC3_MASK */ 534*91f16700Schasinglulu PW_REG_PEXTP_P1_SRCCLKENA_MASK_B, 535*91f16700Schasinglulu PW_REG_PEXTP_P1_INFRA_REQ_MASK_B, 536*91f16700Schasinglulu PW_REG_PEXTP_P1_APSRC_REQ_MASK_B, 537*91f16700Schasinglulu PW_REG_PEXTP_P1_VRF18_REQ_MASK_B, 538*91f16700Schasinglulu PW_REG_PEXTP_P1_DDR_EN_MASK_B, 539*91f16700Schasinglulu PW_REG_GCE0_INFRA_REQ_MASK_B, 540*91f16700Schasinglulu PW_REG_GCE0_APSRC_REQ_MASK_B, 541*91f16700Schasinglulu PW_REG_GCE0_VRF18_REQ_MASK_B, 542*91f16700Schasinglulu PW_REG_GCE0_DDR_EN_MASK_B, 543*91f16700Schasinglulu PW_REG_GCE1_INFRA_REQ_MASK_B, 544*91f16700Schasinglulu PW_REG_GCE1_APSRC_REQ_MASK_B, 545*91f16700Schasinglulu PW_REG_GCE1_VRF18_REQ_MASK_B, 546*91f16700Schasinglulu PW_REG_GCE1_DDR_EN_MASK_B, 547*91f16700Schasinglulu PW_REG_SPM_SRCCLKENA_RESERVED_MASK_B, 548*91f16700Schasinglulu PW_REG_SPM_INFRA_REQ_RESERVED_MASK_B, 549*91f16700Schasinglulu PW_REG_SPM_APSRC_REQ_RESERVED_MASK_B, 550*91f16700Schasinglulu PW_REG_SPM_VRF18_REQ_RESERVED_MASK_B, 551*91f16700Schasinglulu PW_REG_SPM_DDR_EN_RESERVED_MASK_B, 552*91f16700Schasinglulu PW_REG_DISP0_APSRC_REQ_MASK_B, 553*91f16700Schasinglulu PW_REG_DISP0_DDR_EN_MASK_B, 554*91f16700Schasinglulu PW_REG_DISP1_APSRC_REQ_MASK_B, 555*91f16700Schasinglulu PW_REG_DISP1_DDR_EN_MASK_B, 556*91f16700Schasinglulu PW_REG_DISP2_APSRC_REQ_MASK_B, 557*91f16700Schasinglulu PW_REG_DISP2_DDR_EN_MASK_B, 558*91f16700Schasinglulu PW_REG_DISP3_APSRC_REQ_MASK_B, 559*91f16700Schasinglulu PW_REG_DISP3_DDR_EN_MASK_B, 560*91f16700Schasinglulu PW_REG_INFRASYS_APSRC_REQ_MASK_B, 561*91f16700Schasinglulu PW_REG_INFRASYS_DDR_EN_MASK_B, 562*91f16700Schasinglulu PW_REG_CG_CHECK_SRCCLKENA_MASK_B, 563*91f16700Schasinglulu PW_REG_CG_CHECK_APSRC_REQ_MASK_B, 564*91f16700Schasinglulu PW_REG_CG_CHECK_VRF18_REQ_MASK_B, 565*91f16700Schasinglulu PW_REG_CG_CHECK_DDR_EN_MASK_B, 566*91f16700Schasinglulu 567*91f16700Schasinglulu /* SPM_SRC4_MASK */ 568*91f16700Schasinglulu PW_REG_MCUSYS_MERGE_APSRC_REQ_MASK_B, 569*91f16700Schasinglulu PW_REG_MCUSYS_MERGE_DDR_EN_MASK_B, 570*91f16700Schasinglulu PW_REG_DRAMC_MD32_INFRA_REQ_MASK_B, 571*91f16700Schasinglulu PW_REG_DRAMC_MD32_VRF18_REQ_MASK_B, 572*91f16700Schasinglulu PW_REG_DRAMC_MD32_DDR_EN_MASK_B, 573*91f16700Schasinglulu PW_REG_DVFSRC_EVENT_TRIGGER_MASK_B, 574*91f16700Schasinglulu 575*91f16700Schasinglulu /* SPM_WAKEUP_EVENT_MASK2 */ 576*91f16700Schasinglulu PW_REG_SC_SW2SPM_WAKEUP_MASK_B, 577*91f16700Schasinglulu PW_REG_SC_ADSP2SPM_WAKEUP_MASK_B, 578*91f16700Schasinglulu PW_REG_SC_SSPM2SPM_WAKEUP_MASK_B, 579*91f16700Schasinglulu PW_REG_SC_SCP2SPM_WAKEUP_MASK_B, 580*91f16700Schasinglulu PW_REG_CSYSPWRUP_ACK_MASK, 581*91f16700Schasinglulu PW_REG_CSYSPWRUP_REQ_MASK, 582*91f16700Schasinglulu 583*91f16700Schasinglulu /* SPM_WAKEUP_EVENT_MASK */ 584*91f16700Schasinglulu PW_REG_WAKEUP_EVENT_MASK, 585*91f16700Schasinglulu 586*91f16700Schasinglulu /* SPM_WAKEUP_EVENT_EXT_MASK */ 587*91f16700Schasinglulu PW_REG_EXT_WAKEUP_EVENT_MASK, 588*91f16700Schasinglulu PW_MAX_COUNT, 589*91f16700Schasinglulu }; 590*91f16700Schasinglulu 591*91f16700Schasinglulu /* spm_internal.c internal status */ 592*91f16700Schasinglulu #define SPM_INTERNAL_STATUS_HW_S1 BIT(0) 593*91f16700Schasinglulu #define SPM_ACK_CHK_3_CON_HW_MODE_TRIG (0x800) 594*91f16700Schasinglulu /* BIT[0]: SW_EN, BIT[4]: STA_EN, BIT[8]: HW_EN */ 595*91f16700Schasinglulu #define SPM_ACK_CHK_3_CON_EN (0x110) 596*91f16700Schasinglulu #define SPM_ACK_CHK_3_CON_CLR_ALL (0x2) 597*91f16700Schasinglulu /* BIT[15]: RESULT */ 598*91f16700Schasinglulu #define SPM_ACK_CHK_3_CON_RESULT (0x8000) 599*91f16700Schasinglulu 600*91f16700Schasinglulu struct wake_status_trace_comm { 601*91f16700Schasinglulu uint32_t debug_flag; /* PCM_WDT_LATCH_SPARE_0 */ 602*91f16700Schasinglulu uint32_t debug_flag1; /* PCM_WDT_LATCH_SPARE_1 */ 603*91f16700Schasinglulu uint32_t timer_out; /* SPM_SW_RSV_6*/ 604*91f16700Schasinglulu uint32_t b_sw_flag0; /* SPM_SW_RSV_7 */ 605*91f16700Schasinglulu uint32_t b_sw_flag1; /* SPM_SW_RSV_7 */ 606*91f16700Schasinglulu uint32_t r12; /* SPM_SW_RSV_0 */ 607*91f16700Schasinglulu uint32_t r13; /* PCM_REG13_DATA */ 608*91f16700Schasinglulu uint32_t req_sta0; /* SRC_REQ_STA_0 */ 609*91f16700Schasinglulu uint32_t req_sta1; /* SRC_REQ_STA_1 */ 610*91f16700Schasinglulu uint32_t req_sta2; /* SRC_REQ_STA_2 */ 611*91f16700Schasinglulu uint32_t req_sta3; /* SRC_REQ_STA_3 */ 612*91f16700Schasinglulu uint32_t req_sta4; /* SRC_REQ_STA_4 */ 613*91f16700Schasinglulu uint32_t raw_sta; /* SPM_WAKEUP_STA */ 614*91f16700Schasinglulu uint32_t times_h; /* timestamp high bits */ 615*91f16700Schasinglulu uint32_t times_l; /* timestamp low bits */ 616*91f16700Schasinglulu uint32_t resumetime; /* timestamp low bits */ 617*91f16700Schasinglulu }; 618*91f16700Schasinglulu 619*91f16700Schasinglulu struct wake_status_trace { 620*91f16700Schasinglulu struct wake_status_trace_comm comm; 621*91f16700Schasinglulu }; 622*91f16700Schasinglulu 623*91f16700Schasinglulu struct wake_status { 624*91f16700Schasinglulu struct wake_status_trace tr; 625*91f16700Schasinglulu uint32_t r12_ext; /* SPM_WAKEUP_EXT_STA */ 626*91f16700Schasinglulu uint32_t raw_ext_sta; /* SPM_WAKEUP_EXT_STA */ 627*91f16700Schasinglulu uint32_t md32pcm_wakeup_sta; /* MD32PCM_WAKEUP_STA */ 628*91f16700Schasinglulu uint32_t md32pcm_event_sta; /* MD32PCM_EVENT_STA */ 629*91f16700Schasinglulu uint32_t wake_misc; /* SPM_SW_RSV_5 */ 630*91f16700Schasinglulu uint32_t idle_sta; /* SUBSYS_IDLE_STA */ 631*91f16700Schasinglulu uint32_t cg_check_sta; /* SPM_CG_CHECK_STA */ 632*91f16700Schasinglulu uint32_t sw_flag0; /* SPM_SW_FLAG_0 */ 633*91f16700Schasinglulu uint32_t sw_flag1; /* SPM_SW_FLAG_1 */ 634*91f16700Schasinglulu uint32_t isr; /* SPM_IRQ_STA */ 635*91f16700Schasinglulu uint32_t clk_settle; /* SPM_CLK_SETTLE */ 636*91f16700Schasinglulu uint32_t src_req; /* SPM_SRC_REQ */ 637*91f16700Schasinglulu uint32_t log_index; 638*91f16700Schasinglulu uint32_t is_abort; 639*91f16700Schasinglulu uint32_t rt_req_sta0; /* SPM_SW_RSV_2 */ 640*91f16700Schasinglulu uint32_t rt_req_sta1; /* SPM_SW_RSV_3 */ 641*91f16700Schasinglulu uint32_t rt_req_sta2; /* SPM_SW_RSV_4 */ 642*91f16700Schasinglulu uint32_t rt_req_sta3; /* SPM_SW_RSV_5 */ 643*91f16700Schasinglulu uint32_t rt_req_sta4; /* SPM_SW_RSV_6 */ 644*91f16700Schasinglulu }; 645*91f16700Schasinglulu 646*91f16700Schasinglulu struct spm_lp_scen { 647*91f16700Schasinglulu struct pcm_desc *pcmdesc; 648*91f16700Schasinglulu struct pwr_ctrl *pwrctrl; 649*91f16700Schasinglulu }; 650*91f16700Schasinglulu 651*91f16700Schasinglulu void __spm_set_cpu_status(unsigned int cpu); 652*91f16700Schasinglulu void __spm_src_req_update(const struct pwr_ctrl *pwrctrl, unsigned int resource_usage); 653*91f16700Schasinglulu void __spm_set_power_control(const struct pwr_ctrl *pwrctrl); 654*91f16700Schasinglulu void __spm_set_wakeup_event(const struct pwr_ctrl *pwrctrl); 655*91f16700Schasinglulu void __spm_set_pcm_flags(struct pwr_ctrl *pwrctrl); 656*91f16700Schasinglulu void __spm_send_cpu_wakeup_event(void); 657*91f16700Schasinglulu void __spm_get_wakeup_status(struct wake_status *wakesta, unsigned int ext_status); 658*91f16700Schasinglulu void __spm_clean_after_wakeup(void); 659*91f16700Schasinglulu wake_reason_t __spm_output_wake_reason(const struct wake_status *wakesta); 660*91f16700Schasinglulu void __spm_set_pcm_wdt(int en); 661*91f16700Schasinglulu void __spm_ext_int_wakeup_req_clr(void); 662*91f16700Schasinglulu void __spm_hw_s1_state_monitor(int en, unsigned int *status); 663*91f16700Schasinglulu 664*91f16700Schasinglulu static inline void spm_hw_s1_state_monitor_resume(void) 665*91f16700Schasinglulu { 666*91f16700Schasinglulu __spm_hw_s1_state_monitor(1, NULL); 667*91f16700Schasinglulu } 668*91f16700Schasinglulu 669*91f16700Schasinglulu static inline void spm_hw_s1_state_monitor_pause(unsigned int *status) 670*91f16700Schasinglulu { 671*91f16700Schasinglulu __spm_hw_s1_state_monitor(0, status); 672*91f16700Schasinglulu } 673*91f16700Schasinglulu 674*91f16700Schasinglulu void __spm_clean_before_wfi(void); 675*91f16700Schasinglulu 676*91f16700Schasinglulu #endif /* MT_SPM_INTERNAL */ 677