Message ID | 1408823626-12744-3-git-send-email-srae@broadcom.com |
---|---|
State | New |
Headers | show |
Hi Steve, > - implement 'fastboot flash' for eMMC devices > > Signed-off-by: Steve Rae <srae@broadcom.com> > Reviewed-by: Marek Vasut <marex@denx.de> > --- > > Changes in v5: None > Changes in v4: None > Changes in v3: None > Changes in v2: > - update README.android-fastboot file > > README | 10 ++++++++++ > doc/README.android-fastboot | 5 +++-- > drivers/usb/gadget/f_fastboot.c | 31 +++++++++++++++++++++++++++++++ > 3 files changed, 44 insertions(+), 2 deletions(-) > > diff --git a/README b/README > index 1d71359..ed26884 100644 > --- a/README > +++ b/README > @@ -1623,6 +1623,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 addition ^^^^ 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 > diff --git a/doc/README.android-fastboot b/doc/README.android-fastboot > index 4045727..1677609 100644 > --- a/doc/README.android-fastboot > +++ b/doc/README.android-fastboot > @@ -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 > =================== > diff --git a/drivers/usb/gadget/f_fastboot.c > b/drivers/usb/gadget/f_fastboot.c index 7a1acb9..e2659fa 100644 > --- a/drivers/usb/gadget/f_fastboot.c > +++ b/drivers/usb/gadget/f_fastboot.c > @@ -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) Despite the minor misspelling. Acked-by: Lukasz Majewski <l.majewski@samsung.com>
diff --git a/README b/README index 1d71359..ed26884 100644 --- a/README +++ b/README @@ -1623,6 +1623,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 addition 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 diff --git a/doc/README.android-fastboot b/doc/README.android-fastboot index 4045727..1677609 100644 --- a/doc/README.android-fastboot +++ b/doc/README.android-fastboot @@ -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 =================== diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c index 7a1acb9..e2659fa 100644 --- a/drivers/usb/gadget/f_fastboot.c +++ b/drivers/usb/gadget/f_fastboot.c @@ -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)