public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Steve Rae <srae@broadcom.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v1 1/1] usb: gadget: fastboot: Add fastboot erase
Date: Tue, 10 Feb 2015 13:25:09 -0800	[thread overview]
Message-ID: <54DA7735.6070605@broadcom.com> (raw)
In-Reply-To: <1423558178-23105-1-git-send-email-dileep.katta@linaro.org>

Hi, Dileep

On 15-02-10 12:49 AM, Dileep Katta wrote:
> 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.katta@linaro.org>
> ---
> Note: The changes are on top of oem command support added by robh at kernel.org
>
>   common/fb_mmc.c                 | 58 +++++++++++++++++++++++++++++++++++++++++
>   drivers/usb/gadget/f_fastboot.c | 23 ++++++++++++++++
>   include/fb_mmc.h                |  1 +
>   3 files changed, 82 insertions(+)
>
> diff --git a/common/fb_mmc.c b/common/fb_mmc.c
> index 6ea3938..3911989 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,60 @@ 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\n");
no newline with error()

> +		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\n");
no newline with error()

> +		fastboot_fail("invalid mmc device");
> +		return;
> +	}
> +
> +	ret = get_partition_info_efi_by_name(dev_desc, cmd, &info);
> +	if (ret) {
> +		error("cannot find partition: '%s'\n", cmd);
no newline with error()

> +		fastboot_fail("cannot find partition");
> +		return;
> +	}
> +
> +	puts("Erasing partition\n");
> +
> +	/* 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;

Is this logic correct??? Isn't the "erase_grp_size" in bytes? and the 
info.start & info.size in LBA's?


> +
> +	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\n", dev_desc->dev);
no newline with error()

> +		fastboot_fail("failed erasing from device");
> +		return;
> +	}
> +
> +	printf("........ erased " LBAFU " bytes from '%s'\n",
> +	       blks_size * info.blksz, cmd);
> +	fastboot_okay("");
> +}
> diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
> index f7d84bf..a8d8205 100644
> --- a/drivers/usb/gadget/f_fastboot.c
> +++ b/drivers/usb/gadget/f_fastboot.c
> @@ -535,6 +535,26 @@ static void cb_oem(struct usb_ep *ep, struct usb_request *req)
>   	}
>   }
>
> +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\n");
no newline with error()

> +		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);
> +}
> +
>   struct cmd_dispatch_info {
>   	char *cmd;
>   	void (*cb)(struct usb_ep *ep, struct usb_request *req);
> @@ -566,6 +586,9 @@ static const struct cmd_dispatch_info cmd_dispatch_info[] = {
>   	{
>   		.cmd = "oem",
>   		.cb = cb_oem,
> +	}, {
> +		.cmd = "erase",
> +		.cb = cb_erase,
>   	},
>   };
>
> 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);
>

  reply	other threads:[~2015-02-10 21:25 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-10  8:49 [U-Boot] [PATCH v1 1/1] usb: gadget: fastboot: Add fastboot erase Dileep Katta
2015-02-10 21:25 ` Steve Rae [this message]
2015-02-12  8:29   ` Dileep Katta
2015-02-13 20:45     ` Steve Rae
2015-02-16 20:40       ` Dileep Katta
2015-02-16 21:21         ` Steve Rae
2015-02-17 12:57           ` Dileep Katta
2015-02-17 13:18             ` [U-Boot] [PATCH v2 " Dileep Katta
2015-02-24  9:14               ` Lukasz Majewski
2015-02-24 11:13                 ` Dileep Katta
2015-02-17 15:55             ` [U-Boot] [PATCH v1 " Matt Reimer
2015-02-12  6:35 ` Rob Herring
2015-02-12  9:21   ` Dileep Katta
2015-02-12 17:21     ` Steve Rae

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54DA7735.6070605@broadcom.com \
    --to=srae@broadcom.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox