[PATCH] fvp: Add support for loading Android boot images via semihosting
Ryan Harkin
ryan.harkin at linaro.org
Mon Apr 6 20:30:38 CEST 2020
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>
>
> 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