summaryrefslogtreecommitdiffstats
path: root/board_enable.c
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 /board_enable.c
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>
Diffstat (limited to 'board_enable.c')
-rw-r--r--board_enable.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/board_enable.c b/board_enable.c
index 2de5fd78f..4278b6d3a 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;
}