Thanks Lukasz. Regards, Dileep
On 24 February 2015 at 14:44, Lukasz Majewski <l.majew...@samsung.com> wrote: > Hi Dileep, > > > Adds the fastboot erase functionality, to erase a partition > > specified by name. The erase is performed based on erase group size, > > to avoid erasing other partitions. The start address and the size > > is aligned to the erase group size for this. > > > > Currently only supports erasing from eMMC. > > > > Signed-off-by: Dileep Katta <dileep.ka...@linaro.org> > > --- > > Changes in v2: > > - Removed unnecessary newline for error() messages > > - Made the command conditional on CONFIG_FASTBOOT_FLASH > > - Updated doc/README.android-fastboot to reflect the support > > common/fb_mmc.c | 56 > > +++++++++++++++++++++++++++++++++++++++++ > > doc/README.android-fastboot | 5 ++-- > > drivers/usb/gadget/f_fastboot.c | 25 ++++++++++++++++++ > > include/fb_mmc.h | 1 + 4 files changed, 84 > > insertions(+), 3 deletions(-) > > > > diff --git a/common/fb_mmc.c b/common/fb_mmc.c > > index 6ea3938..513b7ab 100644 > > --- a/common/fb_mmc.c > > +++ b/common/fb_mmc.c > > @@ -10,6 +10,7 @@ > > #include <part.h> > > #include <aboot.h> > > #include <sparse_format.h> > > +#include <mmc.h> > > > > #ifndef CONFIG_FASTBOOT_GPT_NAME > > #define CONFIG_FASTBOOT_GPT_NAME GPT_ENTRY_NAME > > @@ -110,3 +111,58 @@ void fb_mmc_flash_write(const char *cmd, void > > *download_buffer, write_raw_image(dev_desc, &info, cmd, > > download_buffer, download_bytes); > > } > > + > > +void fb_mmc_erase(const char *cmd, char *response) > > +{ > > + int ret; > > + block_dev_desc_t *dev_desc; > > + disk_partition_t info; > > + lbaint_t blks, blks_start, blks_size, grp_size; > > + struct mmc *mmc = > > find_mmc_device(CONFIG_FASTBOOT_FLASH_MMC_DEV); + > > + if (mmc == NULL) { > > + error("invalid mmc device"); > > + fastboot_fail("invalid mmc device"); > > + return; > > + } > > + > > + /* initialize the response buffer */ > > + response_str = response; > > + > > + dev_desc = get_dev("mmc", CONFIG_FASTBOOT_FLASH_MMC_DEV); > > + if (!dev_desc || dev_desc->type == DEV_TYPE_UNKNOWN) { > > + error("invalid mmc device"); > > + fastboot_fail("invalid mmc device"); > > + return; > > + } > > + > > + ret = get_partition_info_efi_by_name(dev_desc, cmd, &info); > > + if (ret) { > > + error("cannot find partition: '%s'", cmd); > > + fastboot_fail("cannot find partition"); > > + return; > > + } > > + > > + /* Align blocks to erase group size to avoid erasing other > > partitions */ > > + grp_size = mmc->erase_grp_size; > > + blks_start = (info.start + grp_size - 1) & ~(grp_size - 1); > > + if (info.size >= grp_size) > > + blks_size = (info.size - (blks_start - info.start)) & > > + (~(grp_size - 1)); > > + else > > + blks_size = 0; > > + > > + printf("Erasing blocks " LBAFU " to " LBAFU " due to > > alignment\n", > > + blks_start, blks_start + blks_size); > > + > > + blks = dev_desc->block_erase(dev_desc->dev, blks_start, > > blks_size); > > + if (blks != blks_size) { > > + error("failed erasing from device %d", > > dev_desc->dev); > > + fastboot_fail("failed erasing from device"); > > + return; > > + } > > + > > + printf("........ erased " LBAFU " bytes from '%s'\n", > > + blks_size * info.blksz, cmd); > > + fastboot_okay(""); > > +} > > diff --git a/doc/README.android-fastboot b/doc/README.android-fastboot > > index 1677609..5526a43 100644 > > --- a/doc/README.android-fastboot > > +++ b/doc/README.android-fastboot > > @@ -6,9 +6,8 @@ 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 erase command or > > the -"oem format" command, and there is minimal support for the flash > > command; -it only supports eMMC devices. > > +The current implementation is a minimal support of the erase > > command,the +"oem format" command and 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 f7d84bf..6138906 100644 > > --- a/drivers/usb/gadget/f_fastboot.c > > +++ b/drivers/usb/gadget/f_fastboot.c > > @@ -535,6 +535,28 @@ static void cb_oem(struct usb_ep *ep, struct > > usb_request *req) } > > } > > > > +#ifdef CONFIG_FASTBOOT_FLASH > > +static void cb_erase(struct usb_ep *ep, struct usb_request *req) > > +{ > > + char *cmd = req->buf; > > + char response[RESPONSE_LEN]; > > + > > + strsep(&cmd, ":"); > > + if (!cmd) { > > + error("missing partition name"); > > + fastboot_tx_write_str("FAILmissing partition name"); > > + return; > > + } > > + > > + strcpy(response, "FAILno flash device defined"); > > + > > +#ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV > > + fb_mmc_erase(cmd, response); > > +#endif > > + fastboot_tx_write_str(response); > > +} > > +#endif > > + > > struct cmd_dispatch_info { > > char *cmd; > > void (*cb)(struct usb_ep *ep, struct usb_request *req); > > @@ -561,6 +583,9 @@ static const struct cmd_dispatch_info > > cmd_dispatch_info[] = { { > > .cmd = "flash", > > .cb = cb_flash, > > + }, { > > + .cmd = "erase", > > + .cb = cb_erase, > > }, > > #endif > > { > > diff --git a/include/fb_mmc.h b/include/fb_mmc.h > > index 1ad1d13..402ba9b 100644 > > --- a/include/fb_mmc.h > > +++ b/include/fb_mmc.h > > @@ -6,3 +6,4 @@ > > > > void fb_mmc_flash_write(const char *cmd, void *download_buffer, > > unsigned int download_bytes, char *response); > > +void fb_mmc_erase(const char *cmd, char *response); > > Reviewed-by: Lukasz Majewski <l.majew...@samsung.com> > > I'm going to apply this patch to -dfu tree. > > Thanks Dileep! > > -- > Best regards, > > Lukasz Majewski > > Samsung R&D Institute Poland (SRPOL) | Linux Platform Group > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot