[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