Commit bb5ffdba authored by Andrew Thoelke's avatar Andrew Thoelke
Browse files

Set SCR_EL3.RW correctly before exiting bl31_main

SCR_EL3.RW was not updated immediately before exiting bl31_main() and
running BL3-3. If a AArch32 Secure-EL1 Payload had just been
initialised, then the SCR_EL3.RW bit would be left indicating a
32-bit BL3-3, which may not be correct.

This patch explicitly sets SCR_EL3.RW appropriately based on the
provided SPSR_EL3 value for the BL3-3 image.

Fixes ARM-software/tf-issues#126

Change-Id: Ic7716fe8bc87e577c4bfaeb46702e88deedd9895
parent c5c9b69c
...@@ -169,9 +169,15 @@ void bl31_prepare_next_image_entry() ...@@ -169,9 +169,15 @@ void bl31_prepare_next_image_entry()
assert(next_image_info); assert(next_image_info);
scr = read_scr(); scr = read_scr();
scr &= ~SCR_NS_BIT;
if (image_type == NON_SECURE) if (image_type == NON_SECURE)
scr |= SCR_NS_BIT; scr |= SCR_NS_BIT;
scr &= ~SCR_RW_BIT;
if ((next_image_info->spsr & (1 << MODE_RW_SHIFT)) ==
(MODE_RW_64 << MODE_RW_SHIFT))
scr |= SCR_RW_BIT;
/* /*
* Tell the context mgmt. library to ensure that SP_EL3 points to * Tell the context mgmt. library to ensure that SP_EL3 points to
* the right context to exit from EL3 correctly. * the right context to exit from EL3 correctly.
......
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