[U-Boot] [PATCH v8 1/3] armv8: Support loading 32-bit OS in AArch32 execution state

Alison Wang alison.wang at nxp.com
Tue Nov 22 06:05:57 CET 2016


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.zhu at nxp.com>
> >>>>> Signed-off-by: Alison Wang <alison.wang at nxp.com>
> >>>>> Signed-off-by: Chenhui Zhao <chenhui.zhao at 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


More information about the U-Boot mailing list