firmware/br-ext-chip-allwinner/board/v83x/kernel/patches/00000-arch_arm_kernel_sleep...

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}