Linux-mtd Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH] mtd-utils: add optional offset parameter to flash_otp_dump
@ 2020-01-08 23:23 Michael Walle
  2020-01-13  9:41 ` David Oberhollenzer
  0 siblings, 1 reply; 2+ messages in thread
From: Michael Walle @ 2020-01-08 23:23 UTC (permalink / raw)
  To: David Oberhollenzer; +Cc: Michael Walle, linux-mtd

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/

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] mtd-utils: add optional offset parameter to flash_otp_dump
  2020-01-08 23:23 [PATCH] mtd-utils: add optional offset parameter to flash_otp_dump Michael Walle
@ 2020-01-13  9:41 ` David Oberhollenzer
  0 siblings, 0 replies; 2+ messages in thread
From: David Oberhollenzer @ 2020-01-13  9:41 UTC (permalink / raw)
  To: Michael Walle; +Cc: linux-mtd

Applied to mtd-utils.git master.

Thanks,

David

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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, back to index

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-08 23:23 [PATCH] mtd-utils: add optional offset parameter to flash_otp_dump Michael Walle
2020-01-13  9:41 ` David Oberhollenzer

Linux-mtd Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-mtd/0 linux-mtd/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-mtd linux-mtd/ https://lore.kernel.org/linux-mtd \
		linux-mtd@lists.infradead.org
	public-inbox-index linux-mtd

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.infradead.lists.linux-mtd


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git