aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManish Pandey <manish.pandey2@arm.com>2021-01-20 23:21:05 +0000
committerTrustedFirmware Code Review <review@review.trustedfirmware.org>2021-01-20 23:21:05 +0000
commitd194afa71b4f946603ec86fab2309533a76cbc95 (patch)
tree3cb23260fb17295034cbc7ac2e3696b3cbd38692
parentc5a25e403a5401c822ca4535db6a8edef98ed85d (diff)
parent0301d09ce66988ec73f82e7e1e69054d5370a766 (diff)
downloadplatform_external_arm-trusted-firmware-d194afa71b4f946603ec86fab2309533a76cbc95.tar.gz
platform_external_arm-trusted-firmware-d194afa71b4f946603ec86fab2309533a76cbc95.tar.bz2
platform_external_arm-trusted-firmware-d194afa71b4f946603ec86fab2309533a76cbc95.zip
Merge changes I44ef50da,I9802e9a3 into integration
* changes: plat/arm/css/sgi: Fix assert expression issue plat/arm/css/sgi: Fix bl32 receive event - 0xC4000061 issue
-rw-r--r--plat/arm/css/sgi/sgi_ras.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/plat/arm/css/sgi/sgi_ras.c b/plat/arm/css/sgi/sgi_ras.c
index f56544e72..a04972d70 100644
--- a/plat/arm/css/sgi/sgi_ras.c
+++ b/plat/arm/css/sgi/sgi_ras.c
@@ -111,6 +111,7 @@ static int sgi_ras_intr_handler(const struct err_record_info *err_rec,
struct sgi_ras_ev_map *ras_map;
mm_communicate_header_t *header;
uint32_t intr;
+ int ret;
cm_el1_sysregs_context_save(NON_SECURE);
intr = data->interrupt;
@@ -120,7 +121,7 @@ static int sgi_ras_intr_handler(const struct err_record_info *err_rec,
* this interrupt
*/
ras_map = find_ras_event_map_by_intr(intr);
- assert(ras_map);
+ assert(ras_map != NULL);
/*
* Populate the MM_COMMUNICATE payload to share the
@@ -152,9 +153,20 @@ static int sgi_ras_intr_handler(const struct err_record_info *err_rec,
plat_ic_end_of_interrupt(intr);
/* Dispatch the event to the SDEI client */
- sdei_dispatch_event(ras_map->sdei_ev_num);
+ ret = sdei_dispatch_event(ras_map->sdei_ev_num);
+ if (ret != 0) {
+ /*
+ * sdei_dispatch_event() may return failing result in some cases,
+ * for example kernel may not have registered a handler or RAS event
+ * may happen early during boot. We restore the NS context when
+ * sdei_dispatch_event() returns failing result.
+ */
+ ERROR("SDEI dispatch failed: %d", ret);
+ cm_el1_sysregs_context_restore(NON_SECURE);
+ cm_set_next_eret_context(NON_SECURE);
+ }
- return 0;
+ return ret;
}
int sgi_ras_intr_handler_setup(void)