linux-mtd.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Michael Walle <michael@walle.cc>
To: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Cc: Michael Walle <michael@walle.cc>, linux-mtd@lists.infradead.org
Subject: [PATCH] mtd-utils: add optional offset parameter to flash_otp_dump
Date: Thu,  9 Jan 2020 00:23:59 +0100	[thread overview]
Message-ID: <20200108232359.27372-1-michael@walle.cc> (raw)

There are flashes which have gaps between OTP regions and flashes where
the regions don't start at 0 (for example the Winbond 25Q series, which
has three 256 bytes OTP regions starting at 0x1000, 0x2000 and 0x3000).
At the moment it is impossible to dump the OTP memory. Fix it by passing
an optional offset parameter.

Signed-off-by: Michael Walle <michael@walle.cc>
---
 misc-utils/flash_otp_dump.c | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/misc-utils/flash_otp_dump.c b/misc-utils/flash_otp_dump.c
index f0c0fb9..f1e1782 100644
--- a/misc-utils/flash_otp_dump.c
+++ b/misc-utils/flash_otp_dump.c
@@ -10,16 +10,18 @@
 #include <string.h>
 #include <errno.h>
 #include <sys/ioctl.h>
+#include <stdlib.h>
 
 #include <mtd/mtd-user.h>
 
 int main(int argc,char *argv[])
 {
-	int fd, val, i, offset, ret;
+	int fd, val, i, ret;
+	int offset = 0;
 	unsigned char buf[16];
 
-	if (argc != 3 || (strcmp(argv[1], "-f") && strcmp(argv[1], "-u"))) {
-		fprintf(stderr,"Usage: %s [ -f | -u ] <device>\n", PROGRAM_NAME);
+	if (argc <= 3 || (strcmp(argv[1], "-f") && strcmp(argv[1], "-u"))) {
+		fprintf(stderr,"Usage: %s [ -f | -u ] <device> [<offset>]\n", PROGRAM_NAME);
 		return EINVAL;
 	}
 
@@ -36,9 +38,22 @@ int main(int argc,char *argv[])
 		return errno;
 	}
 
+	if (argc >= 4) {
+		char *p;
+		offset = (off_t)strtoull(argv[3], &p, 0);
+		if (argv[3][0] == 0 || *p != 0) {
+			fprintf(stderr, "%s: bad offset value\n", PROGRAM_NAME);
+			return ERANGE;
+		}
+	}
+
+	if (lseek(fd, offset, SEEK_SET) == (off_t)-1) {
+		perror("lseek()");
+		return errno;
+	}
+
 	printf("OTP %s data for %s\n",
 			argv[1][1] == 'f' ? "factory" : "user", argv[2]);
-	offset = 0;
 	while ((ret = read(fd, buf, sizeof(buf)))) {
 		if (ret < 0) {
 			perror("read()");
-- 
2.20.1


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

             reply	other threads:[~2020-01-08 23:24 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-08 23:23 Michael Walle [this message]
2020-01-13  9:41 ` [PATCH] mtd-utils: add optional offset parameter to flash_otp_dump David Oberhollenzer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200108232359.27372-1-michael@walle.cc \
    --to=michael@walle.cc \
    --cc=david.oberhollenzer@sigma-star.at \
    --cc=linux-mtd@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).