xref: /rk3399_ARM-atf/plat/mediatek/drivers/cpu_pm/cpcv3_2/mt_smp.h (revision 3fb300a9648c4aafc13eb48d545d2d14908cbad3)
14fe7e6a8SEdward-JW Yang /*
24fe7e6a8SEdward-JW Yang  * Copyright (c) 2022, MediaTek Inc. All rights reserved.
34fe7e6a8SEdward-JW Yang  *
44fe7e6a8SEdward-JW Yang  * SPDX-License-Identifier: BSD-3-Clause
54fe7e6a8SEdward-JW Yang  */
64fe7e6a8SEdward-JW Yang 
74fe7e6a8SEdward-JW Yang #ifndef MT_SMP_H
84fe7e6a8SEdward-JW Yang #define MT_SMP_H
94fe7e6a8SEdward-JW Yang 
104fe7e6a8SEdward-JW Yang #include <lib/mmio.h>
114fe7e6a8SEdward-JW Yang #include <platform_def.h>
124fe7e6a8SEdward-JW Yang 
13*b8d63a7aSKai Liang /* === SPM related registers */
14*b8d63a7aSKai Liang #define SPM_POWERON_CONFIG_EN		(SPM_BASE + 0x000)
154fe7e6a8SEdward-JW Yang #define CPU_PWR_STATUS			(MCUCFG_BASE + 0xA840)
16*b8d63a7aSKai Liang /* bit-fields of SPM_POWERON_CONFIG_EN */
17*b8d63a7aSKai Liang #define PROJECT_CODE			(0xB16U << 16)
18*b8d63a7aSKai Liang #define BCLK_CG_EN			BIT(0)
194fe7e6a8SEdward-JW Yang 
204fe7e6a8SEdward-JW Yang #define SMP_CORE_TIMEOUT_MAX		(50000)
214fe7e6a8SEdward-JW Yang #define DO_SMP_CORE_ON_WAIT_TIMEOUT(k_cnt) ({ \
224fe7e6a8SEdward-JW Yang 		CPU_PM_ASSERT(k_cnt < SMP_CORE_TIMEOUT_MAX); \
234fe7e6a8SEdward-JW Yang 		k_cnt++; udelay(1); })
244fe7e6a8SEdward-JW Yang 
254fe7e6a8SEdward-JW Yang void mt_smp_core_init_arch(unsigned int cluster, unsigned int cpu, int arm64,
264fe7e6a8SEdward-JW Yang 			   struct cpu_pwr_ctrl *pwr_ctrl);
274fe7e6a8SEdward-JW Yang void mt_smp_core_bootup_address_set(struct cpu_pwr_ctrl *pwr_ctrl, uintptr_t entry);
284fe7e6a8SEdward-JW Yang int mt_smp_power_core_on(unsigned int cpu_id, struct cpu_pwr_ctrl *pwr_ctrl);
294fe7e6a8SEdward-JW Yang int mt_smp_power_core_off(struct cpu_pwr_ctrl *pwr_ctrl);
304fe7e6a8SEdward-JW Yang void mt_smp_init(void);
314fe7e6a8SEdward-JW Yang 
324fe7e6a8SEdward-JW Yang #endif /* MT_SMP_H */
33