All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.