xref: /rk3399_ARM-atf/plat/mediatek/include/lib/pm/mtk_pm.h (revision fcb80d7d14196ff4ca454cd4f9cc6864600c333e)
14ba679daSKai Liang /*
24ba679daSKai Liang  * Copyright (c) 2025, Mediatek Inc. All rights reserved.
34ba679daSKai Liang  *
44ba679daSKai Liang  * SPDX-License-Identifier: BSD-3-Clause
54ba679daSKai Liang  */
64ba679daSKai Liang 
74ba679daSKai Liang #ifndef MTK_PM_H
84ba679daSKai Liang #define MTK_PM_H
94ba679daSKai Liang #include <lib/psci/psci.h>
104ba679daSKai Liang 
114ba679daSKai Liang #if MTK_PUBEVENT_ENABLE
124ba679daSKai Liang #include <vendor_pubsub_events.h>
134ba679daSKai Liang #endif
144ba679daSKai Liang 
154ba679daSKai Liang #define MTK_CPUPM_E_OK				0
164ba679daSKai Liang #define MTK_CPUPM_E_UNKNOWN			-1
174ba679daSKai Liang #define MTK_CPUPM_E_ERR				-2
184ba679daSKai Liang #define MTK_CPUPM_E_FAIL			-3
194ba679daSKai Liang #define MTK_CPUPM_E_NOT_SUPPORT			-4
204ba679daSKai Liang 
214ba679daSKai Liang #define MTK_CPUPM_FN_PWR_LOCK_AQUIRE		BIT(0)
224ba679daSKai Liang #define MTK_CPUPM_FN_INIT			BIT(1)
234ba679daSKai Liang #define MTK_CPUPM_FN_PWR_STATE_VALID		BIT(2)
244ba679daSKai Liang #define MTK_CPUPM_FN_PWR_ON_CORE_PREPARE	BIT(3)
254ba679daSKai Liang #define MTK_CPUPM_FN_SUSPEND_CORE		BIT(4)
264ba679daSKai Liang #define MTK_CPUPM_FN_RESUME_CORE		BIT(5)
274ba679daSKai Liang #define MTK_CPUPM_FN_SUSPEND_CLUSTER		BIT(6)
284ba679daSKai Liang #define MTK_CPUPM_FN_RESUME_CLUSTER		BIT(7)
294ba679daSKai Liang #define MTK_CPUPM_FN_SUSPEND_MCUSYS		BIT(8)
304ba679daSKai Liang #define MTK_CPUPM_FN_RESUME_MCUSYS		BIT(9)
314ba679daSKai Liang #define MTK_CPUPM_FN_CPUPM_GET_PWR_STATE	BIT(10)
324ba679daSKai Liang #define MTK_CPUPM_FN_SMP_INIT			BIT(11)
334ba679daSKai Liang #define MTK_CPUPM_FN_SMP_CORE_ON		BIT(12)
344ba679daSKai Liang #define MTK_CPUPM_FN_SMP_CORE_OFF		BIT(13)
354ba679daSKai Liang #define MTK_CPUPM_FN_PWR_DOMAIN_POWER_DOWN_WFI	BIT(14)
364ba679daSKai Liang 
374ba679daSKai Liang enum mtk_cpupm_pstate {
384ba679daSKai Liang 	MTK_CPUPM_CORE_ON,
394ba679daSKai Liang 	MTK_CPUPM_CORE_OFF,
404ba679daSKai Liang 	MTK_CPUPM_CORE_SUSPEND,
414ba679daSKai Liang 	MTK_CPUPM_CORE_RESUME,
424ba679daSKai Liang 	MTK_CPUPM_CLUSTER_SUSPEND,
434ba679daSKai Liang 	MTK_CPUPM_CLUSTER_RESUME,
444ba679daSKai Liang 	MTK_CPUPM_MCUSYS_SUSPEND,
454ba679daSKai Liang 	MTK_CPUPM_MCUSYS_RESUME,
464ba679daSKai Liang };
474ba679daSKai Liang 
484ba679daSKai Liang enum mtk_cpu_pm_mode {
494ba679daSKai Liang 	MTK_CPU_PM_CPUIDLE,
504ba679daSKai Liang 	MTK_CPU_PM_SMP,
514ba679daSKai Liang };
524ba679daSKai Liang 
534ba679daSKai Liang #define MT_IRQ_REMAIN_MAX       32
544ba679daSKai Liang #define MT_IRQ_REMAIN_CAT_LOG   BIT(31)
554ba679daSKai Liang 
564ba679daSKai Liang struct mt_irqremain {
574ba679daSKai Liang 	unsigned int count;
584ba679daSKai Liang 	unsigned int irqs[MT_IRQ_REMAIN_MAX];
594ba679daSKai Liang 	unsigned int wakeupsrc_cat[MT_IRQ_REMAIN_MAX];
604ba679daSKai Liang 	unsigned int wakeupsrc[MT_IRQ_REMAIN_MAX];
614ba679daSKai Liang };
624ba679daSKai Liang 
634ba679daSKai Liang typedef void (*plat_init_func)(unsigned int, uintptr_t);
644ba679daSKai Liang struct plat_pm_smp_ctrl {
654ba679daSKai Liang 	plat_init_func init;
664ba679daSKai Liang 	int (*pwr_domain_on)(u_register_t mpidr);
674ba679daSKai Liang 	void (*pwr_domain_off)(const psci_power_state_t *target_state);
684ba679daSKai Liang 	void (*pwr_domain_on_finish)(const psci_power_state_t *target_state);
694ba679daSKai Liang };
704ba679daSKai Liang 
714ba679daSKai Liang struct plat_pm_pwr_ctrl {
724ba679daSKai Liang 	void (*pwr_domain_suspend)(const psci_power_state_t *target_state);
734ba679daSKai Liang 	void (*pwr_domain_on_finish_late)(
744ba679daSKai Liang 				const psci_power_state_t *target_state);
754ba679daSKai Liang 	void (*pwr_domain_suspend_finish)(
764ba679daSKai Liang 				const psci_power_state_t *target_state);
774ba679daSKai Liang 	int (*validate_power_state)(unsigned int power_state,
784ba679daSKai Liang 				    psci_power_state_t *req_state);
794ba679daSKai Liang 	void (*get_sys_suspend_power_state)(
804ba679daSKai Liang 				    psci_power_state_t *req_state);
81*2bd3b397SBoyan Karatotev 	void (*pwr_domain_pwr_down_wfi)(
824ba679daSKai Liang 				const psci_power_state_t *req_state);
834ba679daSKai Liang };
844ba679daSKai Liang 
854ba679daSKai Liang struct plat_pm_reset_ctrl {
864ba679daSKai Liang 	__dead2 void (*system_off)();
874ba679daSKai Liang 	__dead2 void (*system_reset)();
884ba679daSKai Liang 	int (*system_reset2)(int is_vendor,
894ba679daSKai Liang 			     int reset_type,
904ba679daSKai Liang 			     u_register_t cookie);
914ba679daSKai Liang };
924ba679daSKai Liang 
934ba679daSKai Liang struct mtk_cpu_pm_info {
944ba679daSKai Liang 	unsigned int cpuid;
954ba679daSKai Liang 	unsigned int mode;
964ba679daSKai Liang };
974ba679daSKai Liang 
984ba679daSKai Liang struct mtk_cpu_pm_state {
994ba679daSKai Liang 	unsigned int afflv;
1004ba679daSKai Liang 	unsigned int state_id;
1014ba679daSKai Liang 	const psci_power_state_t *raw;
1024ba679daSKai Liang };
1034ba679daSKai Liang 
1044ba679daSKai Liang struct mtk_cpupm_pwrstate {
1054ba679daSKai Liang 	struct mtk_cpu_pm_info info;
1064ba679daSKai Liang 	struct mtk_cpu_pm_state pwr;
1074ba679daSKai Liang };
1084ba679daSKai Liang 
1094ba679daSKai Liang struct mtk_cpu_smp_ops {
1104ba679daSKai Liang 	void (*init)(unsigned int cpu, uintptr_t sec_entrypoint);
1114ba679daSKai Liang 	int (*cpu_pwr_on_prepare)(unsigned int cpu, uintptr_t entry);
1124ba679daSKai Liang 	void (*cpu_on)(const struct mtk_cpupm_pwrstate *state);
1134ba679daSKai Liang 	void (*cpu_off)(const struct mtk_cpupm_pwrstate *state);
1144ba679daSKai Liang 	int (*invoke)(unsigned int funcID, void *priv);
1154ba679daSKai Liang };
1164ba679daSKai Liang 
1174ba679daSKai Liang #define CPUPM_PWR_REQ_UID_MAGIC		0x1103BAAD
1184ba679daSKai Liang 
1194ba679daSKai Liang #ifdef CPU_PM_PWR_REQ_DEBUG
1204ba679daSKai Liang #define DECLARE_CPUPM_PWR_REQ(var_name)\
1214ba679daSKai Liang 	static struct cpupm_pwr_req var_name = {\
1224ba679daSKai Liang 		.stat.name = #var_name,\
1234ba679daSKai Liang 		.stat.uid = CPUPM_PWR_REQ_UID_MAGIC,\
1244ba679daSKai Liang 		.stat.sta_req = 0,\
1254ba679daSKai Liang 	}
1264ba679daSKai Liang #else
1274ba679daSKai Liang #define DECLARE_CPUPM_PWR_REQ(name)\
1284ba679daSKai Liang 	static struct cpupm_pwr_req name = {\
1294ba679daSKai Liang 		.stat.uid = CPUPM_PWR_REQ_UID_MAGIC,\
1304ba679daSKai Liang 		.stat.sta_req = 0,\
1314ba679daSKai Liang 	}
1324ba679daSKai Liang #endif
1334ba679daSKai Liang 
1344ba679daSKai Liang #define CPUPM_PWR_REQ_ACTIVE(_cpupm_req) ({\
1354ba679daSKai Liang 	int in_ret;\
1364ba679daSKai Liang 	in_ret = plat_pm_invoke_func(MTK_CPU_PM_CPUIDLE,\
1374ba679daSKai Liang 			    CPUPM_INVOKE_PWR_REQ_ACTIVE,\
1384ba679daSKai Liang 			    &_cpupm_req);\
1394ba679daSKai Liang 	in_ret; })
1404ba679daSKai Liang 
1414ba679daSKai Liang #define CPUPM_PWR_REQ_ACQUIRE(_cpupm_req, _pm_req) ({\
1424ba679daSKai Liang 	int in_ret;\
1434ba679daSKai Liang 	_cpupm_req.req = _pm_req;\
1444ba679daSKai Liang 	in_ret = plat_pm_invoke_func(MTK_CPU_PM_CPUIDLE,\
1454ba679daSKai Liang 			    CPUPM_INVOKE_PWR_REQ_ACQUIRE,\
1464ba679daSKai Liang 			    &_cpupm_req);\
1474ba679daSKai Liang 	in_ret; })
1484ba679daSKai Liang 
1494ba679daSKai Liang #define CPUPM_PWR_REQ_RELEASE(_cpupm_req, _pm_req) ({\
1504ba679daSKai Liang 	int in_ret;\
1514ba679daSKai Liang 	_cpupm_req.req = _pm_req;\
1524ba679daSKai Liang 	in_ret = plat_pm_invoke_func(MTK_CPU_PM_CPUIDLE,\
1534ba679daSKai Liang 			    CPUPM_INVOKE_PWR_REQ_RELASE,\
1544ba679daSKai Liang 			    &_cpupm_req);\
1554ba679daSKai Liang 	in_ret; })
1564ba679daSKai Liang 
1574ba679daSKai Liang struct cpupm_pwr_stat_req {
1584ba679daSKai Liang 	unsigned int sta_req;
1594ba679daSKai Liang 	unsigned int uid;
1604ba679daSKai Liang #ifdef CPU_PM_PWR_REQ_DEBUG
1614ba679daSKai Liang 	const char *name;
1624ba679daSKai Liang #endif
1634ba679daSKai Liang };
1644ba679daSKai Liang 
1654ba679daSKai Liang struct cpupm_pwr_req {
1664ba679daSKai Liang 	unsigned int req;
1674ba679daSKai Liang 	struct cpupm_pwr_stat_req stat;
1684ba679daSKai Liang };
1694ba679daSKai Liang 
1704ba679daSKai Liang struct cpupm_invoke_data {
1714ba679daSKai Liang 	union {
1724ba679daSKai Liang 		unsigned int v_u32;
1734ba679daSKai Liang 		struct cpupm_pwr_req *req;
1744ba679daSKai Liang 	} val;
1754ba679daSKai Liang };
1764ba679daSKai Liang 
1774ba679daSKai Liang enum cpupm_invoke_func_id {
1784ba679daSKai Liang 	/* Get regular active cpumask */
1794ba679daSKai Liang 	CPUPM_INVOKE_WAKED_CPU = 0,
1804ba679daSKai Liang 	CPUPM_INVOKE_PWR_REQ_ACTIVE,
1814ba679daSKai Liang 	CPUPM_INVOKE_PWR_REQ_ACQUIRE,
1824ba679daSKai Liang 	CPUPM_INVOKE_PWR_REQ_RELASE,
1834ba679daSKai Liang };
1844ba679daSKai Liang 
1854ba679daSKai Liang #define MT_CPUPM_MCUSYS_REQ	(MT_CPUPM_PWR_DOMAIN_MCUSYS | \
1864ba679daSKai Liang 				 MT_CPUPM_PWR_DOMAIN_MCUSYS_BY_CLUSTER)
1874ba679daSKai Liang #define MT_CPUPM_PWR_DOMAIN_CORE		BIT(0)
1884ba679daSKai Liang #define MT_CPUPM_PWR_DOMAIN_PERCORE_DSU		BIT(1)
1894ba679daSKai Liang #define MT_CPUPM_PWR_DOMAIN_PERCORE_DSU_MEM	BIT(2)
1904ba679daSKai Liang #define MT_CPUPM_PWR_DOMAIN_CLUSTER		BIT(3)
1914ba679daSKai Liang #define MT_CPUPM_PWR_DOMAIN_MCUSYS		BIT(4)
1924ba679daSKai Liang #define MT_CPUPM_PWR_DOMAIN_SUSPEND		BIT(5)
1934ba679daSKai Liang #define MT_CPUPM_PWR_DOMAIN_MCUSYS_BY_CLUSTER	BIT(6)
1944ba679daSKai Liang 
1954ba679daSKai Liang enum mt_cpupm_pwr_domain {
1964ba679daSKai Liang 	CPUPM_PWR_ON,
1974ba679daSKai Liang 	CPUPM_PWR_OFF,
1984ba679daSKai Liang };
1994ba679daSKai Liang 
2004ba679daSKai Liang #define mtk_pstate_type	unsigned int
2014ba679daSKai Liang 
2024ba679daSKai Liang struct mtk_cpu_pm_ops {
2034ba679daSKai Liang 	void (*init)(unsigned int cpu, uintptr_t sec_entrypoint);
2044ba679daSKai Liang 
2054ba679daSKai Liang 	unsigned int (*get_pstate)(enum mt_cpupm_pwr_domain domain,
2064ba679daSKai Liang 				   const mtk_pstate_type psci_state,
2074ba679daSKai Liang 				   const struct mtk_cpupm_pwrstate *state);
2084ba679daSKai Liang 
2094ba679daSKai Liang 	int (*pwr_state_valid)(unsigned int afflv, unsigned int state);
2104ba679daSKai Liang 
2114ba679daSKai Liang 	void (*cpu_suspend)(const struct mtk_cpupm_pwrstate *state);
2124ba679daSKai Liang 	void (*cpu_resume)(const struct mtk_cpupm_pwrstate *state);
2134ba679daSKai Liang 
2144ba679daSKai Liang 	void (*cluster_suspend)(const struct mtk_cpupm_pwrstate *state);
2154ba679daSKai Liang 	void (*cluster_resume)(const struct mtk_cpupm_pwrstate *state);
2164ba679daSKai Liang 
2174ba679daSKai Liang 	void (*mcusys_suspend)(const struct mtk_cpupm_pwrstate *state);
2184ba679daSKai Liang 	void (*mcusys_resume)(const struct mtk_cpupm_pwrstate *state);
2194ba679daSKai Liang 	int (*pwr_domain_pwr_down_wfi)(unsigned int cpu);
2204ba679daSKai Liang 
2214ba679daSKai Liang 	int (*invoke)(unsigned int funcID, void *priv);
2224ba679daSKai Liang };
2234ba679daSKai Liang 
2244ba679daSKai Liang int register_cpu_pm_ops(unsigned int fn_flags, struct mtk_cpu_pm_ops *ops);
2254ba679daSKai Liang int register_cpu_smp_ops(unsigned int fn_flags, struct mtk_cpu_smp_ops *ops);
2264ba679daSKai Liang 
2274ba679daSKai Liang struct mt_cpupm_event_data {
2284ba679daSKai Liang 	unsigned int cpuid;
2294ba679daSKai Liang 	unsigned int pwr_domain;
2304ba679daSKai Liang };
2314ba679daSKai Liang 
2324ba679daSKai Liang /* Extension event for platform driver */
2334ba679daSKai Liang #if MTK_PUBEVENT_ENABLE
2344ba679daSKai Liang /* [PUB_EVENT] Core power on */
2354ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_EVENT_PWR_ON(_fn) \
2364ba679daSKai Liang 	SUBSCRIBE_TO_EVENT(mt_cpupm_publish_pwr_on, _fn)
2374ba679daSKai Liang 
2384ba679daSKai Liang /* [PUB_EVENT] Core power off */
2394ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_EVENT_PWR_OFF(_fn) \
2404ba679daSKai Liang 	SUBSCRIBE_TO_EVENT(mt_cpupm_publish_pwr_off, _fn)
2414ba679daSKai Liang 
2424ba679daSKai Liang /* [PUB_EVENT] Cluster power on */
2434ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_CLUSTER_PWR_ON(_fn) \
2444ba679daSKai Liang 	SUBSCRIBE_TO_EVENT(mt_cpupm_publish_afflv_pwr_on, _fn)
2454ba679daSKai Liang 
2464ba679daSKai Liang /* [PUB_EVENT] Cluster power off */
2474ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_CLUSTER_PWR_OFF(_fn) \
2484ba679daSKai Liang 	SUBSCRIBE_TO_EVENT(mt_cpupm_publish_afflv_pwr_off, _fn)
2494ba679daSKai Liang 
2504ba679daSKai Liang /* [PUB_EVENT] Mcusys power on */
2514ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_MCUSYS_PWR_ON(_fn) \
2524ba679daSKai Liang 	SUBSCRIBE_TO_EVENT(mt_cpupm_publish_afflv_pwr_on, _fn)
2534ba679daSKai Liang 
2544ba679daSKai Liang /* [PUB_EVENT] Mcusys power off */
2554ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_MCUSYS_PWR_OFF(_fn) \
2564ba679daSKai Liang 	SUBSCRIBE_TO_EVENT(mt_cpupm_publish_afflv_pwr_off, _fn)
2574ba679daSKai Liang 
2584ba679daSKai Liang /* [PUB_EVENT] el3 time sync */
2594ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_EL3_UPTIME_SYNC_WITH_KERNEL(_fn) \
2604ba679daSKai Liang 	SUBSCRIBE_TO_EVENT(el3_uptime_sync_with_kernel, _fn)
2614ba679daSKai Liang #else
2624ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_EVENT_PWR_ON(_fn)
2634ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_EVENT_PWR_OFF(_fn)
2644ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_CLUSTER_PWR_ON(_fn)
2654ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_CLUSTER_PWR_OFF(_fn)
2664ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_MCUSYS_PWR_ON(_fn)
2674ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_MCUSYS_PWR_OFF(_fn)
2684ba679daSKai Liang #define MT_CPUPM_SUBCRIBE_EL3_UPTIME_SYNC_WITH_KERNEL(_fn)
2694ba679daSKai Liang #endif
2704ba679daSKai Liang 
2714ba679daSKai Liang /*
2724ba679daSKai Liang  * Definition c-state power domain.
2734ba679daSKai Liang  * bit 0:	Cluster
2744ba679daSKai Liang  * bit 1:	CPU buck
2754ba679daSKai Liang  * bit 2:	Mcusys
2764ba679daSKai Liang  * bit 3:	Memory
2774ba679daSKai Liang  * bit 4:	System pll
2784ba679daSKai Liang  * bit 5:	System bus
2794ba679daSKai Liang  * bit 6:	SoC 26m/DCXO
2804ba679daSKai Liang  * bit 7:	Vcore buck
2814ba679daSKai Liang  * bit 8~14:	Reserved
2824ba679daSKai Liang  * bit 15:	Suspend
2834ba679daSKai Liang  */
2844ba679daSKai Liang #define MT_PLAT_PWR_STATE_CLUSTER			0x0001
2854ba679daSKai Liang #define MT_PLAT_PWR_STATE_MCUSYS			0x0005
2864ba679daSKai Liang #define MT_PLAT_PWR_STATE_MCUSYS_BUCK			0x0007
2874ba679daSKai Liang #define MT_PLAT_PWR_STATE_SYSTEM_MEM			0x000F
2884ba679daSKai Liang #define MT_PLAT_PWR_STATE_SYSTEM_PLL			0x001F
2894ba679daSKai Liang #define MT_PLAT_PWR_STATE_SYSTEM_BUS			0x007F
2904ba679daSKai Liang #define MT_PLAT_PWR_STATE_SYSTEM_VCORE			0x00FF
2914ba679daSKai Liang #define MT_PLAT_PWR_STATE_SUSPEND			0x80FF
2924ba679daSKai Liang 
2934ba679daSKai Liang #define IS_MT_PLAT_PWR_STATE(_state, _tar)		\
2944ba679daSKai Liang 	(((_state) & _tar) == _tar)
2954ba679daSKai Liang #define IS_MT_PLAT_PWR_STATE_MCUSYS(state)		\
2964ba679daSKai Liang 	IS_MT_PLAT_PWR_STATE(state, MT_PLAT_PWR_STATE_MCUSYS)
2974ba679daSKai Liang #define IS_MT_PLAT_PWR_STATE_SYSTEM(state)		((state) & 0x7ff8)
2984ba679daSKai Liang 
2994ba679daSKai Liang #ifdef PLAT_AFFLV_SYSTEM
3004ba679daSKai Liang #define PLAT_MT_SYSTEM_SUSPEND		PLAT_AFFLV_SYSTEM
3014ba679daSKai Liang #else
3024ba679daSKai Liang #define PLAT_MT_SYSTEM_SUSPEND		PLAT_MAX_OFF_STATE
3034ba679daSKai Liang #endif
3044ba679daSKai Liang 
3054ba679daSKai Liang #ifdef PLAT_AFFLV_CLUSTER
3064ba679daSKai Liang #define PLAT_MT_CPU_SUSPEND_CLUSTER	PLAT_AFFLV_CLUSTER
3074ba679daSKai Liang #else
3084ba679daSKai Liang #define PLAT_MT_CPU_SUSPEND_CLUSTER	PLAT_MAX_RET_STATE
3094ba679daSKai Liang #endif
3104ba679daSKai Liang 
3114ba679daSKai Liang #ifdef PLAT_AFFLV_MCUSYS
3124ba679daSKai Liang #define PLAT_MT_CPU_SUSPEND_MCUSYS	PLAT_AFFLV_MCUSYS
3134ba679daSKai Liang #else
3144ba679daSKai Liang #define PLAT_MT_CPU_SUSPEND_MCUSYS	PLAT_MAX_RET_STATE
3154ba679daSKai Liang #endif
3164ba679daSKai Liang 
3174ba679daSKai Liang #define IS_PLAT_SYSTEM_SUSPEND(aff)	((aff) == PLAT_MT_SYSTEM_SUSPEND)
3184ba679daSKai Liang #define IS_PLAT_SYSTEM_RETENTION(aff)	((aff) >= PLAT_MAX_RET_STATE)
3194ba679daSKai Liang 
3204ba679daSKai Liang #define IS_PLAT_SUSPEND_ID(stateid) \
3214ba679daSKai Liang 	((stateid) == MT_PLAT_PWR_STATE_SUSPEND)
3224ba679daSKai Liang 
3234ba679daSKai Liang #define IS_PLAT_MCUSYSOFF_AFFLV(_afflv) \
3244ba679daSKai Liang 	((_afflv) >= PLAT_MT_CPU_SUSPEND_MCUSYS)
3254ba679daSKai Liang 
3264ba679daSKai Liang int plat_pm_ops_setup_pwr(struct plat_pm_pwr_ctrl *ops);
3274ba679daSKai Liang 
3284ba679daSKai Liang int plat_pm_ops_setup_reset(struct plat_pm_reset_ctrl *ops);
3294ba679daSKai Liang 
3304ba679daSKai Liang int plat_pm_ops_setup_smp(struct plat_pm_smp_ctrl *ops);
3314ba679daSKai Liang 
3324ba679daSKai Liang uintptr_t plat_pm_get_warm_entry(void);
3334ba679daSKai Liang 
3344ba679daSKai Liang int plat_pm_invoke_func(enum mtk_cpu_pm_mode mode, unsigned int id, void *priv);
3354ba679daSKai Liang 
3364ba679daSKai Liang #endif
337