From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Thu, 23 Apr 2015 07:38:21 +0200 Subject: [U-Boot] [PATCH v5 3/3] spi, sf: use offset and size in sf cmd from mtdpartition In-Reply-To: References: <1429508853-10139-1-git-send-email-hs@denx.de> <1429508853-10139-4-git-send-email-hs@denx.de> Message-ID: <5538854D.6020507@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Jagan, Am 22.04.2015 12:58, schrieb Jagan Teki: > On 20 April 2015 at 11:17, Heiko Schocher 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 >> >> --- >> >> 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 >> #include >> #include >> +#include >> +#include >> >> #include >> #include >> @@ -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 > > 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