[PATCH] fvp: Add support for loading Android boot images via semihosting

Peter Collingbourne pcc at google.com
Tue Apr 14 19:11:06 CEST 2020


On Mon, Apr 6, 2020 at 11:30 AM Ryan Harkin <ryan.harkin at linaro.org> wrote:

>
> On Mon, 6 Apr 2020 at 19:25, Peter Collingbourne <pcc at google.com> wrote:
>
>> On Mon, Apr 6, 2020 at 10:40 AM Ryan Harkin <ryan.harkin at linaro.org>
>> wrote:
>>
>>> Hi Peter,
>>>
>>> This looks good to me, but I have a quick question below.
>>>
>>> On Sat, 4 Apr 2020 at 03:58, Peter Collingbourne <pcc at google.com> wrote:
>>>
>>>> FVP now loads an Android boot image named boot.img if available,
>>>> otherwise it falls back to the existing code path.
>>>>
>>>> Signed-off-by: Peter Collingbourne <pcc at google.com>
>>>> ---
>>>>  configs/vexpress_aemv8a_semi_defconfig |  2 ++
>>>>  include/configs/vexpress_aemv8a.h      | 30 +++++++++++++++++---------
>>>>  2 files changed, 22 insertions(+), 10 deletions(-)
>>>>
>>>> diff --git a/configs/vexpress_aemv8a_semi_defconfig
>>>> b/configs/vexpress_aemv8a_semi_defconfig
>>>> index f31baab197..b52c761dee 100644
>>>> --- a/configs/vexpress_aemv8a_semi_defconfig
>>>> +++ b/configs/vexpress_aemv8a_semi_defconfig
>>>> @@ -14,6 +14,8 @@ CONFIG_BOOTARGS="console=ttyAMA0
>>>> earlycon=pl011,0x1c090000 debug user_debug=31 l
>>>>  # CONFIG_DISPLAY_CPUINFO is not set
>>>>  # CONFIG_DISPLAY_BOARDINFO is not set
>>>>  CONFIG_SYS_PROMPT="VExpress64# "
>>>> +CONFIG_ANDROID_BOOT_IMAGE=y
>>>> +CONFIG_CMD_ABOOTIMG=y
>>>>  # CONFIG_CMD_CONSOLE is not set
>>>>  # CONFIG_CMD_XIMG is not set
>>>>  # CONFIG_CMD_EDITENV is not set
>>>> diff --git a/include/configs/vexpress_aemv8a.h
>>>> b/include/configs/vexpress_aemv8a.h
>>>> index 9a9cec414c..4f3a792f49 100644
>>>> --- a/include/configs/vexpress_aemv8a.h
>>>> +++ b/include/configs/vexpress_aemv8a.h
>>>> @@ -177,16 +177,26 @@
>>>>                                 "initrd_addr=0x88000000\0"      \
>>>>                                 "fdtfile=devtree.dtb\0"         \
>>>>                                 "fdt_addr=0x83000000\0"         \
>>>> -                               "fdt_high=0xffffffffffffffff\0" \
>>>> -                               "initrd_high=0xffffffffffffffff\0"
>>>>
>>>
>>> Why did you move these two inside the 'if' statement below? Is it
>>> because you explicitly don't want them set when booting Android?
>>>
>>
>> Yes. We can't have these set when loading an Android boot image because
>> they instruct the bootloader to use the device tree/initrd in place instead
>> of copying them to another location, and since we're already using the
>> kernel in place this may result in the kernel overwriting the device tree
>> or initrd when it initializes its own BSS since they appear right after the
>> kernel in the boot image format.
>>
>
> Ok, thanks for the clarification. That's fine by me.
>
> Reviewed-by: Ryan Harkin <ryan.harkin at linaro.org>
>

Thanks for the review! Do you know what is the next step for getting this
patch landed in master? I read https://www.denx.de/wiki/U-Boot/Patches but
unfortunately I did not get a clear idea of what the next step is.

Peter


>
>>
>> Peter
>>
>>>
>>>
>>>
>>>> -
>>>> -#define CONFIG_BOOTCOMMAND     "smhload ${kernel_name} ${kernel_addr};
>>>> " \
>>>> -                               "smhload ${fdtfile} ${fdt_addr}; " \
>>>> -                               "smhload ${initrd_name} ${initrd_addr}
>>>> "\
>>>> -                               "initrd_end; " \
>>>> -                               "fdt addr ${fdt_addr}; fdt resize; " \
>>>> -                               "fdt chosen ${initrd_addr}
>>>> ${initrd_end}; " \
>>>> -                               "booti $kernel_addr - $fdt_addr"
>>>> +                               "boot_name=boot.img\0"          \
>>>> +                               "boot_addr=0x8007f800\0"
>>>> +
>>>> +#define CONFIG_BOOTCOMMAND     "if smhload ${boot_name} ${boot_addr};
>>>> then " \
>>>> +                               "  set bootargs; " \
>>>> +                               "  abootimg addr ${boot_addr}; " \
>>>> +                               "  abootimg get dtb --index=0 fdt_addr;
>>>> " \
>>>> +                               "  bootm ${boot_addr} ${boot_addr} " \
>>>> +                               "  ${fdt_addr}; " \
>>>> +                               "else; " \
>>>> +                               "  set fdt_high 0xffffffffffffffff; " \
>>>> +                               "  set initrd_high 0xffffffffffffffff;
>>>> " \
>>>> +                               "  smhload ${kernel_name}
>>>> ${kernel_addr}; " \
>>>> +                               "  smhload ${fdtfile} ${fdt_addr}; " \
>>>> +                               "  smhload ${initrd_name}
>>>> ${initrd_addr} "\
>>>> +                               "  initrd_end; " \
>>>> +                               "  fdt addr ${fdt_addr}; fdt resize; " \
>>>> +                               "  fdt chosen ${initrd_addr}
>>>> ${initrd_end}; " \
>>>> +                               "  booti $kernel_addr - $fdt_addr; " \
>>>> +                               "fi"
>>>>
>>>>
>>>>  #endif
>>>> --
>>>> 2.26.0.292.g33ef6b2f38-goog
>>>>
>>>>


More information about the U-Boot mailing list