1 /*
2  * Copyright (c) 2016-2020, 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 <stdint.h>
11 
12 #include <platform_def.h>
13 
14 #include <lib/cassert.h>
15 
16 /* Forward declarations */
17 struct psci_power_state;
18 
19 /* API for power management by SCP */
20 int css_system_reset2(int is_vendor, int reset_type, u_register_t cookie);
21 void css_scp_suspend(const struct psci_power_state *target_state);
22 void css_scp_off(const struct psci_power_state *target_state);
23 void css_scp_on(u_register_t mpidr);
24 int css_scp_get_power_state(u_register_t mpidr, unsigned int power_level);
25 void __dead2 css_scp_sys_shutdown(void);
26 void __dead2 css_scp_sys_reboot(void);
27 void __dead2 css_scp_system_off(int state);
28 
29 /* API for SCP Boot Image transfer. Return 0 on success, -1 on error */
30 int css_scp_boot_image_xfer(void *image, unsigned int image_size);
31 
32 /*
33  * API to wait for SCP to signal till it's ready after booting the transferred
34  * image.
35  */
36 int css_scp_boot_ready(void);
37 
38 #if CSS_LOAD_SCP_IMAGES
39 
40 /*
41  * All CSS platforms load SCP_BL2/SCP_BL2U just below BL2 (this is where BL31
42  * usually resides except when ARM_BL31_IN_DRAM is
43  * set). Ensure that SCP_BL2/SCP_BL2U do not overflow into fw_config.
44  */
45 CASSERT(SCP_BL2_LIMIT <= BL2_BASE, assert_scp_bl2_overwrite_bl2);
46 CASSERT(SCP_BL2U_LIMIT <= BL2_BASE, assert_scp_bl2u_overwrite_bl2);
47 
48 CASSERT(SCP_BL2_BASE >= ARM_FW_CONFIG_LIMIT, assert_scp_bl2_overflow);
49 CASSERT(SCP_BL2U_BASE >= ARM_FW_CONFIG_LIMIT, assert_scp_bl2u_overflow);
50 #endif
51 
52 #endif /* CSS_SCP_H */
53