Message ID | 1429508853-10139-4-git-send-email-hs@denx.de |
---|---|
State | Superseded |
Delegated to: | Scott Wood |
Headers | show |
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!
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 --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 );
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(-)