commit 79ac708e61b0e12d51916dea4f548b3968fb6e39
parent c8e0b8c035409bc5a289288ec69ccfe74b35deb4
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date: Sun, 14 Oct 2018 10:25:51 +0100
[arm64] Add some more accessors for reading/writing sysregs
Change-Id: I4da13b6f9b344ec17fad9a2d983b1fee9f3164cb
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
Diffstat:
2 files changed, 56 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/arch.s b/arch/arm64/arch.s
@@ -4,8 +4,13 @@ DAIF_ABT = 2
DAIF_DBG = 4
.text
- .globl panic,enaabt,disabt,enadbg,disdbg,wfi,wfe,swtch
+ .globl panic,enaabt,disabt,enadbg,disdbg,wfi,wfe
+ .globl read_actlr_r,write_actlr_r
+ .globl read_id_aa64rmfr0_r,write_id_aa64rmfr0_r
+ .globl read_rcr_r,write_rcr_r,read_rdscr_r,write_rdscr_r
+ .globl read_sctlr_rwrite_sctlr_r,
.globl read_rvbar_el3
+ .globl swtch
.align 2
panic:
@@ -60,6 +65,46 @@ wfi: wfi
wfe: wfe
ret
+read_actlr_r:
+ mrs x0,S3_6_C1_C0_3
+ ret
+
+write_actlr_r:
+ msr S3_6_C1_C0_3,x0
+ ret
+
+read_id_aa64rmfr0_r:
+ mrs x0,S3_6_C0_C7_6
+ ret
+
+write_id_aa64rmfr0_r:
+ msr S3_6_C0_C7_6,x0
+ ret
+
+read_rcr_r:
+ mrs x0,S3_6_C1_C1_6
+ ret
+
+write_rcr_r:
+ msr S3_6_C1_C1_6,x0
+ ret
+
+read_rdscr_r:
+ mrs x0,S3_6_C6_C15_6
+ ret
+
+write_rdscr_r:
+ msr S3_6_C6_C15_6,x0
+ ret
+
+read_sctlr_r:
+ mrs x0,S3_6_C1_C0_6
+ ret
+
+write_sctlr_r:
+ msr S3_6_C1_C0_6,x0
+ ret
+
read_rvbar_el3:
mrs x0,rvbar_el3
ret
diff --git a/include/rcode.h b/include/rcode.h
@@ -65,6 +65,16 @@ extern void enadbg(void);
extern void disdbg(void);
extern void wfi(void);
extern void wfe(void);
+extern unsigned long long read_actlr_r(void);
+extern void write_actlr_r(unsigned long long v);
+extern unsigned long long read_id_aa64rmfr0_r(void);
+extern void write_id_aa64rmfr0_r(unsigned long long v);
+extern unsigned long long read_rcr_r(void);
+extern void write_rcr_r(unsigned long long v);
+extern unsigned long long read_rdscr_r(void);
+extern void write_rdscr_r(unsigned long long v);
+extern unsigned long long read_sctlr_r(void);
+extern void write_sctlr_r(unsigned long long v);
extern unsigned long long read_rvbar_el3(void);
/* global constant variables */