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