1 /*
2  * Copyright (c) 2019, MediaTek Inc. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef MTSPMC_H
8 #define MTSPMC_H
9 
10 /*
11  * CONFIG_SPMC_MODE: Select CPU power control mode.
12  *
13  * 0: Legacy
14  *   Control power flow from SW through SPM register (MP*_PWR_CON).
15  * 1: HW
16  *   Control power flow from SPMC. Most control flow and timing are handled
17  *   by SPMC.
18  */
19 #define SPMC_MODE   1
20 
21 int spmc_init(void);
22 
23 void spm_poweron_cpu(int cluster, int cpu);
24 void spm_poweroff_cpu(int cluster, int cpu);
25 
26 void spm_poweroff_cluster(int cluster);
27 void spm_poweron_cluster(int cluster);
28 
29 int spm_get_cpu_powerstate(int cluster, int cpu);
30 int spm_get_cluster_powerstate(int cluster);
31 int spm_get_powerstate(uint32_t mask);
32 
33 void spm_enable_cpu_auto_off(int cluster, int cpu);
34 void spm_disable_cpu_auto_off(int cluster, int cpu);
35 void spm_set_cpu_power_off(int cluster, int cpu);
36 void spm_enable_cluster_auto_off(int cluster);
37 
38 void mcucfg_init_archstate(int cluster, int cpu, int arm64);
39 void mcucfg_set_bootaddr(int cluster, int cpu, uintptr_t bootaddr);
40 uintptr_t mcucfg_get_bootaddr(int cluster, int cpu);
41 
42 #endif /* MTSPMC_H */
43