summaryrefslogtreecommitdiff
path: root/util/superiotool
diff options
context:
space:
mode:
authorNico Huber <nico.huber@secunet.com>2016-10-12 12:12:51 +0200
committerNico Huber <nico.h@gmx.de>2016-10-31 20:28:28 +0100
commit3812a72907172f9e43b4f791f87cbd4e1a8c2f44 (patch)
tree86bd0d62a3859cdb2bdcc605b95efba7accde337 /util/superiotool
parent8a9b7b59e3ddae3991530d50374b0fc0dd1d896a (diff)
downloadcoreboot-3812a72907172f9e43b4f791f87cbd4e1a8c2f44.tar.xz
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@secunet.com> Reviewed-on: https://review.coreboot.org/17003 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'util/superiotool')
-rw-r--r--util/superiotool/superiotool.c86
-rw-r--r--util/superiotool/superiotool.h3
2 files changed, 59 insertions, 30 deletions
diff --git a/util/superiotool/superiotool.c b/util/superiotool/superiotool.c
index ea86a74c14..aadf8ea3ea 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 93ff8e2fdd..92bb4eade6 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\