9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 960322473ad6aeccbf7b2ae820d182f32131f279
parent 22ac77156f42502eb6386cae945e4a6af561d446
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date:   Sun, 14 Oct 2018 16:51:38 +0100

[arm64] Add primitive to set SP_R from C

Change-Id: I7c7a4783b1028e9d695aeedda415e59c4e0bbbbe
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>

Diffstat:
March/arm64/arch.s | 11+++++++++--
Minclude/rcode.h | 1+
2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/arch.s b/arch/arm64/arch.s @@ -8,8 +8,8 @@ DAIF_DBG = 4 .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,vectbl,swtch + .globl read_sctlr_rwrite_sctlr_r,read_rvbar_el3,write_sp_r + .globl vectbl,swtch enaabt: msr daifclr,DAIF_ABT @@ -77,6 +77,13 @@ read_rvbar_el3: mrs x0,rvbar_el3 ret +write_sp_r: + mrs x1,spsel + msr spsel,#1 + mov sp,x0 + msr spsel,x1 + ret + panic: stp x1,x0,[sp,#-16]! stp x3,x2,[sp,#-16]! diff --git a/include/rcode.h b/include/rcode.h @@ -76,6 +76,7 @@ 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); +extern void write_sp_r(unsigned long long v); /* global constant variables */ extern const struct rowidx rowidx[];