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