ARM: zynq: Not to rewrite jump code when starting address is 0x0
This configuration is used by remoteproc. Signed-off-by: Michal Simek <michal.simek@xilinx.com>
This commit is contained in:
parent
7ac161c435
commit
88cd4e882d
|
@ -53,34 +53,34 @@ int __cpuinit zynq_cpun_start(u32 address, int cpu)
|
|||
&zynq_secondary_trampoline;
|
||||
|
||||
zynq_slcr_cpu_stop(cpu);
|
||||
|
||||
if (__pa(PAGE_OFFSET)) {
|
||||
zero = ioremap(0, trampoline_code_size);
|
||||
if (!zero) {
|
||||
pr_warn("BOOTUP jump vectors not accessible\n");
|
||||
return -1;
|
||||
if (address) {
|
||||
if (__pa(PAGE_OFFSET)) {
|
||||
zero = ioremap(0, trampoline_code_size);
|
||||
if (!zero) {
|
||||
pr_warn("BOOTUP jump vectors not accessible\n");
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
zero = (__force u8 __iomem *)PAGE_OFFSET;
|
||||
}
|
||||
} else {
|
||||
zero = (__force u8 __iomem *)PAGE_OFFSET;
|
||||
|
||||
/*
|
||||
* This is elegant way how to jump to any address
|
||||
* 0x0: Load address at 0x8 to r0
|
||||
* 0x4: Jump by mov instruction
|
||||
* 0x8: Jumping address
|
||||
*/
|
||||
memcpy((__force void *)zero, &zynq_secondary_trampoline,
|
||||
trampoline_size);
|
||||
writel(address, zero + trampoline_size);
|
||||
|
||||
flush_cache_all();
|
||||
outer_flush_range(0, trampoline_code_size);
|
||||
smp_wmb();
|
||||
|
||||
if (__pa(PAGE_OFFSET))
|
||||
iounmap(zero);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is elegant way how to jump to any address
|
||||
* 0x0: Load address at 0x8 to r0
|
||||
* 0x4: Jump by mov instruction
|
||||
* 0x8: Jumping address
|
||||
*/
|
||||
memcpy((__force void *)zero, &zynq_secondary_trampoline,
|
||||
trampoline_size);
|
||||
writel(address, zero + trampoline_size);
|
||||
|
||||
flush_cache_all();
|
||||
outer_flush_range(0, trampoline_code_size);
|
||||
smp_wmb();
|
||||
|
||||
if (__pa(PAGE_OFFSET))
|
||||
iounmap(zero);
|
||||
|
||||
zynq_slcr_cpu_start(cpu);
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue