From 72d7c03074f0dec67fe68ea268112bb820d7e82f Mon Sep 17 00:00:00 2001 From: Mattijs Korpershoek Date: Fri, 30 Jul 2021 14:28:09 +0200 Subject: [PATCH] configs: meson64_android: implement recovery boot via BCB Right now meson64_android does not know how to boot into Android Recovery: it simply falls back to "fastboot" mode in the bootloader. Implement the boot to recovery. While at it, use the standard BCB way instead of a sm for consistency. Signed-off-by: Mattijs Korpershoek Acked-by: Neil Armstrong Signed-off-by: Neil Armstrong --- include/configs/meson64_android.h | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/include/configs/meson64_android.h b/include/configs/meson64_android.h index d732032d1f..ce08346b70 100644 --- a/include/configs/meson64_android.h +++ b/include/configs/meson64_android.h @@ -21,6 +21,10 @@ #define CONTROL_PARTITION "misc" #endif +#ifndef RECOVERY_PARTITION +#define RECOVERY_PARTITION "recovery" +#endif + #define BOOTENV_DEV_FASTBOOT(devtypeu, devtypel, instance) \ "bootcmd_fastboot=" \ "setenv run_fastboot 0;" \ @@ -51,20 +55,23 @@ #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;" \ @@ -76,7 +83,16 @@ "fi;" \ "if test \"${run_recovery}\" -eq 1; then " \ "echo Running Recovery...;" \ - "fastboot " __stringify(CONFIG_FASTBOOT_USB_DEV) "; " \ + "mmc dev ${mmcdev};" \ + "setenv bootargs \"${bootargs} androidboot.serialno=${serial#}\";" \ + "part start mmc ${mmcdev} " RECOVERY_PARTITION " boot_start;" \ + "part size mmc ${mmcdev} " RECOVERY_PARTITION " boot_size;" \ + "if mmc read ${loadaddr} ${boot_start} ${boot_size}; then " \ + "echo Running Android Recovery...;" \ + "bootm ${loadaddr};" \ + "fi;" \ + "echo Failed to boot Android...;" \ + "reset;" \ "fi\0" #define BOOTENV_DEV_NAME_RECOVERY(devtypeu, devtypel, instance) \ -- 2.39.5