From fea7452c15081127e07b77e286a89d2c296f6b05 Mon Sep 17 00:00:00 2001 From: Peng Fan Date: Tue, 22 Nov 2016 19:41:09 +0800 Subject: armv7: psci: cpu_off: flush D-Cache before disable D-Cache Before disable cache, need to first flush cache. There maybe dirty data in D-Cache before disable D-Cache. After disable D-Cache, the first store instructions in psci_v7_flush_dcache_all will directly store registers {r4-r5, r7, r9-r11, lr} to memory. If there is dirty data before disable D-Cache, psci_v7_flush_dcache_all will flush data to memory, and may overwrite the memory that hold the registers {r4-r5, r7, r9-r11, lr}. So before disable cache, first flush D-Cache. Signed-off-by: Peng Fan Cc: Albert Aribaud Cc: Chen-Yu Tsai Cc: Hans de Goede Cc: Hongbo Zhang Cc: York Sun Cc: Marc Zyngier Cc: Tom Rini --- arch/arm/cpu/armv7/psci.S | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'arch/arm/cpu/armv7') diff --git a/arch/arm/cpu/armv7/psci.S b/arch/arm/cpu/armv7/psci.S index 6a36208..95b962d 100644 --- a/arch/arm/cpu/armv7/psci.S +++ b/arch/arm/cpu/armv7/psci.S @@ -258,6 +258,10 @@ ENDPROC(psci_enable_smp) ENTRY(psci_cpu_off_common) push {lr} + bl psci_v7_flush_dcache_all + + clrex @ Why??? + mrc p15, 0, r0, c1, c0, 0 @ SCTLR bic r0, r0, #(1 << 2) @ Clear C bit mcr p15, 0, r0, c1, c0, 0 @ SCTLR -- cgit v1.1