mirror of https://gitee.com/openkylin/linux.git
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_secondary_trampoline;
|
||||||
|
|
||||||
zynq_slcr_cpu_stop(cpu);
|
zynq_slcr_cpu_stop(cpu);
|
||||||
|
if (address) {
|
||||||
if (__pa(PAGE_OFFSET)) {
|
if (__pa(PAGE_OFFSET)) {
|
||||||
zero = ioremap(0, trampoline_code_size);
|
zero = ioremap(0, trampoline_code_size);
|
||||||
if (!zero) {
|
if (!zero) {
|
||||||
pr_warn("BOOTUP jump vectors not accessible\n");
|
pr_warn("BOOTUP jump vectors not accessible\n");
|
||||||
return -1;
|
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);
|
zynq_slcr_cpu_start(cpu);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue