From: Vasyl Vavrychuk Date: Tue, 10 Apr 2018 09:36:36 +0000 (+0300) Subject: vxworks: fixed cpu enable using PSCI on armv8 X-Git-Tag: v2018.05-rc2~14 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3194daa10ba642269a0948282423c48fd02fadce;p=platform%2Fkernel%2Fu-boot.git 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 Reviewed-by: Bin Meng --- diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c index cfc236f..91a64be 100644 --- a/arch/arm/lib/bootm.c +++ b/arch/arm/lib/bootm.c @@ -448,6 +448,11 @@ void boot_prep_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 */ ((void (*)(void *))images->ep)(images->ft_addr); } diff --git a/cmd/elf.c b/cmd/elf.c index 0387964..19479bb 100644 --- a/cmd/elf.c +++ b/cmd/elf.c @@ -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); dcache_disable(); +#if defined(CONFIG_ARM64) && defined(CONFIG_ARMV8_PSCI) + armv8_setup_psci(); + smp_kick_all_cpus(); +#endif + #ifdef CONFIG_X86 /* VxWorks on x86 uses stack to pass parameters */ ((asmlinkage void (*)(int))addr)(0);