diff options
author | Tom Rini <trini@konsulko.com> | 2021-08-11 08:31:13 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2021-08-11 08:31:13 -0400 |
commit | aba3fa1d3f1dc8f7049317b8d6ea1d8cb8935e5e (patch) | |
tree | 3dcf1dc7077ccd14c1fa885b363f0534f86de683 /include | |
parent | 3e5b62f78888740530e6f3a2e989f4c361a9d52b (diff) | |
parent | 33b51765583e6cbe1888f068da795bea599bad18 (diff) | |
download | u-boot-aba3fa1d3f1dc8f7049317b8d6ea1d8cb8935e5e.tar.gz |
Merge tag 'u-boot-amlogic-20210810' of https://source.denx.de/u-boot/custodians/u-boot-amlogic
- odroid-n2: fix fdtfile suffix for n2-plus
- sei610 & meson64_android cleanups to prepare android 11 boot support
- use Android BCB mechanism for reboot reason instead of HW reboot flag
- Switch meson64_android boot flow to use abootimg for A/B, AVB and DTBO support
Diffstat (limited to 'include')
-rw-r--r-- | include/configs/meson64.h | 2 | ||||
-rw-r--r-- | include/configs/meson64_android.h | 215 | ||||
-rw-r--r-- | include/configs/sei510.h | 23 | ||||
-rw-r--r-- | include/configs/sei610.h | 25 |
4 files changed, 206 insertions, 59 deletions
diff --git a/include/configs/meson64.h b/include/configs/meson64.h index fb7f16d148..f9bb0240d2 100644 --- a/include/configs/meson64.h +++ b/include/configs/meson64.h @@ -32,7 +32,9 @@ #define CONFIG_CPU_ARMV8 #define CONFIG_REMAKE_ELF #define CONFIG_SYS_MAXARGS 32 +#ifndef CONFIG_SYS_MALLOC_LEN #define CONFIG_SYS_MALLOC_LEN (32 << 20) +#endif #define CONFIG_SYS_CBSIZE 1024 #define CONFIG_SYS_SDRAM_BASE 0 diff --git a/include/configs/meson64_android.h b/include/configs/meson64_android.h index c47d51c853..358e0a5c71 100644 --- a/include/configs/meson64_android.h +++ b/include/configs/meson64_android.h @@ -9,10 +9,134 @@ #ifndef __MESON64_ANDROID_CONFIG_H #define __MESON64_ANDROID_CONFIG_H +#include <linux/sizes.h> + +#define CONFIG_SYS_MALLOC_LEN SZ_128M + +#ifndef BOOT_PARTITION +#define BOOT_PARTITION "boot" +#endif + +#ifndef LOGO_PARTITION +#define LOGO_PARTITION "logo" +#endif + +#ifndef CONTROL_PARTITION +#define CONTROL_PARTITION "misc" +#endif + +#if defined(CONFIG_CMD_AVB) +#define AVB_VERIFY_CHECK \ + "if test \"${force_avb}\" -eq 1; then " \ + "if run avb_verify; then " \ + "echo AVB verification OK.;" \ + "setenv bootargs \"$bootargs $avb_bootargs\";" \ + "else " \ + "echo AVB verification failed.;" \ + "exit; fi;" \ + "else " \ + "setenv bootargs \"$bootargs androidboot.verifiedbootstate=orange\";" \ + "echo Running without AVB...; "\ + "fi;" + +#define AVB_VERIFY_CMD "avb_verify=avb init ${mmcdev}; avb verify $slot_suffix;\0" +#else +#define AVB_VERIFY_CHECK "" +#define AVB_VERIFY_CMD "" +#endif + +#if defined(CONFIG_CMD_AB_SELECT) +#define ANDROIDBOOT_GET_CURRENT_SLOT_CMD "get_current_slot=" \ + "if part number mmc ${mmcdev} " CONTROL_PARTITION " control_part_number; " \ + "then " \ + "echo " CONTROL_PARTITION \ + " partition number:${control_part_number};" \ + "ab_select current_slot mmc ${mmcdev}:${control_part_number};" \ + "else " \ + "echo " CONTROL_PARTITION " partition not found;" \ + "fi;\0" + +#define AB_SELECT_SLOT \ + "run get_current_slot; " \ + "if test -e \"${current_slot}\"; " \ + "then " \ + "setenv slot_suffix _${current_slot}; " \ + "else " \ + "echo current_slot not found;" \ + "exit;" \ + "fi;" + +#define AB_SELECT_ARGS \ + "setenv bootargs_ab androidboot.slot_suffix=${slot_suffix}; " \ + "echo A/B cmdline addition: ${bootargs_ab};" \ + "setenv bootargs ${bootargs} ${bootargs_ab};" + +#define AB_BOOTARGS " androidboot.force_normal_boot=1" +#define RECOVERY_PARTITION "boot" +#else +#define AB_SELECT_SLOT "" +#define AB_SELECT_ARGS " " +#define ANDROIDBOOT_GET_CURRENT_SLOT_CMD "" +#define AB_BOOTARGS " " +#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=" \ - "sm reboot_reason reason;" \ "setenv run_fastboot 0;" \ "if test \"${boot_source}\" = \"usb\"; then " \ "echo Fastboot forced by usb rom boot;" \ @@ -23,41 +147,45 @@ "echo Broken MMC partition scheme;" \ "setenv run_fastboot 1;" \ "fi;" \ - "if test \"${reason}\" = \"bootloader\" -o " \ - "\"${reason}\" = \"fastboot\"; then " \ - "echo Fastboot asked by reboot reason;" \ - "setenv run_fastboot 1;" \ - "fi;" \ - "if test \"${skip_fastboot}\" -eq 1; then " \ - "echo Fastboot skipped by environment;" \ - "setenv run_fastboot 0;" \ - "fi;" \ - "if test \"${force_fastboot}\" -eq 1; then " \ - "echo Fastboot forced by environment;" \ - "setenv run_fastboot 1;" \ + "if bcb load " __stringify(CONFIG_FASTBOOT_FLASH_MMC_DEV) " " \ + CONTROL_PARTITION "; then " \ + "if bcb test command = bootonce-bootloader; then " \ + "echo BCB: Bootloader boot...; " \ + "bcb clear command; bcb store; " \ + "setenv run_fastboot 1;" \ + "fi; " \ + "if bcb test command = boot-fastboot; then " \ + "echo BCB: fastboot userspace boot...; " \ + "setenv force_recovery 1;" \ + "fi; " \ + "else " \ + "echo Warning: BCB is corrupted or does not exist; " \ "fi;" \ "if test \"${run_fastboot}\" -eq 1; then " \ "echo Running Fastboot...;" \ - "fastboot 0;" \ + "fastboot " __stringify(CONFIG_FASTBOOT_USB_DEV) "; " \ "fi\0" #define BOOTENV_DEV_NAME_FASTBOOT(devtypeu, devtypel, instance) \ "fastboot " -/* TOFIX: Run actual recovery instead of fastboot */ #define BOOTENV_DEV_RECOVERY(devtypeu, devtypel, instance) \ "bootcmd_recovery=" \ "pinmux dev pinctrl@14;" \ "pinmux dev pinctrl@40;" \ - "sm reboot_reason reason;" \ "setenv run_recovery 0;" \ "if run check_button; then " \ "echo Recovery button is pressed;" \ "setenv run_recovery 1;" \ - "elif test \"${reason}\" = \"recovery\" -o " \ - "\"${reason}\" = \"update\"; then " \ - "echo Recovery asked by reboot reason;" \ - "setenv run_recovery 1;" \ + "fi; " \ + "if bcb load " __stringify(CONFIG_FASTBOOT_FLASH_MMC_DEV) " " \ + CONTROL_PARTITION "; then " \ + "if bcb test command = boot-recovery; then " \ + "echo BCB: Recovery boot...; " \ + "setenv run_recovery 1;" \ + "fi;" \ + "else " \ + "echo Warning: BCB is corrupted or does not exist; " \ "fi;" \ "if test \"${skip_recovery}\" -eq 1; then " \ "echo Recovery skipped by environment;" \ @@ -69,7 +197,20 @@ "fi;" \ "if test \"${run_recovery}\" -eq 1; then " \ "echo Running Recovery...;" \ - "fastboot 0;" \ + "mmc dev ${mmcdev};" \ + "setenv bootargs \"${bootargs} androidboot.serialno=${serial#}\";" \ + AB_SELECT_SLOT \ + AB_SELECT_ARGS \ + AVB_VERIFY_CHECK \ + "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;" \ + "echo Failed to boot Android...;" \ + "reset;" \ "fi\0" #define BOOTENV_DEV_NAME_RECOVERY(devtypeu, devtypel, instance) \ @@ -77,14 +218,19 @@ #define BOOTENV_DEV_SYSTEM(devtypeu, devtypel, instance) \ "bootcmd_system=" \ - "echo Loading Android boot partition...;" \ + "echo Loading Android " BOOT_PARTITION " partition...;" \ "mmc dev ${mmcdev};" \ - "setenv bootargs ${bootargs} console=${console} androidboot.serialno=${serial#};" \ - "part start mmc ${mmcdev} ${bootpart} boot_start;" \ - "part size mmc ${mmcdev} ${bootpart} boot_size;" \ + "setenv bootargs ${bootargs} androidboot.serialno=${serial#};" \ + AB_SELECT_SLOT \ + AB_SELECT_ARGS \ + AVB_VERIFY_CHECK \ + "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...;" \ - "bootm ${loadaddr};" \ + BOOT_CMD \ "fi;" \ "echo Failed to boot Android...;" \ "reset\0" @@ -101,8 +247,8 @@ "if test \"${boot_source}\" != \"usb\" && " \ "gpt verify mmc ${mmcdev} ${partitions}; then; " \ "mmc dev ${mmcdev};" \ - "part start mmc ${mmcdev} ${logopart} boot_start;" \ - "part size mmc ${mmcdev} ${logopart} boot_size;" \ + "part start mmc ${mmcdev} " LOGO_PARTITION " boot_start;" \ + "part size mmc ${mmcdev} " LOGO_PARTITION " boot_size;" \ "if mmc read ${loadaddr} ${boot_start} ${boot_size}; then " \ "bmp display ${loadaddr} m m;" \ "fi;" \ @@ -111,23 +257,24 @@ #define CONFIG_EXTRA_ENV_SETTINGS \ "partitions=" PARTS_DEFAULT "\0" \ "mmcdev=2\0" \ - "bootpart=1\0" \ - "logopart=2\0" \ + ANDROIDBOOT_GET_CURRENT_SLOT_CMD \ + AVB_VERIFY_CMD \ + "force_avb=0\0" \ "gpio_recovery=88\0" \ "check_button=gpio input ${gpio_recovery};test $? -eq 0;\0" \ "load_logo=" PREBOOT_LOAD_LOGO "\0" \ - "console=/dev/ttyAML0\0" \ - "bootargs=no_console_suspend\0" \ "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" \ "pxefile_addr_r=0x01080000\0" \ "ramdisk_addr_r=0x13000000\0" \ - "fdtfile=amlogic/" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" BOOTENV + "fdtfile=amlogic/" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" \ + BOOTENV #include <configs/meson64.h> diff --git a/include/configs/sei510.h b/include/configs/sei510.h index d37b4c6405..ea91a06157 100644 --- a/include/configs/sei510.h +++ b/include/configs/sei510.h @@ -10,20 +10,19 @@ #define __CONFIG_H #define LOGO_UUID "43a3305d-150f-4cc9-bd3b-38fca8693846;" -#define CACHE_UUID "99207ae6-5207-11e9-999e-6f77a3612069;" -#define SYSTEM_UUID "99f9b7ac-5207-11e9-8507-c3c037e393f3;" -#define VENDOR_UUID "9d082802-5207-11e9-954c-cbbce08ba108;" -#define USERDATA_UUID "9b976e42-5207-11e9-8f16-ff47ac594b22;" #define ROOT_UUID "ddb8c3f6-d94d-4394-b633-3134139cc2e0;" -#define PARTS_DEFAULT \ - "uuid_disk=${uuid_gpt_disk};" \ - "name=boot,size=64M,bootable,uuid=${uuid_gpt_boot};" \ - "name=logo,size=2M,uuid=" LOGO_UUID \ - "name=cache,size=256M,uuid=" CACHE_UUID \ - "name=system,size=1536M,uuid=" SYSTEM_UUID \ - "name=vendor,size=256M,uuid=" VENDOR_UUID \ - "name=userdata,size=5341M,uuid=" USERDATA_UUID \ +#define PARTS_DEFAULT \ + "uuid_disk=${uuid_gpt_disk};" \ + "name=logo,size=2M,uuid=" LOGO_UUID \ + "name=misc,size=128K,uuid=${uuid_gpt_misc};" \ + "name=dtbo,size=8M,uuid=${uuid_gpt_dtbo};" \ + "name=vbmeta,size=64K,uuid=${uuid_gpt_vbmeta};" \ + "name=boot,size=32M,bootable,uuid=${uuid_gpt_boot};" \ + "name=recovery,size=32M,uuid=${uuid_gpt_recovery};" \ + "name=cache,size=256M,uuid=${uuid_gpt_cache};" \ + "name=super,size=2304M,uuid=${uuid_gpt_super};" \ + "name=userdata,size=4820M,uuid=${uuid_gpt_userdata};" \ "name=rootfs,size=-,uuid=" ROOT_UUID diff --git a/include/configs/sei610.h b/include/configs/sei610.h index 6d093161c9..783eece271 100644 --- a/include/configs/sei610.h +++ b/include/configs/sei610.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0+ */ /* - * Configuration for the SEI510 + * Configuration for the SEI610 * * Copyright (C) 2019 Baylibre, SAS * Author: Jerome Brunet <jbrunet@baylibre.com> @@ -10,20 +10,19 @@ #define __CONFIG_H #define LOGO_UUID "43a3305d-150f-4cc9-bd3b-38fca8693846;" -#define CACHE_UUID "99207ae6-5207-11e9-999e-6f77a3612069;" -#define SYSTEM_UUID "99f9b7ac-5207-11e9-8507-c3c037e393f3;" -#define VENDOR_UUID "9d082802-5207-11e9-954c-cbbce08ba108;" -#define USERDATA_UUID "9b976e42-5207-11e9-8f16-ff47ac594b22;" #define ROOT_UUID "ddb8c3f6-d94d-4394-b633-3134139cc2e0;" -#define PARTS_DEFAULT \ - "uuid_disk=${uuid_gpt_disk};" \ - "name=boot,size=64M,bootable,uuid=${uuid_gpt_boot};" \ - "name=logo,size=2M,uuid=" LOGO_UUID \ - "name=cache,size=256M,uuid=" CACHE_UUID \ - "name=system,size=1536M,uuid=" SYSTEM_UUID \ - "name=vendor,size=256M,uuid=" VENDOR_UUID \ - "name=userdata,size=12795M,uuid=" USERDATA_UUID \ +#define PARTS_DEFAULT \ + "uuid_disk=${uuid_gpt_disk};" \ + "name=logo,start=512K,size=2M,uuid=" LOGO_UUID \ + "name=misc,size=512K,uuid=${uuid_gpt_misc};" \ + "name=dtbo,size=8M,uuid=${uuid_gpt_dtbo};" \ + "name=vbmeta,size=512K,uuid=${uuid_gpt_vbmeta};" \ + "name=boot,size=32M,bootable,uuid=${uuid_gpt_boot};" \ + "name=recovery,size=32M,uuid=${uuid_gpt_recovery};" \ + "name=cache,size=256M,uuid=${uuid_gpt_cache};" \ + "name=super,size=2304M,uuid=${uuid_gpt_super};" \ + "name=userdata,size=12274M,uuid=${uuid_gpt_userdata};" \ "name=rootfs,size=-,uuid=" ROOT_UUID #include <configs/meson64_android.h> |