Allow platform parameter X1 to be passed to BL3-1

bl2_main() was overwriting any platform set X1 parameter for BL3-1
with the value zero.

This patch ensure that any platform set value is correctly passed
to BL3-1. The FVP port adds a check to verify this parameter is
being passed correctly.

Fixes ARM-software/tf-issues#173

Change-Id: Ifbcda73d3d41d2b04a4baf5614e9d2d21f1717c8
diff --git a/bl2/bl2_main.c b/bl2/bl2_main.c
index 46c70a1..691973f 100644
--- a/bl2/bl2_main.c
+++ b/bl2/bl2_main.c
@@ -38,24 +38,6 @@
 #include <stdio.h>
 #include "bl2_private.h"
 
-/*******************************************************************************
- * Runs BL31 from the given entry point. It jumps to a higher exception level
- * through an SMC.
- ******************************************************************************/
-static void __dead2 bl2_run_bl31(entry_point_info_t *bl31_ep_info,
-				unsigned long arg1,
-				unsigned long arg2)
-{
-	/* Set the args pointer */
-	bl31_ep_info->args.arg0 = arg1;
-	bl31_ep_info->args.arg1 = arg2;
-
-	/* Flush the params to be passed to memory */
-	bl2_plat_flush_bl31_params();
-
-	smc(RUN_IMAGE, (unsigned long)bl31_ep_info, 0, 0, 0, 0, 0, 0);
-}
-
 
 /*******************************************************************************
  * The only thing to do in BL2 is to load further images and pass control to
@@ -91,6 +73,9 @@
 	bl2_to_bl31_params = bl2_plat_get_bl31_params();
 	bl31_ep_info = bl2_plat_get_bl31_ep_info();
 
+	/* Set the X0 parameter to bl31 */
+	bl31_ep_info->args.arg0 = (unsigned long)bl2_to_bl31_params;
+
 	/*
 	 * Load BL31. BL1 tells BL2 whether it has been TOP or BOTTOM loaded.
 	 * To avoid fragmentation of trusted SRAM memory, BL31 is always
@@ -163,10 +148,13 @@
 	}
 #endif /* BL32_BASE */
 
+	/* Flush the params to be passed to memory */
+	bl2_plat_flush_bl31_params();
+
 	/*
 	 * Run BL31 via an SMC to BL1. Information on how to pass control to
 	 * the BL32 (if present) and BL33 software images will be passed to
 	 * BL31 as an argument.
 	 */
-	 bl2_run_bl31(bl31_ep_info, (unsigned long)bl2_to_bl31_params, 0);
+	smc(RUN_IMAGE, (unsigned long)bl31_ep_info, 0, 0, 0, 0, 0, 0);
 }