[PATCH] cmd: sf/nand: Print and return failure when 0 length is passed

Ashok Reddy Soma ashok.reddy.soma at amd.com
Wed Apr 12 09:13:48 CEST 2023


For sf commands, when '0' length is passed for erase, update, write or
read, we might see undesired results. Ideally '0' length means nothing to
do.

So print 'size is 0' and return cmd failure when length '0' is passed to sf
commands. Samething applies for nand commands also.

Example:

ZynqMP> sf erase 0 0
'size is 0'
ZynqMP> sf write 10000 0 0
'size is 0'
ZynqMP> sf read 10000 0 0
'size is 0'
ZynqMP> sf update 1000 10000 0
'size is 0'
ZynqMP>

Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma at amd.com>
---

 cmd/legacy-mtd-utils.c | 5 +++++
 cmd/sf.c               | 5 +++++
 2 files changed, 10 insertions(+)

diff --git a/cmd/legacy-mtd-utils.c b/cmd/legacy-mtd-utils.c
index ac7139f84d..7b49bfd858 100644
--- a/cmd/legacy-mtd-utils.c
+++ b/cmd/legacy-mtd-utils.c
@@ -88,6 +88,11 @@ int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off,
 		return -1;
 	}
 
+	if (*size == 0) {
+		printf("'size is 0'\n");
+		return -1;
+	}
+
 print:
 	printf("device %d ", *idx);
 	if (*size == chipsize)
diff --git a/cmd/sf.c b/cmd/sf.c
index 11b9c25896..46b5475fe8 100644
--- a/cmd/sf.c
+++ b/cmd/sf.c
@@ -353,6 +353,11 @@ static int do_spi_flash_erase(int argc, char *const argv[])
 	if (ret != 1)
 		return CMD_RET_USAGE;
 
+	if (size == 0) {
+		printf("'size is 0'\n");
+		return CMD_RET_FAILURE;
+	}
+
 	/* Consistency checking */
 	if (offset + size > flash->size) {
 		printf("ERROR: attempting %s past flash size (%#x)\n",
-- 
2.17.1



More information about the U-Boot mailing list