xref: /rk3399_ARM-atf/plat/mediatek/drivers/spm/mt_spm_common_v1.h (revision af0370f25a6663a0d737bbfb3985df4232eaaa55)
1*532ac057SKun Lu /*
2*532ac057SKun Lu  * Copyright (c) 2025, Mediatek Inc. All rights reserved.
3*532ac057SKun Lu  *
4*532ac057SKun Lu  * SPDX-License-Identifier: BSD-3-Clause
5*532ac057SKun Lu  */
6*532ac057SKun Lu 
7*532ac057SKun Lu #ifndef MT_SPM_COMMON_V1_H
8*532ac057SKun Lu #define MT_SPM_COMMON_V1_H
9*532ac057SKun Lu 
10*532ac057SKun Lu #include <common/debug.h>
11*532ac057SKun Lu 
12*532ac057SKun Lu struct spm_hwcg_info {
13*532ac057SKun Lu 	uint32_t pwr;
14*532ac057SKun Lu 	uint32_t pwr_msb;
15*532ac057SKun Lu 	uint32_t module_busy;
16*532ac057SKun Lu };
17*532ac057SKun Lu 
18*532ac057SKun Lu #define HWCG_INFO_INIT(_info) \
19*532ac057SKun Lu 	({ _info.pwr = _info.pwr_msb = _info.module_busy = 0; })
20*532ac057SKun Lu 
21*532ac057SKun Lu #define DECLARE_HWCG_REG(_name_, _info) ({ \
22*532ac057SKun Lu 		_info.pwr = REG_PWR_STATUS_##_name_##_REQ_MASK; \
23*532ac057SKun Lu 		_info.pwr_msb = REG_PWR_STATUS_MSB_##_name_##_REQ_MASK; \
24*532ac057SKun Lu 		_info.module_busy = REG_MODULE_BUSY_##_name_##_REQ_MASK; })
25*532ac057SKun Lu 
26*532ac057SKun Lu #define DECLARE_HWCG_DEFAULT(_name_, _info) ({ \
27*532ac057SKun Lu 		_info.pwr = SPM_HWCG_##_name_##_PWR_MB; \
28*532ac057SKun Lu 		_info.pwr_msb = SPM_HWCG_##_name_##_PWR_MSB_MB; \
29*532ac057SKun Lu 		_info.module_busy = SPM_HWCG_##_name_##_MODULE_BUSY_MB; })
30*532ac057SKun Lu 
31*532ac057SKun Lu #define PERI_REQ_EN_INFO_INIT(_info)	({ _info.req_en = 0; })
32*532ac057SKun Lu 
33*532ac057SKun Lu #define PERI_REQ_STA_INFO_INIT(_info)	({ _info.req_sta = 0; })
34*532ac057SKun Lu 
35*532ac057SKun Lu #define DECLARE_PERI_REQ_EN_REG(_offset, _info) \
36*532ac057SKun Lu 	({ _info.req_en = REG_PERI_REQ_EN(_offset); })
37*532ac057SKun Lu 
38*532ac057SKun Lu #define DECLARE_PERI_REQ_STA_REG(_offset, _info) \
39*532ac057SKun Lu 	({ _info.req_sta = REG_PERI_REQ_STA(_offset); })
40*532ac057SKun Lu 
41*532ac057SKun Lu #define DECLARE_PERI_REQ_DEFAULT(_name_, _info) \
42*532ac057SKun Lu 	({ _info.req_en = PERI_REQ_##_name_##_MB; })
43*532ac057SKun Lu 
44*532ac057SKun Lu #define CTRL0_SC_26M_CK_OFF			BIT(0)
45*532ac057SKun Lu #define CTRL0_SC_VLP_BUS_CK_OFF			BIT(1)
46*532ac057SKun Lu #define CTRL0_SC_PMIF_CK_OFF			BIT(2)
47*532ac057SKun Lu #define CTRL0_SC_AXI_CK_OFF			BIT(3)
48*532ac057SKun Lu #define CTRL0_SC_AXI_MEM_CK_OFF			BIT(4)
49*532ac057SKun Lu #define CTRL0_SC_MD26M_CK_OFF			BIT(5)
50*532ac057SKun Lu #define CTRL0_SC_MD32K_CK_OFF			BIT(6)
51*532ac057SKun Lu #define CTRL0_SC_VLP_26M_CLK_SEL		BIT(7)
52*532ac057SKun Lu #define CTRL0_SC_26M_CK_SEL			BIT(8)
53*532ac057SKun Lu #define CTRL0_SC_TOP_26M_CLK_SEL		BIT(9)
54*532ac057SKun Lu #define CTRL0_SC_SYS_TIMER_CLK_32K_SEL		BIT(10)
55*532ac057SKun Lu #define CTRL0_SC_CIRQ_CLK_32K_SEL		BIT(11)
56*532ac057SKun Lu #define CTRL0_SC_AXI_DCM_DIS			BIT(12)
57*532ac057SKun Lu #define CTRL0_SC_CKSQ0_OFF			BIT(13)
58*532ac057SKun Lu #define CTRL0_SC_CKSQ1_OFF			BIT(14)
59*532ac057SKun Lu #define CTRL0_VCORE_PWR_ISO			BIT(15)
60*532ac057SKun Lu #define CTRL0_VCORE_PWR_ISO_PRE			BIT(16)
61*532ac057SKun Lu #define CTRL0_VCORE_PWR_RST_B			BIT(17)
62*532ac057SKun Lu #define CTRL0_VCORE_RESTORE_ENABLE		BIT(18)
63*532ac057SKun Lu #define CTRL0_SC_TOP_RESTORE_26M_CLK_SEL	BIT(19)
64*532ac057SKun Lu #define CTRL0_AOC_VCORE_SRAM_ISO_DIN		BIT(20)
65*532ac057SKun Lu #define CTRL0_AOC_VCORE_SRAM_LATCH_ENB		BIT(21)
66*532ac057SKun Lu #define CTRL0_AOC_VCORE_ANA_ISO			BIT(22)
67*532ac057SKun Lu #define CTRL0_AOC_VCORE_ANA_ISO_PRE		BIT(23)
68*532ac057SKun Lu #define CTRL0_AOC_VLPTOP_SRAM_ISO_DIN		BIT(24)
69*532ac057SKun Lu #define CTRL0_AOC_VLPTOP_SRAM_LATCH_ENB		BIT(25)
70*532ac057SKun Lu #define CTRL0_AOC_VCORE_IO_ISO			BIT(26)
71*532ac057SKun Lu #define CTRL0_AOC_VCORE_IO_LATCH_ENB		BIT(27)
72*532ac057SKun Lu #define CTRL0_RTFF_VCORE_SAVE			BIT(28)
73*532ac057SKun Lu #define CTRL0_RTFF_VCORE_NRESTORE		BIT(29)
74*532ac057SKun Lu #define CTRL0_RTFF_VCORE_CLK_DIS		BIT(30)
75*532ac057SKun Lu 
76*532ac057SKun Lu /* MD32PCM_CTRL1 define */
77*532ac057SKun Lu #define CTRL1_PWRAP_SLEEP_REQ			BIT(0)
78*532ac057SKun Lu #define CTRL1_IM_SLP_EN				BIT(1)
79*532ac057SKun Lu #define CTRL1_SPM_LEAVE_VCORE_OFF_REQ		BIT(2)
80*532ac057SKun Lu #define CTRL1_SPM_CK_SEL0			BIT(4)
81*532ac057SKun Lu #define CTRL1_SPM_CK_SEL1			BIT(5)
82*532ac057SKun Lu #define CTRL1_TIMER_SET				BIT(6)
83*532ac057SKun Lu #define CTRL1_TIMER_CLR				BIT(7)
84*532ac057SKun Lu #define CTRL1_SPM_LEAVE_DEEPIDLE_REQ		BIT(8)
85*532ac057SKun Lu #define CTRL1_SPM_LEAVE_SUSPEND_REQ		BIT(9)
86*532ac057SKun Lu #define CTRL1_CSYSPWRUPACK			BIT(10)
87*532ac057SKun Lu #define CTRL1_SRCCLKENO0			BIT(11)
88*532ac057SKun Lu #define CTRL1_SRCCLKENO1			BIT(12)
89*532ac057SKun Lu #define CTRL1_SRCCLKENO2			BIT(13)
90*532ac057SKun Lu #define CTRL1_SPM_APSRC_INTERNAL_ACK		BIT(14)
91*532ac057SKun Lu #define CTRL1_SPM_EMI_INTERNAL_ACK		BIT(15)
92*532ac057SKun Lu #define CTRL1_SPM_DDREN_INTERNAL_ACK		BIT(16)
93*532ac057SKun Lu #define CTRL1_SPM_INFRA_INTERNAL_ACK		BIT(17)
94*532ac057SKun Lu #define CTRL1_SPM_VRF18_INTERNAL_ACK		BIT(18)
95*532ac057SKun Lu #define CTRL1_SPM_VCORE_INTERNAL_ACK		BIT(19)
96*532ac057SKun Lu #define CTRL1_SPM_VCORE_RESTORE_ACK		BIT(20)
97*532ac057SKun Lu #define CTRL1_SPM_PMIC_INTERNAL_ACK		BIT(21)
98*532ac057SKun Lu #define CTRL1_PMIC_IRQ_REQ_EN			BIT(22)
99*532ac057SKun Lu #define CTRL1_WDT_KICK_P			BIT(23)
100*532ac057SKun Lu #define CTRL1_FORCE_DDREN_WAKE			BIT(24)
101*532ac057SKun Lu #define CTRL1_FORCE_F26M_WAKE			BIT(25)
102*532ac057SKun Lu #define CTRL1_FORCE_APSRC_WAKE			BIT(26)
103*532ac057SKun Lu #define CTRL1_FORCE_INFRA_WAKE			BIT(27)
104*532ac057SKun Lu #define CTRL1_FORCE_VRF18_WAKE			BIT(28)
105*532ac057SKun Lu #define CTRL1_FORCE_VCORE_WAKE			BIT(29)
106*532ac057SKun Lu #define CTRL1_FORCE_EMI_WAKE			BIT(30)
107*532ac057SKun Lu #define CTRL1_FORCE_PMIC_WAKE			BIT(31)
108*532ac057SKun Lu 
109*532ac057SKun Lu /* MD32PCM_CTRL2 define (PCM_REG2_DATA) */
110*532ac057SKun Lu #define CTRL2_MD32PCM_IRQ_TRIG_BIT		BIT(31)
111*532ac057SKun Lu 
112*532ac057SKun Lu /* MD32PCM_STA0 define */
113*532ac057SKun Lu #define STA0_SRCCLKENI0				BIT(0)
114*532ac057SKun Lu #define STA0_SRCCLKENI1				BIT(1)
115*532ac057SKun Lu #define STA0_MD_SRCCLKENA			BIT(2)
116*532ac057SKun Lu #define STA0_MD_SRCCLKENA1			BIT(3)
117*532ac057SKun Lu #define STA0_MD_DDREN_REQ			BIT(4)
118*532ac057SKun Lu #define STA0_CONN_DDREN_REQ			BIT(5)
119*532ac057SKun Lu #define STA0_SSPM_SRCCLKENA			BIT(6)
120*532ac057SKun Lu #define STA0_SSPM_APSRC_REQ			BIT(7)
121*532ac057SKun Lu #define STA0_MD_STATE				BIT(8)
122*532ac057SKun Lu #define STA0_RC2SPM_SRCCLKENO_0_ACK		BIT(9)
123*532ac057SKun Lu #define STA0_MM_STATE				BIT(10)
124*532ac057SKun Lu #define STA0_SSPM_STATE				BIT(11)
125*532ac057SKun Lu #define STA0_CPUEB_STATE			BIT(12)
126*532ac057SKun Lu #define STA0_CONN_STATE				BIT(13)
127*532ac057SKun Lu #define STA0_CONN_VCORE_REQ			BIT(14)
128*532ac057SKun Lu #define STA0_CONN_SRCCLKENA			BIT(15)
129*532ac057SKun Lu #define STA0_CONN_SRCCLKENB			BIT(16)
130*532ac057SKun Lu #define STA0_CONN_APSRC_REQ			BIT(17)
131*532ac057SKun Lu #define STA0_SCP_STATE				BIT(18)
132*532ac057SKun Lu #define STA0_CSYSPWRUPREQ			BIT(19)
133*532ac057SKun Lu #define STA0_PWRAP_SLEEP_ACK			BIT(20)
134*532ac057SKun Lu #define STA0_DPM_STATE				BIT(21)
135*532ac057SKun Lu #define STA0_AUDIO_DSP_STATE			BIT(22)
136*532ac057SKun Lu #define STA0_PMIC_IRQ_ACK			BIT(23)
137*532ac057SKun Lu #define STA0_RESERVED_BIT_24			BIT(24)
138*532ac057SKun Lu #define STA0_RESERVED_BIT_25			BIT(25)
139*532ac057SKun Lu #define STA0_RESERVED_BIT_26			BIT(26)
140*532ac057SKun Lu #define STA0_DVFS_STATE				BIT(27)
141*532ac057SKun Lu #define STA0_RESERVED_BIT_28			BIT(28)
142*532ac057SKun Lu #define STA0_RESERVED_BIT_29			BIT(29)
143*532ac057SKun Lu #define STA0_SC_HW_S1_ACK_ALL			BIT(30)
144*532ac057SKun Lu #define STA0_DDREN_STATE			BIT(31)
145*532ac057SKun Lu 
146*532ac057SKun Lu #define R12_PCM_TIMER_B				BIT(0)
147*532ac057SKun Lu #define R12_TWAM_PMSR_DVFSRC_ALCO		BIT(1)
148*532ac057SKun Lu #define R12_KP_IRQ_B				BIT(2)
149*532ac057SKun Lu #define R12_APWDT_EVENT_B			BIT(3)
150*532ac057SKun Lu #define R12_APXGPT_EVENT_B			BIT(4)
151*532ac057SKun Lu #define R12_CONN2AP_WAKEUP_B			BIT(5)
152*532ac057SKun Lu #define R12_EINT_EVENT_B			BIT(6)
153*532ac057SKun Lu #define R12_CONN_WDT_IRQ_B			BIT(7)
154*532ac057SKun Lu #define R12_CCIF0_EVENT_B			BIT(8)
155*532ac057SKun Lu #define R12_CCIF1_EVENT_B			BIT(9)
156*532ac057SKun Lu #define R12_SSPM2SPM_WAKEUP_B			BIT(10)
157*532ac057SKun Lu #define R12_SCP2SPM_WAKEUP_B			BIT(11)
158*532ac057SKun Lu #define R12_ADSP2SPM_WAKEUP_B			BIT(12)
159*532ac057SKun Lu #define R12_PCM_WDT_WAKEUP_B			BIT(13)
160*532ac057SKun Lu #define R12_USB0_CDSC_B				BIT(14)
161*532ac057SKun Lu #define R12_USB0_POWERDWN_B			BIT(15)
162*532ac057SKun Lu #define R12_UART_EVENT_B			BIT(16)
163*532ac057SKun Lu #define R12_DEBUGTOP_FLAG_IRQ_B			BIT(17)
164*532ac057SKun Lu #define R12_SYS_TIMER_EVENT_B			BIT(18)
165*532ac057SKun Lu #define R12_EINT_EVENT_SECURE_B			BIT(19)
166*532ac057SKun Lu #define R12_AFE_IRQ_MCU_B			BIT(20)
167*532ac057SKun Lu #define R12_THERM_CTRL_EVENT_B			BIT(21)
168*532ac057SKun Lu #define R12_SYS_CIRQ_IRQ_B			BIT(22)
169*532ac057SKun Lu #define R12_PBUS_EVENT_B			BIT(23)
170*532ac057SKun Lu #define R12_CSYSPWREQ_B				BIT(24)
171*532ac057SKun Lu #define R12_MD_WDT_B				BIT(25)
172*532ac057SKun Lu #define R12_AP2AP_PEER_WAKEUP_B			BIT(26)
173*532ac057SKun Lu #define R12_SEJ_B				BIT(27)
174*532ac057SKun Lu #define R12_CPU_WAKEUP				BIT(28)
175*532ac057SKun Lu #define R12_APUSYS_WAKE_HOST_B			BIT(29)
176*532ac057SKun Lu #define R12_PCIE_WAKE_B				BIT(30)
177*532ac057SKun Lu #define R12_MSDC_WAKE_B				BIT(31)
178*532ac057SKun Lu 
179*532ac057SKun Lu /* PCM_PWR_IO_EN */
180*532ac057SKun Lu #define PCM_PWRIO_EN_R0		BIT(0)
181*532ac057SKun Lu #define PCM_PWRIO_EN_R7		BIT(7)
182*532ac057SKun Lu #define PCM_RF_SYNC_R0		BIT(16)
183*532ac057SKun Lu #define PCM_RF_SYNC_R6		BIT(22)
184*532ac057SKun Lu #define PCM_RF_SYNC_R7		BIT(23)
185*532ac057SKun Lu 
186*532ac057SKun Lu /* SPM_SWINT */
187*532ac057SKun Lu #define PCM_SW_INT0		BIT(0)
188*532ac057SKun Lu #define PCM_SW_INT1		BIT(1)
189*532ac057SKun Lu #define PCM_SW_INT2		BIT(2)
190*532ac057SKun Lu #define PCM_SW_INT3		BIT(3)
191*532ac057SKun Lu #define PCM_SW_INT4		BIT(4)
192*532ac057SKun Lu #define PCM_SW_INT5		BIT(5)
193*532ac057SKun Lu #define PCM_SW_INT6		BIT(6)
194*532ac057SKun Lu #define PCM_SW_INT7		BIT(7)
195*532ac057SKun Lu #define PCM_SW_INT8		BIT(8)
196*532ac057SKun Lu #define PCM_SW_INT9		BIT(9)
197*532ac057SKun Lu 
198*532ac057SKun Lu #define PCM_SW_INT_ALL		(PCM_SW_INT9 | PCM_SW_INT8 | PCM_SW_INT7 | \
199*532ac057SKun Lu 				 PCM_SW_INT6 | PCM_SW_INT5 | PCM_SW_INT4 | \
200*532ac057SKun Lu 				 PCM_SW_INT3 | PCM_SW_INT2 | PCM_SW_INT1 | \
201*532ac057SKun Lu 				 PCM_SW_INT0)
202*532ac057SKun Lu 
203*532ac057SKun Lu /* SPM_AP_STANDBY_CON */
204*532ac057SKun Lu #define WFI_OP_AND		1
205*532ac057SKun Lu #define WFI_OP_OR		0
206*532ac057SKun Lu 
207*532ac057SKun Lu /* SPM_IRQ_MASK */
208*532ac057SKun Lu #define ISRM_TWAM		BIT(2)
209*532ac057SKun Lu #define ISRM_PCM_RETURN		BIT(3)
210*532ac057SKun Lu #define ISRM_RET_IRQ0		BIT(8)
211*532ac057SKun Lu #define ISRM_RET_IRQ1		BIT(9)
212*532ac057SKun Lu #define ISRM_RET_IRQ2		BIT(10)
213*532ac057SKun Lu #define ISRM_RET_IRQ3		BIT(11)
214*532ac057SKun Lu #define ISRM_RET_IRQ4		BIT(12)
215*532ac057SKun Lu #define ISRM_RET_IRQ5		BIT(13)
216*532ac057SKun Lu #define ISRM_RET_IRQ6		BIT(14)
217*532ac057SKun Lu #define ISRM_RET_IRQ7		BIT(15)
218*532ac057SKun Lu #define ISRM_RET_IRQ8		BIT(16)
219*532ac057SKun Lu #define ISRM_RET_IRQ9		BIT(17)
220*532ac057SKun Lu #define ISRM_RET_IRQ_AUX	((ISRM_RET_IRQ9) | (ISRM_RET_IRQ8) | \
221*532ac057SKun Lu 				 (ISRM_RET_IRQ7) | (ISRM_RET_IRQ6) | \
222*532ac057SKun Lu 				 (ISRM_RET_IRQ5) | (ISRM_RET_IRQ4) | \
223*532ac057SKun Lu 				 (ISRM_RET_IRQ3) | (ISRM_RET_IRQ2) | \
224*532ac057SKun Lu 				 (ISRM_RET_IRQ1))
225*532ac057SKun Lu #define ISRM_ALL_EXC_TWAM	(ISRM_RET_IRQ_AUX)
226*532ac057SKun Lu #define ISRM_ALL (ISRM_ALL_EXC_TWAM | ISRM_TWAM)
227*532ac057SKun Lu 
228*532ac057SKun Lu /* SPM_IRQ_STA */
229*532ac057SKun Lu #define ISRS_TWAM		BIT(2)
230*532ac057SKun Lu #define ISRS_PCM_RETURN		BIT(3)
231*532ac057SKun Lu #define ISRC_TWAM		ISRS_TWAM
232*532ac057SKun Lu #define ISRC_ALL_EXC_TWAM	ISRS_PCM_RETURN
233*532ac057SKun Lu #define ISRC_ALL		(ISRC_ALL_EXC_TWAM | ISRC_TWAM)
234*532ac057SKun Lu 
235*532ac057SKun Lu /* SPM_WAKEUP_MISC */
236*532ac057SKun Lu #define WAKE_MISC_GIC_WAKEUP			0x3FF /* bit0 ~ bit9 */
237*532ac057SKun Lu #define WAKE_MISC_DVFSRC_IRQ			DVFSRC_IRQ_LSB
238*532ac057SKun Lu #define WAKE_MISC_REG_CPU_WAKEUP		SPM_WAKEUP_MISC_REG_CPU_WAKEUP_LSB
239*532ac057SKun Lu #define WAKE_MISC_PCM_TIMER_EVENT		PCM_TIMER_EVENT_LSB
240*532ac057SKun Lu #define WAKE_MISC_PMIC_OUT_B			(BIT(19) | BIT(20))
241*532ac057SKun Lu #define WAKE_MISC_TWAM_IRQ_B			TWAM_IRQ_B_LSB
242*532ac057SKun Lu #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_0		SPM_ACK_CHK_WAKEUP_0_LSB
243*532ac057SKun Lu #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_1		SPM_ACK_CHK_WAKEUP_1_LSB
244*532ac057SKun Lu #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_2		SPM_ACK_CHK_WAKEUP_2_LSB
245*532ac057SKun Lu #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_3		SPM_ACK_CHK_WAKEUP_3_LSB
246*532ac057SKun Lu #define WAKE_MISC_SPM_ACK_CHK_WAKEUP_ALL	SPM_ACK_CHK_WAKEUP_ALL_LSB
247*532ac057SKun Lu #define WAKE_MISC_PMIC_IRQ_ACK			PMIC_IRQ_ACK_LSB
248*532ac057SKun Lu #define WAKE_MISC_PMIC_SCP_IRQ			PMIC_SCP_IRQ_LSB
249*532ac057SKun Lu 
250*532ac057SKun Lu #define SPM_INTERNAL_STATUS_HW_S1		BIT(0)
251*532ac057SKun Lu 
252*532ac057SKun Lu /* Signal that monitor by HW CG  */
253*532ac057SKun Lu enum spm_hwcg_setting {
254*532ac057SKun Lu 	HWCG_PWR,
255*532ac057SKun Lu 	HWCG_PWR_MSB,
256*532ac057SKun Lu 	HWCG_MODULE_BUSY,
257*532ac057SKun Lu 	HWCG_SETTING_MAX
258*532ac057SKun Lu };
259*532ac057SKun Lu 
260*532ac057SKun Lu enum spm_hwcg_sta_type {
261*532ac057SKun Lu 	HWCG_STA_DEFAULT_MASK,
262*532ac057SKun Lu 	HWCG_STA_MASK
263*532ac057SKun Lu };
264*532ac057SKun Lu 
265*532ac057SKun Lu enum spm_peri_req_setting {
266*532ac057SKun Lu 	PERI_REQ_EN  = 0,
267*532ac057SKun Lu 	PERI_REQ_SETTING_MAX
268*532ac057SKun Lu };
269*532ac057SKun Lu 
270*532ac057SKun Lu enum spm_peri_req_sta_type {
271*532ac057SKun Lu 	PERI_REQ_STA_DEFAULT_MASK,
272*532ac057SKun Lu 	PERI_REQ_STA_MASK,
273*532ac057SKun Lu 	PERI_REQ_STA_MAX
274*532ac057SKun Lu };
275*532ac057SKun Lu 
276*532ac057SKun Lu enum spm_peri_req_status {
277*532ac057SKun Lu 	PERI_RES_REQ_EN,
278*532ac057SKun Lu 	PERI_REQ_STATUS_MAX
279*532ac057SKun Lu };
280*532ac057SKun Lu 
281*532ac057SKun Lu enum spm_peri_req_status_raw {
282*532ac057SKun Lu 	PERI_REQ_STATUS_RAW_NUM,
283*532ac057SKun Lu 	PERI_REQ_STATUS_RAW_NAME,
284*532ac057SKun Lu 	PERI_REQ_STATUS_RAW_STA,
285*532ac057SKun Lu 	PERI_REQ_STATUS_RAW_MAX
286*532ac057SKun Lu };
287*532ac057SKun Lu 
288*532ac057SKun Lu #define MT_SPM_HW_CG_STA_INIT(_x)	({ if (_x) _x->sta = 0; })
289*532ac057SKun Lu 
290*532ac057SKun Lu struct spm_peri_req_sta {
291*532ac057SKun Lu 	uint32_t sta;
292*532ac057SKun Lu };
293*532ac057SKun Lu 
294*532ac057SKun Lu struct spm_peri_req_info {
295*532ac057SKun Lu 	uint32_t req_en;
296*532ac057SKun Lu 	uint32_t req_sta;
297*532ac057SKun Lu };
298*532ac057SKun Lu 
299*532ac057SKun Lu struct spm_hwcg_sta {
300*532ac057SKun Lu 	uint32_t sta;
301*532ac057SKun Lu };
302*532ac057SKun Lu 
303*532ac057SKun Lu void spm_hwreq_init(void);
304*532ac057SKun Lu 
305*532ac057SKun Lu /* Res:
306*532ac057SKun Lu  *	Please refer the mt_spm_resource_req.h.
307*532ac057SKun Lu  *	Section of SPM resource request internal bit_mask.
308*532ac057SKun Lu  */
309*532ac057SKun Lu void spm_hwcg_ctrl(uint32_t res, enum spm_hwcg_setting type,
310*532ac057SKun Lu 		   uint32_t is_set, uint32_t val);
311*532ac057SKun Lu 
312*532ac057SKun Lu /* Idx:
313*532ac057SKun Lu  *	index of HWCG setting.
314*532ac057SKun Lu  */
315*532ac057SKun Lu void spm_hwcg_ctrl_by_index(uint32_t idx, enum spm_hwcg_setting type,
316*532ac057SKun Lu 			    uint32_t is_set, uint32_t val);
317*532ac057SKun Lu 
318*532ac057SKun Lu /* Res:
319*532ac057SKun Lu  *	Please refer the mt_spm_resource_req.h.
320*532ac057SKun Lu  *	Section of SPM resource request internal bit_mask.
321*532ac057SKun Lu  */
322*532ac057SKun Lu int spm_hwcg_get_setting(uint32_t res, enum spm_hwcg_sta_type sta_type,
323*532ac057SKun Lu 			 enum spm_hwcg_setting type,
324*532ac057SKun Lu 			 struct spm_hwcg_sta *sta);
325*532ac057SKun Lu 
326*532ac057SKun Lu /* Idx:
327*532ac057SKun Lu  *	index of HWCG setting.
328*532ac057SKun Lu  */
329*532ac057SKun Lu int spm_hwcg_get_setting_by_index(uint32_t idx,
330*532ac057SKun Lu 				  enum spm_hwcg_sta_type sta_type,
331*532ac057SKun Lu 				  enum spm_hwcg_setting type,
332*532ac057SKun Lu 				  struct spm_hwcg_sta *sta);
333*532ac057SKun Lu 
334*532ac057SKun Lu uint32_t spm_hwcg_get_status(uint32_t idx, enum spm_hwcg_setting type);
335*532ac057SKun Lu 
spm_hwcg_setting_num(void)336*532ac057SKun Lu static inline uint32_t spm_hwcg_setting_num(void)
337*532ac057SKun Lu {
338*532ac057SKun Lu 	return HWCG_SETTING_MAX;
339*532ac057SKun Lu }
340*532ac057SKun Lu 
341*532ac057SKun Lu uint32_t spm_peri_req_get_status(uint32_t idx, enum spm_peri_req_status type);
342*532ac057SKun Lu uint32_t spm_peri_req_get_status_raw(enum spm_peri_req_status_raw type,
343*532ac057SKun Lu 				     uint32_t idx,
344*532ac057SKun Lu 				     char *name, size_t sz);
345*532ac057SKun Lu 
spm_peri_req_setting_num(void)346*532ac057SKun Lu static inline uint32_t spm_peri_req_setting_num(void)
347*532ac057SKun Lu {
348*532ac057SKun Lu 	return PERI_REQ_SETTING_MAX;
349*532ac057SKun Lu }
350*532ac057SKun Lu 
351*532ac057SKun Lu int spm_peri_req_get_setting_by_index(uint32_t idx,
352*532ac057SKun Lu 				      enum spm_peri_req_sta_type sta_type,
353*532ac057SKun Lu 				      struct spm_peri_req_sta *sta);
354*532ac057SKun Lu 
355*532ac057SKun Lu void spm_peri_req_ctrl_by_index(uint32_t idx,
356*532ac057SKun Lu 				uint32_t is_set, uint32_t val);
357*532ac057SKun Lu 
358*532ac057SKun Lu int spm_peri_req_name(uint32_t idex, char *name, size_t sz);
359*532ac057SKun Lu 
360*532ac057SKun Lu #ifdef __GNUC__
361*532ac057SKun Lu #define spm_likely(x)	__builtin_expect(!!(x), 1)
362*532ac057SKun Lu #define spm_unlikely(x)	__builtin_expect(!!(x), 0)
363*532ac057SKun Lu #else
364*532ac057SKun Lu #define spm_likely(x)	(x)
365*532ac057SKun Lu #define spm_unlikely(x)	(x)
366*532ac057SKun Lu #endif
367*532ac057SKun Lu 
368*532ac057SKun Lu /* AP_MDSRC_REQ MD 26M ON settle time (3ms) */
369*532ac057SKun Lu #define AP_MDSRC_REQ_MD_26M_SETTLE	3
370*532ac057SKun Lu 
371*532ac057SKun Lu /* Setting the SPM settle time*/
372*532ac057SKun Lu #define SPM_SYSCLK_SETTLE	0x60FE /* 1685us */
373*532ac057SKun Lu 
374*532ac057SKun Lu /* Setting the SPM req/ack time*/
375*532ac057SKun Lu #define SPM_ACK_TIMEOUT_US	1000
376*532ac057SKun Lu 
377*532ac057SKun Lu /* Settine the firmware status check for SPM PC */
378*532ac057SKun Lu #define SPM_PC_CHECKABLE
379*532ac057SKun Lu 
380*532ac057SKun Lu enum {
381*532ac057SKun Lu 	SPM_ARGS_SPMFW_IDX_KICK = 0,
382*532ac057SKun Lu 	SPM_ARGS_SPMFW_INIT,
383*532ac057SKun Lu 	SPM_ARGS_SUSPEND,
384*532ac057SKun Lu 	SPM_ARGS_SUSPEND_FINISH,
385*532ac057SKun Lu 	SPM_ARGS_SODI,
386*532ac057SKun Lu 	SPM_ARGS_SODI_FINISH,
387*532ac057SKun Lu 	SPM_ARGS_DPIDLE,
388*532ac057SKun Lu 	SPM_ARGS_DPIDLE_FINISH,
389*532ac057SKun Lu 	SPM_ARGS_PCM_WDT,
390*532ac057SKun Lu 	SPM_ARGS_SUSPEND_CALLBACK,
391*532ac057SKun Lu 	SPM_ARGS_HARDWARE_CG_CHECK,
392*532ac057SKun Lu 	SPM_ARGS_NUM,
393*532ac057SKun Lu };
394*532ac057SKun Lu 
395*532ac057SKun Lu typedef enum {
396*532ac057SKun Lu 	WR_NONE = 0,
397*532ac057SKun Lu 	WR_UART_BUSY,
398*532ac057SKun Lu 	WR_ABORT,
399*532ac057SKun Lu 	WR_PCM_TIMER,
400*532ac057SKun Lu 	WR_WAKE_SRC,
401*532ac057SKun Lu 	WR_DVFSRC,
402*532ac057SKun Lu 	WR_TWAM,
403*532ac057SKun Lu 	WR_PMSR,
404*532ac057SKun Lu 	WR_SPM_ACK_CHK,
405*532ac057SKun Lu 	WR_UNKNOWN,
406*532ac057SKun Lu } wake_reason_t;
407*532ac057SKun Lu 
408*532ac057SKun Lu struct pwr_ctrl;
409*532ac057SKun Lu 
410*532ac057SKun Lu void spm_set_irq_num(uint32_t num);
411*532ac057SKun Lu struct mt_lp_resource_user *get_spm_res_user(void);
412*532ac057SKun Lu int spm_boot_init(void);
413*532ac057SKun Lu void spm_dvfsfw_init(uint64_t boot_up_opp, uint64_t dram_issue);
414*532ac057SKun Lu /* Support by bl31_plat_setup.c */
415*532ac057SKun Lu uint32_t is_abnormal_boot(void);
416*532ac057SKun Lu 
417*532ac057SKun Lu #endif
418