arm: zynq: Invalidate L1 in secondary boot
authorSoren Brinkmann <soren.brinkmann@xilinx.com>
Thu, 31 Oct 2013 16:10:15 +0000 (09:10 -0700)
committerMichal Simek <michal.simek@xilinx.com>
Tue, 10 Dec 2013 13:17:55 +0000 (14:17 +0100)
During boot, Linux initiates a clean-invalidate operation only, resulting
in faulty data to be written to the memory system during resume.
Therefore invalidate the L1 in the secondary boot path to avoid these
issues.

Signed-off-by: Soren Brinkmann <soren.brinkmann@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/arm/mach-zynq/common.h
arch/arm/mach-zynq/headsmp.S
arch/arm/mach-zynq/platsmp.c

index 3040d219570f23babca8b6cdbc81cfbfade17581..c22c92cea8cb47e1baba978c93d99b6e8d5ab244 100644 (file)
@@ -17,6 +17,8 @@
 #ifndef __MACH_ZYNQ_COMMON_H__
 #define __MACH_ZYNQ_COMMON_H__
 
+void zynq_secondary_startup(void);
+
 extern int zynq_slcr_init(void);
 extern void zynq_slcr_system_reset(void);
 extern void zynq_slcr_cpu_stop(int cpu);
index d4cd5f34fe5c6a0febdc473de016377f668ae5dd..57a32869f0aa3215e0e49c282ca58d7f8976cad3 100644 (file)
@@ -18,5 +18,9 @@ zynq_secondary_trampoline_jump:
        .word   /* cpu 1 */
 .globl zynq_secondary_trampoline_end
 zynq_secondary_trampoline_end:
-
 ENDPROC(zynq_secondary_trampoline)
+
+ENTRY(zynq_secondary_startup)
+       bl      v7_invalidate_l1
+       b       secondary_startup
+ENDPROC(zynq_secondary_startup)
index 03a62d5df8f43deb7d5eeee0527560bbeb39c42e..f6e62c4a0afcb576668a95c23c9e1efe2d96ef7e 100644 (file)
@@ -90,7 +90,7 @@ EXPORT_SYMBOL(zynq_cpun_start);
 static int zynq_boot_secondary(unsigned int cpu,
                                                struct task_struct *idle)
 {
-       return zynq_cpun_start(virt_to_phys(secondary_startup), cpu);
+       return zynq_cpun_start(virt_to_phys(zynq_secondary_startup), cpu);
 }
 
 /*
This page took 0.042183 seconds and 5 git commands to generate.