From 01f6d7d15d27ec07b86ebd0e5c34007dba3fb4c7 Mon Sep 17 00:00:00 2001 From: Michael Karcher Date: Wed, 24 Feb 2010 00:00:21 +0000 Subject: Fix PIIX4 GPO set Intel datasheet says "byte accesses only". Looks like they mean it. Also fix use of or instead of and for lowering GPOs. Corresponding to flashrom svn r910. Signed-off-by: Michael Karcher Acked-by: Luc Verhaegen --- board_enable.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/board_enable.c b/board_enable.c index 2de5fd7..4278b6d 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; } -- cgit v1.1