On 05/08/2021 17:17, Mattijs Korpershoek wrote:
> From: Guillaume La Roque <glaro...@baylibre.com>
> 
> Since Android 10, we are required to use a "dtbo" partition which
> includes the various device-tree overlays [1].
> It's also possible to provide a "dtb" partition.
> 
> This is supported via the "abootimg" command.
> 
> On Yukawa, the assumption is that we have only a "dtbo" partition, which
> includes all board dtbs and their dtbos [2]
> 
> [1] https://source.android.com/devices/architecture/dto/partitions
> [2] 
> https://android.googlesource.com/device/amlogic/yukawa/+/refs/heads/master/build/tasks/dtimages.mk#16
> Signed-off-by: Guillaume La Roque <glaro...@baylibre.com>
> Signed-off-by: Mattijs Korpershoek <mkorpersh...@baylibre.com>
> ---
>  include/configs/meson64_android.h | 57 ++++++++++++++++++++++++++++++-
>  1 file changed, 56 insertions(+), 1 deletion(-)
> 
> diff --git a/include/configs/meson64_android.h 
> b/include/configs/meson64_android.h
> index 0ce616c17e..358e0a5c71 100644
> --- a/include/configs/meson64_android.h
> +++ b/include/configs/meson64_android.h
> @@ -81,7 +81,59 @@
>  #define RECOVERY_PARTITION "recovery"
>  #endif
>  
> +#if defined(CONFIG_CMD_ABOOTIMG)
> +/*
> + * Prepares complete device tree blob for current board (for Android boot).
> + *
> + * Boot image or recovery image should be loaded into $loadaddr prior to 
> running
> + * these commands. The logic of these commnads is next:
> + *
> + *   1. Read correct DTB for current SoC/board from boot image in $loadaddr
> + *      to $fdtaddr
> + *   2. Merge all needed DTBO for current board from 'dtbo' partition into 
> read
> + *      DTB
> + *   3. User should provide $fdtaddr as 3rd argument to 'bootm'
> + */
> +#define PREPARE_FDT \
> +     "echo Preparing FDT...; " \
> +     "if test $board_name = sei510; then " \
> +             "echo \"  Reading DTB for sei510...\"; " \
> +             "setenv dtb_index 0;" \
> +     "elif test $board_name = sei610; then " \
> +             "echo \"  Reading DTB for sei610...\"; " \
> +             "setenv dtb_index 1;" \
> +     "else " \
> +             "echo Error: Android boot is not supported for $board_name; " \
> +             "exit; " \
> +     "fi; " \
> +     "abootimg get dtb --index=$dtb_index dtb_start dtb_size; " \
> +     "cp.b $dtb_start $fdt_addr_r $dtb_size; " \
> +     "fdt addr $fdt_addr_r  0x80000; " \
> +     "if test $board_name = sei510; then " \
> +             "echo \"  Reading DTBO for sei510...\"; " \
> +             "setenv dtbo_index 0;" \
> +     "elif test $board_name = sei610; then " \
> +             "echo \"  Reading DTBO for sei610...\"; " \
> +             "setenv dtbo_index 1;" \
> +     "else " \
> +             "echo Error: Android boot is not supported for $board_name; " \
> +             "exit; " \
> +     "fi; " \
> +     "part start mmc ${mmcdev} dtbo${slot_suffix} p_dtbo_start; " \
> +     "part size mmc ${mmcdev} dtbo${slot_suffix} p_dtbo_size; " \
> +     "mmc read ${dtboaddr} ${p_dtbo_start} ${p_dtbo_size}; " \
> +     "echo \"  Applying DTBOs...\"; " \
> +     "adtimg addr $dtboaddr; " \
> +     "adtimg get dt --index=$dtbo_index dtbo0_addr; " \
> +     "fdt apply $dtbo0_addr;" \
> +     "setenv bootargs \"$bootargs androidboot.dtbo_idx=$dtbo_index \";"\
> +
> +#define BOOT_CMD "bootm ${loadaddr} ${loadaddr} ${fdt_addr_r};"
> +
> +#else
> +#define PREPARE_FDT " "
>  #define BOOT_CMD "bootm ${loadaddr};"
> +#endif
>  
>  #define BOOTENV_DEV_FASTBOOT(devtypeu, devtypel, instance) \
>       "bootcmd_fastboot=" \
> @@ -153,6 +205,7 @@
>                       "part start mmc ${mmcdev} " RECOVERY_PARTITION 
> "${slot_suffix} boot_start;" \
>                       "part size mmc ${mmcdev} " RECOVERY_PARTITION 
> "${slot_suffix} boot_size;" \
>                       "if mmc read ${loadaddr} ${boot_start} ${boot_size}; 
> then " \
> +                             PREPARE_FDT \
>                               "echo Running Android Recovery...;" \
>                               BOOT_CMD \
>                       "fi;" \
> @@ -174,6 +227,7 @@
>               "part start mmc ${mmcdev} " BOOT_PARTITION "${slot_suffix} 
> boot_start;" \
>               "part size mmc ${mmcdev} " BOOT_PARTITION "${slot_suffix} 
> boot_size;" \
>               "if mmc read ${loadaddr} ${boot_start} ${boot_size}; then " \
> +                     PREPARE_FDT \
>                       "setenv bootargs \"${bootargs} " AB_BOOTARGS "\"  ; " \
>                       "echo Running Android...;" \
>                       BOOT_CMD \
> @@ -212,7 +266,8 @@
>       "stdin=" STDIN_CFG "\0"                                       \
>       "stdout=" STDOUT_CFG "\0"                                     \
>       "stderr=" STDOUT_CFG "\0"                                     \
> -     "loadaddr=0x01000000\0"                                       \
> +     "dtboaddr=0x08200000\0"                                       \
> +     "loadaddr=0x01080000\0"                                       \
>       "fdt_addr_r=0x01000000\0"                                     \
>       "scriptaddr=0x08000000\0"                                     \
>       "kernel_addr_r=0x01080000\0"                                  \
> 

Acked-by: Neil Armstrong <narmstr...@baylibre.com>

Reply via email to