Move generic architectural setup out of blx_plat_arch_setup().

blx_plat_arch_setup() should only perform platform-specific
architectural setup, e.g. enabling the MMU.  This patch moves
generic architectural setup code out of blx_plat_arch_setup().

Change-Id: I4ccf56b8c4a2fa84909817779a2d97a14aaafab6
diff --git a/bl31/aarch64/bl31_entrypoint.S b/bl31/aarch64/bl31_entrypoint.S
index 3a850e6..3922840 100644
--- a/bl31/aarch64/bl31_entrypoint.S
+++ b/bl31/aarch64/bl31_entrypoint.S
@@ -31,6 +31,7 @@
 #include <bl1.h>
 #include <bl_common.h>
 #include <platform.h>
+#include <arch.h>
 
 
 	.globl	bl31_entrypoint
@@ -50,8 +51,29 @@
 	 * indicating BL31 should be run, memory layout
 	 * of the trusted SRAM available to BL31 and
 	 * information about running the non-trusted
-	 * software already loaded by BL2. Check the
-	 * opcode out of paranoia.
+	 * software already loaded by BL2.
+	 * ---------------------------------------------
+	 */
+
+	/* ---------------------------------------------
+	 * Set the exception vector to something sane.
+	 * ---------------------------------------------
+	 */
+	adr	x1, runtime_exceptions
+	msr	vbar_el3, x1
+
+	/* ---------------------------------------------
+	 * Enable the instruction cache.
+	 * ---------------------------------------------
+	 */
+	mrs	x1, sctlr_el3
+	orr	x1, x1, #SCTLR_I_BIT
+	msr	sctlr_el3, x1
+
+	isb
+
+	/* ---------------------------------------------
+	 * Check the opcodes out of paranoia.
 	 * ---------------------------------------------
 	 */
 	mov	x19, #RUN_IMAGE