diff mbox

[v1,1/1] fastboot: Update getvar command to get 'userdata' partition size

Message ID CABGGisyOM9+o1ceTixdjF+6HWoC9GGXoYUEyhWYFQNfUHQ6AGw@mail.gmail.com
State New
Headers show

Commit Message

Rob Herring Feb. 20, 2015, 2:54 p.m. UTC
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>

 }

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
>

Comments

Dileep Katta Feb. 25, 2015, 9:45 p.m. UTC | #1
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
> >
>
Rob Herring March 17, 2016, 12:12 p.m. UTC | #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 mbox

Patch

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);