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