I know that arm reset vectors can be low(0x00000000) or high(0xffff0000). But some SoC's codes in linux kernel saying the reset vectors can be changed.
For example, in mach-imx
static int __cpuinit imx_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
imx_set_cpu_jump(cpu, v7_secondary_startup);
imx_enable_cpu(cpu, true);
return 0;
}
void imx_set_cpu_jump(int cpu, void *jump_addr)
{
cpu = cpu_logical_map(cpu);
writel_relaxed(virt_to_phys(jump_addr),
src_base + SRC_GPR1 + cpu * 8);
}
They say that secondary cpu can jump where you want by jump_addr.
Could you tell me how it works?