[LinuxBIOS] r2568 - trunk/LinuxBIOSv2/util/flashrom

svn at openbios.org svn at openbios.org
Fri Mar 2 23:16:38 CET 2007


Author: uwe
Date: 2007-03-02 23:16:38 +0100 (Fri, 02 Mar 2007)
New Revision: 2568

Modified:
   trunk/LinuxBIOSv2/util/flashrom/flash_enable.c
Log:
flashrom: Fix wrong VT8235 flash enable failed warning.

* Fix harmless but worrying warning where the return value of
  pci_write_byte is misinterpreted.
* Hash together VT8231 and VT8235 code into VT823x. VT8231 is the better
  implementation, but lacked the write protect disable code that's
  apparently needed for VT8235.

Signed-off-by: Luc Verhaegen <libv at skynet.be>
Signed-off-by: Uwe Hermann <uwe at hermann-uwe.de>
Acked-by: Stefan Reinauer <stepan at coresystems.de>



Modified: trunk/LinuxBIOSv2/util/flashrom/flash_enable.c
===================================================================
--- trunk/LinuxBIOSv2/util/flashrom/flash_enable.c	2007-03-02 14:21:09 UTC (rev 2567)
+++ trunk/LinuxBIOSv2/util/flashrom/flash_enable.c	2007-03-02 22:16:38 UTC (rev 2568)
@@ -158,52 +158,49 @@
 	return enable_flash_ich(dev, name, 0xdc);
 }
 
-static int enable_flash_vt8235(struct pci_dev *dev, char *name)
+static int enable_flash_vt823x(struct pci_dev *dev, char *name)
 {
-	uint8_t old, new, val;
-	unsigned int base;
-	int ok;
-
-	old = pci_read_byte(dev, 0x40);
-
-	new = old | 0x10;
-
-	if (new == old)
-		return 0;
-
-	ok = pci_write_byte(dev, 0x40, new);
-	if (ok != 0) {
-		printf("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n",
-		       old, new, name);
-	}
-
-	/* enable GPIO15 which is connected to write protect. */
-	base = ((pci_read_byte(dev, 0x88) & 0x80) | pci_read_byte(dev, 0x89) << 8);
-	val = inb(base + 0x4d);
-	val |= 0x80;
-	outb(val, base + 0x4d);
-
-	if (ok != 0) {
-		return -1;
-	} else {
-		return 0;
-	}
-}
-
-static int enable_flash_vt8231(struct pci_dev *dev, char *name)
-{
 	uint8_t val;
+        int ret = 0;
 
+        /* ROM Write enable */
 	val = pci_read_byte(dev, 0x40);
 	val |= 0x10;
 	pci_write_byte(dev, 0x40, val);
 
 	if (pci_read_byte(dev, 0x40) != val) {
-		printf("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n",
-		       0x40, val, name);
-		return -1;
+		printf("Warning: Failed to enable ROM Write on %s\n", name);
+		ret = -1;
 	}
-	return 0;
+
+        if (dev->device_id == 0x3177) { /* VT8235 */
+                if (!iopl(3)) { /* enable full IO access */
+                        unsigned int base;
+
+                        /* GPIO12-15 -> output */
+                        val = pci_read_byte(dev, 0xE4);
+                        val |= 0x38;
+                        pci_write_byte(dev, 0xE4, val);
+
+                        /* Get Power Management IO address. */
+                        base = pci_read_word(dev, 0x88) & 0xFF80;
+
+                        /* enable GPIO15 which is connected to write protect. */
+                        val = inb(base + 0x4d);
+                        val |= 0xFF;
+                        outb(val, base + 0x4d);
+
+                        val = inb(base + 0x4E);
+                        val |= 0x0F;
+                        outb(val, base + 0x4E);
+                } else {
+                        printf("Warning; Failed to disable Write Protect"
+                               " on %s (iopl failed)\n", name);
+                        return -1;
+                }
+        }
+
+	return ret;
 }
 
 static int enable_flash_cs5530(struct pci_dev *dev, char *name)
@@ -445,9 +442,9 @@
 	{0x8086, 0x2810, "ICH8/ICH8R", enable_flash_ich_dc},
 	{0x8086, 0x2812, "ICH8DH", enable_flash_ich_dc},
 	{0x8086, 0x2814, "ICH8DO", enable_flash_ich_dc},
-	{0x1106, 0x8231, "VT8231", enable_flash_vt8231},
-	{0x1106, 0x3177, "VT8235", enable_flash_vt8235},
-	{0x1106, 0x3227, "VT8237", enable_flash_vt8231},
+	{0x1106, 0x8231, "VT8231", enable_flash_vt823x},
+	{0x1106, 0x3177, "VT8235", enable_flash_vt823x},
+	{0x1106, 0x3227, "VT8237", enable_flash_vt823x},
 	{0x1106, 0x0686, "VT82C686", enable_flash_amd8111},
 	{0x1078, 0x0100, "CS5530", enable_flash_cs5530},
 	{0x100b, 0x0510, "SC1100", enable_flash_sc1100},





More information about the coreboot mailing list