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. > + "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! -- Jagan. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot