
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