mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-23 21:44:15 +00:00

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
129 lines
2.8 KiB
C
129 lines
2.8 KiB
C
/*
|
|
* Copyright (c) 2025, MediaTek Inc. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef MT_LP_API_H
|
|
#define MT_LP_API_H
|
|
|
|
#include <lpm_v2/mt_lp_rm.h>
|
|
|
|
#if MTK_PUBEVENT_ENABLE
|
|
#include <vendor_pubsub_events.h>
|
|
#endif
|
|
|
|
/* UFS clk enum for PLAT_RC_CLKBUF_STATUS */
|
|
enum rc_update_ex_ufs_ref_clk {
|
|
UFS_REF_CLK_OFF = 0,
|
|
UFS_REF_CLK_ON,
|
|
};
|
|
|
|
/* Enum for flight mode */
|
|
enum rc_update_ex_flight_mode {
|
|
FLIGHT_MODE_OFF = 0,
|
|
FLIGHT_MODE_ON,
|
|
};
|
|
|
|
struct mt_lpm_pubevent_data {
|
|
unsigned int u32;
|
|
};
|
|
|
|
enum mt_lpm_pubevents_id {
|
|
MT_LPM_PUBEVENTS_BBLPM_ENTER,
|
|
MT_LPM_PUBEVENTS_BBLPM_LEAVE,
|
|
MT_LPM_PUBEVENTS_TARGET_CORE,
|
|
MT_LPM_PUBEVENTS_SYS_POWER_OFF,
|
|
MT_LPM_PUBEVENTS_SYS_POWER_ON,
|
|
};
|
|
|
|
struct mt_lp_publish_event {
|
|
unsigned int id;
|
|
struct mt_lpm_pubevent_data val;
|
|
unsigned int level;
|
|
};
|
|
|
|
#if MTK_PUBEVENT_ENABLE
|
|
#define MT_LP_PUBLISH_EVENT(x) ({ \
|
|
PUBLISH_EVENT_ARG(lpm_publish_event, (const void *)(x)); })
|
|
#define MT_LP_SUSPEND_PUBLISH_EVENT(x) ({ \
|
|
PUBLISH_EVENT_ARG(suspend_publish_event, (const void *)(x)); })
|
|
|
|
#define MT_LP_SUBSCRIBE_SUSPEND(func) \
|
|
SUBSCRIBE_TO_EVENT(suspend_publish_event, func)
|
|
#define MT_LP_SUBSCRIBE_LPM(func) \
|
|
SUBSCRIBE_TO_EVENT(lpm_publish_event, func)
|
|
#else
|
|
#define MT_LP_PUBLISH_EVENT(x) ({ (void)x; })
|
|
#define MT_LP_SUSPEND_PUBLISH_EVENT(x) ({ (void)x; })
|
|
#define MT_LP_SUBSCRIBE_SUSPEND(func)
|
|
#define MT_LP_SUBSCRIBE_LPM(func)
|
|
#endif
|
|
|
|
/* MTK low power API types for audio */
|
|
enum mt_lp_api_audio_type {
|
|
AUDIO_AFE_ENTER,
|
|
AUDIO_AFE_LEAVE,
|
|
AUDIO_DSP_ENTER,
|
|
AUDIO_DSP_LEAVE,
|
|
};
|
|
|
|
/* MTK low power API types for usb */
|
|
enum mt_lp_api_usb_type {
|
|
LPM_USB_ENTER,
|
|
LPM_USB_LEAVE,
|
|
USB_HEADSET_ENTER,
|
|
USB_HEADSET_LEAVE,
|
|
};
|
|
|
|
int mt_audio_update(int type);
|
|
int mt_usb_update(int type);
|
|
|
|
/* MTK Low Power Scenario Types for logging */
|
|
enum mtk_lp_scenario_status {
|
|
AUDIO_AFE,
|
|
AUDIO_DSP,
|
|
USB_HEADSET,
|
|
MTK_LP_SCENE_NUM,
|
|
};
|
|
|
|
/* MTK Low Power API Types for CCCI */
|
|
enum mt_lp_api_ccci_type {
|
|
CCCI_AP_MDSRC_REQUEST,
|
|
CCCI_AP_MDSRC_RELEASE,
|
|
CCCI_AP_MDSRC_ACK,
|
|
CCCI_AP_MDSRC_GET_SETTLE,
|
|
CCCI_AP_IS_MD_SLEEP,
|
|
};
|
|
|
|
/* System power level */
|
|
#define MT_LP_SYSPOWER_LEVEL_APMCU BIT(0)
|
|
#define MT_LP_SYSPOWER_LEVEL_DRAM BIT(1)
|
|
#define MT_LP_SYSPOWER_LEVEL_SYSPLL BIT(2)
|
|
#define MT_LP_SYSPOWER_LEVEL_PMIC_LP BIT(3)
|
|
#define MT_LP_SYSPOWER_LEVEL_BUS26M BIT(4)
|
|
#define MT_LP_SYSPOWER_LEVEL_VCORE0V BIT(5)
|
|
#define MT_LP_SYSPOWER_LEVEL_SUSPEND BIT(6)
|
|
|
|
|
|
enum mt_lpm_pubevent_wake_src {
|
|
MT_LPM_WAKE_MD_WAKEUP_CCIF0 = 1,
|
|
MT_LPM_WAKE_MD_WAKEUP_CCIF1,
|
|
MT_LPM_WAKE_MD_WAKEUP_CLDMA,
|
|
MT_LPM_WAKE_MD_WAKEUP_DPMAIF,
|
|
MT_LPM_WAKE_MD_WDT,
|
|
};
|
|
|
|
/* MTK Low Power API Types for GPUEB */
|
|
enum mt_lp_api_gpueb_type {
|
|
GPUEB_PLL_EN,
|
|
GPUEB_PLL_DIS,
|
|
GPUEB_GET_PWR_STATUS,
|
|
GPUEB_GET_MFG0_PWR_CON,
|
|
};
|
|
|
|
int mt_ccci_hwctrl(int type, void *priv);
|
|
int mt_gpueb_hwctrl(int type, void *priv);
|
|
uint64_t mt_get_lp_scenario_status(void);
|
|
|
|
#endif /* MT_LP_API_H */
|