[v6,4/4] usb/gadget: fastboot: implement sparse format

Message ID 1409078850-7873-5-git-send-email-srae@broadcom.com
State Accepted
Commit e5bf9878ea743564bcc7a15a79654fe06731a1e2
Headers show

Commit Message

Steve Rae Aug. 26, 2014, 6:47 p.m.
- add capability to "fastboot flash" with sparse format images

Signed-off-by: Steve Rae <srae@broadcom.com>
Acked-by: Lukasz Majewski <l.majewski@samsung.com>
---

Changes in v6:
- remove excess braces

Changes in v5:
- use the common/aboot.c for the "sparse format" handling

Changes in v4:
- rearranged "sparse format" support in this patchset, in order to isolate...

Changes in v3: None
Changes in v2: None

 common/Makefile |  1 +
 common/fb_mmc.c | 32 ++++++++++++++++++++++----------
 2 files changed, 23 insertions(+), 10 deletions(-)

Comments

Michael Trimarchi Aug. 27, 2014, 5:07 a.m. | #1
Hi

Il 26/ago/2014 20:46 "Steve Rae" <srae@broadcom.com> ha scritto:
>
> - add capability to "fastboot flash" with sparse format images
>
> Signed-off-by: Steve Rae <srae@broadcom.com>
> Acked-by: Lukasz Majewski <l.majewski@samsung.com>
> ---
>
> Changes in v6:
> - remove excess braces
>
> Changes in v5:
> - use the common/aboot.c for the "sparse format" handling
>
> Changes in v4:
> - rearranged "sparse format" support in this patchset, in order to
isolate...
>
> Changes in v3: None
> Changes in v2: None
>
>  common/Makefile |  1 +
>  common/fb_mmc.c | 32 ++++++++++++++++++++++----------
>  2 files changed, 23 insertions(+), 10 deletions(-)
>
> diff --git a/common/Makefile b/common/Makefile
> index daebe39..bc53078 100644
> --- a/common/Makefile
> +++ b/common/Makefile
> @@ -268,6 +268,7 @@ 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 += aboot.o
>  obj-y += fb_mmc.o
>  endif
>
> diff --git a/common/fb_mmc.c b/common/fb_mmc.c
> index 14d3982..fb06d8a 100644
> --- a/common/fb_mmc.c
> +++ b/common/fb_mmc.c
> @@ -7,16 +7,24 @@
>  #include <common.h>
>  #include <fb_mmc.h>
>  #include <part.h>
> +#include <aboot.h>
> +#include <sparse_format.h>
>
>  /* The 64 defined bytes plus the '\0' */
>  #define RESPONSE_LEN   (64 + 1)
>
>  static char *response_str;
>
> -static void fastboot_resp(const char *s)
> +void fastboot_fail(const char *s)
>  {
> -       strncpy(response_str, s, RESPONSE_LEN);
> -       response_str[RESPONSE_LEN - 1] = '\0';
> +       strncpy(response_str, "FAIL", 4);
> +       strncat(response_str, s, RESPONSE_LEN - 4 - 1);
> +}
> +

Change not connect to bug description. If you remove static this should go
in some header. For now it's only overhead.

> +void fastboot_okay(const char *s)
> +{
> +       strncpy(response_str, "OKAY", 4);
> +       strncat(response_str, s, RESPONSE_LEN - 4 - 1);
>  }
>

Ditto

Michael

>  static void write_raw_image(block_dev_desc_t *dev_desc, disk_partition_t
*info,
> @@ -32,7 +40,7 @@ static void write_raw_image(block_dev_desc_t *dev_desc,
disk_partition_t *info,
>
>         if (blkcnt > info->size) {
>                 error("too large for partition: '%s'\n", part_name);
> -               fastboot_resp("FAILtoo large for partition");
> +               fastboot_fail("too large for partition");
>                 return;
>         }
>
> @@ -42,13 +50,13 @@ static void write_raw_image(block_dev_desc_t
*dev_desc, disk_partition_t *info,
>                                      buffer);
>         if (blks != blkcnt) {
>                 error("failed writing to device %d\n", dev_desc->dev);
> -               fastboot_resp("FAILfailed writing to device");
> +               fastboot_fail("failed writing to device");
>                 return;
>         }
>
>         printf("........ wrote " LBAFU " bytes to '%s'\n", blkcnt *
info->blksz,
>                part_name);
> -       fastboot_resp("OKAY");
> +       fastboot_okay("");
>  }
>
>  void fb_mmc_flash_write(const char *cmd, void *download_buffer,
> @@ -64,17 +72,21 @@ void fb_mmc_flash_write(const char *cmd, void
*download_buffer,
>         dev_desc = get_dev("mmc", CONFIG_FASTBOOT_FLASH_MMC_DEV);
>         if (!dev_desc || dev_desc->type == DEV_TYPE_UNKNOWN) {
>                 error("invalid mmc device\n");
> -               fastboot_resp("FAILinvalid 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'\n", cmd);
> -               fastboot_resp("FAILcannot find partition");
> +               fastboot_fail("cannot find partition");
>                 return;
>         }
>
> -       write_raw_image(dev_desc, &info, cmd, download_buffer,
> -                       download_bytes);
> +       if (is_sparse_image(download_buffer))
> +               write_sparse_image(dev_desc, &info, cmd, download_buffer,
> +                                  download_bytes);
> +       else
> +               write_raw_image(dev_desc, &info, cmd, download_buffer,
> +                               download_bytes);
>  }
> --
> 1.8.5
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
Steve Rae Aug. 27, 2014, 5:43 p.m. | #2
Hi Michael

On 14-08-26 10:07 PM, Michael Trimarchi wrote:
> Hi
>
> Il 26/ago/2014 20:46 "Steve Rae" <srae@broadcom.com> ha scritto:
>>
>> - add capability to "fastboot flash" with sparse format images
>>
>> Signed-off-by: Steve Rae <srae@broadcom.com>
>> Acked-by: Lukasz Majewski <l.majewski@samsung.com>
>> ---
>>
>> Changes in v6:
>> - remove excess braces
>>
>> Changes in v5:
>> - use the common/aboot.c for the "sparse format" handling
>>
>> Changes in v4:
>> - rearranged "sparse format" support in this patchset, in order to
> isolate...
>>
>> Changes in v3: None
>> Changes in v2: None
>>
>>   common/Makefile |  1 +
>>   common/fb_mmc.c | 32 ++++++++++++++++++++++----------
>>   2 files changed, 23 insertions(+), 10 deletions(-)
>>
>> diff --git a/common/Makefile b/common/Makefile
>> index daebe39..bc53078 100644
>> --- a/common/Makefile
>> +++ b/common/Makefile
>> @@ -268,6 +268,7 @@ 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 += aboot.o
>>   obj-y += fb_mmc.o
>>   endif
>>
>> diff --git a/common/fb_mmc.c b/common/fb_mmc.c
>> index 14d3982..fb06d8a 100644
>> --- a/common/fb_mmc.c
>> +++ b/common/fb_mmc.c
>> @@ -7,16 +7,24 @@
>>   #include <common.h>
>>   #include <fb_mmc.h>
>>   #include <part.h>
>> +#include <aboot.h>
>> +#include <sparse_format.h>
>>
>>   /* The 64 defined bytes plus the '\0' */
>>   #define RESPONSE_LEN   (64 + 1)
>>
>>   static char *response_str;
>>
>> -static void fastboot_resp(const char *s)
>> +void fastboot_fail(const char *s)
>>   {
>> -       strncpy(response_str, s, RESPONSE_LEN);
>> -       response_str[RESPONSE_LEN - 1] = '\0';
>> +       strncpy(response_str, "FAIL", 4);
>> +       strncat(response_str, s, RESPONSE_LEN - 4 - 1);
>> +}
>> +
>
> Change not connect to bug description. If you remove static this should go
> in some header. For now it's only overhead.

Sorry for the confusion....
(1) the file "include/aboot.h" defines these two functions, and is part 
of the patchset that this series depends on (as documented in the cover 
letter):
	This series depends on:
	  http://patchwork.ozlabs.org/patch/382443/ (to 382446)
(2) this is the implementation of those functions that are required by 
that patchset
(3) so I thought the the commit message was sufficient -- implying that 
in order to implement the "sparse format" (from aboot.c) that these 
changes are required...
If required, I could submit a "v7" with more information in the commit 
message....
Please let me know!
Thanks, Steve

>
>> +void fastboot_okay(const char *s)
>> +{
>> +       strncpy(response_str, "OKAY", 4);
>> +       strncat(response_str, s, RESPONSE_LEN - 4 - 1);
>>   }
>>
>
> Ditto
>
> Michael
>
>>   static void write_raw_image(block_dev_desc_t *dev_desc, disk_partition_t
> *info,
>> @@ -32,7 +40,7 @@ static void write_raw_image(block_dev_desc_t *dev_desc,
> disk_partition_t *info,
>>
>>          if (blkcnt > info->size) {
>>                  error("too large for partition: '%s'\n", part_name);
>> -               fastboot_resp("FAILtoo large for partition");
>> +               fastboot_fail("too large for partition");
>>                  return;
>>          }
>>
>> @@ -42,13 +50,13 @@ static void write_raw_image(block_dev_desc_t
> *dev_desc, disk_partition_t *info,
>>                                       buffer);
>>          if (blks != blkcnt) {
>>                  error("failed writing to device %d\n", dev_desc->dev);
>> -               fastboot_resp("FAILfailed writing to device");
>> +               fastboot_fail("failed writing to device");
>>                  return;
>>          }
>>
>>          printf("........ wrote " LBAFU " bytes to '%s'\n", blkcnt *
> info->blksz,
>>                 part_name);
>> -       fastboot_resp("OKAY");
>> +       fastboot_okay("");
>>   }
>>
>>   void fb_mmc_flash_write(const char *cmd, void *download_buffer,
>> @@ -64,17 +72,21 @@ void fb_mmc_flash_write(const char *cmd, void
> *download_buffer,
>>          dev_desc = get_dev("mmc", CONFIG_FASTBOOT_FLASH_MMC_DEV);
>>          if (!dev_desc || dev_desc->type == DEV_TYPE_UNKNOWN) {
>>                  error("invalid mmc device\n");
>> -               fastboot_resp("FAILinvalid 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'\n", cmd);
>> -               fastboot_resp("FAILcannot find partition");
>> +               fastboot_fail("cannot find partition");
>>                  return;
>>          }
>>
>> -       write_raw_image(dev_desc, &info, cmd, download_buffer,
>> -                       download_bytes);
>> +       if (is_sparse_image(download_buffer))
>> +               write_sparse_image(dev_desc, &info, cmd, download_buffer,
>> +                                  download_bytes);
>> +       else
>> +               write_raw_image(dev_desc, &info, cmd, download_buffer,
>> +                               download_bytes);
>>   }
>> --
>> 1.8.5
>>
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot@lists.denx.de
>> http://lists.denx.de/mailman/listinfo/u-boot
>
Michael Trimarchi Aug. 27, 2014, 6:27 p.m. | #3
Hi

On Wed, Aug 27, 2014 at 7:43 PM, Steve Rae <srae@broadcom.com> wrote:
> Hi Michael
>
>
> On 14-08-26 10:07 PM, Michael Trimarchi wrote:
>>
>> Hi
>>
>> Il 26/ago/2014 20:46 "Steve Rae" <srae@broadcom.com> ha scritto:
>>>
>>>
>>> - add capability to "fastboot flash" with sparse format images
>>>
>>> Signed-off-by: Steve Rae <srae@broadcom.com>
>>> Acked-by: Lukasz Majewski <l.majewski@samsung.com>
>>> ---
>>>
>>> Changes in v6:
>>> - remove excess braces
>>>
>>> Changes in v5:
>>> - use the common/aboot.c for the "sparse format" handling
>>>
>>> Changes in v4:
>>> - rearranged "sparse format" support in this patchset, in order to
>>
>> isolate...
>>>
>>>
>>> Changes in v3: None
>>> Changes in v2: None
>>>
>>>   common/Makefile |  1 +
>>>   common/fb_mmc.c | 32 ++++++++++++++++++++++----------
>>>   2 files changed, 23 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/common/Makefile b/common/Makefile
>>> index daebe39..bc53078 100644
>>> --- a/common/Makefile
>>> +++ b/common/Makefile
>>> @@ -268,6 +268,7 @@ 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 += aboot.o
>>>   obj-y += fb_mmc.o
>>>   endif
>>>
>>> diff --git a/common/fb_mmc.c b/common/fb_mmc.c
>>> index 14d3982..fb06d8a 100644
>>> --- a/common/fb_mmc.c
>>> +++ b/common/fb_mmc.c
>>> @@ -7,16 +7,24 @@
>>>   #include <common.h>
>>>   #include <fb_mmc.h>
>>>   #include <part.h>
>>> +#include <aboot.h>
>>> +#include <sparse_format.h>
>>>
>>>   /* The 64 defined bytes plus the '\0' */
>>>   #define RESPONSE_LEN   (64 + 1)
>>>
>>>   static char *response_str;
>>>
>>> -static void fastboot_resp(const char *s)
>>> +void fastboot_fail(const char *s)
>>>   {
>>> -       strncpy(response_str, s, RESPONSE_LEN);
>>> -       response_str[RESPONSE_LEN - 1] = '\0';
>>> +       strncpy(response_str, "FAIL", 4);
>>> +       strncat(response_str, s, RESPONSE_LEN - 4 - 1);
>>> +}
>>> +
>>
>>
>> Change not connect to bug description. If you remove static this should go
>> in some header. For now it's only overhead.
>
>
> Sorry for the confusion....
> (1) the file "include/aboot.h" defines these two functions, and is part of
> the patchset that this series depends on (as documented in the cover
> letter):
>         This series depends on:
>           http://patchwork.ozlabs.org/patch/382443/ (to 382446)
> (2) this is the implementation of those functions that are required by that
> patchset
> (3) so I thought the the commit message was sufficient -- implying that in
> order to implement the "sparse format" (from aboot.c) that these changes are
> required...
> If required, I could submit a "v7" with more information in the commit
> message....
> Please let me know!

No it's fine. Sorry

Michael

> Thanks, Steve
>
>
>>
>>> +void fastboot_okay(const char *s)
>>> +{
>>> +       strncpy(response_str, "OKAY", 4);
>>> +       strncat(response_str, s, RESPONSE_LEN - 4 - 1);
>>>   }
>>>
>>
>> Ditto
>>
>> Michael
>>
>>>   static void write_raw_image(block_dev_desc_t *dev_desc,
>>> disk_partition_t
>>
>> *info,
>>>
>>> @@ -32,7 +40,7 @@ static void write_raw_image(block_dev_desc_t *dev_desc,
>>
>> disk_partition_t *info,
>>>
>>>
>>>          if (blkcnt > info->size) {
>>>                  error("too large for partition: '%s'\n", part_name);
>>> -               fastboot_resp("FAILtoo large for partition");
>>> +               fastboot_fail("too large for partition");
>>>                  return;
>>>          }
>>>
>>> @@ -42,13 +50,13 @@ static void write_raw_image(block_dev_desc_t
>>
>> *dev_desc, disk_partition_t *info,
>>>
>>>                                       buffer);
>>>          if (blks != blkcnt) {
>>>                  error("failed writing to device %d\n", dev_desc->dev);
>>> -               fastboot_resp("FAILfailed writing to device");
>>> +               fastboot_fail("failed writing to device");
>>>                  return;
>>>          }
>>>
>>>          printf("........ wrote " LBAFU " bytes to '%s'\n", blkcnt *
>>
>> info->blksz,
>>>
>>>                 part_name);
>>> -       fastboot_resp("OKAY");
>>> +       fastboot_okay("");
>>>   }
>>>
>>>   void fb_mmc_flash_write(const char *cmd, void *download_buffer,
>>> @@ -64,17 +72,21 @@ void fb_mmc_flash_write(const char *cmd, void
>>
>> *download_buffer,
>>>
>>>          dev_desc = get_dev("mmc", CONFIG_FASTBOOT_FLASH_MMC_DEV);
>>>          if (!dev_desc || dev_desc->type == DEV_TYPE_UNKNOWN) {
>>>                  error("invalid mmc device\n");
>>> -               fastboot_resp("FAILinvalid 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'\n", cmd);
>>> -               fastboot_resp("FAILcannot find partition");
>>> +               fastboot_fail("cannot find partition");
>>>                  return;
>>>          }
>>>
>>> -       write_raw_image(dev_desc, &info, cmd, download_buffer,
>>> -                       download_bytes);
>>> +       if (is_sparse_image(download_buffer))
>>> +               write_sparse_image(dev_desc, &info, cmd, download_buffer,
>>> +                                  download_bytes);
>>> +       else
>>> +               write_raw_image(dev_desc, &info, cmd, download_buffer,
>>> +                               download_bytes);
>>>   }
>>> --
>>> 1.8.5
>>>
>>> _______________________________________________
>>> U-Boot mailing list
>>> U-Boot@lists.denx.de
>>> http://lists.denx.de/mailman/listinfo/u-boot
>>
>>
>
Tom Rini Sept. 25, 2014, 2:44 p.m. | #4
On Tue, Aug 26, 2014 at 11:47:30AM -0700, Steve Rae wrote:

> - add capability to "fastboot flash" with sparse format images
> 
> Signed-off-by: Steve Rae <srae@broadcom.com>
> Acked-by: Lukasz Majewski <l.majewski@samsung.com>

Applied to u-boot/master, thanks!

Patch

diff --git a/common/Makefile b/common/Makefile
index daebe39..bc53078 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -268,6 +268,7 @@  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 += aboot.o
 obj-y += fb_mmc.o
 endif
 
diff --git a/common/fb_mmc.c b/common/fb_mmc.c
index 14d3982..fb06d8a 100644
--- a/common/fb_mmc.c
+++ b/common/fb_mmc.c
@@ -7,16 +7,24 @@ 
 #include <common.h>
 #include <fb_mmc.h>
 #include <part.h>
+#include <aboot.h>
+#include <sparse_format.h>
 
 /* The 64 defined bytes plus the '\0' */
 #define RESPONSE_LEN	(64 + 1)
 
 static char *response_str;
 
-static void fastboot_resp(const char *s)
+void fastboot_fail(const char *s)
 {
-	strncpy(response_str, s, RESPONSE_LEN);
-	response_str[RESPONSE_LEN - 1] = '\0';
+	strncpy(response_str, "FAIL", 4);
+	strncat(response_str, s, RESPONSE_LEN - 4 - 1);
+}
+
+void fastboot_okay(const char *s)
+{
+	strncpy(response_str, "OKAY", 4);
+	strncat(response_str, s, RESPONSE_LEN - 4 - 1);
 }
 
 static void write_raw_image(block_dev_desc_t *dev_desc, disk_partition_t *info,
@@ -32,7 +40,7 @@  static void write_raw_image(block_dev_desc_t *dev_desc, disk_partition_t *info,
 
 	if (blkcnt > info->size) {
 		error("too large for partition: '%s'\n", part_name);
-		fastboot_resp("FAILtoo large for partition");
+		fastboot_fail("too large for partition");
 		return;
 	}
 
@@ -42,13 +50,13 @@  static void write_raw_image(block_dev_desc_t *dev_desc, disk_partition_t *info,
 				     buffer);
 	if (blks != blkcnt) {
 		error("failed writing to device %d\n", dev_desc->dev);
-		fastboot_resp("FAILfailed writing to device");
+		fastboot_fail("failed writing to device");
 		return;
 	}
 
 	printf("........ wrote " LBAFU " bytes to '%s'\n", blkcnt * info->blksz,
 	       part_name);
-	fastboot_resp("OKAY");
+	fastboot_okay("");
 }
 
 void fb_mmc_flash_write(const char *cmd, void *download_buffer,
@@ -64,17 +72,21 @@  void fb_mmc_flash_write(const char *cmd, void *download_buffer,
 	dev_desc = get_dev("mmc", CONFIG_FASTBOOT_FLASH_MMC_DEV);
 	if (!dev_desc || dev_desc->type == DEV_TYPE_UNKNOWN) {
 		error("invalid mmc device\n");
-		fastboot_resp("FAILinvalid 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'\n", cmd);
-		fastboot_resp("FAILcannot find partition");
+		fastboot_fail("cannot find partition");
 		return;
 	}
 
-	write_raw_image(dev_desc, &info, cmd, download_buffer,
-			download_bytes);
+	if (is_sparse_image(download_buffer))
+		write_sparse_image(dev_desc, &info, cmd, download_buffer,
+				   download_bytes);
+	else
+		write_raw_image(dev_desc, &info, cmd, download_buffer,
+				download_bytes);
 }