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