summaryrefslogtreecommitdiff
path: root/drivers/fastboot
diff options
context:
space:
mode:
authorRoman Kovalivskyi <roman.kovalivskyi@globallogic.com>2021-01-26 23:54:56 +0300
committerMarek Vasut <marex@denx.de>2021-02-07 21:22:54 +0300
commita362ce214f03f965b05a9a89997294773cd6e908 (patch)
tree80477ab4d34c704714753e897e987bb2fe63b918 /drivers/fastboot
parentf80798122a726602a239ad7667164a89e98c8328 (diff)
downloadu-boot-a362ce214f03f965b05a9a89997294773cd6e908.tar.xz
fastboot: Implement generic fastboot_set_reboot_flag
It is possible to implement fastboot_set_reboot_flag in a generic way if BCB commands are turned on for a target. Using bcb_set_reboot_reason allows to do this by simply passing string with correct reboot reason that should be handled during next boot process. If BCB are turned off, then bcb_set_reboot_reason would simply return error, so it won't introduce any new behaviour for such targets. Signed-off-by: Roman Kovalivskyi <roman.kovalivskyi@globallogic.com>
Diffstat (limited to 'drivers/fastboot')
-rw-r--r--drivers/fastboot/fb_common.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/fastboot/fb_common.c b/drivers/fastboot/fb_common.c
index 736ce1cd02..cbcc3683c4 100644
--- a/drivers/fastboot/fb_common.c
+++ b/drivers/fastboot/fb_common.c
@@ -10,6 +10,7 @@
* Rob Herring <robh@kernel.org>
*/
+#include <bcb.h>
#include <common.h>
#include <command.h>
#include <env.h>
@@ -90,7 +91,20 @@ void fastboot_okay(const char *reason, char *response)
*/
int __weak fastboot_set_reboot_flag(enum fastboot_reboot_reason reason)
{
- return -ENOSYS;
+#if CONFIG_IS_ENABLED(FASTBOOT_FLASH_MMC_DEV)
+ static const char * const boot_cmds[] = {
+ [FASTBOOT_REBOOT_REASON_BOOTLOADER] = "bootonce-bootloader",
+ [FASTBOOT_REBOOT_REASON_FASTBOOTD] = "boot-fastboot",
+ [FASTBOOT_REBOOT_REASON_RECOVERY] = "boot-recovery"
+ };
+
+ if (reason >= FASTBOOT_REBOOT_REASONS_COUNT)
+ return -EINVAL;
+
+ return bcb_write_reboot_reason(CONFIG_FASTBOOT_FLASH_MMC_DEV, "misc", boot_cmds[reason]);
+#else
+ return -EINVAL;
+#endif
}
/**