blob: 0117ca9cfe1d24b88dc8de6c8feee5d9de2fd456 [file] [log] [blame]
developer91bb08d2022-09-07 18:41:59 +08001/*
2 * Copyright (c) 2023, 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/*
25 * cpu_pm is used for MCDI to read/write CPC information
26 * spm_dbg is used for spm related debug information
27 * spm is used for spm related settings
28 * cpu_pm_lp is used for MCDI setting irq_remain
29 */
30enum mt_lpm_smc_user_id {
31 MT_LPM_SMC_USER_CPU_PM = 0,
32 MT_LPM_SMC_USER_SPM_DBG,
33 MT_LPM_SMC_USER_SPM,
34 MT_LPM_SMC_USER_CPU_PM_LP,
35 MT_LPM_SMC_USER_SECURE_CPU_PM,
36 MT_LPM_SMC_USER_SECURE_SPM_DBG,
37 MT_LPM_SMC_USER_SECURE_SPM,
38 MT_LPM_SMC_USER_MAX,
39};
40
41#define IS_MT_LPM_SMC(smcid) ((smcid & MT_LPM_SMC_MAGIC_MASK) == MT_LPM_SMC_MAGIC)
42
43/* get real user id */
44#define MT_LPM_SMC_USER(id) ((id >> MT_LPM_SMC_USER_SHIFT) & MT_LPM_SMC_USER_MASK)
45#define MT_LPM_SMC_USER_ID(uid) (uid & MT_LPM_SMC_USER_ID_MASK)
46
47/* sink user id to smc's user id */
48#define MT_LPM_SMC_USER_SINK(user, uid) (((uid & MT_LPM_SMC_USER_ID_MASK) |\
49 ((user & MT_LPM_SMC_USER_MASK) << MT_LPM_SMC_USER_SHIFT)) |\
50 MT_LPM_SMC_MAGIC)
51
52/* sink cpu pm's smc id */
53#define MT_LPM_SMC_USER_ID_CPU_PM(uid) MT_LPM_SMC_USER_SINK(MT_LPM_SMC_USER_CPU_PM, uid)
54/* sink spm's smc id */
55#define MT_LPM_SMC_USER_ID_SPM(uid) MT_LPM_SMC_USER_SINK(MT_LPM_SMC_USER_SPM, uid)
56
57/* sink cpu pm's user id */
58#define MT_LPM_SMC_USER_CPU_PM(uid) MT_LPM_SMC_USER_ID_CPU_PM(uid)
59
60/* sink spm's user id */
61#define MT_LPM_SMC_USER_SPM(uid) MT_LPM_SMC_USER_ID_SPM(uid)
62
63/* behavior */
64#define MT_LPM_SMC_ACT_SET BIT(0)
65#define MT_LPM_SMC_ACT_CLR BIT(1)
66#define MT_LPM_SMC_ACT_GET BIT(2)
67#define MT_LPM_SMC_ACT_PUSH BIT(3)
68#define MT_LPM_SMC_ACT_POP BIT(4)
69#define MT_LPM_SMC_ACT_SUBMIT BIT(5)
70
71/* compatible action for legacy smc from lk */
72#define MT_LPM_SMC_ACT_COMPAT BIT(31)
73
74enum mt_lpm_spmc_compat_id {
75 MT_LPM_SPMC_COMPAT_LK_FW_INIT,
76 MT_LPM_SPMC_COMPAT_LK_MCDI_WDT_DUMP,
77};
78
79#endif /* MT_LPM_SMC_H */