summaryrefslogtreecommitdiffstats
path: root/arch/arm64/kernel/sleep.S
diff options
context:
space:
mode:
authorJames Morse <james.morse@arm.com>2016-08-24 19:27:29 +0200
committerWill Deacon <will.deacon@arm.com>2016-08-25 19:00:30 +0200
commitb61130381120398876b86282082ad9f24976dfcf (patch)
tree379bb3853cf04f2dd503fc12ef0293ab8327780d /arch/arm64/kernel/sleep.S
parentarm64: Create sections.h (diff)
downloadlinux-b61130381120398876b86282082ad9f24976dfcf.tar.xz
linux-b61130381120398876b86282082ad9f24976dfcf.zip
arm64: vmlinux.ld: Add mmuoff data sections and move mmuoff text into idmap
Resume from hibernate needs to clean any text executed by the kernel with the MMU off to the PoC. Collect these functions together into the .idmap.text section as all this code is tightly coupled and also needs the same cleaning after resume. Data is more complicated, secondary_holding_pen_release is written with the MMU on, clean and invalidated, then read with the MMU off. In contrast __boot_cpu_mode is written with the MMU off, the corresponding cache line is invalidated, so when we read it with the MMU on we don't get stale data. These cache maintenance operations conflict with each other if the values are within a Cache Writeback Granule (CWG) of each other. Collect the data into two sections .mmuoff.data.read and .mmuoff.data.write, the linker script ensures mmuoff.data.write section is aligned to the architectural maximum CWG of 2KB. Signed-off-by: James Morse <james.morse@arm.com> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Mark Rutland <mark.rutland@arm.com> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm64/kernel/sleep.S')
-rw-r--r--arch/arm64/kernel/sleep.S2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arm64/kernel/sleep.S b/arch/arm64/kernel/sleep.S
index 182129b60fdf..1fac020761da 100644
--- a/arch/arm64/kernel/sleep.S
+++ b/arch/arm64/kernel/sleep.S
@@ -97,6 +97,7 @@ ENTRY(__cpu_suspend_enter)
ENDPROC(__cpu_suspend_enter)
.ltorg
+ .pushsection ".idmap.text", "ax"
ENTRY(cpu_resume)
bl el2_setup // if in EL2 drop to EL1 cleanly
/* enable the MMU early - so we can access sleep_save_stash by va */
@@ -105,7 +106,6 @@ ENTRY(cpu_resume)
b __cpu_setup
ENDPROC(cpu_resume)
- .pushsection ".idmap.text", "ax"
_resume_switched:
ldr x8, =_cpu_resume
br x8