xref: /arm-trusted-firmware/plat/mediatek/include/lpm/mt_lpm_smc.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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_LPM_SMC_H
8*91f16700Schasinglulu #define MT_LPM_SMC_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu /*
11*91f16700Schasinglulu  * MTK LPM smc user format:
12*91f16700Schasinglulu  * bit[31:24]: magic number
13*91f16700Schasinglulu  * bit[23:16]: user number
14*91f16700Schasinglulu  * bit[15:00]: user id
15*91f16700Schasinglulu  */
16*91f16700Schasinglulu 
17*91f16700Schasinglulu #define MT_LPM_SMC_MAGIC	(0xDA000000)
18*91f16700Schasinglulu #define MT_LPM_SMC_MAGIC_MASK	(0xFF000000)
19*91f16700Schasinglulu #define MT_LPM_SMC_USER_MASK	(0xFF)
20*91f16700Schasinglulu #define MT_LPM_SMC_USER_SHIFT	(16)
21*91f16700Schasinglulu 
22*91f16700Schasinglulu #define MT_LPM_SMC_USER_ID_MASK	(0x0000FFFF)
23*91f16700Schasinglulu 
24*91f16700Schasinglulu /*
25*91f16700Schasinglulu  * cpu_pm is used for MCDI to read/write CPC information
26*91f16700Schasinglulu  * spm_dbg is used for spm related debug information
27*91f16700Schasinglulu  * spm is used for spm related settings
28*91f16700Schasinglulu  * cpu_pm_lp is used for MCDI setting irq_remain
29*91f16700Schasinglulu  */
30*91f16700Schasinglulu enum mt_lpm_smc_user_id {
31*91f16700Schasinglulu 	MT_LPM_SMC_USER_CPU_PM = 0,
32*91f16700Schasinglulu 	MT_LPM_SMC_USER_SPM_DBG,
33*91f16700Schasinglulu 	MT_LPM_SMC_USER_SPM,
34*91f16700Schasinglulu 	MT_LPM_SMC_USER_CPU_PM_LP,
35*91f16700Schasinglulu 	MT_LPM_SMC_USER_SECURE_CPU_PM,
36*91f16700Schasinglulu 	MT_LPM_SMC_USER_SECURE_SPM_DBG,
37*91f16700Schasinglulu 	MT_LPM_SMC_USER_SECURE_SPM,
38*91f16700Schasinglulu 	MT_LPM_SMC_USER_MAX,
39*91f16700Schasinglulu };
40*91f16700Schasinglulu 
41*91f16700Schasinglulu #define IS_MT_LPM_SMC(smcid)	((smcid & MT_LPM_SMC_MAGIC_MASK) == MT_LPM_SMC_MAGIC)
42*91f16700Schasinglulu 
43*91f16700Schasinglulu /* get real user id */
44*91f16700Schasinglulu #define MT_LPM_SMC_USER(id)	((id >> MT_LPM_SMC_USER_SHIFT) & MT_LPM_SMC_USER_MASK)
45*91f16700Schasinglulu #define MT_LPM_SMC_USER_ID(uid)	(uid & MT_LPM_SMC_USER_ID_MASK)
46*91f16700Schasinglulu 
47*91f16700Schasinglulu /* sink user id to smc's user id */
48*91f16700Schasinglulu #define MT_LPM_SMC_USER_SINK(user, uid)	(((uid & MT_LPM_SMC_USER_ID_MASK) |\
49*91f16700Schasinglulu 					((user & MT_LPM_SMC_USER_MASK) << MT_LPM_SMC_USER_SHIFT)) |\
50*91f16700Schasinglulu 					MT_LPM_SMC_MAGIC)
51*91f16700Schasinglulu 
52*91f16700Schasinglulu /* sink cpu pm's smc id */
53*91f16700Schasinglulu #define MT_LPM_SMC_USER_ID_CPU_PM(uid)	MT_LPM_SMC_USER_SINK(MT_LPM_SMC_USER_CPU_PM, uid)
54*91f16700Schasinglulu /* sink spm's smc id */
55*91f16700Schasinglulu #define MT_LPM_SMC_USER_ID_SPM(uid)	MT_LPM_SMC_USER_SINK(MT_LPM_SMC_USER_SPM, uid)
56*91f16700Schasinglulu 
57*91f16700Schasinglulu /* sink cpu pm's user id */
58*91f16700Schasinglulu #define MT_LPM_SMC_USER_CPU_PM(uid)	MT_LPM_SMC_USER_ID_CPU_PM(uid)
59*91f16700Schasinglulu 
60*91f16700Schasinglulu /* sink spm's user id */
61*91f16700Schasinglulu #define MT_LPM_SMC_USER_SPM(uid)	MT_LPM_SMC_USER_ID_SPM(uid)
62*91f16700Schasinglulu 
63*91f16700Schasinglulu /* behavior */
64*91f16700Schasinglulu #define MT_LPM_SMC_ACT_SET		BIT(0)
65*91f16700Schasinglulu #define MT_LPM_SMC_ACT_CLR		BIT(1)
66*91f16700Schasinglulu #define MT_LPM_SMC_ACT_GET		BIT(2)
67*91f16700Schasinglulu #define MT_LPM_SMC_ACT_PUSH		BIT(3)
68*91f16700Schasinglulu #define MT_LPM_SMC_ACT_POP		BIT(4)
69*91f16700Schasinglulu #define MT_LPM_SMC_ACT_SUBMIT		BIT(5)
70*91f16700Schasinglulu 
71*91f16700Schasinglulu /* compatible action for legacy smc from lk */
72*91f16700Schasinglulu #define MT_LPM_SMC_ACT_COMPAT		BIT(31)
73*91f16700Schasinglulu 
74*91f16700Schasinglulu enum mt_lpm_spmc_compat_id {
75*91f16700Schasinglulu 	MT_LPM_SPMC_COMPAT_LK_FW_INIT,
76*91f16700Schasinglulu 	MT_LPM_SPMC_COMPAT_LK_MCDI_WDT_DUMP,
77*91f16700Schasinglulu };
78*91f16700Schasinglulu 
79*91f16700Schasinglulu #endif /* MT_LPM_SMC_H */
80