Hi, Alex, > On 11/21/2016 01:07 PM, Alexander Graf wrote: > > > > > > On 21/11/2016 21:45, york sun wrote: > >> On 11/21/2016 12:40 PM, Alexander Graf wrote: > >>> > >>> > >>> On 21/11/2016 21:23, york sun wrote: > >>>> On 11/09/2016 07:02 PM, Alison Wang wrote: > >>>>> To support loading a 32-bit OS, the execution state will change > >>>>> from > >>>>> AArch64 to AArch32 when jumping to kernel. > >>>>> > >>>>> The architecture information will be got through checking FIT > >>>>> image, then U-Boot will load 32-bit OS or 64-bit OS automatically. > >>>>> > >>>>> Signed-off-by: Ebony Zhu <ebony....@nxp.com> > >>>>> Signed-off-by: Alison Wang <alison.w...@nxp.com> > >>>>> Signed-off-by: Chenhui Zhao <chenhui.z...@nxp.com> > >>>>> --- > >>>>> Changes in v8: > >>>>> - Fix the issue when U-Boot is running in EL2 or EL1. > >>>>> > >>>> > >>>> Alison, > >>>> > >>>> There is a conflict when merging with upstream code. Alex Graf > >>>> merged his change to support EFI booting. See commit > >>>> 69bd459d343fe1e5a68a6f187d8c99c78c6fc6ce. Specifically these lines > >>>> > >>>> > >>>> if (current_el() == 3) { > >>>> smp_kick_all_cpus(); > >>>> dcache_disable(); > >>>> armv8_switch_to_el2(); > >>>> dcache_enable(); > >>>> } > >>>> > >>>> Function armv8_switch_to_el2() didn't take any argument before you > >>>> change. With your proposed change to support 32-bit OS, you added > >>>> arguments to this function, and presume this function always load > OS. > >>>> This may be flawed. Would it be possible to keep > >>>> armv8_switch_to_el2() but introduce another function to carry out > switching EL while loading OS? > >>> > >>> Alison introduced it based on my comments - and I'd prefer if we > >>> only have the function call based version :). > >>> > >>> It should be reasonably straight forward to move to it here. Just > >>> create a new helper stub that enables the dcache and calls entry(). > >>> > >> > >> Alex, > >> > >> Do you always load OS when calling armv8_switch_to_el2()? In this > >> case of efi booting, kernel entry point needs to be passed to the > new > >> armv8_switch_to_el2 function. The new armv8_switch_to_el2 function > >> doesn't return, so you cannot continue to run the code. > > > > We always call some random function pointer in the new flow. That can > > be a kernel entry point, but it can also just be a function pointer. > > In this case, the code would basically look like this: > > > > static ulong efi_run_in_el2(ulong (*entry), void *arg1, void *arg2) { > > dcache_enable(); > > return entry(arg1, arg2); > > } > > > > if (current_el() == 3) { > > ... > > return armv8_switch_to_el2(efi_run_in_el2, entry, > > &loaded_image_info, &systab); } > > > > Alex, > > Since you are most familiar with EFI boot code, can you send a patch to > address this? I can squash it with Alison's patch after testing. My > current test branch is > http://git.denx.de/?p=u-boot/u-boot-fsl- > qoriq.git;a=shortlog;h=refs/heads/test_qoriq. > > [Alison Wang] Please send a patch to fix this issue. It blocks our efforts for the patch set armv8: Support loading 32-bit OS in AArch32 execution state.
Thanks. Best Regards, Alison Wang _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot