ARM64 Library: Add conditional read/write from/to EL3 assembly macros.

Some registers are available only at EL3. Add conditional read/write functions
that perform operations only if currently we are in EL3.

BUG=chrome-os-partner:33962
BRANCH=None
TEST=Compiles and boots to kernel prompt.

Signed-off-by: Furquan Shaikh <furquan@google.com>
Change-Id: Ia170d94adb9ecc141ff86e4a3041ddbf9045bc89
Reviewed-on: https://chromium-review.googlesource.com/231549
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Tested-by: Furquan Shaikh <furquan@chromium.org>
Commit-Queue: Furquan Shaikh <furquan@chromium.org>
This commit is contained in:
Furquan Shaikh 2014-11-21 15:35:17 -08:00 committed by chrome-internal-fetch
commit 62a0e324a0

View file

@ -222,6 +222,31 @@
104:
.endm
/* Macro to read from a register at EL3 only if we are currently at that
level. This is required to ensure that we do not attempt to read registers
from a level lower than el3. e.g. SCR is available for read only at EL3.
IMPORTANT: if EL != EL3, macro silently doesn't perform the read.
*/
.macro read_el3 xreg sysreg
switch_el \xreg, 402f, 402f, 401f
401:
mrs \xreg, \sysreg\()_el3
402:
.endm
/* Macro to write to a register at EL3 only if we are currently at that
level. This is required to ensure that we do not attempt to write to
registers from a level lower than el3. e.g. SCR is available to write only at
EL3.
IMPORTANT: if EL != EL3, macro silently doesn't perform the write.
*/
.macro write_el3 sysreg xreg temp
switch_el \temp, 402f, 402f, 401f
401:
msr \sysreg\()_el3, \xreg
402:
.endm
#else
#include <stdint.h>