diff mbox

[U-Boot,v5,3/3] spi, sf: use offset and size in sf cmd from mtdpartition

Message ID 1429508853-10139-4-git-send-email-hs@denx.de
State Superseded
Delegated to: Scott Wood
Headers show

Commit Message

Heiko Schocher April 20, 2015, 5:47 a.m. UTC
with this patch, it is possible to get the offset and size information
from the mtdpartiton setting in "mtdparts", similiar to the
"nand" commandos.

=> sf
sf - SPI flash sub-system

Usage:
sf probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus
                                  and chip select
sf read addr offset|partition len       - read `len' bytes starting at
                                          `offset' to memory at `addr'
sf write addr offset|partition len      - write `len' bytes from memory
                                          at `addr' to flash at `offset'
sf erase offset|partition [+]len        - erase `len' bytes from `offset'
                                          `+len' round up `len' to block size
sf update addr offset|partition len     - erase and write `len' bytes from memory
                                          at `addr' to flash at `offset'
=>
for example "env" is defined in mtdparts:

=> sf read 13000000 env
device 0 offset 0xd0000, size 0x10000
SF: 65536 bytes @ 0xd0000 Read: OK
=>

Signed-off-by: Heiko Schocher <hs@denx.de>

---

Changes in v2:
- none
Series-changes: 3
- rebase with d6c1ffc7d23f4fe4ae8c91101861055b8e1501b6
Series-changes: 4
- rebased against 385a08a60f042061b004642d6b9bb6cfb794ad5a
Series-changes: 5
- no changes

 common/cmd_sf.c | 50 +++++++++++++++++++++++++-------------------------
 1 file changed, 25 insertions(+), 25 deletions(-)

Comments

Jagan Teki April 22, 2015, 10:58 a.m. UTC | #1
On 20 April 2015 at 11:17, Heiko Schocher <hs@denx.de> wrote:
> with this patch, it is possible to get the offset and size information
> from the mtdpartiton setting in "mtdparts", similiar to the
> "nand" commandos.
>
> => sf
> sf - SPI flash sub-system
>
> Usage:
> sf probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus
>                                   and chip select
> sf read addr offset|partition len       - read `len' bytes starting at
>                                           `offset' to memory at `addr'
> sf write addr offset|partition len      - write `len' bytes from memory
>                                           at `addr' to flash at `offset'
> sf erase offset|partition [+]len        - erase `len' bytes from `offset'
>                                           `+len' round up `len' to block size
> sf update addr offset|partition len     - erase and write `len' bytes from memory
>                                           at `addr' to flash at `offset'
> =>
> for example "env" is defined in mtdparts:
>
> => sf read 13000000 env
> device 0 offset 0xd0000, size 0x10000
> SF: 65536 bytes @ 0xd0000 Read: OK
> =>
>
> Signed-off-by: Heiko Schocher <hs@denx.de>
>
> ---
>
> Changes in v2:
> - none
> Series-changes: 3
> - rebase with d6c1ffc7d23f4fe4ae8c91101861055b8e1501b6
> Series-changes: 4
> - rebased against 385a08a60f042061b004642d6b9bb6cfb794ad5a
> Series-changes: 5
> - no changes
>
>  common/cmd_sf.c | 50 +++++++++++++++++++++++++-------------------------
>  1 file changed, 25 insertions(+), 25 deletions(-)
>
> diff --git a/common/cmd_sf.c b/common/cmd_sf.c
> index 25a59e5..1932ac9 100644
> --- a/common/cmd_sf.c
> +++ b/common/cmd_sf.c
> @@ -12,6 +12,8 @@
>  #include <malloc.h>
>  #include <spi.h>
>  #include <spi_flash.h>
> +#include <jffs2/jffs2.h>
> +#include <linux/mtd/mtd.h>
>
>  #include <asm/io.h>
>  #include <dm/device-internal.h>
> @@ -258,23 +260,21 @@ static int spi_flash_update(struct spi_flash *flash, u32 offset,
>  static int do_spi_flash_read_write(int argc, char * const argv[])
>  {
>         unsigned long addr;
> -       unsigned long offset;
> -       unsigned long len;
>         void *buf;
>         char *endp;
>         int ret = 1;
> +       int dev = 0;
> +       loff_t offset, len, maxsize;
>
> -       if (argc < 4)
> +       if (argc < 3)
>                 return -1;
>
>         addr = simple_strtoul(argv[1], &endp, 16);
>         if (*argv[1] == 0 || *endp != 0)
>                 return -1;
> -       offset = simple_strtoul(argv[2], &endp, 16);
> -       if (*argv[2] == 0 || *endp != 0)
> -               return -1;
> -       len = simple_strtoul(argv[3], &endp, 16);
> -       if (*argv[3] == 0 || *endp != 0)
> +
> +       if (arg_off_size(argc - 2, &argv[2], &dev, &offset, &len, &maxsize,
> +           MTD_DEV_TYPE_NOR, flash->size))
>                 return -1;
>
>         /* Consistency checking */
> @@ -313,31 +313,31 @@ static int do_spi_flash_read_write(int argc, char * const argv[])
>
>  static int do_spi_flash_erase(int argc, char * const argv[])
>  {
> -       unsigned long offset;
> -       unsigned long len;
> -       char *endp;
>         int ret;
> +       int dev = 0;
> +       loff_t offset, len, maxsize;
> +       ulong size;
>
>         if (argc < 3)
>                 return -1;
>
> -       offset = simple_strtoul(argv[1], &endp, 16);
> -       if (*argv[1] == 0 || *endp != 0)
> +       if (arg_off(argv[1], &dev, &offset, &len, &maxsize,
> +           MTD_DEV_TYPE_NOR, flash->size))
>                 return -1;
>
> -       ret = sf_parse_len_arg(argv[2], &len);
> +       ret = sf_parse_len_arg(argv[2], &size);
>         if (ret != 1)
>                 return -1;
>
>         /* Consistency checking */
> -       if (offset + len > flash->size) {
> +       if (offset + size > flash->size) {
>                 printf("ERROR: attempting %s past flash size (%#x)\n",
>                        argv[0], flash->size);
>                 return 1;
>         }
>
> -       ret = spi_flash_erase(flash, offset, len);
> -       printf("SF: %zu bytes @ %#x Erased: %s\n", (size_t)len, (u32)offset,
> +       ret = spi_flash_erase(flash, offset, size);
> +       printf("SF: %zu bytes @ %#x Erased: %s\n", (size_t)size, (u32)offset,
>                ret ? "ERROR" : "OK");
>
>         return ret == 0 ? 0 : 1;
> @@ -562,13 +562,13 @@ U_BOOT_CMD(
>         "SPI flash sub-system",
>         "probe [[bus:]cs] [hz] [mode]   - init flash device on given SPI bus\n"
>         "                                 and chip select\n"
> -       "sf read addr offset len        - read `len' bytes starting at\n"
> -       "                                 `offset' to memory at `addr'\n"
> -       "sf write addr offset len       - write `len' bytes from memory\n"
> -       "                                 at `addr' to flash at `offset'\n"
> -       "sf erase offset [+]len         - erase `len' bytes from `offset'\n"
> -       "                                 `+len' round up `len' to block size\n"
> -       "sf update addr offset len      - erase and write `len' bytes from memory\n"
> -       "                                 at `addr' to flash at `offset'"
> +       "sf read addr offset|partition len      - read `len' bytes starting at\n"
> +       "                                         `offset' to memory at `addr'\n"

Append partition on help text as well more readable.

> +       "sf write addr offset|partition len     - write `len' bytes from memory\n"
> +       "                                         at `addr' to flash at `offset'\n"
> +       "sf erase offset|partition [+]len       - erase `len' bytes from `offset'\n"
> +       "                                        `+len' round up `len' to block size\n"
> +       "sf update addr offset|partition len    - erase and write `len' bytes from memory\n"
> +       "                                         at `addr' to flash at `offset'"
>         SF_TEST_HELP
>  );
> --
> 2.1.0
>

Reviewed-by: Jagannadha Sutradharudu Teki <jagannadh.teki@gmail.com>

thanks!
Heiko Schocher April 23, 2015, 5:38 a.m. UTC | #2
Hello Jagan,

Am 22.04.2015 12:58, schrieb Jagan Teki:
> On 20 April 2015 at 11:17, Heiko Schocher <hs@denx.de> wrote:
>> with this patch, it is possible to get the offset and size information
>> from the mtdpartiton setting in "mtdparts", similiar to the
>> "nand" commandos.
>>
>> => sf
>> sf - SPI flash sub-system
>>
>> Usage:
>> sf probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus
>>                                    and chip select
>> sf read addr offset|partition len       - read `len' bytes starting at
>>                                            `offset' to memory at `addr'
>> sf write addr offset|partition len      - write `len' bytes from memory
>>                                            at `addr' to flash at `offset'
>> sf erase offset|partition [+]len        - erase `len' bytes from `offset'
>>                                            `+len' round up `len' to block size
>> sf update addr offset|partition len     - erase and write `len' bytes from memory
>>                                            at `addr' to flash at `offset'
>> =>
>> for example "env" is defined in mtdparts:
>>
>> => sf read 13000000 env
>> device 0 offset 0xd0000, size 0x10000
>> SF: 65536 bytes @ 0xd0000 Read: OK
>> =>
>>
>> Signed-off-by: Heiko Schocher <hs@denx.de>
>>
>> ---
>>
>> Changes in v2:
>> - none
>> Series-changes: 3
>> - rebase with d6c1ffc7d23f4fe4ae8c91101861055b8e1501b6
>> Series-changes: 4
>> - rebased against 385a08a60f042061b004642d6b9bb6cfb794ad5a
>> Series-changes: 5
>> - no changes
>>
>>   common/cmd_sf.c | 50 +++++++++++++++++++++++++-------------------------
>>   1 file changed, 25 insertions(+), 25 deletions(-)
>>
>> diff --git a/common/cmd_sf.c b/common/cmd_sf.c
>> index 25a59e5..1932ac9 100644
>> --- a/common/cmd_sf.c
>> +++ b/common/cmd_sf.c
>> @@ -12,6 +12,8 @@
>>   #include <malloc.h>
>>   #include <spi.h>
>>   #include <spi_flash.h>
>> +#include <jffs2/jffs2.h>
>> +#include <linux/mtd/mtd.h>
>>
>>   #include <asm/io.h>
>>   #include <dm/device-internal.h>
>> @@ -258,23 +260,21 @@ static int spi_flash_update(struct spi_flash *flash, u32 offset,
>>   static int do_spi_flash_read_write(int argc, char * const argv[])
>>   {
>>          unsigned long addr;
>> -       unsigned long offset;
>> -       unsigned long len;
>>          void *buf;
>>          char *endp;
>>          int ret = 1;
>> +       int dev = 0;
>> +       loff_t offset, len, maxsize;
>>
>> -       if (argc < 4)
>> +       if (argc < 3)
>>                  return -1;
>>
>>          addr = simple_strtoul(argv[1], &endp, 16);
>>          if (*argv[1] == 0 || *endp != 0)
>>                  return -1;
>> -       offset = simple_strtoul(argv[2], &endp, 16);
>> -       if (*argv[2] == 0 || *endp != 0)
>> -               return -1;
>> -       len = simple_strtoul(argv[3], &endp, 16);
>> -       if (*argv[3] == 0 || *endp != 0)
>> +
>> +       if (arg_off_size(argc - 2, &argv[2], &dev, &offset, &len, &maxsize,
>> +           MTD_DEV_TYPE_NOR, flash->size))
>>                  return -1;
>>
>>          /* Consistency checking */
>> @@ -313,31 +313,31 @@ static int do_spi_flash_read_write(int argc, char * const argv[])
>>
>>   static int do_spi_flash_erase(int argc, char * const argv[])
>>   {
>> -       unsigned long offset;
>> -       unsigned long len;
>> -       char *endp;
>>          int ret;
>> +       int dev = 0;
>> +       loff_t offset, len, maxsize;
>> +       ulong size;
>>
>>          if (argc < 3)
>>                  return -1;
>>
>> -       offset = simple_strtoul(argv[1], &endp, 16);
>> -       if (*argv[1] == 0 || *endp != 0)
>> +       if (arg_off(argv[1], &dev, &offset, &len, &maxsize,
>> +           MTD_DEV_TYPE_NOR, flash->size))
>>                  return -1;
>>
>> -       ret = sf_parse_len_arg(argv[2], &len);
>> +       ret = sf_parse_len_arg(argv[2], &size);
>>          if (ret != 1)
>>                  return -1;
>>
>>          /* Consistency checking */
>> -       if (offset + len > flash->size) {
>> +       if (offset + size > flash->size) {
>>                  printf("ERROR: attempting %s past flash size (%#x)\n",
>>                         argv[0], flash->size);
>>                  return 1;
>>          }
>>
>> -       ret = spi_flash_erase(flash, offset, len);
>> -       printf("SF: %zu bytes @ %#x Erased: %s\n", (size_t)len, (u32)offset,
>> +       ret = spi_flash_erase(flash, offset, size);
>> +       printf("SF: %zu bytes @ %#x Erased: %s\n", (size_t)size, (u32)offset,
>>                 ret ? "ERROR" : "OK");
>>
>>          return ret == 0 ? 0 : 1;
>> @@ -562,13 +562,13 @@ U_BOOT_CMD(
>>          "SPI flash sub-system",
>>          "probe [[bus:]cs] [hz] [mode]   - init flash device on given SPI bus\n"
>>          "                                 and chip select\n"
>> -       "sf read addr offset len        - read `len' bytes starting at\n"
>> -       "                                 `offset' to memory at `addr'\n"
>> -       "sf write addr offset len       - write `len' bytes from memory\n"
>> -       "                                 at `addr' to flash at `offset'\n"
>> -       "sf erase offset [+]len         - erase `len' bytes from `offset'\n"
>> -       "                                 `+len' round up `len' to block size\n"
>> -       "sf update addr offset len      - erase and write `len' bytes from memory\n"
>> -       "                                 at `addr' to flash at `offset'"
>> +       "sf read addr offset|partition len      - read `len' bytes starting at\n"
>> +       "                                         `offset' to memory at `addr'\n"
>
> Append partition on help text as well more readable.

Added.

>> +       "sf write addr offset|partition len     - write `len' bytes from memory\n"
>> +       "                                         at `addr' to flash at `offset'\n"
>> +       "sf erase offset|partition [+]len       - erase `len' bytes from `offset'\n"
>> +       "                                        `+len' round up `len' to block size\n"
>> +       "sf update addr offset|partition len    - erase and write `len' bytes from memory\n"
>> +       "                                         at `addr' to flash at `offset'"
>>          SF_TEST_HELP
>>   );
>> --
>> 2.1.0
>>
>
> Reviewed-by: Jagannadha Sutradharudu Teki <jagannadh.teki@gmail.com>
>
> thanks!

Thanks for your time!

bye,
Heiko
diff mbox

Patch

diff --git a/common/cmd_sf.c b/common/cmd_sf.c
index 25a59e5..1932ac9 100644
--- a/common/cmd_sf.c
+++ b/common/cmd_sf.c
@@ -12,6 +12,8 @@ 
 #include <malloc.h>
 #include <spi.h>
 #include <spi_flash.h>
+#include <jffs2/jffs2.h>
+#include <linux/mtd/mtd.h>
 
 #include <asm/io.h>
 #include <dm/device-internal.h>
@@ -258,23 +260,21 @@  static int spi_flash_update(struct spi_flash *flash, u32 offset,
 static int do_spi_flash_read_write(int argc, char * const argv[])
 {
 	unsigned long addr;
-	unsigned long offset;
-	unsigned long len;
 	void *buf;
 	char *endp;
 	int ret = 1;
+	int dev = 0;
+	loff_t offset, len, maxsize;
 
-	if (argc < 4)
+	if (argc < 3)
 		return -1;
 
 	addr = simple_strtoul(argv[1], &endp, 16);
 	if (*argv[1] == 0 || *endp != 0)
 		return -1;
-	offset = simple_strtoul(argv[2], &endp, 16);
-	if (*argv[2] == 0 || *endp != 0)
-		return -1;
-	len = simple_strtoul(argv[3], &endp, 16);
-	if (*argv[3] == 0 || *endp != 0)
+
+	if (arg_off_size(argc - 2, &argv[2], &dev, &offset, &len, &maxsize,
+	    MTD_DEV_TYPE_NOR, flash->size))
 		return -1;
 
 	/* Consistency checking */
@@ -313,31 +313,31 @@  static int do_spi_flash_read_write(int argc, char * const argv[])
 
 static int do_spi_flash_erase(int argc, char * const argv[])
 {
-	unsigned long offset;
-	unsigned long len;
-	char *endp;
 	int ret;
+	int dev = 0;
+	loff_t offset, len, maxsize;
+	ulong size;
 
 	if (argc < 3)
 		return -1;
 
-	offset = simple_strtoul(argv[1], &endp, 16);
-	if (*argv[1] == 0 || *endp != 0)
+	if (arg_off(argv[1], &dev, &offset, &len, &maxsize,
+	    MTD_DEV_TYPE_NOR, flash->size))
 		return -1;
 
-	ret = sf_parse_len_arg(argv[2], &len);
+	ret = sf_parse_len_arg(argv[2], &size);
 	if (ret != 1)
 		return -1;
 
 	/* Consistency checking */
-	if (offset + len > flash->size) {
+	if (offset + size > flash->size) {
 		printf("ERROR: attempting %s past flash size (%#x)\n",
 		       argv[0], flash->size);
 		return 1;
 	}
 
-	ret = spi_flash_erase(flash, offset, len);
-	printf("SF: %zu bytes @ %#x Erased: %s\n", (size_t)len, (u32)offset,
+	ret = spi_flash_erase(flash, offset, size);
+	printf("SF: %zu bytes @ %#x Erased: %s\n", (size_t)size, (u32)offset,
 	       ret ? "ERROR" : "OK");
 
 	return ret == 0 ? 0 : 1;
@@ -562,13 +562,13 @@  U_BOOT_CMD(
 	"SPI flash sub-system",
 	"probe [[bus:]cs] [hz] [mode]	- init flash device on given SPI bus\n"
 	"				  and chip select\n"
-	"sf read addr offset len	- read `len' bytes starting at\n"
-	"				  `offset' to memory at `addr'\n"
-	"sf write addr offset len	- write `len' bytes from memory\n"
-	"				  at `addr' to flash at `offset'\n"
-	"sf erase offset [+]len		- erase `len' bytes from `offset'\n"
-	"				  `+len' round up `len' to block size\n"
-	"sf update addr offset len	- erase and write `len' bytes from memory\n"
-	"				  at `addr' to flash at `offset'"
+	"sf read addr offset|partition len	- read `len' bytes starting at\n"
+	"				          `offset' to memory at `addr'\n"
+	"sf write addr offset|partition len	- write `len' bytes from memory\n"
+	"				          at `addr' to flash at `offset'\n"
+	"sf erase offset|partition [+]len	- erase `len' bytes from `offset'\n"
+	"					 `+len' round up `len' to block size\n"
+	"sf update addr offset|partition len	- erase and write `len' bytes from memory\n"
+	"				          at `addr' to flash at `offset'"
 	SF_TEST_HELP
 );