aboutsummaryrefslogtreecommitdiff
path: root/src/arch/arm64/armv8/lib/pstate.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm64/armv8/lib/pstate.c')
-rw-r--r--src/arch/arm64/armv8/lib/pstate.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/src/arch/arm64/armv8/lib/pstate.c b/src/arch/arm64/armv8/lib/pstate.c
index a194b91e26..d2f3649ee9 100644
--- a/src/arch/arm64/armv8/lib/pstate.c
+++ b/src/arch/arm64/armv8/lib/pstate.c
@@ -171,12 +171,24 @@ void raw_write_elr_el3(uint64_t elr_el3)
uint64_t raw_read_elr_current(void)
{
- SWITCH_CASE_READ(raw_read_elr,elr,uint64_t);
+ uint32_t el = get_current_el();
+ return raw_read_elr(el);
}
void raw_write_elr_current(uint64_t elr)
{
- SWITCH_CASE_WRITE(raw_write_elr,elr);
+ uint32_t el = get_current_el();
+ raw_write_elr(elr, el);
+}
+
+uint64_t raw_read_elr(uint32_t el)
+{
+ SWITCH_CASE_READ(raw_read_elr, elr, uint64_t, el);
+}
+
+void raw_write_elr(uint64_t elr, uint32_t el)
+{
+ SWITCH_CASE_WRITE(raw_write_elr, elr, el);
}
/* FPCR */
@@ -372,12 +384,24 @@ void raw_write_spsr_el3(uint32_t spsr_el3)
uint32_t raw_read_spsr_current(void)
{
- SWITCH_CASE_READ(raw_read_spsr,spsr,uint32_t);
+ uint32_t el = get_current_el();
+ return raw_read_spsr(el);
}
void raw_write_spsr_current(uint32_t spsr)
{
- SWITCH_CASE_WRITE(raw_write_spsr,spsr);
+ uint32_t el = get_current_el();
+ raw_write_spsr(spsr, el);
+}
+
+uint32_t raw_read_spsr(uint32_t el)
+{
+ SWITCH_CASE_READ(raw_read_spsr, spsr, uint32_t, el);
+}
+
+void raw_write_spsr(uint32_t spsr, uint32_t el)
+{
+ SWITCH_CASE_WRITE(raw_write_spsr, spsr, el);
}
uint32_t raw_read_spsr_fiq(void)