diff options
author | Arnd Bergmann <arnd@arndb.de> | 2013-06-19 19:39:35 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2013-06-19 19:39:35 -0400 |
commit | f25ac0a2daad4e701864536b99a276d88343ac78 (patch) | |
tree | 6122e80515713ec6bef318b30d3b9b7de75baf83 | |
parent | f333c13c9eb0504ff01b7d9c242a9f2f2f2edc7b (diff) | |
parent | 88cd4e882de73c2e62c38591abfe8c13fcc8386a (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.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-zynq/platsmp.c | 52 |
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[] = { | |||
106 | MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform") | 105 | MACHINE_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; |