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