aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2013-06-19 19:39:35 -0400
committerArnd Bergmann <arnd@arndb.de>2013-06-19 19:39:35 -0400
commitf25ac0a2daad4e701864536b99a276d88343ac78 (patch)
tree6122e80515713ec6bef318b30d3b9b7de75baf83
parentf333c13c9eb0504ff01b7d9c242a9f2f2f2edc7b (diff)
parent88cd4e882de73c2e62c38591abfe8c13fcc8386a (diff)
Merge tag 'zynq-cleanup-for-3.11' of git://git.xilinx.com/linux-xlnx into next/cleanup
From Michal Simek: arm: Xilinx Zynq cleanup patches for v3.11 This branch contains two fixes: - Fix zynq smp code - Do not specify init_irq ptr * tag 'zynq-cleanup-for-3.11' of git://git.xilinx.com/linux-xlnx: ARM: zynq: Not to rewrite jump code when starting address is 0x0 ARM: zynq: Remove init_irq declaration in machine description Signed-off-by: Arnd Bergmann <arnd@arndb.de>
-rw-r--r--arch/arm/mach-zynq/common.c2
-rw-r--r--arch/arm/mach-zynq/platsmp.c52
2 files changed, 26 insertions, 28 deletions
diff --git a/arch/arm/mach-zynq/common.c b/arch/arm/mach-zynq/common.c
index 5bfe7035b73d..4c0199b88a04 100644
--- a/arch/arm/mach-zynq/common.c
+++ b/arch/arm/mach-zynq/common.c
@@ -25,7 +25,6 @@
25#include <linux/of_irq.h> 25#include <linux/of_irq.h>
26#include <linux/of_platform.h> 26#include <linux/of_platform.h>
27#include <linux/of.h> 27#include <linux/of.h>
28#include <linux/irqchip.h>
29 28
30#include <asm/mach/arch.h> 29#include <asm/mach/arch.h>
31#include <asm/mach/map.h> 30#include <asm/mach/map.h>
@@ -106,7 +105,6 @@ static const char * const zynq_dt_match[] = {
106MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform") 105MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform")
107 .smp = smp_ops(zynq_smp_ops), 106 .smp = smp_ops(zynq_smp_ops),
108 .map_io = zynq_map_io, 107 .map_io = zynq_map_io,
109 .init_irq = irqchip_init,
110 .init_machine = zynq_init_machine, 108 .init_machine = zynq_init_machine,
111 .init_time = zynq_timer_init, 109 .init_time = zynq_timer_init,
112 .dt_compat = zynq_dt_match, 110 .dt_compat = zynq_dt_match,
diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c
index 5fc167e07619..023f225493f2 100644
--- a/arch/arm/mach-zynq/platsmp.c
+++ b/arch/arm/mach-zynq/platsmp.c
@@ -53,34 +53,34 @@ int __cpuinit zynq_cpun_start(u32 address, int cpu)
53 &zynq_secondary_trampoline; 53 &zynq_secondary_trampoline;
54 54
55 zynq_slcr_cpu_stop(cpu); 55 zynq_slcr_cpu_stop(cpu);
56 56 if (address) {
57 if (__pa(PAGE_OFFSET)) { 57 if (__pa(PAGE_OFFSET)) {
58 zero = ioremap(0, trampoline_code_size); 58 zero = ioremap(0, trampoline_code_size);
59 if (!zero) { 59 if (!zero) {
60 pr_warn("BOOTUP jump vectors not accessible\n"); 60 pr_warn("BOOTUP jump vectors not accessible\n");
61 return -1; 61 return -1;
62 }
63 } else {
64 zero = (__force u8 __iomem *)PAGE_OFFSET;
62 } 65 }
63 } else {
64 zero = (__force u8 __iomem *)PAGE_OFFSET;
65 }
66
67 /*
68 * This is elegant way how to jump to any address
69 * 0x0: Load address at 0x8 to r0
70 * 0x4: Jump by mov instruction
71 * 0x8: Jumping address
72 */
73 memcpy((__force void *)zero, &zynq_secondary_trampoline,
74 trampoline_size);
75 writel(address, zero + trampoline_size);
76
77 flush_cache_all();
78 outer_flush_range(0, trampoline_code_size);
79 smp_wmb();
80
81 if (__pa(PAGE_OFFSET))
82 iounmap(zero);
83 66
67 /*
68 * This is elegant way how to jump to any address
69 * 0x0: Load address at 0x8 to r0
70 * 0x4: Jump by mov instruction
71 * 0x8: Jumping address
72 */
73 memcpy((__force void *)zero, &zynq_secondary_trampoline,
74 trampoline_size);
75 writel(address, zero + trampoline_size);
76
77 flush_cache_all();
78 outer_flush_range(0, trampoline_code_size);
79 smp_wmb();
80
81 if (__pa(PAGE_OFFSET))
82 iounmap(zero);
83 }
84 zynq_slcr_cpu_start(cpu); 84 zynq_slcr_cpu_start(cpu);
85 85
86 return 0; 86 return 0;