Message ID | CABGGisyOM9+o1ceTixdjF+6HWoC9GGXoYUEyhWYFQNfUHQ6AGw@mail.gmail.com |
---|---|
State | New |
Headers | show |
Hi Rob, On 20 February 2015 at 20:24, Rob Herring <rob.herring@linaro.org> wrote: > On Wed, Feb 18, 2015 at 1:52 PM, Dileep Katta <dileep.katta@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 <robh@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.katta@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 > > >
On Wed, Mar 16, 2016 at 7:51 AM, Boris Brezillon <boris.brezillon@free-electrons.com> wrote: > Hi Rob, > > On Fri, 20 Feb 2015 08:54:56 -0600 > Rob Herring <rob.herring@linaro.org> wrote: > >> On Wed, Feb 18, 2015 at 1:52 PM, Dileep Katta <dileep.katta@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 >> 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 <robh@kernel.org> >> >> 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); >> } >> > > I need this feature to expose some uboot variable through 'fastboot > getvar', would you mind if I resend this patch for you? No, go ahead. Rob _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
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);