linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH] ARM: Flush L2 cache on soft_restart
@ 2013-10-02 11:34 Taras Kondratiuk
  2013-10-02 12:49 ` Will Deacon
  0 siblings, 1 reply; 6+ messages in thread
From: Taras Kondratiuk @ 2013-10-02 11:34 UTC (permalink / raw)
  To: linux-arm-kernel

Kexec disables L2 cache before jumping to reboot code,
but it doesn't flush it. So often just copied reboot code
gets corrupted, because part of it is stored in L2 cache
and have not reached memory.

Flushing cache prevents this corruption.

I'm facing this issue on Pandaboard ES, but it looks like
similar issue is observed on TC2 board [1].

[1] http://www.spinics.net/lists/arm-kernel/msg264339.html

Signed-off-by: Taras Kondratiuk <taras.kondratiuk@linaro.org>
---
 arch/arm/kernel/process.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index 94f6b05..e359b62 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -103,9 +103,11 @@ void soft_restart(unsigned long addr)
 	local_irq_disable();
 	local_fiq_disable();
 
-	/* Disable the L2 if we're the last man standing. */
-	if (num_online_cpus() == 1)
+	/* Flush and disable the L2 if we're the last man standing. */
+	if (num_online_cpus() == 1) {
+		outer_flush_all();
 		outer_disable();
+	}
 
 	/* Change to the new stack and continue with the reset. */
 	call_with_stack(__soft_restart, (void *)addr, (void *)stack);
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-10-03 22:32 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-02 11:34 [RFC PATCH] ARM: Flush L2 cache on soft_restart Taras Kondratiuk
2013-10-02 12:49 ` Will Deacon
2013-10-02 17:19   ` Taras Kondratiuk
2013-10-02 17:31     ` Will Deacon
2013-10-03 22:32       ` Taras Kondratiuk
2013-10-02 21:01   ` Russell King - ARM Linux

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).