diff options
author | Roberto Vargas <roberto.vargas@arm.com> | 2017-07-31 09:45:10 +0100 |
---|---|---|
committer | Roberto Vargas <roberto.vargas@arm.com> | 2017-10-13 08:08:32 +0100 |
commit | ed3c0ef8ac08d7a4759bc3e70769e6ea5216a502 (patch) | |
tree | 42e8d2768d4afd35ff2f869f991e9e32112e3959 /plat | |
parent | 36a8f8fd471ae7c6dc8a810aaa8ff8734706234e (diff) | |
download | platform_external_arm-trusted-firmware-ed3c0ef8ac08d7a4759bc3e70769e6ea5216a502.tar.gz platform_external_arm-trusted-firmware-ed3c0ef8ac08d7a4759bc3e70769e6ea5216a502.tar.bz2 platform_external_arm-trusted-firmware-ed3c0ef8ac08d7a4759bc3e70769e6ea5216a502.zip |
scp: Introduce css_scp_system_off() function
The common implementation of css_scp_sys_shutdown and
css_scp_warm_reset is refactored into a new function,
css_scp_system_off() that allows the desired power state to be
specified.
The css_scp_system_off can be used in the implementation of
SYSTEM_RESET2 for PSCI v1.1.
Change-Id: I161e62354d3d75f969b8436d794335237520a9a4
Signed-off-by: Roberto Vargas <roberto.vargas@arm.com>
Diffstat (limited to 'plat')
-rw-r--r-- | plat/arm/css/drivers/scp/css_pm_scmi.c | 50 | ||||
-rw-r--r-- | plat/arm/css/drivers/scp/css_scp.h | 1 |
2 files changed, 17 insertions, 34 deletions
diff --git a/plat/arm/css/drivers/scp/css_pm_scmi.c b/plat/arm/css/drivers/scp/css_pm_scmi.c index c39bc4ba7..dc5fa2620 100644 --- a/plat/arm/css/drivers/scp/css_pm_scmi.c +++ b/plat/arm/css/drivers/scp/css_pm_scmi.c @@ -259,10 +259,7 @@ int css_scp_get_power_state(u_register_t mpidr, unsigned int power_level) return HW_OFF; } -/* - * Helper function to shutdown the system via SCMI. - */ -void __dead2 css_scp_sys_shutdown(void) +void __dead2 css_scp_system_off(int state) { int ret; @@ -273,52 +270,37 @@ void __dead2 css_scp_sys_shutdown(void) plat_arm_gic_cpuif_disable(); /* - * Issue SCMI command for SYSTEM_SHUTDOWN. First issue a graceful + * Issue SCMI command. First issue a graceful * request and if that fails force the request. */ ret = scmi_sys_pwr_state_set(scmi_handle, SCMI_SYS_PWR_FORCEFUL_REQ, - SCMI_SYS_PWR_SHUTDOWN); + state); + if (ret != SCMI_E_SUCCESS) { - ERROR("SCMI system power domain shutdown return 0x%x unexpected\n", - ret); + ERROR("SCMI system power state set 0x%x returns unexpected 0x%x\n", + state, ret); panic(); } - wfi(); - ERROR("CSS System Shutdown: operation not handled.\n"); + ERROR("CSS set power state: operation not handled.\n"); panic(); } /* + * Helper function to shutdown the system via SCMI. + */ +void __dead2 css_scp_sys_shutdown(void) +{ + css_scp_system_off(SCMI_SYS_PWR_SHUTDOWN); +} + +/* * Helper function to reset the system via SCMI. */ void __dead2 css_scp_sys_reboot(void) { - int ret; - - /* - * Disable GIC CPU interface to prevent pending interrupt from waking - * up the AP from WFI. - */ - plat_arm_gic_cpuif_disable(); - - /* - * Issue SCMI command for SYSTEM_REBOOT. First issue a graceful - * request and if that fails force the request. - */ - ret = scmi_sys_pwr_state_set(scmi_handle, - SCMI_SYS_PWR_FORCEFUL_REQ, - SCMI_SYS_PWR_COLD_RESET); - if (ret != SCMI_E_SUCCESS) { - ERROR("SCMI system power domain reset return 0x%x unexpected\n", - ret); - panic(); - } - - wfi(); - ERROR("CSS System Reset: operation not handled.\n"); - panic(); + css_scp_system_off(SCMI_SYS_PWR_COLD_RESET); } scmi_channel_plat_info_t plat_css_scmi_plat_info = { diff --git a/plat/arm/css/drivers/scp/css_scp.h b/plat/arm/css/drivers/scp/css_scp.h index 223e372a2..4a6d4738b 100644 --- a/plat/arm/css/drivers/scp/css_scp.h +++ b/plat/arm/css/drivers/scp/css_scp.h @@ -21,6 +21,7 @@ void css_scp_on(u_register_t mpidr); int css_scp_get_power_state(u_register_t mpidr, unsigned int power_level); void __dead2 css_scp_sys_shutdown(void); void __dead2 css_scp_sys_reboot(void); +void __dead2 css_scp_system_off(int state); /* API for SCP Boot Image transfer. Return 0 on success, -1 on error */ int css_scp_boot_image_xfer(void *image, unsigned int image_size); |