aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSoren Brinkmann <soren.brinkmann@xilinx.com>2013-10-31 12:10:15 -0400
committerMichal Simek <michal.simek@xilinx.com>2013-12-10 08:17:55 -0500
commit6a37ff388a0b5f39062b883ae2a0f5c742c2492b (patch)
tree1dbce0d979b08ee077fe83b9e48961b8f14b495d
parent11e031308ba660b31ffaf31f0295a2c1c358b574 (diff)
arm: zynq: Invalidate L1 in secondary boot
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>
-rw-r--r--arch/arm/mach-zynq/common.h2
-rw-r--r--arch/arm/mach-zynq/headsmp.S6
-rw-r--r--arch/arm/mach-zynq/platsmp.c2
3 files changed, 8 insertions, 2 deletions
diff --git a/arch/arm/mach-zynq/common.h b/arch/arm/mach-zynq/common.h
index 3040d219570f..c22c92cea8cb 100644
--- a/arch/arm/mach-zynq/common.h
+++ b/arch/arm/mach-zynq/common.h
@@ -17,6 +17,8 @@
17#ifndef __MACH_ZYNQ_COMMON_H__ 17#ifndef __MACH_ZYNQ_COMMON_H__
18#define __MACH_ZYNQ_COMMON_H__ 18#define __MACH_ZYNQ_COMMON_H__
19 19
20void zynq_secondary_startup(void);
21
20extern int zynq_slcr_init(void); 22extern int zynq_slcr_init(void);
21extern void zynq_slcr_system_reset(void); 23extern void zynq_slcr_system_reset(void);
22extern void zynq_slcr_cpu_stop(int cpu); 24extern void zynq_slcr_cpu_stop(int cpu);
diff --git a/arch/arm/mach-zynq/headsmp.S b/arch/arm/mach-zynq/headsmp.S
index d4cd5f34fe5c..57a32869f0aa 100644
--- a/arch/arm/mach-zynq/headsmp.S
+++ b/arch/arm/mach-zynq/headsmp.S
@@ -18,5 +18,9 @@ zynq_secondary_trampoline_jump:
18 .word /* cpu 1 */ 18 .word /* cpu 1 */
19.globl zynq_secondary_trampoline_end 19.globl zynq_secondary_trampoline_end
20zynq_secondary_trampoline_end: 20zynq_secondary_trampoline_end:
21
22ENDPROC(zynq_secondary_trampoline) 21ENDPROC(zynq_secondary_trampoline)
22
23ENTRY(zynq_secondary_startup)
24 bl v7_invalidate_l1
25 b secondary_startup
26ENDPROC(zynq_secondary_startup)
diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c
index 03a62d5df8f4..f6e62c4a0afc 100644
--- a/arch/arm/mach-zynq/platsmp.c
+++ b/arch/arm/mach-zynq/platsmp.c
@@ -90,7 +90,7 @@ EXPORT_SYMBOL(zynq_cpun_start);
90static int zynq_boot_secondary(unsigned int cpu, 90static int zynq_boot_secondary(unsigned int cpu,
91 struct task_struct *idle) 91 struct task_struct *idle)
92{ 92{
93 return zynq_cpun_start(virt_to_phys(secondary_startup), cpu); 93 return zynq_cpun_start(virt_to_phys(zynq_secondary_startup), cpu);
94} 94}
95 95
96/* 96/*