Commit d1b5ed07 authored by Steve Rae's avatar Steve Rae Committed by Tom Rini

usb/gadget: fastboot: add support for flash command

- implement 'fastboot flash' for eMMC devices
Signed-off-by: default avatarSteve Rae <srae@broadcom.com>
Acked-by: default avatarLukasz Majewski <l.majewski@samsung.com>
Reviewed-by: default avatarMarek Vasut <marex@denx.de>
parent c0aebb33
......@@ -1629,6 +1629,16 @@ The following options need to be configured:
downloads. This buffer should be as large as possible for a
platform. Define this to the size available RAM for fastboot.
CONFIG_FASTBOOT_FLASH
The fastboot protocol includes a "flash" command for writing
the downloaded image to a non-volatile storage device. Define
this to enable the "fastboot flash" command.
CONFIG_FASTBOOT_FLASH_MMC_DEV
The fastboot "flash" command requires additional information
regarding the non-volatile storage device. Define this to
the eMMC device that fastboot should use to store the image.
- Journaling Flash filesystem support:
CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE,
CONFIG_JFFS2_NAND_DEV
......
......@@ -6,8 +6,9 @@ Overview
The protocol that is used over USB is described in
README.android-fastboot-protocol in same directory.
The current implementation does not yet support the flash and erase
commands.
The current implementation does not yet support the erase command or the
"oem format" command, and there is minimal support for the flash command;
it only supports eMMC devices.
Client installation
===================
......
......@@ -19,6 +19,9 @@
#include <linux/compiler.h>
#include <version.h>
#include <g_dnl.h>
#ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV
#include <fb_mmc.h>
#endif
#define FASTBOOT_VERSION "0.4"
......@@ -469,6 +472,28 @@ static void cb_boot(struct usb_ep *ep, struct usb_request *req)
fastboot_tx_write_str("OKAY");
}
#ifdef CONFIG_FASTBOOT_FLASH
static void cb_flash(struct usb_ep *ep, struct usb_request *req)
{
char *cmd = req->buf;
char response[RESPONSE_LEN];
strsep(&cmd, ":");
if (!cmd) {
printf("%s: missing partition name\n", __func__);
fastboot_tx_write_str("FAILmissing partition name");
return;
}
strcpy(response, "FAILno flash device defined");
#ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV
fb_mmc_flash_write(cmd, (void *)CONFIG_USB_FASTBOOT_BUF_ADDR,
download_bytes, response);
#endif
fastboot_tx_write_str(response);
}
#endif
struct cmd_dispatch_info {
char *cmd;
void (*cb)(struct usb_ep *ep, struct usb_request *req);
......@@ -488,6 +513,12 @@ static const struct cmd_dispatch_info cmd_dispatch_info[] = {
.cmd = "boot",
.cb = cb_boot,
},
#ifdef CONFIG_FASTBOOT_FLASH
{
.cmd = "flash",
.cb = cb_flash,
},
#endif
};
static void rx_handler_command(struct usb_ep *ep, struct usb_request *req)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment