mirror of https://github.com/OpenIPC/firmware.git
46 lines
1.2 KiB
Diff
46 lines
1.2 KiB
Diff
diff -drupN a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
|
|
--- a/arch/arm64/mm/proc.S 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/arch/arm64/mm/proc.S 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -70,11 +70,14 @@ ENTRY(cpu_do_suspend)
|
|
mrs x8, mdscr_el1
|
|
mrs x9, oslsr_el1
|
|
mrs x10, sctlr_el1
|
|
+ mrs x11, tpidr_el1
|
|
+ mrs x12, sp_el0
|
|
stp x2, x3, [x0]
|
|
stp x4, xzr, [x0, #16]
|
|
stp x5, x6, [x0, #32]
|
|
stp x7, x8, [x0, #48]
|
|
stp x9, x10, [x0, #64]
|
|
+ stp x11, x12, [x0, #80]
|
|
ret
|
|
ENDPROC(cpu_do_suspend)
|
|
|
|
@@ -90,6 +93,7 @@ ENTRY(cpu_do_resume)
|
|
ldp x6, x8, [x0, #32]
|
|
ldp x9, x10, [x0, #48]
|
|
ldp x11, x12, [x0, #64]
|
|
+ ldp x13, x14, [x0, #80]
|
|
msr tpidr_el0, x2
|
|
msr tpidrro_el0, x3
|
|
msr contextidr_el1, x4
|
|
@@ -112,6 +116,8 @@ ENTRY(cpu_do_resume)
|
|
msr mdscr_el1, x10
|
|
|
|
msr sctlr_el1, x12
|
|
+ msr tpidr_el1, x13
|
|
+ msr sp_el0, x14
|
|
/*
|
|
* Restore oslsr_el1 by writing oslar_el1
|
|
*/
|
|
@@ -134,6 +140,9 @@ ENDPROC(cpu_do_resume)
|
|
ENTRY(cpu_do_switch_mm)
|
|
mrs x2, ttbr1_el1
|
|
mmid x1, x1 // get mm->context.id
|
|
+#ifdef CONFIG_ARM64_SW_TTBR0_PAN
|
|
+ bfi x0, x1, #48, #16 // set the ASID field in TTBR0
|
|
+#endif
|
|
bfi x2, x1, #48, #16 // set the ASID
|
|
msr ttbr1_el1, x2 // in TTBR1 (since TCR.A1 is set)
|
|
isb
|