Add -D / --dump-readable option which prints the Super I/O register
contents in human-readable form (e.g. "COM1 enabled" etc.) instead
of the hex-table format from -d / --dump.
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2795 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
diff --git a/util/superiotool/README b/util/superiotool/README
index f0294d4..9fef630 100644
--- a/util/superiotool/README
+++ b/util/superiotool/README
@@ -28,12 +28,13 @@
Usage
-----
- $ superiotool [-d] [-V] [-v] [-h]
+ $ superiotool [-d] [-D] [-V] [-v] [-h]
- -d | --dump Dump Super I/O registers
- -V | --verbose Verbose mode
- -v | --version Show the superiotool version
- -h | --help Show a short help text
+ -d | --dump Dump Super I/O registers
+ -D | --dump-readable Dump Super I/O registers in human-readable format
+ -V | --verbose Verbose mode
+ -v | --version Show the superiotool version
+ -h | --help Show a short help text
Per default (no options) superiotool will just probe for a Super I/O
and print its vendor, name, ID, version, and config port.
@@ -44,10 +45,14 @@
$ superiotool
- - Detailed register dump of the Super I/O (if detected):
+ - Register dump as table of hex-values of the Super I/O (if detected):
$ superiotool -d
+ - Detailed register dump in human-readable format:
+
+ $ superiotool -D
+
Supported Super I/O Chips
-------------------------
diff --git a/util/superiotool/fintek.c b/util/superiotool/fintek.c
index a95a383..f7f0a7c 100644
--- a/util/superiotool/fintek.c
+++ b/util/superiotool/fintek.c
@@ -33,8 +33,11 @@
{EOT}
};
-void dump_fintek(uint16_t port, uint16_t did)
+static void dump_readable_fintek(uint16_t port, uint16_t did)
{
+ if (!dump_readable)
+ return;
+
switch (did) {
case 0x0604:
printf("Fintek F71805\n");
@@ -124,9 +127,7 @@
get_superio_name(reg_table, did), vid, did, port);
dump_superio("Fintek", reg_table, port, did);
-
- /* TODO: Revive this as --dump-human-readable output. */
- /* dump_fintek(port, did); */
+ dump_readable_fintek(port, did);
exit_conf_mode_winbond_fintek_ite_8787(port);
}
diff --git a/util/superiotool/ite.c b/util/superiotool/ite.c
index 1a65e2c..fbda547 100644
--- a/util/superiotool/ite.c
+++ b/util/superiotool/ite.c
@@ -194,12 +194,6 @@
{EOT}
};
-/* TODO: Drop this function later. */
-void dump_ite(uint16_t port, uint16_t id)
-{
- dump_superio("ITE", reg_table, port, id);
-}
-
/**
* Enable configuration sequence (ITE uses this for newer IT87[012]xF).
*
@@ -244,6 +238,7 @@
get_superio_name(reg_table, id), id, chipver, port);
dump_superio("ITE", reg_table, port, id);
+ dump_superio_readable(port); /* TODO */
}
void probe_idregs_ite(uint16_t port)
diff --git a/util/superiotool/nsc.c b/util/superiotool/nsc.c
index ec9b326..797f3d4 100644
--- a/util/superiotool/nsc.c
+++ b/util/superiotool/nsc.c
@@ -25,8 +25,11 @@
[0xf1] = "PC8374 (Winbond/NatSemi)"
};
-void dump_ns8374(uint16_t port)
+static void dump_readable_ns8374(uint16_t port)
{
+ if (!dump_readable)
+ return;
+
printf("Enables: 21=%02x, 22=%02x, 23=%02x, 24=%02x, 26=%02x\n",
regval(port, 0x21), regval(port, 0x22), regval(port, 0x23),
regval(port, 0x24), regval(port, 0x26));
@@ -79,7 +82,7 @@
switch (id) {
case 0xf1:
- dump_ns8374(port);
+ dump_readable_ns8374(port);
break;
default:
printf("No dump for 0x%02x\n", id);
diff --git a/util/superiotool/smsc.c b/util/superiotool/smsc.c
index 13ad4a7..cd612e8 100644
--- a/util/superiotool/smsc.c
+++ b/util/superiotool/smsc.c
@@ -69,6 +69,7 @@
get_superio_name(reg_table, id), id, rev, port);
dump_superio("SMSC", reg_table, port, id);
+ dump_superio_readable(port); /* TODO */
exit_conf_mode_smsc(port);
}
diff --git a/util/superiotool/superiotool.c b/util/superiotool/superiotool.c
index 0a253ad..13e5555 100644
--- a/util/superiotool/superiotool.c
+++ b/util/superiotool/superiotool.c
@@ -23,7 +23,7 @@
#include "superiotool.h"
/* Command line options. */
-int dump = 0, verbose = 0;
+int dump = 0, dump_readable = 0, verbose = 0;
uint8_t regval(uint16_t port, uint8_t reg)
{
@@ -147,6 +147,13 @@
}
}
+void dump_superio_readable(uint16_t port)
+{
+ /* TODO */
+ if (dump_readable)
+ printf("No human-readable dump available for this Super I/O\n");
+}
+
void no_superio_found(uint16_t port)
{
if (!verbose)
@@ -164,19 +171,23 @@
int i, j, opt, option_index;
const static struct option long_options[] = {
- {"dump", no_argument, NULL, 'd'},
- {"verbose", no_argument, NULL, 'V'},
- {"version", no_argument, NULL, 'v'},
- {"help", no_argument, NULL, 'h'},
+ {"dump", no_argument, NULL, 'd'},
+ {"dump-readable", no_argument, NULL, 'D'},
+ {"verbose", no_argument, NULL, 'V'},
+ {"version", no_argument, NULL, 'v'},
+ {"help", no_argument, NULL, 'h'},
{0, 0, 0, 0}
};
- while ((opt = getopt_long(argc, argv, "dVvh",
+ while ((opt = getopt_long(argc, argv, "dDVvh",
long_options, &option_index)) != EOF) {
switch (opt) {
case 'd':
dump = 1;
break;
+ case 'D':
+ dump_readable = 1;
+ break;
case 'V':
verbose = 1;
break;
diff --git a/util/superiotool/superiotool.h b/util/superiotool/superiotool.h
index 9b82b4c..493c841 100644
--- a/util/superiotool/superiotool.h
+++ b/util/superiotool/superiotool.h
@@ -31,11 +31,12 @@
#define SUPERIOTOOL_VERSION "0.1"
-#define USAGE "Usage: superiotool [-d] [-V] [-v] [-h]\n\n\
- -d | --dump Dump Super I/O registers\n\
- -V | --verbose Verbose mode\n\
- -v | --version Show the superiotool version\n\
- -h | --help Show a short help text\n\n\
+#define USAGE "Usage: superiotool [-d] [-D] [-V] [-v] [-h]\n\n\
+ -d | --dump Dump Super I/O registers\n\
+ -D | --dump-readable Dump Super I/O registers in human-readable format\n\
+ -V | --verbose Verbose mode\n\
+ -v | --version Show the superiotool version\n\
+ -h | --help Show a short help text\n\n\
Per default (no options) superiotool will just probe for a Super I/O\n\
and print its vendor, name, ID, version, and config port.\n"
@@ -54,14 +55,14 @@
#define MAXNUMPORTS (2 + 1) /* Maximum number of Super I/O ports */
/* Command line parameters. */
-extern int dump, verbose;
+extern int dump, dump_readable, verbose;
struct superio_registers {
- int32_t superio_id; /* Signed, as we need EOT. */
- const char name[MAXNAMELEN];
+ int32_t superio_id; /* Signed, as we need EOT. */
+ const char name[MAXNAMELEN]; /* Super I/O name */
struct {
int ldn;
- const char *name;
+ const char *name; /* LDN name */
int idx[IDXSIZE];
int def[IDXSIZE];
} ldn[LDNSIZE];
@@ -77,18 +78,16 @@
uint16_t id);
void dump_superio(const char *name, const struct superio_registers reg_table[],
uint16_t port, uint16_t id);
+void dump_superio_readable(uint16_t port);
void no_superio_found(uint16_t port);
/* fintek.c */
-void dump_fintek(uint16_t port, uint16_t did);
void probe_idregs_fintek(uint16_t port);
/* ite.c */
-void dump_ite(uint16_t port, uint16_t id);
void probe_idregs_ite(uint16_t port);
/* nsc.c */
-void dump_ns8374(uint16_t port);
void probe_idregs_simple(uint16_t port);
/* smsc.c */
diff --git a/util/superiotool/winbond.c b/util/superiotool/winbond.c
index 0e8f2b8..9dbaba8 100644
--- a/util/superiotool/winbond.c
+++ b/util/superiotool/winbond.c
@@ -150,6 +150,7 @@
/* TODO: Special notes in dump output for the MISC entries. */
dump_superio("Winbond", reg_table, port, id);
+ dump_superio_readable(port); /* TODO */
exit_conf_mode_winbond_fintek_ite_8787(port);
}