[LinuxBIOS] r2785 - trunk/util/superiotool

svn at openbios.org svn at openbios.org
Wed Sep 19 02:48:42 CEST 2007


Author: uwe
Date: 2007-09-19 02:48:42 +0200 (Wed, 19 Sep 2007)
New Revision: 2785

Modified:
   trunk/util/superiotool/fintek.c
   trunk/util/superiotool/ite.c
   trunk/util/superiotool/smsc.c
   trunk/util/superiotool/superiotool.c
   trunk/util/superiotool/superiotool.h
Log:
Split out enter_conf_mode_*()/exit_conf_mode_() functions, we'll soon need
them. Reduce code duplication a bit by improved 'no dump available' handling.

Signed-off-by: Uwe Hermann <uwe at hermann-uwe.de>
Acked-by: Uwe Hermann <uwe at hermann-uwe.de>



Modified: trunk/util/superiotool/fintek.c
===================================================================
--- trunk/util/superiotool/fintek.c	2007-09-19 00:43:02 UTC (rev 2784)
+++ trunk/util/superiotool/fintek.c	2007-09-19 00:48:42 UTC (rev 2785)
@@ -89,16 +89,27 @@
 	       regval(port, 0xf6), regval(port, 0xf7), regval(port, 0xf8));
 }
 
-void probe_idregs_fintek(uint16_t port)
+void enter_conf_mode_fintek(uint16_t port)
 {
-	uint16_t vid, did, success = 0;
-
 	/* Enable configuration sequence (Fintek uses this for example)
 	 * Older ITE chips have the same enable sequence.
 	 */
 	outb(0x87, port);
 	outb(0x87, port);
+}
 
+void exit_conf_mode_fintek(uint16_t port)
+{
+	/* Exit MB PnP mode (for Fintek, doesn't hurt ITE). */
+	outb(0xaa, port);
+}
+
+void probe_idregs_fintek(uint16_t port)
+{
+	uint16_t vid, did, success = 0;
+
+	enter_conf_mode_fintek(port);
+
 	outb(0x20, port);
 	if (inb(port) != 0x20) {
 		if (inb(port) == 0xff)
@@ -143,7 +154,6 @@
 	if (!success)
 		printf("No dump for vid 0x%04x, did 0x%04x\n", vid, did);
 
-	/* Exit MB PnP mode (for Fintek, doesn't hurt ITE). */
-	outb(0xaa, port);
+	exit_conf_mode_fintek(port);
 }
 

Modified: trunk/util/superiotool/ite.c
===================================================================
--- trunk/util/superiotool/ite.c	2007-09-19 00:43:02 UTC (rev 2784)
+++ trunk/util/superiotool/ite.c	2007-09-19 00:48:42 UTC (rev 2785)
@@ -211,10 +211,8 @@
 	}
 }
 
-void probe_idregs_ite(uint16_t port)
+void enter_conf_mode_ite(uint16_t port)
 {
-	uint16_t id, chipver;
-
 	/* Enable configuration sequence (ITE uses this for newer IT87[012]x)
 	 * IT871[01] uses 0x87, 0x87 -> fintek detection should handle it
 	 * IT8708 uses 0x87, 0x87 -> fintek detection should handle it
@@ -230,7 +228,19 @@
 		outb(0x55, port);
 	else
 		outb(0xAA, port);
+}
 
+void exit_conf_mode_ite(uint16_t port)
+{
+	regwrite(port, 0x02, 0x02);
+}
+
+void probe_idregs_ite(uint16_t port)
+{
+	uint16_t id, chipver;
+
+	enter_conf_mode_ite(port);
+
 	/* Read Chip ID Byte 1. */
 	id = regval(port, 0x20);
 	if (id != 0x87) {
@@ -252,20 +262,8 @@
 	printf("Super I/O found at 0x%02x: id=0x%04x, chipver=0x%01x\n",
 	       port, id, chipver);
 
-	switch (id) {
-	case 0x8702:
-	case 0x8705:
-	case 0x8708:
-	case 0x8712:
-	case 0x8716:
-	case 0x8718:
-	case 0x8726:
-		dump_ite(port, id);
-		break;
-	default:
-		printf("No dump for ID 0x%04x\n", id);
-		break;
-	}
-	regwrite(port, 0x02, 0x02);	/* Exit MB PnP mode. */
+	dump_ite(port, id);
+
+	exit_conf_mode_ite(port);
 }
 

Modified: trunk/util/superiotool/smsc.c
===================================================================
--- trunk/util/superiotool/smsc.c	2007-09-19 00:43:02 UTC (rev 2784)
+++ trunk/util/superiotool/smsc.c	2007-09-19 00:48:42 UTC (rev 2785)
@@ -40,6 +40,16 @@
 	{EOT}
 };
 
+void enter_conf_mode_smsc(uint16_t port)
+{
+	outb(0x55, port);
+}
+
+void exit_conf_mode_smsc(uint16_t port)
+{
+	outb(0xaa, port);
+}
+
 /* Note: The actual SMSC ID is 16 bits, but we must pass 32 bits here. */
 void dump_smsc(uint16_t port, uint16_t id)
 {
@@ -57,7 +67,7 @@
 {
 	uint16_t id, rev;
 
-	outb(0x55, port);		/* Enter configuration mode. */
+	enter_conf_mode_smsc(port);
 
 	/* Read device ID. */
 	id = regval(port, DEVICE_ID_REG);
@@ -75,15 +85,8 @@
 	printf("Super I/O found at 0x%04x: id=0x%02x, rev=0x%02x\n",
 	       port, id, rev);
 
-	switch (id) {
-	case 0x28:
-		dump_smsc(port, id);
-		break;
-	default:
-		printf("No dump for ID 0x%04x\n", id);
-		break;
-	}
+	dump_smsc(port, id );
 
-	outb(0xaa, port);		/* Exit configuration mode. */
+	exit_conf_mode_smsc(port);
 }
 

Modified: trunk/util/superiotool/superiotool.c
===================================================================
--- trunk/util/superiotool/superiotool.c	2007-09-19 00:43:02 UTC (rev 2784)
+++ trunk/util/superiotool/superiotool.c	2007-09-19 00:48:42 UTC (rev 2785)
@@ -34,14 +34,12 @@
 	outb(val, port + 1);
 }
 
-void dump_superio(const char *name, const struct superio_registers reg_table[],
+void dump_superio(const char *vendor, const struct superio_registers reg_table[],
 		  uint16_t port, uint16_t id)
 {
-	int i, j, k;
+	int i, j, k, nodump;
 	int *idx;
 
-	printf("%s ", name);
-
 	for (i = 0; /* Nothing */; i++) {
 		if (reg_table[i].superio_id == EOT)
 			break;
@@ -49,12 +47,15 @@
 		if ((uint16_t)reg_table[i].superio_id != id)
 			continue;
 
-		printf("%s\n", reg_table[i].name);
+		nodump = 1;
 
 		for (j = 0; /* Nothing */; j++) {
 			if (reg_table[i].ldn[j].ldn == EOT)
 				break;
 
+			printf("%s %s\n", vendor, reg_table[i].name);
+			nodump = 0;
+
 			if (reg_table[i].ldn[j].ldn != NOLDN) {
 				printf("Switching to LDN 0x%02x\n",
 				       reg_table[i].ldn[j].ldn);
@@ -91,6 +92,9 @@
 			}
 			printf("\n");
 		}
+
+		if (nodump)
+			printf("No dump for %s %s\n", vendor, reg_table[i].name);
 	}
 }
 

Modified: trunk/util/superiotool/superiotool.h
===================================================================
--- trunk/util/superiotool/superiotool.h	2007-09-19 00:43:02 UTC (rev 2784)
+++ trunk/util/superiotool/superiotool.h	2007-09-19 00:48:42 UTC (rev 2785)
@@ -54,14 +54,18 @@
 uint8_t regval(uint16_t port, uint8_t reg);
 void regwrite(uint16_t port, uint8_t reg, uint8_t val);
 void dump_superio(const char *name, const struct superio_registers reg_table[],
-                  uint16_t port, uint16_t id);
+		  uint16_t port, uint16_t id);
 void probe_superio(uint16_t port);
 
 /* fintek.c */
+void enter_conf_mode_fintek(uint16_t port);
+void exit_conf_mode_fintek(uint16_t port);
 void dump_fintek(uint16_t port, uint16_t did);
 void probe_idregs_fintek(uint16_t port);
 
 /* ite.c */
+void enter_conf_mode_ite(uint16_t port);
+void exit_conf_mode_ite(uint16_t port);
 void dump_ite(uint16_t port, uint16_t id);
 void probe_idregs_ite(uint16_t port);
 
@@ -70,6 +74,8 @@
 void probe_idregs_simple(uint16_t port);
 
 /* smsc.c */
+void enter_conf_mode_smsc(uint16_t port);
+void exit_conf_mode_smsc(uint16_t port);
 void dump_smsc(uint16_t port, uint16_t id);
 void probe_idregs_smsc(uint16_t port);
 





More information about the coreboot mailing list