arm64: 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.
Change-Id: Ic95838d10e18f58867b6b77aee937bdacae50597
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: 62a0e324a0
Original-Signed-off-by: Furquan Shaikh <furquan@google.com>
Original-Change-Id: Ia170d94adb9ecc141ff86e4a3041ddbf9045bc89
Original-Reviewed-on: https://chromium-review.googlesource.com/231549
Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Original-Tested-by: Furquan Shaikh <furquan@chromium.org>
Original-Commit-Queue: Furquan Shaikh <furquan@chromium.org>
Reviewed-on: http://review.coreboot.org/9538
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
parent
b718eab78d
commit
ff6d4facbb
1 changed files with 25 additions and 0 deletions
|
|
@ -214,6 +214,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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue