[flashrom] [PATCH] Fix PIIX4 GPO set

Michael Karcher flashrom at mkarcher.dialup.fu-berlin.de
Thu Feb 11 23:59:39 CET 2010


Intel datasheet says "byte accesses only". Looks like they mean it.
Also fix use of or instead of and for lowering GPOs.

Signed-off-by: Michael Karcher <flashrom at mkarcher.dialup.fu-berlin.de>
---
The old version was slightly (ahem) broken, int that trying to lower one
GPO pin, *all* other GPO pins were raised...

 board_enable.c |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/board_enable.c b/board_enable.c
index 5d89929..022195e 100644
--- a/board_enable.c
+++ b/board_enable.c
@@ -578,6 +578,7 @@ static int board_artecgroup_dbe6x(const char *name)
  */
 static int intel_piix4_gpo_set(unsigned int gpo, int raise)
 {
+	unsigned int gpo_byte, gpo_bit;
 	struct pci_dev *dev;
 	uint32_t tmp, base;
 
@@ -632,12 +633,14 @@ static int intel_piix4_gpo_set(unsigned int gpo, int raise)
 	/* PM IO base */
 	base = pci_read_long(dev, 0x40) & 0x0000FFC0;
 
-	tmp = INL(base + 0x34); /* GPO register */
+	gpo_byte = gpo >> 3;
+	gpo_bit = gpo & 7;
+	tmp = INB(base + 0x34 + gpo_byte); /* GPO register */
 	if (raise)
-		tmp |= 0x01 << gpo;
+		tmp |= 0x01 << gpo_bit;
 	else
-		tmp |= ~(0x01 << gpo);
-	OUTL(tmp, base + 0x34);
+		tmp &= ~(0x01 << gpo_bit);
+	OUTB(tmp, base + 0x34 + gpo_byte);
 
 	return 0;
 }
-- 
1.6.5





More information about the flashrom mailing list