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 6e8a1bb..1628e8d 100644
--- a/common/runtime_svc.c
+++ b/common/runtime_svc.c
@@ -119,24 +119,25 @@
 			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;
 		}
 	}