aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>2010-02-24 00:00:21 +0000
committerMichael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>2010-02-24 00:00:21 +0000
commit01f6d7d15d27ec07b86ebd0e5c34007dba3fb4c7 (patch)
tree0af9a52f1eb05e725133a3c71c3c5bdc2a1d9137
parentc351992895ac6a93d0bf827ea87486e9a9e164fe (diff)
downloadflashrom-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.c11
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;
}