xref: /rk3399_ARM-atf/plat/mediatek/include/lpm_v2/mt_lpm_smc.h (revision e7be9243d071b37d13d826824ec4bb8c8b39caa2)
1 /*
2  * Copyright (c) 2025, MediaTek Inc. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef MT_LPM_SMC_H
8 #define MT_LPM_SMC_H
9 
10 /*
11  * MTK LPM smc user format:
12  * bit[31:24]: magic number
13  * bit[23:16]: user number
14  * bit[15:00]: user id
15  */
16 
17 #define MT_LPM_SMC_MAGIC	0xDA000000
18 #define MT_LPM_SMC_MAGIC_MASK	0xFF000000
19 #define MT_LPM_SMC_USER_MASK	0xFF
20 #define MT_LPM_SMC_USER_SHIFT	16
21 
22 #define MT_LPM_SMC_USER_ID_MASK	0x0000FFFF
23 
24 enum mt_lpm_smc_user_id {
25 	MT_LPM_SMC_USER_CPU_PM = 0,
26 	MT_LPM_SMC_USER_SPM_DBG,
27 	MT_LPM_SMC_USER_SPM,
28 	MT_LPM_SMC_USER_CPU_PM_LP,
29 	MT_LPM_SMC_USER_SECURE_CPU_PM,
30 	MT_LPM_SMC_USER_SECURE_SPM_DBG,
31 	MT_LPM_SMC_USER_SECURE_SPM,
32 	MT_LPM_SMC_USER_MAX,
33 };
34 
35 #define IS_MT_LPM_SMC(smcid) \
36 	(((smcid) & MT_LPM_SMC_MAGIC_MASK) == MT_LPM_SMC_MAGIC)
37 #define MT_LPM_SMC_USER(id) \
38 	(((id) >> MT_LPM_SMC_USER_SHIFT) & MT_LPM_SMC_USER_MASK)
39 #define MT_LPM_SMC_USER_ID(uid)	(uid & MT_LPM_SMC_USER_ID_MASK)
40 #define MT_LPM_SMC_USER_SINK(user, uid)	\
41 	((((uid) & MT_LPM_SMC_USER_ID_MASK) | \
42 	(((user) & MT_LPM_SMC_USER_MASK) << MT_LPM_SMC_USER_SHIFT)) | \
43 	MT_LPM_SMC_MAGIC)
44 #define MT_LPM_SMC_USER_ID_CPU_PM(uid) \
45 	MT_LPM_SMC_USER_SINK(MT_LPM_SMC_USER_CPU_PM, uid)
46 #define MT_LPM_SMC_USER_ID_SPM(uid) \
47 	MT_LPM_SMC_USER_SINK(MT_LPM_SMC_USER_SPM, uid)
48 #define MT_LPM_SMC_USER_CPU_PM(uid)	MT_LPM_SMC_USER_ID_CPU_PM(uid)
49 
50 #define MT_LPM_SMC_USER_SPM(uid)	MT_LPM_SMC_USER_ID_SPM(uid)
51 
52 /* Behavior */
53 #define MT_LPM_SMC_ACT_SET	BIT(0)
54 #define MT_LPM_SMC_ACT_CLR	BIT(1)
55 #define MT_LPM_SMC_ACT_GET	BIT(2)
56 #define MT_LPM_SMC_ACT_PUSH	BIT(3)
57 #define MT_LPM_SMC_ACT_POP	BIT(4)
58 #define MT_LPM_SMC_ACT_SUBMIT	BIT(5)
59 
60 /* Compatible action for legacy smc from lk */
61 #define MT_LPM_SMC_ACT_COMPAT	BIT(31)
62 
63 enum mt_lpm_spmc_compat_id {
64 	MT_LPM_SPMC_COMPAT_LK_FW_INIT,
65 	MT_LPM_SPMC_COMPAT_LK_MCDI_WDT_DUMP,
66 };
67 
68 #endif /* MT_LPM_SMC_H */
69