Message ID | 20180326075858.1008-1-vasyl.vavrychuk@globallogic.com |
---|---|
State | Superseded |
Headers | show |
Series | [U-Boot] vxworks: fixed cpu enable using PSCI on armv8 | expand |
Hi Vasyl, On Mon, Mar 26, 2018 at 3:58 PM, Vasyl Vavrychuk <vvavrychuk@gmail.com> wrote: > Without armv8_setup_psci register VBAR_EL3 is not set up properly 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. Could you please include what VxWorks version was tested on what board? > > 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(); > +#endif > + AFAIK, the ARMv8 is only supported in VxWorks 7, but per README.vxworks, VxWorks 7 uses 'bootm' for ARM/PPC to load its image, then why do you want to use 'bootvx' command? > #ifdef CONFIG_X86 > /* VxWorks on x86 uses stack to pass parameters */ > ((asmlinkage void (*)(int))addr)(0); > -- Regards, Bin
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(); +#endif + #ifdef CONFIG_X86 /* VxWorks on x86 uses stack to pass parameters */ ((asmlinkage void (*)(int))addr)(0);
Without armv8_setup_psci register VBAR_EL3 is not set up properly 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. Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@globallogic.com> --- cmd/elf.c | 5 +++++ 1 file changed, 5 insertions(+)