diff options
author | Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de> | 2010-02-24 00:00:21 +0000 |
---|---|---|
committer | Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de> | 2010-02-24 00:00:21 +0000 |
commit | 01f6d7d15d27ec07b86ebd0e5c34007dba3fb4c7 (patch) | |
tree | 0af9a52f1eb05e725133a3c71c3c5bdc2a1d9137 | |
parent | c351992895ac6a93d0bf827ea87486e9a9e164fe (diff) | |
download | flashrom-01f6d7d15d27ec07b86ebd0e5c34007dba3fb4c7.tar.gz flashrom-01f6d7d15d27ec07b86ebd0e5c34007dba3fb4c7.tar.bz2 flashrom-01f6d7d15d27ec07b86ebd0e5c34007dba3fb4c7.zip |
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 <flashrom@mkarcher.dialup.fu-berlin.de>
Acked-by: Luc Verhaegen <libv@skynet.be>
-rw-r--r-- | board_enable.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/board_enable.c b/board_enable.c index 2de5fd78..4278b6d3 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; } |