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

Heiko Schocher hs at denx.de
Thu Apr 23 07:38:21 CEST 2015


Hello Jagan,

Am 22.04.2015 12:58, schrieb Jagan Teki:
> On 20 April 2015 at 11:17, Heiko Schocher <hs at 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 at 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 at gmail.com>
>
> thanks!

Thanks for your time!

bye,
Heiko
-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany


More information about the U-Boot mailing list