diff options
author | Guenter Roeck <linux@roeck-us.net> | 2012-06-29 12:23:50 -0700 |
---|---|---|
committer | Patrick Georgi <patrick@georgi-clan.de> | 2012-07-12 08:13:13 +0200 |
commit | a89da0969efe52ca4474867966152cbe6c92ca21 (patch) | |
tree | 338972c60b72d06e4ee1044d43af2c3dec74631c /util/superiotool | |
parent | 975ffc2e0f5e796384bebf6fce19b47dc2077f6a (diff) | |
download | coreboot-a89da0969efe52ca4474867966152cbe6c92ca21.tar.xz |
superiotool: Add support for function to dump superio chip data registers
Add new function dump_data() to dump a bank of superio data registers.
Change-Id: I13a58d87c14d319cfcdea1ec1d54c2b110d90f9f
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-on: http://review.coreboot.org/1149
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
Diffstat (limited to 'util/superiotool')
-rw-r--r-- | util/superiotool/superiotool.c | 29 | ||||
-rw-r--r-- | util/superiotool/superiotool.h | 1 |
2 files changed, 30 insertions, 0 deletions
diff --git a/util/superiotool/superiotool.c b/util/superiotool/superiotool.c index 293aaa617d..538aa09074 100644 --- a/util/superiotool/superiotool.c +++ b/util/superiotool/superiotool.c @@ -34,6 +34,18 @@ int dump = 0, verbose = 0, extra_dump = 0; /* Global flag which indicates whether a chip was detected at all. */ int chip_found = 0; +static void set_bank(uint16_t port, uint8_t bank) +{ + OUTB(0x4E, port); + OUTB(bank, port + 1); +} + +static uint8_t datareg(uint16_t port, uint8_t reg) +{ + OUTB(reg, port); + return INB(port + 1); +} + uint8_t regval(uint16_t port, uint8_t reg) { OUTB(reg, port); @@ -186,6 +198,23 @@ void dump_io(uint16_t iobase, uint16_t length) printf("\n"); } +void dump_data(uint16_t iobase, int bank) +{ + uint16_t i; + + printf("Bank %d:\n", bank); + printf(" "); + for (i = 0; i < 16; i++) + printf("%02x ", i); + set_bank(iobase, bank); + for (i = 0; i < 256; i++) { + if (i % 16 == 0) + printf("\n%02x: ", i / 16); + printf("%02x ", datareg(iobase, i)); + } + printf("\n"); +} + void probing_for(const char *vendor, const char *info, uint16_t port) { if (!verbose) diff --git a/util/superiotool/superiotool.h b/util/superiotool/superiotool.h index 94918b8867..7a0b7f69c5 100644 --- a/util/superiotool/superiotool.h +++ b/util/superiotool/superiotool.h @@ -174,6 +174,7 @@ const char *get_superio_name(const struct superio_registers reg_table[], void dump_superio(const char *name, const struct superio_registers reg_table[], uint16_t port, uint16_t id, uint8_t ldn_sel); void dump_io(uint16_t iobase, uint16_t length); +void dump_data(uint16_t iobase, int bank); void probing_for(const char *vendor, const char *info, uint16_t port); void print_vendor_chips(const char *vendor, const struct superio_registers reg_table[]); |