1 /* 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 */ 30 enum 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 74 enum 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 */ 80