Commit c10bd2ce authored by Sandrine Bailleux's avatar Sandrine Bailleux Committed by Dan Handley
Browse files

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
parent ba3155bb
...@@ -39,14 +39,9 @@ cpu_reset_handler:; .type cpu_reset_handler, %function ...@@ -39,14 +39,9 @@ cpu_reset_handler:; .type cpu_reset_handler, %function
mov x19, x30 // lr mov x19, x30 // lr
/* --------------------------------------------- /* ---------------------------------------------
* As a bare minimal enable the SMP bit and the * As a bare minimal enable the SMP bit.
* I$ for all aarch64 processors. Also set the
* exception vector to something sane.
* --------------------------------------------- * ---------------------------------------------
*/ */
adr x0, early_exceptions
bl write_vbar
bl read_midr bl read_midr
lsr x0, x0, #MIDR_PN_SHIFT lsr x0, x0, #MIDR_PN_SHIFT
and x0, x0, #MIDR_PN_MASK and x0, x0, #MIDR_PN_MASK
...@@ -59,8 +54,4 @@ smp_setup_begin: ...@@ -59,8 +54,4 @@ smp_setup_begin:
orr x0, x0, #CPUECTLR_SMP_BIT orr x0, x0, #CPUECTLR_SMP_BIT
bl write_cpuectlr bl write_cpuectlr
smp_setup_end: smp_setup_end:
bl read_sctlr
orr x0, x0, #SCTLR_I_BIT
bl write_sctlr
ret x19 ret x19
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <arch.h>
.globl reset_handler .globl reset_handler
...@@ -49,6 +50,23 @@ reset_handler:; .type reset_handler, %function ...@@ -49,6 +50,23 @@ reset_handler:; .type reset_handler, %function
*/ */
bl cpu_reset_handler bl cpu_reset_handler
/* ---------------------------------------------
* Set the exception vector to something sane.
* ---------------------------------------------
*/
adr x0, early_exceptions
msr vbar_el3, x0
/* ---------------------------------------------
* Enable the instruction cache.
* ---------------------------------------------
*/
mrs x0, sctlr_el3
orr x0, x0, #SCTLR_I_BIT
msr sctlr_el3, x0
isb
_wait_for_entrypoint: _wait_for_entrypoint:
/* --------------------------------------------- /* ---------------------------------------------
* Find the type of reset and jump to handler * Find the type of reset and jump to handler
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
*/ */
#include <bl_common.h> #include <bl_common.h>
#include <arch.h>
.globl bl2_entrypoint .globl bl2_entrypoint
...@@ -59,6 +60,23 @@ bl2_entrypoint:; .type bl2_entrypoint, %function ...@@ -59,6 +60,23 @@ bl2_entrypoint:; .type bl2_entrypoint, %function
bl platform_is_primary_cpu bl platform_is_primary_cpu
cbz x0, _panic cbz x0, _panic
/* ---------------------------------------------
* Set the exception vector to something sane.
* ---------------------------------------------
*/
adr x0, early_exceptions
msr vbar_el1, x0
/* ---------------------------------------------
* Enable the instruction cache.
* ---------------------------------------------
*/
mrs x0, sctlr_el1
orr x0, x0, #SCTLR_I_BIT
msr sctlr_el1, x0
isb
/* -------------------------------------------- /* --------------------------------------------
* Give ourselves a small coherent stack to * Give ourselves a small coherent stack to
* ease the pain of initializing the MMU * ease the pain of initializing the MMU
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <bl1.h> #include <bl1.h>
#include <bl_common.h> #include <bl_common.h>
#include <platform.h> #include <platform.h>
#include <arch.h>
.globl bl31_entrypoint .globl bl31_entrypoint
...@@ -50,8 +51,29 @@ bl31_entrypoint:; .type bl31_entrypoint, %function ...@@ -50,8 +51,29 @@ bl31_entrypoint:; .type bl31_entrypoint, %function
* indicating BL31 should be run, memory layout * indicating BL31 should be run, memory layout
* of the trusted SRAM available to BL31 and * of the trusted SRAM available to BL31 and
* information about running the non-trusted * information about running the non-trusted
* software already loaded by BL2. Check the * software already loaded by BL2.
* opcode out of paranoia. * ---------------------------------------------
*/
/* ---------------------------------------------
* 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 mov x19, #RUN_IMAGE
......
...@@ -124,24 +124,9 @@ void bl2_platform_setup() ...@@ -124,24 +124,9 @@ void bl2_platform_setup()
******************************************************************************/ ******************************************************************************/
void bl2_plat_arch_setup() void bl2_plat_arch_setup()
{ {
unsigned long sctlr;
/* Enable instruction cache. */
sctlr = read_sctlr();
sctlr |= SCTLR_I_BIT;
write_sctlr(sctlr);
/*
* Very simple exception vectors which assert if any exception other
* than a single SMC call from BL2 to pass control to BL31 in EL3 is
* received.
*/
write_vbar((unsigned long) early_exceptions);
configure_mmu(&bl2_tzram_layout, configure_mmu(&bl2_tzram_layout,
(unsigned long) &BL2_RO_BASE, (unsigned long) &BL2_RO_BASE,
(unsigned long) &BL2_STACKS_BASE, (unsigned long) &BL2_STACKS_BASE,
(unsigned long) &BL2_COHERENT_RAM_BASE, (unsigned long) &BL2_COHERENT_RAM_BASE,
(unsigned long) &BL2_RW_BASE); (unsigned long) &BL2_RW_BASE);
return;
} }
...@@ -166,14 +166,6 @@ void bl31_platform_setup() ...@@ -166,14 +166,6 @@ void bl31_platform_setup()
******************************************************************************/ ******************************************************************************/
void bl31_plat_arch_setup() void bl31_plat_arch_setup()
{ {
unsigned long sctlr;
/* Enable instruction cache. */
sctlr = read_sctlr();
sctlr |= SCTLR_I_BIT;
write_sctlr(sctlr);
write_vbar((unsigned long) runtime_exceptions);
configure_mmu(&bl31_tzram_layout, configure_mmu(&bl31_tzram_layout,
(unsigned long) &BL31_RO_BASE, (unsigned long) &BL31_RO_BASE,
(unsigned long) &BL31_STACKS_BASE, (unsigned long) &BL31_STACKS_BASE,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment