1 /*
2  * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef __CSS_SCP_H__
8 #define __CSS_SCP_H__
9 
10 #include <cassert.h>
11 #include <platform_def.h>
12 #include <types.h>
13 
14 /* Forward declarations */
15 struct psci_power_state;
16 
17 /* API for power management by SCP */
18 int css_system_reset2(int is_vendor, int reset_type, u_register_t cookie);
19 void css_scp_suspend(const struct psci_power_state *target_state);
20 void css_scp_off(const struct psci_power_state *target_state);
21 void css_scp_on(u_register_t mpidr);
22 int css_scp_get_power_state(u_register_t mpidr, unsigned int power_level);
23 void __dead2 css_scp_sys_shutdown(void);
24 void __dead2 css_scp_sys_reboot(void);
25 void __dead2 css_scp_system_off(int state);
26 
27 /* API for SCP Boot Image transfer. Return 0 on success, -1 on error */
28 int css_scp_boot_image_xfer(void *image, unsigned int image_size);
29 
30 /*
31  * API to wait for SCP to signal till it's ready after booting the transferred
32  * image.
33  */
34 int css_scp_boot_ready(void);
35 
36 #if CSS_LOAD_SCP_IMAGES
37 /*
38  * All CSS platforms load SCP_BL2/SCP_BL2U just below BL rw-data and above
39  * BL2/BL2U (this is where BL31 usually resides except when ARM_BL31_IN_DRAM is
40  * set. Ensure that SCP_BL2/SCP_BL2U do not overflow into BL1 rw-data nor
41  * BL2/BL2U.
42  */
43 CASSERT(SCP_BL2_LIMIT <= BL1_RW_BASE, assert_scp_bl2_limit_overwrite_bl1);
44 CASSERT(SCP_BL2U_LIMIT <= BL1_RW_BASE, assert_scp_bl2u_limit_overwrite_bl1);
45 
46 CASSERT(SCP_BL2_BASE >= BL2_LIMIT, assert_scp_bl2_overwrite_bl2);
47 CASSERT(SCP_BL2U_BASE >= BL2U_LIMIT, assert_scp_bl2u_overwrite_bl2u);
48 #endif
49 
50 #endif	/* __CSS_SCP_H__ */
51