xref: /rk3399_ARM-atf/plat/mediatek/drivers/spm/mt8188/mt_spm_internal.h (revision 236c0bf0c49fe48d98e72cf9e31d43cb9034310a)
145d50759SJames Liao /*
245d50759SJames Liao  * Copyright (c) 2023, MediaTek Inc. All rights reserved.
345d50759SJames Liao  *
445d50759SJames Liao  * SPDX-License-Identifier: BSD-3-Clause
545d50759SJames Liao  */
645d50759SJames Liao 
745d50759SJames Liao #ifndef MT_SPM_INTERNAL_H
845d50759SJames Liao #define MT_SPM_INTERNAL_H
945d50759SJames Liao 
1045d50759SJames Liao #include <mt_spm.h>
1145d50759SJames Liao 
1245d50759SJames Liao /* PCM_WDT_VAL */
1345d50759SJames Liao #define PCM_WDT_TIMEOUT		(30 * 32768)	/* 30s */
1445d50759SJames Liao /* PCM_TIMER_VAL */
1545d50759SJames Liao #define PCM_TIMER_MAX		(0xffffffff - PCM_WDT_TIMEOUT)
1645d50759SJames Liao 
1745d50759SJames Liao /* PCM_PWR_IO_EN */
1845d50759SJames Liao #define PCM_PWRIO_EN_R0		BIT(0)
1945d50759SJames Liao #define PCM_PWRIO_EN_R7		BIT(7)
2045d50759SJames Liao #define PCM_RF_SYNC_R0		BIT(16)
2145d50759SJames Liao #define PCM_RF_SYNC_R6		BIT(22)
2245d50759SJames Liao #define PCM_RF_SYNC_R7		BIT(23)
2345d50759SJames Liao 
2445d50759SJames Liao /* SPM_SWINT */
2545d50759SJames Liao #define PCM_SW_INT0		BIT(0)
2645d50759SJames Liao #define PCM_SW_INT1		BIT(1)
2745d50759SJames Liao #define PCM_SW_INT2		BIT(2)
2845d50759SJames Liao #define PCM_SW_INT3		BIT(3)
2945d50759SJames Liao #define PCM_SW_INT4		BIT(4)
3045d50759SJames Liao #define PCM_SW_INT5		BIT(5)
3145d50759SJames Liao #define PCM_SW_INT6		BIT(6)
3245d50759SJames Liao #define PCM_SW_INT7		BIT(7)
3345d50759SJames Liao #define PCM_SW_INT8		BIT(8)
3445d50759SJames Liao #define PCM_SW_INT9		BIT(9)
3545d50759SJames Liao #define PCM_SW_INT_ALL		(PCM_SW_INT9 | PCM_SW_INT8 | PCM_SW_INT7 | \
3645d50759SJames Liao 				 PCM_SW_INT6 | PCM_SW_INT5 | PCM_SW_INT4 | \
3745d50759SJames Liao 				 PCM_SW_INT3 | PCM_SW_INT2 | PCM_SW_INT1 | \
3845d50759SJames Liao 				 PCM_SW_INT0)
3945d50759SJames Liao 
4045d50759SJames Liao /* SPM_AP_STANDBY_CON */
4145d50759SJames Liao #define WFI_OP_AND		(1U)
4245d50759SJames Liao #define WFI_OP_OR		(0U)
4345d50759SJames Liao 
4445d50759SJames Liao /* SPM_IRQ_MASK */
4545d50759SJames Liao #define ISRM_TWAM		BIT(2)
4645d50759SJames Liao #define ISRM_PCM_RETURN		BIT(3)
4745d50759SJames Liao #define ISRM_RET_IRQ0		BIT(8)
4845d50759SJames Liao #define ISRM_RET_IRQ1		BIT(9)
4945d50759SJames Liao #define ISRM_RET_IRQ2		BIT(10)
5045d50759SJames Liao #define ISRM_RET_IRQ3		BIT(11)
5145d50759SJames Liao #define ISRM_RET_IRQ4		BIT(12)
5245d50759SJames Liao #define ISRM_RET_IRQ5		BIT(13)
5345d50759SJames Liao #define ISRM_RET_IRQ6		BIT(14)
5445d50759SJames Liao #define ISRM_RET_IRQ7		BIT(15)
5545d50759SJames Liao #define ISRM_RET_IRQ8		BIT(16)
5645d50759SJames Liao #define ISRM_RET_IRQ9		BIT(17)
5745d50759SJames Liao #define ISRM_RET_IRQ_AUX	((ISRM_RET_IRQ9) | (ISRM_RET_IRQ8) | \
5845d50759SJames Liao 				 (ISRM_RET_IRQ7) | (ISRM_RET_IRQ6) | \
5945d50759SJames Liao 				 (ISRM_RET_IRQ5) | (ISRM_RET_IRQ4) | \
6045d50759SJames Liao 				 (ISRM_RET_IRQ3) | (ISRM_RET_IRQ2) | \
6145d50759SJames Liao 				 (ISRM_RET_IRQ1))
6245d50759SJames Liao #define ISRM_ALL_EXC_TWAM	ISRM_RET_IRQ_AUX
6345d50759SJames Liao #define ISRM_ALL		(ISRM_ALL_EXC_TWAM | ISRM_TWAM)
6445d50759SJames Liao 
6545d50759SJames Liao /* SPM_IRQ_STA */
6645d50759SJames Liao #define ISRS_TWAM		BIT(2)
6745d50759SJames Liao #define ISRS_PCM_RETURN		BIT(3)
6845d50759SJames Liao #define ISRC_TWAM		ISRS_TWAM
6945d50759SJames Liao #define ISRC_ALL_EXC_TWAM	ISRS_PCM_RETURN
7045d50759SJames Liao #define ISRC_ALL		(ISRC_ALL_EXC_TWAM | ISRC_TWAM)
7145d50759SJames Liao 
7245d50759SJames Liao /* SPM_WAKEUP_MISC */
7345d50759SJames Liao #define WAKE_MISC_GIC_WAKEUP			(0x3FF)
7445d50759SJames Liao #define WAKE_MISC_DVFSRC_IRQ			DVFSRC_IRQ_LSB
7545d50759SJames Liao #define WAKE_MISC_REG_CPU_WAKEUP		SPM_WAKEUP_MISC_REG_CPU_WAKEUP_LSB
7645d50759SJames Liao #define WAKE_MISC_PCM_TIMER_EVENT		PCM_TIMER_EVENT_LSB
7745d50759SJames Liao #define WAKE_MISC_TWAM_IRQ_B			TWAM_IRQ_B_LSB
7845d50759SJames Liao #define WAKE_MISC_PMSR_IRQ_B_SET0		PMSR_IRQ_B_SET0_LSB
7945d50759SJames Liao #define WAKE_MISC_PMSR_IRQ_B_SET1		PMSR_IRQ_B_SET1_LSB
8045d50759SJames Liao #define WAKE_MISC_PMSR_IRQ_B_SET2		PMSR_IRQ_B_SET2_LSB
8145d50759SJames Liao #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_0		SPM_ACK_CHK_WAKEUP_0_LSB
8245d50759SJames Liao #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_1		SPM_ACK_CHK_WAKEUP_1_LSB
8345d50759SJames Liao #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_2		SPM_ACK_CHK_WAKEUP_2_LSB
8445d50759SJames Liao #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_3		SPM_ACK_CHK_WAKEUP_3_LSB
8545d50759SJames Liao #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_ALL	SPM_ACK_CHK_WAKEUP_ALL_LSB
8645d50759SJames Liao #define WAKE_MISC_PMIC_IRQ_ACK			PMIC_IRQ_ACK_LSB
8745d50759SJames Liao #define WAKE_MISC_PMIC_SCP_IRQ			PMIC_SCP_IRQ_LSB
8845d50759SJames Liao 
8945d50759SJames Liao /* MD32PCM ADDR for SPM code fetch */
9045d50759SJames Liao #define MD32PCM_BASE			(SPM_BASE + 0x0A00)
9145d50759SJames Liao #define MD32PCM_CFGREG_SW_RSTN		(MD32PCM_BASE + 0x0000)
9245d50759SJames Liao #define MD32PCM_DMA0_SRC		(MD32PCM_BASE + 0x0200)
9345d50759SJames Liao #define MD32PCM_DMA0_DST		(MD32PCM_BASE + 0x0204)
9445d50759SJames Liao #define MD32PCM_DMA0_WPPT		(MD32PCM_BASE + 0x0208)
9545d50759SJames Liao #define MD32PCM_DMA0_WPTO		(MD32PCM_BASE + 0x020C)
9645d50759SJames Liao #define MD32PCM_DMA0_COUNT		(MD32PCM_BASE + 0x0210)
9745d50759SJames Liao #define MD32PCM_DMA0_CON		(MD32PCM_BASE + 0x0214)
9845d50759SJames Liao #define MD32PCM_DMA0_START		(MD32PCM_BASE + 0x0218)
9945d50759SJames Liao #define MD32PCM_DMA0_RLCT		(MD32PCM_BASE + 0x0224)
10045d50759SJames Liao #define MD32PCM_INTC_IRQ_RAW_STA	(MD32PCM_BASE + 0x033C)
10145d50759SJames Liao 
10245d50759SJames Liao /* ABORT MASK for DEBUG FOORTPRINT */
10345d50759SJames Liao #define DEBUG_ABORT_MASK (SPM_DBG_DEBUG_IDX_DRAM_SREF_ABORT_IN_APSRC | \
10445d50759SJames Liao 			  SPM_DBG_DEBUG_IDX_DRAM_SREF_ABORT_IN_DDREN)
10545d50759SJames Liao 
10645d50759SJames Liao #define DEBUG_ABORT_MASK_1 (SPM_DBG1_DEBUG_IDX_VRCXO_SLEEP_ABORT | \
10745d50759SJames Liao 			    SPM_DBG1_DEBUG_IDX_PWRAP_SLEEP_ACK_LOW_ABORT | \
10845d50759SJames Liao 			    SPM_DBG1_DEBUG_IDX_PWRAP_SLEEP_ACK_HIGH_ABORT | \
10945d50759SJames Liao 			    SPM_DBG1_DEBUG_IDX_EMI_SLP_IDLE_ABORT | \
11045d50759SJames Liao 			    SPM_DBG1_DEBUG_IDX_SCP_SLP_ACK_LOW_ABORT | \
11145d50759SJames Liao 			    SPM_DBG1_DEBUG_IDX_SCP_SLP_ACK_HIGH_ABORT | \
11245d50759SJames Liao 			    SPM_DBG1_DEBUG_IDX_SPM_DVFS_CMD_RDY_ABORT)
11345d50759SJames Liao 
11445d50759SJames Liao #define MCUPM_MBOX_WAKEUP_CPU (0x0C55FD10)
11545d50759SJames Liao 
11645d50759SJames Liao struct pcm_desc {
11745d50759SJames Liao 	const char *version;	/* PCM code version */
11845d50759SJames Liao 	uint32_t *base;		/* binary array base */
11945d50759SJames Liao 	uintptr_t base_dma;	/* dma addr of base */
12045d50759SJames Liao 	uint32_t pmem_words;
12145d50759SJames Liao 	uint32_t total_words;
12245d50759SJames Liao 	uint32_t pmem_start;
12345d50759SJames Liao 	uint32_t dmem_start;
12445d50759SJames Liao };
12545d50759SJames Liao 
12645d50759SJames Liao struct pwr_ctrl {
12745d50759SJames Liao 	/* for SPM */
12845d50759SJames Liao 	uint32_t pcm_flags;
12945d50759SJames Liao 	/* can override pcm_flags */
13045d50759SJames Liao 	uint32_t pcm_flags_cust;
13145d50759SJames Liao 	/* set bit of pcm_flags, after pcm_flags_cust */
13245d50759SJames Liao 	uint32_t pcm_flags_cust_set;
13345d50759SJames Liao 	/* clr bit of pcm_flags, after pcm_flags_cust */
13445d50759SJames Liao 	uint32_t pcm_flags_cust_clr;
13545d50759SJames Liao 	uint32_t pcm_flags1;
13645d50759SJames Liao 	/* can override pcm_flags1 */
13745d50759SJames Liao 	uint32_t pcm_flags1_cust;
13845d50759SJames Liao 	/* set bit of pcm_flags1, after pcm_flags1_cust */
13945d50759SJames Liao 	uint32_t pcm_flags1_cust_set;
14045d50759SJames Liao 	/* clr bit of pcm_flags1, after pcm_flags1_cust */
14145d50759SJames Liao 	uint32_t pcm_flags1_cust_clr;
14245d50759SJames Liao 	/* @ 1T 32K */
14345d50759SJames Liao 	uint32_t timer_val;
14445d50759SJames Liao 	/* @ 1T 32K, can override timer_val */
14545d50759SJames Liao 	uint32_t timer_val_cust;
14645d50759SJames Liao 	/* stress for dpidle */
14745d50759SJames Liao 	uint32_t timer_val_ramp_en;
14845d50759SJames Liao 	/* stress for suspend */
14945d50759SJames Liao 	uint32_t timer_val_ramp_en_sec;
15045d50759SJames Liao 	uint32_t wake_src;
15145d50759SJames Liao 	/* can override wake_src */
15245d50759SJames Liao 	uint32_t wake_src_cust;
15345d50759SJames Liao 	/* disable wdt in suspend */
15445d50759SJames Liao 	uint8_t wdt_disable;
15545d50759SJames Liao 
15645d50759SJames Liao 	/* SPM_AP_STANDBY_CON */
15745d50759SJames Liao 	/* [0] */
15845d50759SJames Liao 	uint8_t reg_wfi_op;
15945d50759SJames Liao 	/* [1] */
16045d50759SJames Liao 	uint8_t reg_wfi_type;
16145d50759SJames Liao 	/* [2] */
16245d50759SJames Liao 	uint8_t reg_mp0_cputop_idle_mask;
16345d50759SJames Liao 	/* [3] */
16445d50759SJames Liao 	uint8_t reg_mp1_cputop_idle_mask;
16545d50759SJames Liao 	/* [4] */
16645d50759SJames Liao 	uint8_t reg_mcusys_idle_mask;
16745d50759SJames Liao 	/* [25] */
16845d50759SJames Liao 	uint8_t reg_md_apsrc_1_sel;
16945d50759SJames Liao 	/* [26] */
17045d50759SJames Liao 	uint8_t reg_md_apsrc_0_sel;
17145d50759SJames Liao 	/* [29] */
17245d50759SJames Liao 	uint8_t reg_conn_apsrc_sel;
17345d50759SJames Liao 
17445d50759SJames Liao 	/* SPM_SRC_REQ */
17545d50759SJames Liao 	/* [0] */
17645d50759SJames Liao 	uint8_t reg_spm_apsrc_req;
17745d50759SJames Liao 	/* [1] */
17845d50759SJames Liao 	uint8_t reg_spm_f26m_req;
17945d50759SJames Liao 	/* [3] */
18045d50759SJames Liao 	uint8_t reg_spm_infra_req;
18145d50759SJames Liao 	/* [4] */
18245d50759SJames Liao 	uint8_t reg_spm_vrf18_req;
18345d50759SJames Liao 	/* [7] */
18445d50759SJames Liao 	uint8_t reg_spm_ddr_en_req;
18545d50759SJames Liao 	/* [8] */
18645d50759SJames Liao 	uint8_t reg_spm_dvfs_req;
18745d50759SJames Liao 	/* [9] */
18845d50759SJames Liao 	uint8_t reg_spm_sw_mailbox_req;
18945d50759SJames Liao 	/* [10] */
19045d50759SJames Liao 	uint8_t reg_spm_sspm_mailbox_req;
19145d50759SJames Liao 	/* [11] */
19245d50759SJames Liao 	uint8_t reg_spm_adsp_mailbox_req;
19345d50759SJames Liao 	/* [12] */
19445d50759SJames Liao 	uint8_t reg_spm_scp_mailbox_req;
19545d50759SJames Liao 
19645d50759SJames Liao 	/* SPM_SRC_MASK */
19745d50759SJames Liao 	/* [0] */
19845d50759SJames Liao 	uint8_t reg_sspm_srcclkena_0_mask_b;
19945d50759SJames Liao 	/* [1] */
20045d50759SJames Liao 	uint8_t reg_sspm_infra_req_0_mask_b;
20145d50759SJames Liao 	/* [2] */
20245d50759SJames Liao 	uint8_t reg_sspm_apsrc_req_0_mask_b;
20345d50759SJames Liao 	/* [3] */
20445d50759SJames Liao 	uint8_t reg_sspm_vrf18_req_0_mask_b;
20545d50759SJames Liao 	/* [4] */
20645d50759SJames Liao 	uint8_t reg_sspm_ddr_en_0_mask_b;
20745d50759SJames Liao 	/* [5] */
20845d50759SJames Liao 	uint8_t reg_scp_srcclkena_mask_b;
20945d50759SJames Liao 	/* [6] */
21045d50759SJames Liao 	uint8_t reg_scp_infra_req_mask_b;
21145d50759SJames Liao 	/* [7] */
21245d50759SJames Liao 	uint8_t reg_scp_apsrc_req_mask_b;
21345d50759SJames Liao 	/* [8] */
21445d50759SJames Liao 	uint8_t reg_scp_vrf18_req_mask_b;
21545d50759SJames Liao 	/* [9] */
21645d50759SJames Liao 	uint8_t reg_scp_ddr_en_mask_b;
21745d50759SJames Liao 	/* [10] */
21845d50759SJames Liao 	uint8_t reg_audio_dsp_srcclkena_mask_b;
21945d50759SJames Liao 	/* [11] */
22045d50759SJames Liao 	uint8_t reg_audio_dsp_infra_req_mask_b;
22145d50759SJames Liao 	/* [12] */
22245d50759SJames Liao 	uint8_t reg_audio_dsp_apsrc_req_mask_b;
22345d50759SJames Liao 	/* [13] */
22445d50759SJames Liao 	uint8_t reg_audio_dsp_vrf18_req_mask_b;
22545d50759SJames Liao 	/* [14] */
22645d50759SJames Liao 	uint8_t reg_audio_dsp_ddr_en_mask_b;
22745d50759SJames Liao 	/* [15] */
22845d50759SJames Liao 	uint8_t reg_apu_srcclkena_mask_b;
22945d50759SJames Liao 	/* [16] */
23045d50759SJames Liao 	uint8_t reg_apu_infra_req_mask_b;
23145d50759SJames Liao 	/* [17] */
23245d50759SJames Liao 	uint8_t reg_apu_apsrc_req_mask_b;
23345d50759SJames Liao 	/* [18] */
23445d50759SJames Liao 	uint8_t reg_apu_vrf18_req_mask_b;
23545d50759SJames Liao 	/* [19] */
23645d50759SJames Liao 	uint8_t reg_apu_ddr_en_mask_b;
23745d50759SJames Liao 	/* [20] */
23845d50759SJames Liao 	uint8_t reg_cpueb_srcclkena_mask_b;
23945d50759SJames Liao 	/* [21] */
24045d50759SJames Liao 	uint8_t reg_cpueb_infra_req_mask_b;
24145d50759SJames Liao 	/* [22] */
24245d50759SJames Liao 	uint8_t reg_cpueb_apsrc_req_mask_b;
24345d50759SJames Liao 	/* [23] */
24445d50759SJames Liao 	uint8_t reg_cpueb_vrf18_req_mask_b;
24545d50759SJames Liao 	/* [24] */
24645d50759SJames Liao 	uint8_t reg_cpueb_ddr_en_mask_b;
24745d50759SJames Liao 	/* [25] */
24845d50759SJames Liao 	uint8_t reg_bak_psri_srcclkena_mask_b;
24945d50759SJames Liao 	/* [26] */
25045d50759SJames Liao 	uint8_t reg_bak_psri_infra_req_mask_b;
25145d50759SJames Liao 	/* [27] */
25245d50759SJames Liao 	uint8_t reg_bak_psri_apsrc_req_mask_b;
25345d50759SJames Liao 	/* [28] */
25445d50759SJames Liao 	uint8_t reg_bak_psri_vrf18_req_mask_b;
25545d50759SJames Liao 	/* [29] */
25645d50759SJames Liao 	uint8_t reg_bak_psri_ddr_en_mask_b;
25745d50759SJames Liao 	/* [30] */
25845d50759SJames Liao 	uint8_t reg_cam_ddren_req_mask_b;
25945d50759SJames Liao 	/* [31] */
26045d50759SJames Liao 	uint8_t reg_img_ddren_req_mask_b;
26145d50759SJames Liao 
26245d50759SJames Liao 	/* SPM_SRC2_MASK */
26345d50759SJames Liao 	/* [0] */
26445d50759SJames Liao 	uint8_t reg_msdc0_srcclkena_mask_b;
26545d50759SJames Liao 	/* [1] */
26645d50759SJames Liao 	uint8_t reg_msdc0_infra_req_mask_b;
26745d50759SJames Liao 	/* [2] */
26845d50759SJames Liao 	uint8_t reg_msdc0_apsrc_req_mask_b;
26945d50759SJames Liao 	/* [3] */
27045d50759SJames Liao 	uint8_t reg_msdc0_vrf18_req_mask_b;
27145d50759SJames Liao 	/* [4] */
27245d50759SJames Liao 	uint8_t reg_msdc0_ddr_en_mask_b;
27345d50759SJames Liao 	/* [5] */
27445d50759SJames Liao 	uint8_t reg_msdc1_srcclkena_mask_b;
27545d50759SJames Liao 	/* [6] */
27645d50759SJames Liao 	uint8_t reg_msdc1_infra_req_mask_b;
27745d50759SJames Liao 	/* [7] */
27845d50759SJames Liao 	uint8_t reg_msdc1_apsrc_req_mask_b;
27945d50759SJames Liao 	/* [8] */
28045d50759SJames Liao 	uint8_t reg_msdc1_vrf18_req_mask_b;
28145d50759SJames Liao 	/* [9] */
28245d50759SJames Liao 	uint8_t reg_msdc1_ddr_en_mask_b;
28345d50759SJames Liao 	/* [10] */
28445d50759SJames Liao 	uint8_t reg_msdc2_srcclkena_mask_b;
28545d50759SJames Liao 	/* [11] */
28645d50759SJames Liao 	uint8_t reg_msdc2_infra_req_mask_b;
28745d50759SJames Liao 	/* [12] */
28845d50759SJames Liao 	uint8_t reg_msdc2_apsrc_req_mask_b;
28945d50759SJames Liao 	/* [13] */
29045d50759SJames Liao 	uint8_t reg_msdc2_vrf18_req_mask_b;
29145d50759SJames Liao 	/* [14] */
29245d50759SJames Liao 	uint8_t reg_msdc2_ddr_en_mask_b;
29345d50759SJames Liao 	/* [15] */
29445d50759SJames Liao 	uint8_t reg_ufs_srcclkena_mask_b;
29545d50759SJames Liao 	/* [16] */
29645d50759SJames Liao 	uint8_t reg_ufs_infra_req_mask_b;
29745d50759SJames Liao 	/* [17] */
29845d50759SJames Liao 	uint8_t reg_ufs_apsrc_req_mask_b;
29945d50759SJames Liao 	/* [18] */
30045d50759SJames Liao 	uint8_t reg_ufs_vrf18_req_mask_b;
30145d50759SJames Liao 	/* [19] */
30245d50759SJames Liao 	uint8_t reg_ufs_ddr_en_mask_b;
30345d50759SJames Liao 	/* [20] */
30445d50759SJames Liao 	uint8_t reg_usb_srcclkena_mask_b;
30545d50759SJames Liao 	/* [21] */
30645d50759SJames Liao 	uint8_t reg_usb_infra_req_mask_b;
30745d50759SJames Liao 	/* [22] */
30845d50759SJames Liao 	uint8_t reg_usb_apsrc_req_mask_b;
30945d50759SJames Liao 	/* [23] */
31045d50759SJames Liao 	uint8_t reg_usb_vrf18_req_mask_b;
31145d50759SJames Liao 	/* [24] */
31245d50759SJames Liao 	uint8_t reg_usb_ddr_en_mask_b;
31345d50759SJames Liao 	/* [25] */
31445d50759SJames Liao 	uint8_t reg_pextp_p0_srcclkena_mask_b;
31545d50759SJames Liao 	/* [26] */
31645d50759SJames Liao 	uint8_t reg_pextp_p0_infra_req_mask_b;
31745d50759SJames Liao 	/* [27] */
31845d50759SJames Liao 	uint8_t reg_pextp_p0_apsrc_req_mask_b;
31945d50759SJames Liao 	/* [28] */
32045d50759SJames Liao 	uint8_t reg_pextp_p0_vrf18_req_mask_b;
32145d50759SJames Liao 	/* [29] */
32245d50759SJames Liao 	uint8_t reg_pextp_p0_ddr_en_mask_b;
32345d50759SJames Liao 
32445d50759SJames Liao 	/* SPM_SRC3_MASK */
32545d50759SJames Liao 	/* [0] */
32645d50759SJames Liao 	uint8_t reg_pextp_p1_srcclkena_mask_b;
32745d50759SJames Liao 	/* [1] */
32845d50759SJames Liao 	uint8_t reg_pextp_p1_infra_req_mask_b;
32945d50759SJames Liao 	/* [2] */
33045d50759SJames Liao 	uint8_t reg_pextp_p1_apsrc_req_mask_b;
33145d50759SJames Liao 	/* [3] */
33245d50759SJames Liao 	uint8_t reg_pextp_p1_vrf18_req_mask_b;
33345d50759SJames Liao 	/* [4] */
33445d50759SJames Liao 	uint8_t reg_pextp_p1_ddr_en_mask_b;
33545d50759SJames Liao 	/* [5] */
33645d50759SJames Liao 	uint8_t reg_gce0_infra_req_mask_b;
33745d50759SJames Liao 	/* [6] */
33845d50759SJames Liao 	uint8_t reg_gce0_apsrc_req_mask_b;
33945d50759SJames Liao 	/* [7] */
34045d50759SJames Liao 	uint8_t reg_gce0_vrf18_req_mask_b;
34145d50759SJames Liao 	/* [8] */
34245d50759SJames Liao 	uint8_t reg_gce0_ddr_en_mask_b;
34345d50759SJames Liao 	/* [9] */
34445d50759SJames Liao 	uint8_t reg_gce1_infra_req_mask_b;
34545d50759SJames Liao 	/* [10] */
34645d50759SJames Liao 	uint8_t reg_gce1_apsrc_req_mask_b;
34745d50759SJames Liao 	/* [11] */
34845d50759SJames Liao 	uint8_t reg_gce1_vrf18_req_mask_b;
34945d50759SJames Liao 	/* [12] */
35045d50759SJames Liao 	uint8_t reg_gce1_ddr_en_mask_b;
35145d50759SJames Liao 	/* [13] */
35245d50759SJames Liao 	uint8_t reg_spm_srcclkena_reserved_mask_b;
35345d50759SJames Liao 	/* [14] */
35445d50759SJames Liao 	uint8_t reg_spm_infra_req_reserved_mask_b;
35545d50759SJames Liao 	/* [15] */
35645d50759SJames Liao 	uint8_t reg_spm_apsrc_req_reserved_mask_b;
35745d50759SJames Liao 	/* [16] */
35845d50759SJames Liao 	uint8_t reg_spm_vrf18_req_reserved_mask_b;
35945d50759SJames Liao 	/* [17] */
36045d50759SJames Liao 	uint8_t reg_spm_ddr_en_reserved_mask_b;
36145d50759SJames Liao 	/* [18] */
36245d50759SJames Liao 	uint8_t reg_disp0_apsrc_req_mask_b;
36345d50759SJames Liao 	/* [19] */
36445d50759SJames Liao 	uint8_t reg_disp0_ddr_en_mask_b;
36545d50759SJames Liao 	/* [20] */
36645d50759SJames Liao 	uint8_t reg_disp1_apsrc_req_mask_b;
36745d50759SJames Liao 	/* [21] */
36845d50759SJames Liao 	uint8_t reg_disp1_ddr_en_mask_b;
36945d50759SJames Liao 	/* [22] */
37045d50759SJames Liao 	uint8_t reg_disp2_apsrc_req_mask_b;
37145d50759SJames Liao 	/* [23] */
37245d50759SJames Liao 	uint8_t reg_disp2_ddr_en_mask_b;
37345d50759SJames Liao 	/* [24] */
37445d50759SJames Liao 	uint8_t reg_disp3_apsrc_req_mask_b;
37545d50759SJames Liao 	/* [25] */
37645d50759SJames Liao 	uint8_t reg_disp3_ddr_en_mask_b;
37745d50759SJames Liao 	/* [26] */
37845d50759SJames Liao 	uint8_t reg_infrasys_apsrc_req_mask_b;
37945d50759SJames Liao 	/* [27] */
38045d50759SJames Liao 	uint8_t reg_infrasys_ddr_en_mask_b;
38145d50759SJames Liao 	/* [28] */
38245d50759SJames Liao 	uint8_t reg_cg_check_srcclkena_mask_b;
38345d50759SJames Liao 	/* [29] */
38445d50759SJames Liao 	uint8_t reg_cg_check_apsrc_req_mask_b;
38545d50759SJames Liao 	/* [30] */
38645d50759SJames Liao 	uint8_t reg_cg_check_vrf18_req_mask_b;
38745d50759SJames Liao 	/* [31] */
38845d50759SJames Liao 	uint8_t reg_cg_check_ddr_en_mask_b;
38945d50759SJames Liao 
39045d50759SJames Liao 	/* SPM_SRC4_MASK */
39145d50759SJames Liao 	/* [8:0] */
39245d50759SJames Liao 	uint32_t reg_mcusys_merge_apsrc_req_mask_b;
39345d50759SJames Liao 	/* [17:9] */
39445d50759SJames Liao 	uint32_t reg_mcusys_merge_ddr_en_mask_b;
39545d50759SJames Liao 	/* [19:18] */
39645d50759SJames Liao 	uint8_t reg_dramc_md32_infra_req_mask_b;
39745d50759SJames Liao 	/* [21:20] */
39845d50759SJames Liao 	uint8_t reg_dramc_md32_vrf18_req_mask_b;
39945d50759SJames Liao 	/* [23:22] */
40045d50759SJames Liao 	uint8_t reg_dramc_md32_ddr_en_mask_b;
40145d50759SJames Liao 	/* [24] */
40245d50759SJames Liao 	uint8_t reg_dvfsrc_event_trigger_mask_b;
40345d50759SJames Liao 
40445d50759SJames Liao 	/* SPM_WAKEUP_EVENT_MASK2 */
40545d50759SJames Liao 	/* [3:0] */
40645d50759SJames Liao 	uint8_t reg_sc_sw2spm_wakeup_mask_b;
40745d50759SJames Liao 	/* [4] */
40845d50759SJames Liao 	uint8_t reg_sc_adsp2spm_wakeup_mask_b;
40945d50759SJames Liao 	/* [8:5] */
41045d50759SJames Liao 	uint8_t reg_sc_sspm2spm_wakeup_mask_b;
41145d50759SJames Liao 	/* [9] */
41245d50759SJames Liao 	uint8_t reg_sc_scp2spm_wakeup_mask_b;
41345d50759SJames Liao 	/* [10] */
41445d50759SJames Liao 	uint8_t reg_csyspwrup_ack_mask;
41545d50759SJames Liao 	/* [11] */
41645d50759SJames Liao 	uint8_t reg_csyspwrup_req_mask;
41745d50759SJames Liao 
41845d50759SJames Liao 	/* SPM_WAKEUP_EVENT_MASK */
41945d50759SJames Liao 	/* [31:0] */
42045d50759SJames Liao 	uint32_t reg_wakeup_event_mask;
42145d50759SJames Liao 
42245d50759SJames Liao 	/* SPM_WAKEUP_EVENT_EXT_MASK */
42345d50759SJames Liao 	/* [31:0] */
42445d50759SJames Liao 	uint32_t reg_ext_wakeup_event_mask;
42545d50759SJames Liao };
42645d50759SJames Liao 
42745d50759SJames Liao /* code gen by spm_pwr_ctrl_atf.pl, need struct pwr_ctrl */
42845d50759SJames Liao enum pwr_ctrl_enum {
42945d50759SJames Liao 	PW_PCM_FLAGS,
43045d50759SJames Liao 	PW_PCM_FLAGS_CUST,
43145d50759SJames Liao 	PW_PCM_FLAGS_CUST_SET,
43245d50759SJames Liao 	PW_PCM_FLAGS_CUST_CLR,
43345d50759SJames Liao 	PW_PCM_FLAGS1,
43445d50759SJames Liao 	PW_PCM_FLAGS1_CUST,
43545d50759SJames Liao 	PW_PCM_FLAGS1_CUST_SET,
43645d50759SJames Liao 	PW_PCM_FLAGS1_CUST_CLR,
43745d50759SJames Liao 	PW_TIMER_VAL,
43845d50759SJames Liao 	PW_TIMER_VAL_CUST,
43945d50759SJames Liao 	PW_TIMER_VAL_RAMP_EN,
44045d50759SJames Liao 	PW_TIMER_VAL_RAMP_EN_SEC,
44145d50759SJames Liao 	PW_WAKE_SRC,
44245d50759SJames Liao 	PW_WAKE_SRC_CUST,
44345d50759SJames Liao 	PW_WDT_DISABLE,
44445d50759SJames Liao 
44545d50759SJames Liao 	/* SPM_AP_STANDBY_CON */
44645d50759SJames Liao 	PW_REG_WFI_OP,
44745d50759SJames Liao 	PW_REG_WFI_TYPE,
44845d50759SJames Liao 	PW_REG_MP0_CPUTOP_IDLE_MASK,
44945d50759SJames Liao 	PW_REG_MP1_CPUTOP_IDLE_MASK,
45045d50759SJames Liao 	PW_REG_MCUSYS_IDLE_MASK,
45145d50759SJames Liao 	PW_REG_MD_APSRC_1_SEL,
45245d50759SJames Liao 	PW_REG_MD_APSRC_0_SEL,
45345d50759SJames Liao 	PW_REG_CONN_APSRC_SEL,
45445d50759SJames Liao 
45545d50759SJames Liao 	/* SPM_SRC_REQ */
45645d50759SJames Liao 	PW_REG_SPM_APSRC_REQ,
45745d50759SJames Liao 	PW_REG_SPM_F26M_REQ,
45845d50759SJames Liao 	PW_REG_SPM_INFRA_REQ,
45945d50759SJames Liao 	PW_REG_SPM_VRF18_REQ,
46045d50759SJames Liao 	PW_REG_SPM_DDR_EN_REQ,
46145d50759SJames Liao 	PW_REG_SPM_DVFS_REQ,
46245d50759SJames Liao 	PW_REG_SPM_SW_MAILBOX_REQ,
46345d50759SJames Liao 	PW_REG_SPM_SSPM_MAILBOX_REQ,
46445d50759SJames Liao 	PW_REG_SPM_ADSP_MAILBOX_REQ,
46545d50759SJames Liao 	PW_REG_SPM_SCP_MAILBOX_REQ,
46645d50759SJames Liao 
46745d50759SJames Liao 	/* SPM_SRC_MASK */
46845d50759SJames Liao 	PW_REG_SSPM_SRCCLKENA_0_MASK_B,
46945d50759SJames Liao 	PW_REG_SSPM_INFRA_REQ_0_MASK_B,
47045d50759SJames Liao 	PW_REG_SSPM_APSRC_REQ_0_MASK_B,
47145d50759SJames Liao 	PW_REG_SSPM_VRF18_REQ_0_MASK_B,
47245d50759SJames Liao 	PW_REG_SSPM_DDR_EN_0_MASK_B,
47345d50759SJames Liao 	PW_REG_SCP_SRCCLKENA_MASK_B,
47445d50759SJames Liao 	PW_REG_SCP_INFRA_REQ_MASK_B,
47545d50759SJames Liao 	PW_REG_SCP_APSRC_REQ_MASK_B,
47645d50759SJames Liao 	PW_REG_SCP_VRF18_REQ_MASK_B,
47745d50759SJames Liao 	PW_REG_SCP_DDR_EN_MASK_B,
47845d50759SJames Liao 	PW_REG_AUDIO_DSP_SRCCLKENA_MASK_B,
47945d50759SJames Liao 	PW_REG_AUDIO_DSP_INFRA_REQ_MASK_B,
48045d50759SJames Liao 	PW_REG_AUDIO_DSP_APSRC_REQ_MASK_B,
48145d50759SJames Liao 	PW_REG_AUDIO_DSP_VRF18_REQ_MASK_B,
48245d50759SJames Liao 	PW_REG_AUDIO_DSP_DDR_EN_MASK_B,
48345d50759SJames Liao 	PW_REG_APU_SRCCLKENA_MASK_B,
48445d50759SJames Liao 	PW_REG_APU_INFRA_REQ_MASK_B,
48545d50759SJames Liao 	PW_REG_APU_APSRC_REQ_MASK_B,
48645d50759SJames Liao 	PW_REG_APU_VRF18_REQ_MASK_B,
48745d50759SJames Liao 	PW_REG_APU_DDR_EN_MASK_B,
48845d50759SJames Liao 	PW_REG_CPUEB_SRCCLKENA_MASK_B,
48945d50759SJames Liao 	PW_REG_CPUEB_INFRA_REQ_MASK_B,
49045d50759SJames Liao 	PW_REG_CPUEB_APSRC_REQ_MASK_B,
49145d50759SJames Liao 	PW_REG_CPUEB_VRF18_REQ_MASK_B,
49245d50759SJames Liao 	PW_REG_CPUEB_DDR_EN_MASK_B,
49345d50759SJames Liao 	PW_REG_BAK_PSRI_SRCCLKENA_MASK_B,
49445d50759SJames Liao 	PW_REG_BAK_PSRI_INFRA_REQ_MASK_B,
49545d50759SJames Liao 	PW_REG_BAK_PSRI_APSRC_REQ_MASK_B,
49645d50759SJames Liao 	PW_REG_BAK_PSRI_VRF18_REQ_MASK_B,
49745d50759SJames Liao 	PW_REG_BAK_PSRI_DDR_EN_MASK_B,
49845d50759SJames Liao 	PW_REG_CAM_DDREN_REQ_MASK_B,
49945d50759SJames Liao 	PW_REG_IMG_DDREN_REQ_MASK_B,
50045d50759SJames Liao 
50145d50759SJames Liao 	/* SPM_SRC2_MASK */
50245d50759SJames Liao 	PW_REG_MSDC0_SRCCLKENA_MASK_B,
50345d50759SJames Liao 	PW_REG_MSDC0_INFRA_REQ_MASK_B,
50445d50759SJames Liao 	PW_REG_MSDC0_APSRC_REQ_MASK_B,
50545d50759SJames Liao 	PW_REG_MSDC0_VRF18_REQ_MASK_B,
50645d50759SJames Liao 	PW_REG_MSDC0_DDR_EN_MASK_B,
50745d50759SJames Liao 	PW_REG_MSDC1_SRCCLKENA_MASK_B,
50845d50759SJames Liao 	PW_REG_MSDC1_INFRA_REQ_MASK_B,
50945d50759SJames Liao 	PW_REG_MSDC1_APSRC_REQ_MASK_B,
51045d50759SJames Liao 	PW_REG_MSDC1_VRF18_REQ_MASK_B,
51145d50759SJames Liao 	PW_REG_MSDC1_DDR_EN_MASK_B,
51245d50759SJames Liao 	PW_REG_MSDC2_SRCCLKENA_MASK_B,
51345d50759SJames Liao 	PW_REG_MSDC2_INFRA_REQ_MASK_B,
51445d50759SJames Liao 	PW_REG_MSDC2_APSRC_REQ_MASK_B,
51545d50759SJames Liao 	PW_REG_MSDC2_VRF18_REQ_MASK_B,
51645d50759SJames Liao 	PW_REG_MSDC2_DDR_EN_MASK_B,
51745d50759SJames Liao 	PW_REG_UFS_SRCCLKENA_MASK_B,
51845d50759SJames Liao 	PW_REG_UFS_INFRA_REQ_MASK_B,
51945d50759SJames Liao 	PW_REG_UFS_APSRC_REQ_MASK_B,
52045d50759SJames Liao 	PW_REG_UFS_VRF18_REQ_MASK_B,
52145d50759SJames Liao 	PW_REG_UFS_DDR_EN_MASK_B,
52245d50759SJames Liao 	PW_REG_USB_SRCCLKENA_MASK_B,
52345d50759SJames Liao 	PW_REG_USB_INFRA_REQ_MASK_B,
52445d50759SJames Liao 	PW_REG_USB_APSRC_REQ_MASK_B,
52545d50759SJames Liao 	PW_REG_USB_VRF18_REQ_MASK_B,
52645d50759SJames Liao 	PW_REG_USB_DDR_EN_MASK_B,
52745d50759SJames Liao 	PW_REG_PEXTP_P0_SRCCLKENA_MASK_B,
52845d50759SJames Liao 	PW_REG_PEXTP_P0_INFRA_REQ_MASK_B,
52945d50759SJames Liao 	PW_REG_PEXTP_P0_APSRC_REQ_MASK_B,
53045d50759SJames Liao 	PW_REG_PEXTP_P0_VRF18_REQ_MASK_B,
53145d50759SJames Liao 	PW_REG_PEXTP_P0_DDR_EN_MASK_B,
53245d50759SJames Liao 
53345d50759SJames Liao 	/* SPM_SRC3_MASK */
53445d50759SJames Liao 	PW_REG_PEXTP_P1_SRCCLKENA_MASK_B,
53545d50759SJames Liao 	PW_REG_PEXTP_P1_INFRA_REQ_MASK_B,
53645d50759SJames Liao 	PW_REG_PEXTP_P1_APSRC_REQ_MASK_B,
53745d50759SJames Liao 	PW_REG_PEXTP_P1_VRF18_REQ_MASK_B,
53845d50759SJames Liao 	PW_REG_PEXTP_P1_DDR_EN_MASK_B,
53945d50759SJames Liao 	PW_REG_GCE0_INFRA_REQ_MASK_B,
54045d50759SJames Liao 	PW_REG_GCE0_APSRC_REQ_MASK_B,
54145d50759SJames Liao 	PW_REG_GCE0_VRF18_REQ_MASK_B,
54245d50759SJames Liao 	PW_REG_GCE0_DDR_EN_MASK_B,
54345d50759SJames Liao 	PW_REG_GCE1_INFRA_REQ_MASK_B,
54445d50759SJames Liao 	PW_REG_GCE1_APSRC_REQ_MASK_B,
54545d50759SJames Liao 	PW_REG_GCE1_VRF18_REQ_MASK_B,
54645d50759SJames Liao 	PW_REG_GCE1_DDR_EN_MASK_B,
54745d50759SJames Liao 	PW_REG_SPM_SRCCLKENA_RESERVED_MASK_B,
54845d50759SJames Liao 	PW_REG_SPM_INFRA_REQ_RESERVED_MASK_B,
54945d50759SJames Liao 	PW_REG_SPM_APSRC_REQ_RESERVED_MASK_B,
55045d50759SJames Liao 	PW_REG_SPM_VRF18_REQ_RESERVED_MASK_B,
55145d50759SJames Liao 	PW_REG_SPM_DDR_EN_RESERVED_MASK_B,
55245d50759SJames Liao 	PW_REG_DISP0_APSRC_REQ_MASK_B,
55345d50759SJames Liao 	PW_REG_DISP0_DDR_EN_MASK_B,
55445d50759SJames Liao 	PW_REG_DISP1_APSRC_REQ_MASK_B,
55545d50759SJames Liao 	PW_REG_DISP1_DDR_EN_MASK_B,
55645d50759SJames Liao 	PW_REG_DISP2_APSRC_REQ_MASK_B,
55745d50759SJames Liao 	PW_REG_DISP2_DDR_EN_MASK_B,
55845d50759SJames Liao 	PW_REG_DISP3_APSRC_REQ_MASK_B,
55945d50759SJames Liao 	PW_REG_DISP3_DDR_EN_MASK_B,
56045d50759SJames Liao 	PW_REG_INFRASYS_APSRC_REQ_MASK_B,
56145d50759SJames Liao 	PW_REG_INFRASYS_DDR_EN_MASK_B,
56245d50759SJames Liao 	PW_REG_CG_CHECK_SRCCLKENA_MASK_B,
56345d50759SJames Liao 	PW_REG_CG_CHECK_APSRC_REQ_MASK_B,
56445d50759SJames Liao 	PW_REG_CG_CHECK_VRF18_REQ_MASK_B,
56545d50759SJames Liao 	PW_REG_CG_CHECK_DDR_EN_MASK_B,
56645d50759SJames Liao 
56745d50759SJames Liao 	/* SPM_SRC4_MASK */
56845d50759SJames Liao 	PW_REG_MCUSYS_MERGE_APSRC_REQ_MASK_B,
56945d50759SJames Liao 	PW_REG_MCUSYS_MERGE_DDR_EN_MASK_B,
57045d50759SJames Liao 	PW_REG_DRAMC_MD32_INFRA_REQ_MASK_B,
57145d50759SJames Liao 	PW_REG_DRAMC_MD32_VRF18_REQ_MASK_B,
57245d50759SJames Liao 	PW_REG_DRAMC_MD32_DDR_EN_MASK_B,
57345d50759SJames Liao 	PW_REG_DVFSRC_EVENT_TRIGGER_MASK_B,
57445d50759SJames Liao 
57545d50759SJames Liao 	/* SPM_WAKEUP_EVENT_MASK2 */
57645d50759SJames Liao 	PW_REG_SC_SW2SPM_WAKEUP_MASK_B,
57745d50759SJames Liao 	PW_REG_SC_ADSP2SPM_WAKEUP_MASK_B,
57845d50759SJames Liao 	PW_REG_SC_SSPM2SPM_WAKEUP_MASK_B,
57945d50759SJames Liao 	PW_REG_SC_SCP2SPM_WAKEUP_MASK_B,
58045d50759SJames Liao 	PW_REG_CSYSPWRUP_ACK_MASK,
58145d50759SJames Liao 	PW_REG_CSYSPWRUP_REQ_MASK,
58245d50759SJames Liao 
58345d50759SJames Liao 	/* SPM_WAKEUP_EVENT_MASK */
58445d50759SJames Liao 	PW_REG_WAKEUP_EVENT_MASK,
58545d50759SJames Liao 
58645d50759SJames Liao 	/* SPM_WAKEUP_EVENT_EXT_MASK */
58745d50759SJames Liao 	PW_REG_EXT_WAKEUP_EVENT_MASK,
58845d50759SJames Liao 	PW_MAX_COUNT,
58945d50759SJames Liao };
59045d50759SJames Liao 
59145d50759SJames Liao /* spm_internal.c internal status */
59245d50759SJames Liao #define SPM_INTERNAL_STATUS_HW_S1	BIT(0)
59345d50759SJames Liao #define SPM_ACK_CHK_3_CON_HW_MODE_TRIG	(0x800)
59445d50759SJames Liao /* BIT[0]: SW_EN, BIT[4]: STA_EN, BIT[8]: HW_EN */
59545d50759SJames Liao #define SPM_ACK_CHK_3_CON_EN		(0x110)
59645d50759SJames Liao #define SPM_ACK_CHK_3_CON_CLR_ALL	(0x2)
59745d50759SJames Liao /* BIT[15]: RESULT */
59845d50759SJames Liao #define SPM_ACK_CHK_3_CON_RESULT	(0x8000)
59945d50759SJames Liao 
60045d50759SJames Liao struct wake_status_trace_comm {
60145d50759SJames Liao 	uint32_t debug_flag;	/* PCM_WDT_LATCH_SPARE_0 */
60245d50759SJames Liao 	uint32_t debug_flag1;	/* PCM_WDT_LATCH_SPARE_1 */
60345d50759SJames Liao 	uint32_t timer_out;	/* SPM_SW_RSV_6*/
60445d50759SJames Liao 	uint32_t b_sw_flag0;	/* SPM_SW_RSV_7 */
60545d50759SJames Liao 	uint32_t b_sw_flag1;	/* SPM_SW_RSV_7 */
60645d50759SJames Liao 	uint32_t r12;		/* SPM_SW_RSV_0 */
60745d50759SJames Liao 	uint32_t r13;		/* PCM_REG13_DATA */
60845d50759SJames Liao 	uint32_t req_sta0;	/* SRC_REQ_STA_0 */
60945d50759SJames Liao 	uint32_t req_sta1;	/* SRC_REQ_STA_1 */
61045d50759SJames Liao 	uint32_t req_sta2;	/* SRC_REQ_STA_2 */
61145d50759SJames Liao 	uint32_t req_sta3;	/* SRC_REQ_STA_3 */
61245d50759SJames Liao 	uint32_t req_sta4;	/* SRC_REQ_STA_4 */
61345d50759SJames Liao 	uint32_t raw_sta;	/* SPM_WAKEUP_STA */
61445d50759SJames Liao 	uint32_t times_h;	/* timestamp high bits */
61545d50759SJames Liao 	uint32_t times_l;	/* timestamp low bits */
61645d50759SJames Liao 	uint32_t resumetime;	/* timestamp low bits */
61745d50759SJames Liao };
61845d50759SJames Liao 
61945d50759SJames Liao struct wake_status_trace {
62045d50759SJames Liao 	struct wake_status_trace_comm comm;
62145d50759SJames Liao };
62245d50759SJames Liao 
62345d50759SJames Liao struct wake_status {
62445d50759SJames Liao 	struct wake_status_trace tr;
62545d50759SJames Liao 	uint32_t r12_ext;		/* SPM_WAKEUP_EXT_STA */
62645d50759SJames Liao 	uint32_t raw_ext_sta;		/* SPM_WAKEUP_EXT_STA */
62745d50759SJames Liao 	uint32_t md32pcm_wakeup_sta;	/* MD32PCM_WAKEUP_STA */
62845d50759SJames Liao 	uint32_t md32pcm_event_sta;	/* MD32PCM_EVENT_STA */
62945d50759SJames Liao 	uint32_t wake_misc;		/* SPM_SW_RSV_5 */
63045d50759SJames Liao 	uint32_t idle_sta;		/* SUBSYS_IDLE_STA */
631*f85b34b1SJason Chen 	uint32_t cg_check_sta;		/* SPM_CG_CHECK_STA */
63245d50759SJames Liao 	uint32_t sw_flag0;		/* SPM_SW_FLAG_0 */
63345d50759SJames Liao 	uint32_t sw_flag1;		/* SPM_SW_FLAG_1 */
63445d50759SJames Liao 	uint32_t isr;			/* SPM_IRQ_STA */
635*f85b34b1SJason Chen 	uint32_t clk_settle;		/* SPM_CLK_SETTLE */
636*f85b34b1SJason Chen 	uint32_t src_req;		/* SPM_SRC_REQ */
63745d50759SJames Liao 	uint32_t log_index;
63845d50759SJames Liao 	uint32_t is_abort;
639*f85b34b1SJason Chen 	uint32_t rt_req_sta0;		/* SPM_SW_RSV_2 */
640*f85b34b1SJason Chen 	uint32_t rt_req_sta1;		/* SPM_SW_RSV_3 */
641*f85b34b1SJason Chen 	uint32_t rt_req_sta2;		/* SPM_SW_RSV_4 */
642*f85b34b1SJason Chen 	uint32_t rt_req_sta3;		/* SPM_SW_RSV_5 */
643*f85b34b1SJason Chen 	uint32_t rt_req_sta4;		/* SPM_SW_RSV_6 */
64445d50759SJames Liao };
64545d50759SJames Liao 
64645d50759SJames Liao struct spm_lp_scen {
64745d50759SJames Liao 	struct pcm_desc *pcmdesc;
64845d50759SJames Liao 	struct pwr_ctrl *pwrctrl;
64945d50759SJames Liao };
65045d50759SJames Liao 
65145d50759SJames Liao void __spm_set_cpu_status(unsigned int cpu);
65245d50759SJames Liao void __spm_src_req_update(const struct pwr_ctrl *pwrctrl, unsigned int resource_usage);
65345d50759SJames Liao void __spm_set_power_control(const struct pwr_ctrl *pwrctrl);
65445d50759SJames Liao void __spm_set_wakeup_event(const struct pwr_ctrl *pwrctrl);
65545d50759SJames Liao void __spm_set_pcm_flags(struct pwr_ctrl *pwrctrl);
65645d50759SJames Liao void __spm_send_cpu_wakeup_event(void);
65745d50759SJames Liao void __spm_get_wakeup_status(struct wake_status *wakesta, unsigned int ext_status);
65845d50759SJames Liao void __spm_clean_after_wakeup(void);
65945d50759SJames Liao wake_reason_t __spm_output_wake_reason(const struct wake_status *wakesta);
66045d50759SJames Liao void __spm_set_pcm_wdt(int en);
66145d50759SJames Liao void __spm_ext_int_wakeup_req_clr(void);
66245d50759SJames Liao void __spm_hw_s1_state_monitor(int en, unsigned int *status);
66345d50759SJames Liao 
spm_hw_s1_state_monitor_resume(void)66445d50759SJames Liao static inline void spm_hw_s1_state_monitor_resume(void)
66545d50759SJames Liao {
66645d50759SJames Liao 	__spm_hw_s1_state_monitor(1, NULL);
66745d50759SJames Liao }
66845d50759SJames Liao 
spm_hw_s1_state_monitor_pause(unsigned int * status)66945d50759SJames Liao static inline void spm_hw_s1_state_monitor_pause(unsigned int *status)
67045d50759SJames Liao {
67145d50759SJames Liao 	__spm_hw_s1_state_monitor(0, status);
67245d50759SJames Liao }
67345d50759SJames Liao 
67445d50759SJames Liao void __spm_clean_before_wfi(void);
67545d50759SJames Liao 
67645d50759SJames Liao #endif /* MT_SPM_INTERNAL */
677