mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-28 15:40:29 +09:00
vxworks: fixed cpu enable using PSCI on armv8
Without armv8_setup_psci register VBAR_EL3 is not set up property which makes SMC calls jump to invalid location. smp_kick_all_cpus is required to make slave cpus leave gic_wait_for_interrupt. Without this they will never pursue booting process. Fix was applied to the two ways of booting VxWorks: bootvx and bootm commands. This implementation is very similar to what is done in boot_jump_linux in arch/arm/lib/bootm.c file. Tested on VxWorks 7 release SR0520 2017-12-08 Intel Stratix 10 SX SoC Development Kit board. Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@globallogic.com> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
parent
52ff8020d0
commit
3194daa10b
@ -448,6 +448,11 @@ void boot_prep_vxworks(bootm_headers_t *images)
|
|||||||
}
|
}
|
||||||
void boot_jump_vxworks(bootm_headers_t *images)
|
void boot_jump_vxworks(bootm_headers_t *images)
|
||||||
{
|
{
|
||||||
|
#if defined(CONFIG_ARM64) && defined(CONFIG_ARMV8_PSCI)
|
||||||
|
armv8_setup_psci();
|
||||||
|
smp_kick_all_cpus();
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ARM VxWorks requires device tree physical address to be passed */
|
/* ARM VxWorks requires device tree physical address to be passed */
|
||||||
((void (*)(void *))images->ep)(images->ft_addr);
|
((void (*)(void *))images->ep)(images->ft_addr);
|
||||||
}
|
}
|
||||||
|
@ -369,6 +369,11 @@ int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||||||
printf("## Starting vxWorks at 0x%08lx ...\n", addr);
|
printf("## Starting vxWorks at 0x%08lx ...\n", addr);
|
||||||
|
|
||||||
dcache_disable();
|
dcache_disable();
|
||||||
|
#if defined(CONFIG_ARM64) && defined(CONFIG_ARMV8_PSCI)
|
||||||
|
armv8_setup_psci();
|
||||||
|
smp_kick_all_cpus();
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_X86
|
#ifdef CONFIG_X86
|
||||||
/* VxWorks on x86 uses stack to pass parameters */
|
/* VxWorks on x86 uses stack to pass parameters */
|
||||||
((asmlinkage void (*)(int))addr)(0);
|
((asmlinkage void (*)(int))addr)(0);
|
||||||
|
Loading…
Reference in New Issue
Block a user