fastboot: Add default fastboot_set_reboot_flag implementation
Default implementation of fastboot_set_reboot_flag function that depends on "bcb" commands could be used in general case if there are no need to make any platform-specific implementation, otherwise it could be disabled via Kconfig option FASTBOOT_USE_BCB_SET_REBOOT_FLAG. Please note that FASTBOOT_USE_BCB_SET_REBOOT_FLAG is mutually exclusive with some platforms which already have their own implementation of this function. Signed-off-by: Roman Kovalivskyi <roman.kovalivskyi@globallogic.com>
This commit is contained in:
parent
2b2a771b40
commit
0ebf9842e5
@ -165,6 +165,18 @@ config FASTBOOT_CMD_OEM_FORMAT
|
||||
relies on the env variable partitions to contain the list of
|
||||
partitions as required by the gpt command.
|
||||
|
||||
config FASTBOOT_USE_BCB_SET_REBOOT_FLAG
|
||||
bool "Use BCB by fastboot to set boot reason"
|
||||
depends on CMD_BCB && !ARCH_MESON && !ARCH_ROCKCHIP && !TARGET_KC1 && \
|
||||
!TARGET_SNIPER && !TARGET_AM57XX_EVM && !TARGET_DRA7XX_EVM
|
||||
default y
|
||||
help
|
||||
Fastboot could implement setting of reboot reason in a generic fashion
|
||||
via BCB commands. BCB commands are able to write reboot reason into
|
||||
command field of boot control block. In general case it is sufficient
|
||||
implementation if your platform supports BCB commands and doesn't
|
||||
require any specific reboot reason handling.
|
||||
|
||||
endif # FASTBOOT
|
||||
|
||||
endmenu
|
||||
|
@ -5,3 +5,4 @@ obj-y += fb_getvar.o
|
||||
obj-y += fb_command.o
|
||||
obj-$(CONFIG_FASTBOOT_FLASH_MMC) += fb_mmc.o
|
||||
obj-$(CONFIG_FASTBOOT_FLASH_NAND) += fb_nand.o
|
||||
obj-$(CONFIG_FASTBOOT_USE_BCB_SET_REBOOT_FLAG) += fb_bcb_impl.o
|
||||
|
43
drivers/fastboot/fb_bcb_impl.c
Normal file
43
drivers/fastboot/fb_bcb_impl.c
Normal file
@ -0,0 +1,43 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright 2020 GlobalLogic.
|
||||
* Roman Kovalivskyi <roman.kovalivskyi@globallogic.com>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <fastboot.h>
|
||||
|
||||
/**
|
||||
* fastboot_set_reboot_flag() - Set flag to indicate reboot-bootloader
|
||||
*
|
||||
* Set flag which indicates that we should reboot into the bootloader
|
||||
* following the reboot that fastboot executes after this function.
|
||||
*
|
||||
* This function should be overridden in your board file with one
|
||||
* which sets whatever flag your board specific Android bootloader flow
|
||||
* requires in order to re-enter the bootloader.
|
||||
*/
|
||||
int fastboot_set_reboot_flag(enum fastboot_reboot_reason reason)
|
||||
{
|
||||
char cmd[64];
|
||||
|
||||
if (reason >= FASTBOOT_REBOOT_REASONS_COUNT)
|
||||
return -EINVAL;
|
||||
|
||||
snprintf(cmd, sizeof(cmd), "bcb load %d misc",
|
||||
CONFIG_FASTBOOT_FLASH_MMC_DEV);
|
||||
|
||||
if (run_command(cmd, 0))
|
||||
return -ENODEV;
|
||||
|
||||
snprintf(cmd, sizeof(cmd), "bcb set command %s",
|
||||
fastboot_boot_cmds[reason]);
|
||||
|
||||
if (run_command(cmd, 0))
|
||||
return -ENOEXEC;
|
||||
|
||||
if (run_command("bcb store", 0))
|
||||
return -EIO;
|
||||
|
||||
return 0;
|
||||
}
|
@ -52,6 +52,15 @@ enum fastboot_reboot_reason {
|
||||
FASTBOOT_REBOOT_REASONS_COUNT
|
||||
};
|
||||
|
||||
/**
|
||||
* BCB boot commands
|
||||
*/
|
||||
static const char * const fastboot_boot_cmds[] = {
|
||||
[FASTBOOT_REBOOT_REASON_BOOTLOADER] = "bootonce-bootloader",
|
||||
[FASTBOOT_REBOOT_REASON_FASTBOOTD] = "boot-fastboot",
|
||||
[FASTBOOT_REBOOT_REASON_RECOVERY] = "boot-recovery"
|
||||
};
|
||||
|
||||
/**
|
||||
* fastboot_response() - Writes a response of the form "$tag$reason".
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user