
Hi Vasyl,
On Wed, Mar 28, 2018 at 3:29 AM, Vasyl Vavrychuk vvavrychuk@gmail.com wrote:
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.
This implementation is very similiar to what is done in boot_jump_linux in arch/arm/lib/bootm.c file.
Tested on VxWorks 7 release SR0520 2017-12-08.
On what board?
As I mentioned before, why do you want to use 'bootvx' to boot a VxWorks 7 kernel? I believe VxWorks 7 ARM kernel is loaded via 'bootm'. See doc/README.vxworks.
Signed-off-by: Vasyl Vavrychuk vasyl.vavrychuk@globallogic.com
cmd/elf.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/cmd/elf.c b/cmd/elf.c index 5745a389da..db690fc619 100644 --- a/cmd/elf.c +++ b/cmd/elf.c @@ -372,6 +372,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();
What about ARMv8 32-bit? What about ARMv7? Should we call smp_kick_all_cpus() for ARMv7 as well? Seems to me the logic of #ifdefs here needs to be tuned.
+#endif
#ifdef CONFIG_X86 /* VxWorks on x86 uses stack to pass parameters */ ((asmlinkage void (*)(int))addr)(0); --
Regards, Bin