Hi Rob,
On 20 February 2015 at 20:24, Rob Herring <rob.herr...@linaro.org> wrote: > On Wed, Feb 18, 2015 at 1:52 PM, Dileep Katta <dileep.ka...@linaro.org> > wrote: > > This patch adds functionality to getvar command to get the userdata > partition > > size. > > This is non-standard and doesn't scale to other partitions. There is > Is there a way to add support for retrieving some non-standard variables, such as cpu_type or board specific information in getvar or other command(oem!) in fastboot? already a standard var "partition-size:<part name>". There is also > "partition-type:<part name>" which probably needs to be supported as > well. It would probably be good to have generic code to retrieve > fastboot variables from a u-boot environment variables. Something like > this: > > fastboot: allow retrieving fastboot variables from env > > Signed-off-by: Rob Herring <r...@kernel.org> > > Thanks for the suggestion. Is it fine to extend fb_mmc_get_ptn_size() in this patch to to support standard var "partition-size:<part name>" and similar functionality for partition-type? or using "mtdparts" environment variable to get partition-type or partition-size is preferable? Please advise. Regards, Dileep diff --git a/drivers/usb/gadget/f_fastboot.c > b/drivers/usb/gadget/f_fastboot.c > index 310175a..31e1063 100644 > --- a/drivers/usb/gadget/f_fastboot.c > +++ b/drivers/usb/gadget/f_fastboot.c > @@ -364,8 +364,15 @@ static void cb_getvar(struct usb_ep *ep, struct > usb_request *req) > else > strcpy(response, "FAILValue not set"); > } else { > - error("unknown variable: %s\n", cmd); > - strcpy(response, "FAILVariable not implemented"); > + char envstr[32]; > + snprintf(envstr, sizeof(envstr) - 1, "fastboot.%s", cmd); > + s = getenv(envstr); > + if (s) { > + strncat(response, s, chars_left); > + } else { > + error("unknown variable: %s\n", cmd); > + strcpy(response, "FAILVariable not implemented"); > + } > } > fastboot_tx_write_str(response); > } > > Rob > > > Signed-off-by: Dileep Katta <dileep.ka...@linaro.org> > > --- > > common/fb_mmc.c | 38 > ++++++++++++++++++++++++++++++++++++++ > > drivers/usb/gadget/f_fastboot.c | 2 ++ > > include/fb_mmc.h | 2 ++ > > 3 files changed, 42 insertions(+) > > > > diff --git a/common/fb_mmc.c b/common/fb_mmc.c > > index 6ea3938..1bb6335 100644 > > --- a/common/fb_mmc.c > > +++ b/common/fb_mmc.c > > @@ -32,6 +32,44 @@ void fastboot_okay(const char *s) > > strncat(response_str, s, RESPONSE_LEN - 4 - 1); > > } > > > > +void fb_mmc_get_ptn_size(const char *cmd, char *response) > > +{ > > + int ret; > > + block_dev_desc_t *dev_desc; > > + disk_partition_t info; > > + u32 sz_mb; > > + u64 sz = 0; > > + char buf[RESPONSE_LEN]; > > + > > + /* 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; > > + } > > + > > + sz = (info.size * (u64)info.blksz) >> 10; > > + > > + if (sz >= 0xFFFFFFFF) { > > + sz_mb = (u32)(sz >> 10); > > + sprintf(buf, "0x%d MB", sz_mb); > > + fastboot_okay(buf); > > + } else { > > + sprintf(buf, "%d KB", (u32)sz); > > + fastboot_okay(buf); > > + } > > +} > > + > > 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) > > diff --git a/drivers/usb/gadget/f_fastboot.c > b/drivers/usb/gadget/f_fastboot.c > > index 310175a..17b64ef 100644 > > --- a/drivers/usb/gadget/f_fastboot.c > > +++ b/drivers/usb/gadget/f_fastboot.c > > @@ -363,6 +363,8 @@ static void cb_getvar(struct usb_ep *ep, struct > usb_request *req) > > strncat(response, s, chars_left); > > else > > strcpy(response, "FAILValue not set"); > > + } else if (!strcmp_l1("userdata_size", cmd)) { > > + fb_mmc_get_ptn_size("userdata", response); > > } else { > > error("unknown variable: %s\n", cmd); > > strcpy(response, "FAILVariable not implemented"); > > diff --git a/include/fb_mmc.h b/include/fb_mmc.h > > index 1ad1d13..353f325 100644 > > --- a/include/fb_mmc.h > > +++ b/include/fb_mmc.h > > @@ -4,5 +4,7 @@ > > * SPDX-License-Identifier: GPL-2.0+ > > */ > > > > +void fb_mmc_get_ptn_size(const char *cmd, char *response); > > + > > void fb_mmc_flash_write(const char *cmd, void *download_buffer, > > unsigned int download_bytes, char *response); > > -- > > 1.8.3.2 > > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot