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