Add detection/dump support for ServerEngines SE-SM 4210-P01.
[coreboot.git] / util / superiotool / superiotool.c
index 9d3840f1f7230f3ce3df786300fd680d7981643b..293aaa617d018ef156abe976668616fab4d50862 100644 (file)
@@ -58,11 +58,23 @@ void exit_conf_mode_winbond_fintek_ite_8787(uint16_t port)
        regwrite(port, 0x02, 0x02);     /* ITE */
 }
 
+void enter_conf_mode_fintek_7777(uint16_t port)
+{
+       OUTB(0x77, port);
+       OUTB(0x77, port);
+}
+
+void exit_conf_mode_fintek_7777(uint16_t port)
+{
+       OUTB(0xaa, port);               /* Fintek */
+}
+
 int superio_unknown(const struct superio_registers reg_table[], uint16_t id)
 {
        return !strncmp(get_superio_name(reg_table, id), "<unknown>", 9);
 }
 
+
 const char *get_superio_name(const struct superio_registers reg_table[],
                             uint16_t id)
 {
@@ -93,7 +105,10 @@ static void dump_regs(const struct superio_registers reg_table[],
                        printf(" (%s)", reg_table[i].ldn[j].name);
                regwrite(port, ldn_sel, reg_table[i].ldn[j].ldn);
        } else {
-               printf("Register dump:");
+               if (reg_table[i].ldn[j].name == NULL)
+                       printf("Register dump:");
+               else
+                       printf("(%s)", reg_table[i].ldn[j].name);
        }
 
        idx = reg_table[i].ldn[j].idx;
@@ -157,6 +172,20 @@ void dump_superio(const char *vendor,
        }
 }
 
+void dump_io(uint16_t iobase, uint16_t length)
+{
+       uint16_t i;
+
+       printf("Dumping %d I/O mapped registers at base 0x%04x:\n",
+                       length, iobase);
+       for (i = 0; i < length; i++)
+               printf("%02x ", i);
+       printf("\n");
+       for (i = 0; i < length; i++)
+               printf("%02x ", INB(iobase + i));
+       printf("\n");
+}
+
 void probing_for(const char *vendor, const char *info, uint16_t port)
 {
        if (!verbose)
@@ -268,6 +297,13 @@ int main(int argc, char *argv[])
 
        print_version();
 
+#ifdef PCI_SUPPORT
+       /* Do some basic libpci init. */
+       pacc = pci_alloc();
+       pci_init(pacc);
+       pci_scan_bus(pacc);
+#endif
+
        for (i = 0; i < ARRAY_SIZE(superio_ports_table); i++) {
                for (j = 0; superio_ports_table[i].ports[j] != EOT; j++)
                        superio_ports_table[i].probe_idregs(