Hello Jagan,

Am 22.04.2015 12:58, schrieb Jagan Teki:
On 20 April 2015 at 11:17, Heiko Schocher <h...@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 <h...@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.t...@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
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to