summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2021-08-11 15:31:13 +0300
committerTom Rini <trini@konsulko.com>2021-08-11 15:31:13 +0300
commitaba3fa1d3f1dc8f7049317b8d6ea1d8cb8935e5e (patch)
tree3dcf1dc7077ccd14c1fa885b363f0534f86de683 /include
parent3e5b62f78888740530e6f3a2e989f4c361a9d52b (diff)
parent33b51765583e6cbe1888f068da795bea599bad18 (diff)
downloadu-boot-aba3fa1d3f1dc8f7049317b8d6ea1d8cb8935e5e.tar.xz
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.h2
-rw-r--r--include/configs/meson64_android.h215
-rw-r--r--include/configs/sei510.h23
-rw-r--r--include/configs/sei610.h25
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>