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