From: Jeenu Viswambharan Date: Thu, 20 Feb 2014 17:19:39 +0000 (+0000) Subject: Tolerate runtime service initialization failure X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=090630e4bcb5a4266a8a6c4ae50e567efa5db83e;p=project%2Fbcm63xx%2Fatf.git Tolerate runtime service initialization failure At present, the firmware panics if a runtime service fails to initialize. An earlier patch had implemented late binding for all runtime service handlers. With that in place, this patch allows the firmware to proceed even when a service fails to initialize. Change-Id: I6cf4de2cecea9719f4cd48272a77cf459b080d4e --- diff --git a/common/runtime_svc.c b/common/runtime_svc.c index 6e8a1bb0..1628e8db 100644 --- a/common/runtime_svc.c +++ b/common/runtime_svc.c @@ -119,24 +119,25 @@ void runtime_svc_init() goto error; } - /* - * Fill the indices corresponding to the start and end owning - * entity numbers with the index of the descriptor which will - * handle the SMCs for this owning entity range. - */ - start_idx = get_unique_oen(rt_svc_descs[index].start_oen, - rt_svc_descs[index].call_type); - end_idx = get_unique_oen(rt_svc_descs[index].end_oen, - rt_svc_descs[index].call_type); - for (; start_idx <= end_idx; start_idx++) - rt_svc_descs_indices[start_idx] = index; - /* Call the initialisation routine for this runtime service */ rc = rt_svc_descs[index].init(); if (rc) { ERROR("Error initializing runtime service %s\n", rt_svc_descs[index].name); - goto error; + } else { + /* + * Fill the indices corresponding to the start and end + * owning entity numbers with the index of the + * descriptor which will handle the SMCs for this owning + * entity range. + */ + start_idx = get_unique_oen(rt_svc_descs[index].start_oen, + rt_svc_descs[index].call_type); + end_idx = get_unique_oen(rt_svc_descs[index].end_oen, + rt_svc_descs[index].call_type); + + for (; start_idx <= end_idx; start_idx++) + rt_svc_descs_indices[start_idx] = index; } }