diff options
author | Alistair Delva <adelva@google.com> | 2021-02-15 12:43:29 -0800 |
---|---|---|
committer | Alistair Delva <adelva@google.com> | 2021-02-15 12:44:34 -0800 |
commit | faa476c0caaa598afa5a6109d17102db5fe35ec6 (patch) | |
tree | 37a21c69306801ee7cdda5167a30896c8740155b /drivers/arm/css/scpi | |
parent | b00a71fc312c9781fa6f404dccfb55b062b2ccac (diff) | |
parent | 66306814586b1bf6bcb859aaad218ec3bb090e94 (diff) | |
download | platform_external_arm-trusted-firmware-faa476c0caaa598afa5a6109d17102db5fe35ec6.tar.gz platform_external_arm-trusted-firmware-faa476c0caaa598afa5a6109d17102db5fe35ec6.tar.bz2 platform_external_arm-trusted-firmware-faa476c0caaa598afa5a6109d17102db5fe35ec6.zip |
Merge branch 'aosp/upstream-master' into HEADandroid-s-preview-1
This keeps the bl31 interface change reverted which still has not been
fixed in upstream U-Boot for rockchip devices.
Test: CROSS_COMPILE=aarch64-linux-gnu- make PLAT=rk3399 \
DEBUG=0 ERROR_DEPRECATED=1 bl31
Signed-off-by: Alistair Delva <adelva@google.com>
Change-Id: I7c3972a7b767715efb05593096d5d92dba14c609
Diffstat (limited to 'drivers/arm/css/scpi')
-rw-r--r-- | drivers/arm/css/scpi/css_scpi.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/arm/css/scpi/css_scpi.c b/drivers/arm/css/scpi/css_scpi.c index c56b7c41b..416356bf2 100644 --- a/drivers/arm/css/scpi/css_scpi.c +++ b/drivers/arm/css/scpi/css_scpi.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2014-2020, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -51,7 +51,7 @@ static void scpi_secure_message_send(size_t payload_size) mhu_secure_message_send(SCPI_MHU_SLOT_ID); } -static void scpi_secure_message_receive(scpi_cmd_t *cmd) +static int scpi_secure_message_receive(scpi_cmd_t *cmd) { uint32_t mhu_status; @@ -63,7 +63,7 @@ static void scpi_secure_message_receive(scpi_cmd_t *cmd) if (mhu_status != (1 << SCPI_MHU_SLOT_ID)) { ERROR("MHU: Unexpected protocol (MHU status: 0x%x)\n", mhu_status); - panic(); + return -1; } /* @@ -74,6 +74,8 @@ static void scpi_secure_message_receive(scpi_cmd_t *cmd) dmbld(); memcpy(cmd, (void *) SCPI_SHARED_MEM_SCP_TO_AP, sizeof(*cmd)); + + return 0; } static void scpi_secure_message_end(void) @@ -84,14 +86,19 @@ static void scpi_secure_message_end(void) int scpi_wait_ready(void) { scpi_cmd_t scpi_cmd; + int rc; VERBOSE("Waiting for SCP_READY command...\n"); /* Get a message from the SCP */ scpi_secure_message_start(); - scpi_secure_message_receive(&scpi_cmd); + rc = scpi_secure_message_receive(&scpi_cmd); scpi_secure_message_end(); + /* If no message was received, don't send a response */ + if (rc != 0) + return rc; + /* We are expecting 'SCP Ready', produce correct error if it's not */ scpi_status_t status = SCP_OK; if (scpi_cmd.id != SCPI_CMD_SCP_READY) { @@ -209,7 +216,8 @@ int scpi_get_css_power_state(unsigned int mpidr, unsigned int *cpu_state_p, * Send message and wait for SCP's response */ scpi_secure_message_send(0); - scpi_secure_message_receive(&response); + if (scpi_secure_message_receive(&response) != 0) + goto exit; if (response.status != SCP_OK) goto exit; @@ -254,7 +262,9 @@ uint32_t scpi_sys_power_state(scpi_system_state_t system_state) *payload_addr = system_state & 0xff; scpi_secure_message_send(sizeof(*payload_addr)); - scpi_secure_message_receive(&response); + /* If no response is received, fill in an error status */ + if (scpi_secure_message_receive(&response) != 0) + response.status = SCP_E_TIMEOUT; scpi_secure_message_end(); |