On 11/21/2016 10:48 PM, york sun wrote:
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.

While trying to fix this up, I ran across another compile breakage:

arch/arm/cpu/armv8/fsl-layerscape/mp.c:114: undefined reference to `initiator_type' arch/arm/cpu/armv8/fsl-layerscape/mp.c:123: undefined reference to `initiator_type'


Alex

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to