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