usb/gadget: fastboot: add support for flash command
- implement 'fastboot flash' for eMMC devices Signed-off-by: Steve Rae <srae@broadcom.com> Acked-by: Lukasz Majewski <l.majewski@samsung.com> Reviewed-by: Marek Vasut <marex@denx.de>
This commit is contained in:
parent
c0aebb3382
commit
d1b5ed0753
10
README
10
README
@ -1629,6 +1629,16 @@ The following options need to be configured:
|
|||||||
downloads. This buffer should be as large as possible for a
|
downloads. This buffer should be as large as possible for a
|
||||||
platform. Define this to the size available RAM for fastboot.
|
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:
|
- Journaling Flash filesystem support:
|
||||||
CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE,
|
CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE,
|
||||||
CONFIG_JFFS2_NAND_DEV
|
CONFIG_JFFS2_NAND_DEV
|
||||||
|
@ -6,8 +6,9 @@ Overview
|
|||||||
The protocol that is used over USB is described in
|
The protocol that is used over USB is described in
|
||||||
README.android-fastboot-protocol in same directory.
|
README.android-fastboot-protocol in same directory.
|
||||||
|
|
||||||
The current implementation does not yet support the flash and erase
|
The current implementation does not yet support the erase command or the
|
||||||
commands.
|
"oem format" command, and there is minimal support for the flash command;
|
||||||
|
it only supports eMMC devices.
|
||||||
|
|
||||||
Client installation
|
Client installation
|
||||||
===================
|
===================
|
||||||
|
@ -19,6 +19,9 @@
|
|||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <version.h>
|
#include <version.h>
|
||||||
#include <g_dnl.h>
|
#include <g_dnl.h>
|
||||||
|
#ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV
|
||||||
|
#include <fb_mmc.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define FASTBOOT_VERSION "0.4"
|
#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");
|
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 {
|
struct cmd_dispatch_info {
|
||||||
char *cmd;
|
char *cmd;
|
||||||
void (*cb)(struct usb_ep *ep, struct usb_request *req);
|
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",
|
.cmd = "boot",
|
||||||
.cb = cb_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)
|
static void rx_handler_command(struct usb_ep *ep, struct usb_request *req)
|
||||||
|
Loading…
Reference in New Issue
Block a user