Browse Source

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>
Alex Kiernan 6 years ago
parent
commit
3845b9065f
3 changed files with 44 additions and 0 deletions
  1. 8 0
      drivers/fastboot/Kconfig
  2. 33 0
      drivers/fastboot/fb_command.c
  3. 3 0
      include/fastboot.h

+ 8 - 0
drivers/fastboot/Kconfig

@@ -124,6 +124,14 @@ config FASTBOOT_MBR_NAME
 	  specified on the "fastboot flash" command line matches the value
 	  specified on the "fastboot flash" command line matches the value
 	  defined here. The default target name for updating MBR is "mbr".
 	  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
 endif # FASTBOOT
 
 
 endmenu
 endmenu

+ 33 - 0
drivers/fastboot/fb_command.c

@@ -34,6 +34,9 @@ static void flash(char *, char *);
 static void erase(char *, char *);
 static void erase(char *, char *);
 #endif
 #endif
 static void reboot_bootloader(char *, char *);
 static void reboot_bootloader(char *, char *);
+#if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_FORMAT)
+static void oem_format(char *, char *);
+#endif
 
 
 static const struct {
 static const struct {
 	const char *command;
 	const char *command;
@@ -77,6 +80,12 @@ static const struct {
 		.command = "set_active",
 		.command = "set_active",
 		.dispatch = okay
 		.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
 	else
 		fastboot_okay(NULL, response);
 		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

+ 3 - 0
include/fastboot.h

@@ -33,6 +33,9 @@ enum {
 	FASTBOOT_COMMAND_REBOOT,
 	FASTBOOT_COMMAND_REBOOT,
 	FASTBOOT_COMMAND_REBOOT_BOOTLOADER,
 	FASTBOOT_COMMAND_REBOOT_BOOTLOADER,
 	FASTBOOT_COMMAND_SET_ACTIVE,
 	FASTBOOT_COMMAND_SET_ACTIVE,
+#if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_FORMAT)
+	FASTBOOT_COMMAND_OEM_FORMAT,
+#endif
 
 
 	FASTBOOT_COMMAND_COUNT
 	FASTBOOT_COMMAND_COUNT
 };
 };