diff options
Diffstat (limited to 'util/superiotool')
-rw-r--r-- | util/superiotool/superiotool.h | 2 | ||||
-rw-r--r-- | util/superiotool/via.c | 56 |
2 files changed, 39 insertions, 19 deletions
diff --git a/util/superiotool/superiotool.h b/util/superiotool/superiotool.h index 58a9d615a3..01237a58e4 100644 --- a/util/superiotool/superiotool.h +++ b/util/superiotool/superiotool.h @@ -249,7 +249,7 @@ static const struct { {probe_idregs_smsc, {0x2e, 0x4e, 0x162e, 0x164e, 0x3f0, 0x370, EOT}}, {probe_idregs_winbond, {0x2e, 0x4e, 0x3f0, 0x370, 0x250, EOT}}, #ifdef PCI_SUPPORT - {probe_idregs_via, {0x3f0, EOT}}, + {probe_idregs_via, {0x2e, 0x4e, 0x3f0, EOT}}, /* in fact read the BASE from HW */ {probe_idregs_amd, {0xaa, EOT}}, #endif diff --git a/util/superiotool/via.c b/util/superiotool/via.c index b71d43cdbf..4a97336614 100644 --- a/util/superiotool/via.c +++ b/util/superiotool/via.c @@ -19,8 +19,11 @@ #define DEVICE_ID_VT82C686_REG 0xe0 #define DEVICE_REV_VT82C686_REG 0xe1 +#define DEVICE_ID_VT1211_REG 0x20 +#define DEVICE_REV_VT1211_REG 0x21 + static const struct superio_registers reg_table[] = { - {0x3c, "VT82C686A/VT82C686B", { + {0x3c, "VT82C686A/VT82C686B/VT1211", { {EOT}}}, {EOT} }; @@ -74,26 +77,43 @@ void probe_idregs_via(uint16_t port) uint16_t id; uint8_t rev; - probing_for("VIA", "", port); - - if (enter_conf_mode_via_vt82c686()) - return; - - id = regval(port, DEVICE_ID_VT82C686_REG); - rev = regval(port, DEVICE_REV_VT82C686_REG); - - if (superio_unknown(reg_table, id)) { - if (verbose) - printf(NOTFOUND "id=0x%04x, rev=0x%02x\n", id, rev); + if (port == 0x3f0) { + probing_for("VIA", "(init=vt82c686)", port); + if (enter_conf_mode_via_vt82c686()) + return; + + id = regval(port, DEVICE_ID_VT82C686_REG); + rev = regval(port, DEVICE_REV_VT82C686_REG); + + if (superio_unknown(reg_table, id)) { + if (verbose) + printf(NOTFOUND "id=0x%04x, rev=0x%02x\n", id, rev); + } else { + printf("Found VIA %s (id=0x%04x, rev=0x%02x) at 0x%x\n", + get_superio_name(reg_table, id), id, rev, port); + chip_found = 1; + } exit_conf_mode_via_vt82c686(); - return; + if (chip_found) + return; + } else { + probing_for("VIA", "(init=0x87,0x87)", port); + enter_conf_mode_winbond_fintek_ite_8787(port); + + id = regval(port, DEVICE_ID_VT1211_REG); + rev = regval(port, DEVICE_REV_VT1211_REG); + + if (superio_unknown(reg_table, id)) { + if (verbose) + printf(NOTFOUND "id=0x%04x, rev=0x%02x\n", id, rev); + } else { + printf("Found VIA %s (id=0x%04x, rev=0x%02x) at 0x%x\n", + get_superio_name(reg_table, id), id, rev, port); + chip_found = 1; + } } - printf("Found VIA %s (id=0x%04x, rev=0x%02x) at 0x%x\n", - get_superio_name(reg_table, id), id, rev, port); - chip_found = 1; - - exit_conf_mode_via_vt82c686(); + exit_conf_mode_winbond_fintek_ite_8787(port); } void print_via_chips(void) |