From patchwork Mon Jun 22 20:00:16 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagan Teki X-Patchwork-Id: 487371 X-Patchwork-Delegate: jagannadh.teki@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 7BB0C140157 for ; Tue, 23 Jun 2015 06:01:15 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 82E854B660; Mon, 22 Jun 2015 22:01:04 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8JcvqfABmL9Q; Mon, 22 Jun 2015 22:01:04 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 767824B688; Mon, 22 Jun 2015 22:00:58 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 33A4C4B65F for ; Mon, 22 Jun 2015 22:00:51 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WVwPP2QlQ1Vi for ; Mon, 22 Jun 2015 22:00:51 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from s159.web-hosting.com (s159.web-hosting.com [68.65.121.203]) by theia.denx.de (Postfix) with ESMTPS id 8A0404B632 for ; Mon, 22 Jun 2015 22:00:47 +0200 (CEST) Received: from [123.236.183.246] (port=43745 helo=localhost.localdomain) by server159.web-hosting.com with esmtpsa (UNKNOWN:AES128-SHA256:128) (Exim 4.82) (envelope-from ) id 1Z77tc-001NbS-2Y; Mon, 22 Jun 2015 16:00:45 -0400 From: Jagan Teki To: u-boot@lists.denx.de Date: Tue, 23 Jun 2015 01:30:16 +0530 Message-Id: <1435003217-21268-4-git-send-email-jteki@openedev.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435003217-21268-1-git-send-email-jteki@openedev.com> References: <1435003217-21268-1-git-send-email-jteki@openedev.com> X-OutGoing-Spam-Status: No, score=-1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - server159.web-hosting.com X-AntiAbuse: Original Domain - lists.denx.de X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - openedev.com X-Get-Message-Sender-Via: server159.web-hosting.com: authenticated_id: jteki@openedev.com X-Source: X-Source-Args: X-Source-Dir: X-From-Rewrite: unmodified, already matched Subject: [U-Boot] [PATCH v7 3/4] spi, sf: Use offset and size in sf cmd from mtdpartition X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Heiko Schocher 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 zynq-uboot> mtdparts add nor0 0x10000@0x0 env zynq-uboot> sf erase env 0x10000 SF: 65536 bytes @ 0x0 Erased: OK zynq-uboot> sf write 0x100 env device 0 offset 0x0, size 0x10000 SF: 65536 bytes @ 0x0 Written: OK zynq-uboot> sf read 0x40000 env device 0 offset 0x0, size 0x10000 SF: 65536 bytes @ 0x0 Read: OK Signed-off-by: Heiko Schocher Tested-by: Jagannadh Teki Reviewed-by: Jagannadh Teki --- Changes in v7: - Remove ^ character in sf erase line sf help text Changes in v6: None Changes in v2: - none Series-changes: 3 - rebase with d6c1ffc7d23f4fe4ae8c91101861055b8e1501b6 Series-changes: 4 - rebased against 385a08a60f042061b004642d6b9bb6cfb794ad5a Series-changes: 5 - no changes series-changes: 6 - add comment from Jagan Teki: - append help text - add Reviewed-by from Jagannadha Sutradharudu Teki common/cmd_sf.c | 54 +++++++++++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/common/cmd_sf.c b/common/cmd_sf.c index ed3e398..9bced29 100644 --- a/common/cmd_sf.c +++ b/common/cmd_sf.c @@ -13,6 +13,8 @@ #include #include #include +#include +#include #include #include @@ -254,23 +256,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 (mtd_arg_off_size(argc - 2, &argv[2], &dev, &offset, &len, + &maxsize, MTD_DEV_TYPE_NOR, flash->size)) return -1; /* Consistency checking */ @@ -309,31 +309,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 (mtd_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; @@ -558,13 +558,17 @@ 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' or from start of mtd\n" + " `partition'to memory at `addr'\n" + "sf write addr offset|partition len - write `len' bytes from memory\n" + " at `addr' to flash at `offset'\n" + " or to start of mtd `partition'\n" + "sf erase offset|partition [+]len - erase `len' bytes from `offset'\n" + " or from start of mtd `partition'\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'\n" + " or to start of mtd `partition'\n" SF_TEST_HELP );