mirror of https://github.com/OpenIPC/firmware.git
31 lines
1007 B
Diff
31 lines
1007 B
Diff
diff -drupN a/arch/arm/kernel/sleep.S b/arch/arm/kernel/sleep.S
|
|
--- a/arch/arm/kernel/sleep.S 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/arch/arm/kernel/sleep.S 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -67,6 +67,12 @@ ENTRY(__cpu_suspend)
|
|
#endif
|
|
mov r5, sp @ current virtual SP
|
|
add r4, r4, #12 @ Space for pgd, virt sp, phys resume fn
|
|
+#ifdef CONFIG_VMAP_STACK
|
|
+ ldr r6, =#~PAGE_MASK
|
|
+ and r6, r5, r6 @ get offset in page
|
|
+ cmp r6, r4
|
|
+ suble sp, sp, r6 @ expand hole at page boundary to physical address
|
|
+#endif
|
|
sub sp, sp, r4 @ allocate CPU state on stack
|
|
ldr r3, =sleep_save_sp
|
|
stmfd sp!, {r0, r1} @ save suspend func arg and pointer
|
|
@@ -111,6 +117,13 @@ ENTRY(cpu_resume_mmu)
|
|
ENDPROC(cpu_resume_mmu)
|
|
.popsection
|
|
cpu_resume_after_mmu:
|
|
+ isb
|
|
+#ifdef CONFIG_ARM_LPAE
|
|
+ mcrr p15, 1, r1, r2, c2 @ set TTB 0
|
|
+#else
|
|
+ mcr p15, 0, r1, c2, c0, 0 @ set TTB 0
|
|
+#endif
|
|
+ isb
|
|
bl cpu_init @ restore the und/abt/irq banked regs
|
|
mov r0, #0 @ return zero on success
|
|
ldmfd sp!, {r4 - r11, pc}
|