summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUwe Hermann <uwe@hermann-uwe.de>2007-09-20 00:00:49 +0000
committerUwe Hermann <uwe@hermann-uwe.de>2007-09-20 00:00:49 +0000
commit2c290e3362337feffd2086994f5f720d9332d38e (patch)
tree2a19392309baf65912f52819d555df0a949881a2
parente47495659080e136a405483a6cb4413dbcb09925 (diff)
downloadcoreboot-2c290e3362337feffd2086994f5f720d9332d38e.tar.xz
Superiotool: Add dump support to the Winbond W83697HF/F.
Minor coding style changes and code simplifications. 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@2791 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r--util/superiotool/ite.c73
-rw-r--r--util/superiotool/smsc.c2
-rw-r--r--util/superiotool/superiotool.c107
-rw-r--r--util/superiotool/superiotool.h1
-rw-r--r--util/superiotool/winbond.c74
5 files changed, 154 insertions, 103 deletions
diff --git a/util/superiotool/ite.c b/util/superiotool/ite.c
index f02f846c7f..fc7c4137d8 100644
--- a/util/superiotool/ite.c
+++ b/util/superiotool/ite.c
@@ -27,37 +27,38 @@ const static struct superio_registers reg_table[] = {
{0x8705, "IT8705 or IT8700", {
{EOT}}},
{0x8708, "IT8708", {
- {NOLDN,
+ {NOLDN, NULL,
{0x07,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
0x29,0x2a,0x2e,0x2f,EOT},
{NANA,0x87,0x08,0x00,0x00,NANA,0x3f,0x00,0xff,0xff,
0xff,0xff,0x00,0x00,EOT}},
- {0x0,
+ {0x0, NULL,
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
{0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
- {0x1,
+ {0x1, NULL,
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0xf8,0x04,0x00,EOT}},
- {0x2,
+ {0x2, NULL,
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
- {0x3,
+ {0x3, NULL,
{0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
0xf0,EOT},
{0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
0x03,EOT}},
- {0x4,
+ {0x4, NULL,
{0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT},
{NANA,NANA,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,NANA,NANA,EOT}},
- {0x5, /* Note: 0x30 can actually be 0x00 _or_ 0x01. */
+ {0x5, NULL,
+ /* Note: 0x30 can actually be 0x00 _or_ 0x01. */
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
- {0x6,
+ {0x6, NULL,
{0x30,0x70,0x71,0xf0,EOT},
{0x00,0x0c,0x02,0x00,EOT}},
- {0x7,
+ {0x7, NULL,
{0x70,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,
0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,
0xc9,0xca,0xcb,0xcc,0xcd,0xd0,0xd1,0xd2,0xd3,0xd4,
@@ -70,46 +71,46 @@ const static struct superio_registers reg_table[] = {
0x00,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,
0x00,EOT}},
- {0x8,
+ {0x8, NULL,
{0x30,0x60,0x61,EOT},
{0x00,0x02,0x01,EOT}},
- {0x9,
+ {0x9, NULL,
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x10,0x0b,0x00,EOT}},
- {0xa,
+ {0xa, NULL,
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x00,0x0a,0x00,EOT}},
{EOT}}},
{0x8710, "IT8710", {
{EOT}}},
{0x8712, "IT8712", {
- {NOLDN,
+ {NOLDN, NULL,
{0x07,0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
{NANA,0x87,0x12,0x08,0x00,0x00,0x00,EOT}},
- {0x0,
+ {0x0, NULL,
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
{0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
- {0x1,
+ {0x1, NULL,
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
- {0x2,
+ {0x2, NULL,
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
- {0x3,
+ {0x3, NULL,
{0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
{0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
- {0x4,
+ {0x4, NULL,
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
0xf4,0xf5,0xf6,EOT},
{0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
0x00,NANA,NANA,EOT}},
- {0x5,
+ {0x5, NULL,
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
- {0x6,
+ {0x6, NULL,
{0x30,0x70,0x71,0xf0,EOT},
{0x00,0x0c,0x02,0x00,EOT}},
- {0x7,
+ {0x7, NULL,
{0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
@@ -122,44 +123,44 @@ const static struct superio_registers reg_table[] = {
0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
- {0x8,
+ {0x8, NULL,
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x00,0x0a,0x00,EOT}},
- {0x9,
+ {0x9, NULL,
{0x30,0x60,0x61,EOT},
{0x00,0x02,0x01,EOT}},
- {0xa,
+ {0xa, NULL,
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x10,0x0b,0x00,EOT}},
{EOT}}},
{0x8716, "IT8716", {
- {NOLDN,
+ {NOLDN, NULL,
{0x07,0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
{NANA,0x87,0x16,0x01,0x00,0x00,0x00,EOT}},
- {0x0,
+ {0x0, NULL,
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
{0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
- {0x1,
+ {0x1, NULL,
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
- {0x2,
+ {0x2, NULL,
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
- {0x3,
+ {0x3, NULL,
{0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
{0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
- {0x4,
+ {0x4, NULL,
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
0xf4,0xf5,0xf6,EOT},
{0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
0x00,NANA,NANA,EOT}},
- {0x5,
+ {0x5, NULL,
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
- {0x6,
+ {0x6, NULL,
{0x30,0x70,0x71,0xf0,EOT},
{0x00,0x0c,0x02,0x00,EOT}},
- {0x7,
+ {0x7, NULL,
{0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
@@ -172,13 +173,13 @@ const static struct superio_registers reg_table[] = {
0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
- {0x8,
+ {0x8, NULL,
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x00,0x0a,0x00,EOT}},
- {0x9,
+ {0x9, NULL,
{0x30,0x60,0x61,EOT},
{0x00,0x02,0x01,EOT}},
- {0xa,
+ {0xa, NULL,
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x10,0x0b,0x00,EOT}},
{EOT}}},
diff --git a/util/superiotool/smsc.c b/util/superiotool/smsc.c
index 4d64a9632b..3bfc53661f 100644
--- a/util/superiotool/smsc.c
+++ b/util/superiotool/smsc.c
@@ -25,7 +25,7 @@
const static struct superio_registers reg_table[] = {
{0x28, "FDC37N769", {
- {NOLDN,
+ {NOLDN, NULL,
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
diff --git a/util/superiotool/superiotool.c b/util/superiotool/superiotool.c
index 479c47f7cc..8aea0a02d9 100644
--- a/util/superiotool/superiotool.c
+++ b/util/superiotool/superiotool.c
@@ -60,11 +60,58 @@ const char *get_superio_name(const struct superio_registers reg_table[],
return "<unknown>";
}
-void dump_superio(const char *vendor, const struct superio_registers reg_table[],
+static void dump_regs(const struct superio_registers reg_table[],
+ int i, int j, uint16_t port)
+{
+ int k, *idx;
+
+ if (reg_table[i].ldn[j].ldn != NOLDN) {
+ printf("LDN 0x%02x ", reg_table[i].ldn[j].ldn);
+ if (reg_table[i].ldn[j].name != NULL)
+ printf("(%s)", reg_table[i].ldn[j].name);
+ regwrite(port, 0x07, reg_table[i].ldn[j].ldn);
+ } else {
+ printf("Register dump:");
+ }
+
+ idx = reg_table[i].ldn[j].idx;
+
+ printf("\nidx ");
+ for (k = 0; /* Nothing */; k++) {
+ if (idx[k] == EOT)
+ break;
+ printf("%02x ", idx[k]);
+ }
+
+ printf("\nval ");
+ for (k = 0; /* Nothing */; k++) {
+ if (idx[k] == EOT)
+ break;
+ printf("%02x ", regval(port, idx[k]));
+ }
+
+ printf("\ndef ");
+ idx = reg_table[i].ldn[j].def;
+ for (k = 0; /* Nothing */; k++) {
+ if (idx[k] == EOT)
+ break;
+ else if (idx[k] == NANA)
+ printf("NA ");
+ else if (idx[k] == RSVD)
+ printf("RR ");
+ else if (idx[k] == MISC) /* TODO */
+ printf("MM ");
+ else
+ printf("%02x ", idx[k]);
+ }
+ printf("\n");
+}
+
+void dump_superio(const char *vendor,
+ const struct superio_registers reg_table[],
uint16_t port, uint16_t id)
{
- int i, j, k, nodump;
- int *idx;
+ int i, j, no_dump_available = 1;
if (!dump)
return;
@@ -76,66 +123,28 @@ void dump_superio(const char *vendor, const struct superio_registers reg_table[]
if ((uint16_t)reg_table[i].superio_id != id)
continue;
- nodump = 1;
-
for (j = 0; /* Nothing */; j++) {
if (reg_table[i].ldn[j].ldn == EOT)
break;
-
- nodump = 0;
-
- if (reg_table[i].ldn[j].ldn != NOLDN) {
- printf("Switching to LDN 0x%02x\n",
- reg_table[i].ldn[j].ldn);
- regwrite(port, 0x07, reg_table[i].ldn[j].ldn);
- }
-
- idx = reg_table[i].ldn[j].idx;
-
- printf("idx ");
- for (k = 0; /* Nothing */; k++) {
- if (idx[k] == EOT)
- break;
- printf("%02x ", idx[k]);
- }
-
- printf("\nval ");
- for (k = 0; /* Nothing */; k++) {
- if (idx[k] == EOT)
- break;
- printf("%02x ", regval(port, idx[k]));
- }
-
- printf("\ndef ");
- idx = reg_table[i].ldn[j].def;
- for (k = 0; /* Nothing */; k++) {
- if (idx[k] == EOT)
- break;
- else if (idx[k] == NANA)
- printf("NA ");
- else if (idx[k] == RSVD)
- printf("RR ");
- else if (idx[k] == MISC) /* TODO */
- printf("MM ");
- else
- printf("%02x ", idx[k]);
- }
- printf("\n");
+ no_dump_available = 0;
+ dump_regs(reg_table, i, j, port);
}
- if (nodump)
- printf("No dump for %s %s\n", vendor, reg_table[i].name);
+ if (no_dump_available)
+ printf("No dump available for this Super I/O\n");
}
}
-void no_superio_found(uint16_t port) {
+void no_superio_found(uint16_t port)
+{
if (!verbose)
return;
if (inb(port) == 0xff)
printf("No Super I/O chip found at 0x%04x\n", port);
else
- printf("Probing 0x%04x, failed (0x%02x), data returns 0x%02x\n", port, inb(port), inb(port + 1));
+ printf("Probing 0x%04x, failed (0x%02x), data returns 0x%02x\n",
+ port, inb(port), inb(port + 1));
}
int main(int argc, char *argv[])
diff --git a/util/superiotool/superiotool.h b/util/superiotool/superiotool.h
index 7b6ef904ae..b0d12cd0dd 100644
--- a/util/superiotool/superiotool.h
+++ b/util/superiotool/superiotool.h
@@ -61,6 +61,7 @@ struct superio_registers {
const char name[MAXNAMELEN];
struct {
int ldn;
+ const char *name;
int idx[IDXSIZE];
int def[IDXSIZE];
} ldn[LDNSIZE];
diff --git a/util/superiotool/winbond.c b/util/superiotool/winbond.c
index 0058c33ee9..709e7f329f 100644
--- a/util/superiotool/winbond.c
+++ b/util/superiotool/winbond.c
@@ -30,57 +30,97 @@
*/
const static struct superio_registers reg_table[] = {
{0x601, "W83697HF/F", {
- /*
- {NOLDN,
- {0x20,0x21,EOT},
- {0x60,NANA,EOT}},
- */
+ {NOLDN, NULL,
+ /* TODO: 0x02, 0x07. */
+ {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,
+ 0x2a,EOT},
+ {0x60,NANA,0xff,0x00,0x00,0x00,0x00,0x00,0x00,
+ MISC,EOT}},
+ /* Some register defaults depend on the value of PNPCSV. */
+ {0x0, "Floppy",
+ {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
+ 0xf5,EOT},
+ {0x01,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
+ 0x00,EOT}},
+ {0x1, "Parallel port",
+ {0x30,0x60,0x61,0x70,0x74,0xf0,EOT},
+ {0x01,0x03,0x78,0x07,0x04,0x3f,EOT}},
+ {0x2, "COM1",
+ {0x30,0x60,0x61,0x70,0xf0,EOT},
+ {0x01,0x03,0xf8,0x04,0x00,EOT}},
+ {0x3, "COM2",
+ {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
+ {0x01,0x02,0xf8,0x03,0x00,0x00,EOT}},
+ {0x6, "CIR",
+ {0x30,0x60,0x61,0x70,EOT},
+ {0x00,0x00,0x00,0x00,EOT}},
+ {0x7, "Game port, GPIO port 1",
+ {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT},
+ {0x00,0x02,0x01,0x00,0x00,0xff,0x00,0x00,EOT}},
+ {0x8, "MIDI port, GPIO port 5",
+ {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
+ 0xf4,0xf5,EOT},
+ {0x00,0x03,0x30,0x00,0x00,0x09,0xff,0x00,0x00,0x00,
+ 0x00,0x00,EOT}},
+ {0x9, "GPIO port 2, 3, and 4",
+ {0x30,0x60,0x61,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,
+ 0xf7,0xf8,0xf5,EOT},
+ {0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,
+ 0x00,0x00,0x00,EOT}},
+ {0xa, "ACPI",
+ {0x30,0x70,0xe0,0xe1,0xe2,0xe5,0xe6,0xe7,
+ 0xf0,0xf1,0xf3,0xf4,0xf6,0xf7,0xf9,EOT},
+ {0x00,0x00,0x00,0x00,NANA,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
+ {0xb, "Hardware monitor",
+ {0x30,0x60,0x61,0x70,EOT},
+ {0x00,0x00,0x00,0x00,EOT}},
{EOT}}},
{0x886, "W83627EHF/EF/EHG/EG", {
- {NOLDN,
+ {NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
{0x88,NANA,0xff,0x00,MISC,0x00,MISC,RSVD,0x50,
0x04,0x00,RSVD,0x00,0x21,0x00,0x00,EOT}},
- {0x0,
+ {0x0, NULL,
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
0xf5,EOT},
{0x01,0x03,0xf0,0x06,0x02,0x8e,0x00,0xff,0x00,
0x00,EOT}},
- {0x1,
+ {0x1, NULL,
{0x30,0x60,0x61,0x70,0x74,0xf0,EOT},
{0x01,0x03,0x78,0x07,0x04,0x3f,EOT}},
- {0x2,
+ {0x2, NULL,
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x01,0x03,0xf8,0x04,0x00,EOT}},
- {0x3,
+ {0x3, NULL,
{0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
{0x01,0x02,0xf8,0x03,0x00,0x00,EOT}},
- {0x5,
+ {0x5, NULL,
{0x30,0x60,0x61,0x62,0x63,0x70,0x72,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x0c,0x83,EOT}},
- {0x6,
+ {0x6, NULL,
{0x30,0x62,0x63,EOT},
{0x00,0x00,0x00,EOT}},
- {0x7,
+ {0x7, NULL,
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
0xf4,0xf5,0xf6,0xf7,EOT},
{0x00,0x02,0x01,0x03,0x30,0x09,0xff,0x00,0x00,0x00,
0xff,0x00,0x00,0x00,EOT}},
- {0x8,
+ {0x8, NULL,
{0x30,0xf5,0xf6,0xf7,EOT},
{0x00,0x00,0x00,0x00,EOT}},
- {0x9,
+ {0x9, NULL,
{0x30,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xf0,0xf1,0xf2,
0xf3,0xf4,0xf5,0xf6,0xf7,EOT},
{0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,
0x00,0xff,0x00,0x00,0x00,EOT}},
- {0xa,
+ {0xa, NULL,
{0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
0xe8,0xf2,0xf3,0xf4,0xf6,0xf7,EOT},
{0x00,0x00,0x01,0x00,0xff,0x08,0x00,RSVD,0x00,0x00,
RSVD,0x7c,0x00,0x00,0x00,0x00,EOT}},
- {0xb,
+ {0xb, NULL,
{0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
{0x00,0x00,0x00,0x00,0xc1,0x00,EOT}},
{EOT}}},