aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Kiernan2018-05-29 15:30:54 +0000
committerMarek Vasut2018-05-30 11:59:21 +0200
commit3845b9065fea9859bf2cd6413168e3cb4ba38f06 (patch)
tree74a36e23ceb23a2ca1a46d4c57b84ef4028f7faf
parentf73a7df984a9820d9beb829b32ccb5c3d55dc152 (diff)
fastboot: Add support for 'oem format' command
Introduce 'oem format' which matches the USB implementation, guard this with CONFIG_FASTBOOT_CMD_OEM_FORMAT so that you can configure it out. Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r--drivers/fastboot/Kconfig8
-rw-r--r--drivers/fastboot/fb_command.c33
-rw-r--r--include/fastboot.h3
3 files changed, 44 insertions, 0 deletions
diff --git a/drivers/fastboot/Kconfig b/drivers/fastboot/Kconfig
index 625f0166003..bc25ea1d9c7 100644
--- a/drivers/fastboot/Kconfig
+++ b/drivers/fastboot/Kconfig
@@ -124,6 +124,14 @@ config FASTBOOT_MBR_NAME
specified on the "fastboot flash" command line matches the value
defined here. The default target name for updating MBR is "mbr".
+config FASTBOOT_CMD_OEM_FORMAT
+ bool "Enable the 'oem format' command"
+ depends on FASTBOOT_FLASH_MMC && CMD_GPT
+ help
+ Add support for the "oem format" command from a client. This
+ relies on the env variable partitions to contain the list of
+ partitions as required by the gpt command.
+
endif # FASTBOOT
endmenu
diff --git a/drivers/fastboot/fb_command.c b/drivers/fastboot/fb_command.c
index af4f5006943..200f9910c56 100644
--- a/drivers/fastboot/fb_command.c
+++ b/drivers/fastboot/fb_command.c
@@ -34,6 +34,9 @@ static void flash(char *, char *);
static void erase(char *, char *);
#endif
static void reboot_bootloader(char *, char *);
+#if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_FORMAT)
+static void oem_format(char *, char *);
+#endif
static const struct {
const char *command;
@@ -77,6 +80,12 @@ static const struct {
.command = "set_active",
.dispatch = okay
},
+#if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_FORMAT)
+ [FASTBOOT_COMMAND_OEM_FORMAT] = {
+ .command = "oem format",
+ .dispatch = oem_format,
+ },
+#endif
};
/**
@@ -300,3 +309,27 @@ static void reboot_bootloader(char *cmd_parameter, char *response)
else
fastboot_okay(NULL, response);
}
+
+#if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_FORMAT)
+/**
+ * oem_format() - Execute the OEM format command
+ *
+ * @cmd_parameter: Pointer to command parameter
+ * @response: Pointer to fastboot response buffer
+ */
+static void oem_format(char *cmd_parameter, char *response)
+{
+ char cmdbuf[32];
+
+ if (!env_get("partitions")) {
+ fastboot_fail("partitions not set", response);
+ } else {
+ sprintf(cmdbuf, "gpt write mmc %x $partitions",
+ CONFIG_FASTBOOT_FLASH_MMC_DEV);
+ if (run_command(cmdbuf, 0))
+ fastboot_fail("", response);
+ else
+ fastboot_okay(NULL, response);
+ }
+}
+#endif
diff --git a/include/fastboot.h b/include/fastboot.h
index 9a3d5ba693b..1933b1d98e3 100644
--- a/include/fastboot.h
+++ b/include/fastboot.h
@@ -33,6 +33,9 @@ enum {
FASTBOOT_COMMAND_REBOOT,
FASTBOOT_COMMAND_REBOOT_BOOTLOADER,
FASTBOOT_COMMAND_SET_ACTIVE,
+#if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_FORMAT)
+ FASTBOOT_COMMAND_OEM_FORMAT,
+#endif
FASTBOOT_COMMAND_COUNT
};