[coreboot-gerrit] New patch to review for coreboot: superiotool: Add an alternative dump format

Nico Huber (nico.h@gmx.de) gerrit at coreboot.org
Wed Oct 12 17:05:57 CEST 2016


Nico Huber (nico.h at gmx.de) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17003

-gerrit

commit 360788222dbf08482ab86eb54794d76e05019ace
Author: Nico Huber <nico.huber at secunet.com>
Date:   Wed Oct 12 12:12:51 2016 +0200

    superiotool: Add an alternative dump format
    
    Add new dump format to superiotool that prints each register on a
    separate line. This should be more suitable for diff'ing dumps of
    multiple superiotool runs.
    
    Change-Id: I226ee82b903bf77e760d3396d02fa50688adb9f2
    Signed-off-by: Nico Huber <nico.huber at secunet.com>
---
 util/superiotool/superiotool.c | 86 ++++++++++++++++++++++++++++--------------
 util/superiotool/superiotool.h |  3 +-
 2 files changed, 59 insertions(+), 30 deletions(-)

diff --git a/util/superiotool/superiotool.c b/util/superiotool/superiotool.c
index ea86a74..aadf8ea 100644
--- a/util/superiotool/superiotool.c
+++ b/util/superiotool/superiotool.c
@@ -25,7 +25,7 @@
 #endif
 
 /* Command line options. */
-int dump = 0, verbose = 0, extra_dump = 0;
+int dump = 0, verbose = 0, extra_dump = 0, alternate_dump = 0;
 
 /* Global flag which indicates whether a chip was detected at all. */
 int chip_found = 0;
@@ -105,7 +105,7 @@ static void dump_regs(const struct superio_registers reg_table[],
 		      int i, int j, uint16_t port, uint8_t ldn_sel)
 {
 	int k;
-	const int16_t *idx;
+	const int16_t *idx, *def;
 
 	if (reg_table[i].ldn[j].ldn != NOLDN) {
 		printf("LDN 0x%02x", reg_table[i].ldn[j].ldn);
@@ -120,34 +120,58 @@ static void dump_regs(const struct superio_registers reg_table[],
 	}
 
 	idx = reg_table[i].ldn[j].idx;
+	def = reg_table[i].ldn[j].def;
+
+	if (alternate_dump) {
+		int skip_def = 0;
+
+		printf("\nidx   val    def\n");
+
+		for (k = 0; idx[k] != EOT; k++) {
+			printf("0x%02x: 0x%02x", idx[k], regval(port, idx[k]));
+
+			if (skip_def || def[k] == EOT) {
+				skip_def = 1;
+				printf("\n");
+				continue;
+			}
+			if (def[k] == NANA)
+				printf("   (NA)\n");
+			else if (def[k] == RSVD)
+				printf("   (RR)\n");
+			else if (def[k] == MISC)
+				printf("   (MM)\n");
+			else
+				printf("   (0x%02x)\n", def[k]);
+		}
+	} else {
+		printf("\nidx");
+		for (k = 0; idx[k] != EOT; k++) {
+			if (k && !(k % 8))
+				putchar(' ');
+			printf(" %02x", idx[k]);
+		}
 
-	printf("\nidx");
-	for (k = 0; idx[k] != EOT; k++) {
-		if (k && !(k % 8))
-			putchar(' ');
-		printf(" %02x", idx[k]);
-	}
-
-	printf("\nval");
-	for (k = 0; idx[k] != EOT; k++) {
-		if (k && !(k % 8))
-			putchar(' ');
-		printf(" %02x", regval(port, idx[k]));
-	}
+		printf("\nval");
+		for (k = 0; idx[k] != EOT; k++) {
+			if (k && !(k % 8))
+				putchar(' ');
+			printf(" %02x", regval(port, idx[k]));
+		}
 
-	printf("\ndef");
-	idx = reg_table[i].ldn[j].def;
-	for (k = 0; idx[k] != EOT; k++) {
-		if (k && !(k % 8))
-			putchar(' ');
-		if (idx[k] == NANA)
-			printf(" NA");
-		else if (idx[k] == RSVD)
-			printf(" RR");
-		else if (idx[k] == MISC)
-			printf(" MM");
-		else
-			printf(" %02x", idx[k]);
+		printf("\ndef");
+		for (k = 0; def[k] != EOT; k++) {
+			if (k && !(k % 8))
+				putchar(' ');
+			if (def[k] == NANA)
+				printf(" NA");
+			else if (def[k] == RSVD)
+				printf(" RR");
+			else if (def[k] == MISC)
+				printf(" MM");
+			else
+				printf(" %02x", def[k]);
+		}
 	}
 	printf("\n");
 }
@@ -270,6 +294,7 @@ int main(int argc, char *argv[])
 	static const struct option long_options[] = {
 		{"dump",		no_argument, NULL, 'd'},
 		{"extra-dump",		no_argument, NULL, 'e'},
+		{"alternate-dump",	no_argument, NULL, 'a'},
 		{"list-supported",	no_argument, NULL, 'l'},
 		{"verbose",		no_argument, NULL, 'V'},
 		{"version",		no_argument, NULL, 'v'},
@@ -277,7 +302,7 @@ int main(int argc, char *argv[])
 		{0, 0, 0, 0}
 	};
 
-	while ((opt = getopt_long(argc, argv, "delVvh",
+	while ((opt = getopt_long(argc, argv, "dealVvh",
 				  long_options, &option_index)) != EOF) {
 		switch (opt) {
 		case 'd':
@@ -286,6 +311,9 @@ int main(int argc, char *argv[])
 		case 'e':
 			extra_dump = 1;
 			break;
+		case 'a':
+			alternate_dump = 1;
+			break;
 		case 'l':
 			print_list_of_supported_chips();
 			exit(0);
diff --git a/util/superiotool/superiotool.h b/util/superiotool/superiotool.h
index 93ff8e2..92bb4ea 100644
--- a/util/superiotool/superiotool.h
+++ b/util/superiotool/superiotool.h
@@ -108,9 +108,10 @@ static __inline__ uint32_t inl(uint16_t port)
 }
 #endif
 
-#define USAGE "Usage: superiotool [-d] [-e] [-l] [-V] [-v] [-h]\n\n\
+#define USAGE "Usage: superiotool [-d] [-e] [-a] [-l] [-V] [-v] [-h]\n\n\
   -d | --dump            Dump Super I/O register contents\n\
   -e | --extra-dump      Dump secondary registers too (e.g. EC registers)\n\
+  -a | --alternate-dump  Use alternative dump format, more suitable for diff\n\
   -l | --list-supported  Show the list of supported Super I/O chips\n\
   -V | --verbose         Verbose mode\n\
   -v | --version         Show the superiotool version\n\



More information about the coreboot-gerrit mailing list