arm-trusted-firmware/plat/mediatek/include/lpm_v2/mt_lpm_smc.h
Wenzhen Yu da8cc41bc8 feat(mt8196): add LPM v2 support
LPM means low power module, it will connect idle and SPM to achieve
lower power consumption in some scenarios, and this patch is LPM
second version

Signed-off-by: Wenzhen Yu <wenzhen.yu@mediatek.corp-partner.google.com>
Change-Id: I6ae5b5b4c2056d08c29efab5116be3a92351d8f1
2025-01-22 15:28:08 +08:00

68 lines
1.8 KiB
C

/*
* Copyright (c) 2025, MediaTek Inc. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef MT_LPM_SMC_H
#define MT_LPM_SMC_H
/*
* MTK LPM smc user format:
* bit[31:24]: magic number
* bit[23:16]: user number
* bit[15:00]: user id
*/
#define MT_LPM_SMC_MAGIC 0xDA000000
#define MT_LPM_SMC_MAGIC_MASK 0xFF000000
#define MT_LPM_SMC_USER_MASK 0xFF
#define MT_LPM_SMC_USER_SHIFT 16
#define MT_LPM_SMC_USER_ID_MASK 0x0000FFFF
enum mt_lpm_smc_user_id {
MT_LPM_SMC_USER_CPU_PM = 0,
MT_LPM_SMC_USER_SPM_DBG,
MT_LPM_SMC_USER_SPM,
MT_LPM_SMC_USER_CPU_PM_LP,
MT_LPM_SMC_USER_SECURE_CPU_PM,
MT_LPM_SMC_USER_SECURE_SPM_DBG,
MT_LPM_SMC_USER_SECURE_SPM,
MT_LPM_SMC_USER_MAX,
};
#define IS_MT_LPM_SMC(smcid) \
(((smcid) & MT_LPM_SMC_MAGIC_MASK) == MT_LPM_SMC_MAGIC)
#define MT_LPM_SMC_USER(id) \
(((id) >> MT_LPM_SMC_USER_SHIFT) & MT_LPM_SMC_USER_MASK)
#define MT_LPM_SMC_USER_ID(uid) (uid & MT_LPM_SMC_USER_ID_MASK)
#define MT_LPM_SMC_USER_SINK(user, uid) \
((((uid) & MT_LPM_SMC_USER_ID_MASK) | \
(((user) & MT_LPM_SMC_USER_MASK) << MT_LPM_SMC_USER_SHIFT)) | \
MT_LPM_SMC_MAGIC)
#define MT_LPM_SMC_USER_ID_CPU_PM(uid) \
MT_LPM_SMC_USER_SINK(MT_LPM_SMC_USER_CPU_PM, uid)
#define MT_LPM_SMC_USER_ID_SPM(uid) \
MT_LPM_SMC_USER_SINK(MT_LPM_SMC_USER_SPM, uid)
#define MT_LPM_SMC_USER_CPU_PM(uid) MT_LPM_SMC_USER_ID_CPU_PM(uid)
#define MT_LPM_SMC_USER_SPM(uid) MT_LPM_SMC_USER_ID_SPM(uid)
/* Behavior */
#define MT_LPM_SMC_ACT_SET BIT(0)
#define MT_LPM_SMC_ACT_CLR BIT(1)
#define MT_LPM_SMC_ACT_GET BIT(2)
#define MT_LPM_SMC_ACT_PUSH BIT(3)
#define MT_LPM_SMC_ACT_POP BIT(4)
#define MT_LPM_SMC_ACT_SUBMIT BIT(5)
/* Compatible action for legacy smc from lk */
#define MT_LPM_SMC_ACT_COMPAT BIT(31)
enum mt_lpm_spmc_compat_id {
MT_LPM_SPMC_COMPAT_LK_FW_INIT,
MT_LPM_SPMC_COMPAT_LK_MCDI_WDT_DUMP,
};
#endif /* MT_LPM_SMC_H */