mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 08:42:12 +02:00
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:
committed by
Marek Vasut
parent
2b2a771b40
commit
0ebf9842e5
@@ -165,6 +165,18 @@ config FASTBOOT_CMD_OEM_FORMAT
|
|||||||
relies on the env variable partitions to contain the list of
|
relies on the env variable partitions to contain the list of
|
||||||
partitions as required by the gpt command.
|
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
|
endif # FASTBOOT
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
@@ -5,3 +5,4 @@ obj-y += fb_getvar.o
|
|||||||
obj-y += fb_command.o
|
obj-y += fb_command.o
|
||||||
obj-$(CONFIG_FASTBOOT_FLASH_MMC) += fb_mmc.o
|
obj-$(CONFIG_FASTBOOT_FLASH_MMC) += fb_mmc.o
|
||||||
obj-$(CONFIG_FASTBOOT_FLASH_NAND) += fb_nand.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
|
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".
|
* fastboot_response() - Writes a response of the form "$tag$reason".
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user