diff options
author | Manish Pandey <manish.pandey2@arm.com> | 2021-01-20 23:21:05 +0000 |
---|---|---|
committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2021-01-20 23:21:05 +0000 |
commit | d194afa71b4f946603ec86fab2309533a76cbc95 (patch) | |
tree | 3cb23260fb17295034cbc7ac2e3696b3cbd38692 | |
parent | c5a25e403a5401c822ca4535db6a8edef98ed85d (diff) | |
parent | 0301d09ce66988ec73f82e7e1e69054d5370a766 (diff) | |
download | platform_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.c | 18 |
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) |