Message ID | 1408823626-12744-2-git-send-email-srae@broadcom.com |
---|---|
State | New |
Headers | show |
Hi Steve, > - add support for 'fastboot flash' command for eMMC devices > > Signed-off-by: Steve Rae <srae@broadcom.com> > --- > > Changes in v5: None > Changes in v4: > - rearranged this patchset so that "sparse_format.h" can be dropped > (if we cannot resolve the copyright/licensing issues) > - update mmc_get_dev(...) to get_dev("mmc",....) > - update printf() to puts() where applicable > > Changes in v3: > - remove most references to 'mmc', > which leaves only one mmc specific function: mmc_get_dev() > > Changes in v2: > - split large function into three > - improved handling of response messages > - additional partition size checking when writing sparse image > > common/Makefile | 5 ++++ > common/fb_mmc.c | 82 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > include/fb_mmc.h | 8 ++++++ 3 files changed, 95 insertions(+) > create mode 100644 common/fb_mmc.c > create mode 100644 include/fb_mmc.h > > diff --git a/common/Makefile b/common/Makefile > index de5cce8..daebe39 100644 > --- a/common/Makefile > +++ b/common/Makefile > @@ -266,4 +266,9 @@ obj-$(CONFIG_IO_TRACE) += iotrace.o > obj-y += memsize.o > obj-y += stdio.o > > +# This option is not just y/n - it can have a numeric value > +ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV > +obj-y += fb_mmc.o > +endif > + > CFLAGS_env_embedded.o := -Wa,--no-warn -DENV_CRC=$(shell > tools/envcrc 2>/dev/null) diff --git a/common/fb_mmc.c > b/common/fb_mmc.c new file mode 100644 > index 0000000..e559e2a > --- /dev/null > +++ b/common/fb_mmc.c > @@ -0,0 +1,82 @@ > +/* > + * Copyright 2014 Broadcom Corporation. > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#include <common.h> > +#include <fb_mmc.h> > +#include <part.h> > + > +/* The 64 defined bytes plus the '\0' */ > +#define RESPONSE_LEN (64 + 1) > + > +static char *response_str; > + > +static void fastboot_resp(const char *s) > +{ > + strncpy(response_str, s, RESPONSE_LEN); > + response_str[RESPONSE_LEN - 1] = '\0'; > +} > + > +static void write_raw_image(block_dev_desc_t *dev_desc, > disk_partition_t *info, > + const char *part_name, void *buffer, > + unsigned int download_bytes) > +{ > + lbaint_t blkcnt; > + lbaint_t blks; > + > + /* determine number of blocks to write */ > + blkcnt = ((download_bytes + (info->blksz - 1)) & > ~(info->blksz - 1)); > + blkcnt = blkcnt / info->blksz; > + > + if (blkcnt > info->size) { > + printf("%s: too large for partition: '%s'\n", > __func__, > + part_name); I would opt for using error() here instead of printf(). > + fastboot_resp("FAILtoo large for partition"); > + return; > + } > + > + puts("Flashing Raw Image\n"); > + > + blks = dev_desc->block_write(dev_desc->dev, info->start, > blkcnt, > + buffer); > + if (blks != blkcnt) { > + printf("%s: failed writing to device %d\n", __func__, > + dev_desc->dev); printf() -> error() > + fastboot_resp("FAILfailed writing to device"); > + return; > + } > + > + printf("........ wrote " LBAFU " bytes to '%s'\n", blkcnt * > info->blksz, > + part_name); > + fastboot_resp("OKAY"); > +} > + > +void fb_mmc_flash_write(const char *cmd, void *download_buffer, > + unsigned int download_bytes, char *response) > +{ > + int ret; > + block_dev_desc_t *dev_desc; > + disk_partition_t info; > + > + /* 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) { > + printf("%s: invalid mmc device\n", __func__); printf() -> error() > + fastboot_resp("FAILinvalid mmc device"); > + return; > + } > + > + ret = get_partition_info_efi_by_name(dev_desc, cmd, &info); > + if (ret) { > + printf("%s: cannot find partition: '%s'\n", > __func__, cmd); printf() -> error() > + fastboot_resp("FAILcannot find partition"); > + return; > + } > + > + write_raw_image(dev_desc, &info, cmd, download_buffer, > + download_bytes); > +} > diff --git a/include/fb_mmc.h b/include/fb_mmc.h > new file mode 100644 > index 0000000..1ad1d13 > --- /dev/null > +++ b/include/fb_mmc.h > @@ -0,0 +1,8 @@ > +/* > + * Copyright 2014 Broadcom Corporation. > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +void fb_mmc_flash_write(const char *cmd, void *download_buffer, > + unsigned int download_bytes, char *response);
On Tuesday, August 26, 2014 at 11:28:43 AM, Lukasz Majewski wrote: > Hi Steve, > > > - add support for 'fastboot flash' command for eMMC devices > > > > Signed-off-by: Steve Rae <srae@broadcom.com> If those are only small things, I think we can fix them up ourselves before applying, no? Let's do just that if Steve agrees, no ? Best regards, Marek Vasut
Steve agrees!!! -- I have fixed them this time, see "v6", However, I have no issue with you cleaning up the minor issues.... THANKS, Steve On 14-08-26 02:41 AM, Marek Vasut wrote: > On Tuesday, August 26, 2014 at 11:28:43 AM, Lukasz Majewski wrote: >> Hi Steve, >> >>> - add support for 'fastboot flash' command for eMMC devices >>> >>> Signed-off-by: Steve Rae <srae@broadcom.com> > > If those are only small things, I think we can fix them up ourselves before > applying, no? Let's do just that if Steve agrees, no ? > > Best regards, > Marek Vasut >
diff --git a/common/Makefile b/common/Makefile index de5cce8..daebe39 100644 --- a/common/Makefile +++ b/common/Makefile @@ -266,4 +266,9 @@ obj-$(CONFIG_IO_TRACE) += iotrace.o obj-y += memsize.o obj-y += stdio.o +# This option is not just y/n - it can have a numeric value +ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV +obj-y += fb_mmc.o +endif + CFLAGS_env_embedded.o := -Wa,--no-warn -DENV_CRC=$(shell tools/envcrc 2>/dev/null) diff --git a/common/fb_mmc.c b/common/fb_mmc.c new file mode 100644 index 0000000..e559e2a --- /dev/null +++ b/common/fb_mmc.c @@ -0,0 +1,82 @@ +/* + * Copyright 2014 Broadcom Corporation. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <fb_mmc.h> +#include <part.h> + +/* The 64 defined bytes plus the '\0' */ +#define RESPONSE_LEN (64 + 1) + +static char *response_str; + +static void fastboot_resp(const char *s) +{ + strncpy(response_str, s, RESPONSE_LEN); + response_str[RESPONSE_LEN - 1] = '\0'; +} + +static void write_raw_image(block_dev_desc_t *dev_desc, disk_partition_t *info, + const char *part_name, void *buffer, + unsigned int download_bytes) +{ + lbaint_t blkcnt; + lbaint_t blks; + + /* determine number of blocks to write */ + blkcnt = ((download_bytes + (info->blksz - 1)) & ~(info->blksz - 1)); + blkcnt = blkcnt / info->blksz; + + if (blkcnt > info->size) { + printf("%s: too large for partition: '%s'\n", __func__, + part_name); + fastboot_resp("FAILtoo large for partition"); + return; + } + + puts("Flashing Raw Image\n"); + + blks = dev_desc->block_write(dev_desc->dev, info->start, blkcnt, + buffer); + if (blks != blkcnt) { + printf("%s: failed writing to device %d\n", __func__, + dev_desc->dev); + fastboot_resp("FAILfailed writing to device"); + return; + } + + printf("........ wrote " LBAFU " bytes to '%s'\n", blkcnt * info->blksz, + part_name); + fastboot_resp("OKAY"); +} + +void fb_mmc_flash_write(const char *cmd, void *download_buffer, + unsigned int download_bytes, char *response) +{ + int ret; + block_dev_desc_t *dev_desc; + disk_partition_t info; + + /* 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) { + printf("%s: invalid mmc device\n", __func__); + fastboot_resp("FAILinvalid mmc device"); + return; + } + + ret = get_partition_info_efi_by_name(dev_desc, cmd, &info); + if (ret) { + printf("%s: cannot find partition: '%s'\n", __func__, cmd); + fastboot_resp("FAILcannot find partition"); + return; + } + + write_raw_image(dev_desc, &info, cmd, download_buffer, + download_bytes); +} diff --git a/include/fb_mmc.h b/include/fb_mmc.h new file mode 100644 index 0000000..1ad1d13 --- /dev/null +++ b/include/fb_mmc.h @@ -0,0 +1,8 @@ +/* + * Copyright 2014 Broadcom Corporation. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +void fb_mmc_flash_write(const char *cmd, void *download_buffer, + unsigned int download_bytes, char *response);
- add support for 'fastboot flash' command for eMMC devices Signed-off-by: Steve Rae <srae@broadcom.com> --- Changes in v5: None Changes in v4: - rearranged this patchset so that "sparse_format.h" can be dropped (if we cannot resolve the copyright/licensing issues) - update mmc_get_dev(...) to get_dev("mmc",....) - update printf() to puts() where applicable Changes in v3: - remove most references to 'mmc', which leaves only one mmc specific function: mmc_get_dev() Changes in v2: - split large function into three - improved handling of response messages - additional partition size checking when writing sparse image common/Makefile | 5 ++++ common/fb_mmc.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ include/fb_mmc.h | 8 ++++++ 3 files changed, 95 insertions(+) create mode 100644 common/fb_mmc.c create mode 100644 include/fb_mmc.h