diff options
author | Luc Verhaegen <libv@skynet.be> | 2009-12-22 13:04:13 +0000 |
---|---|---|
committer | Luc Verhaegen <libv@skynet.be> | 2009-12-22 13:04:13 +0000 |
commit | da6ed80b27572dbb6b64041e21caf395966794e9 (patch) | |
tree | 59bd115823eb9a37b289e38a5ecbf713f4222ed3 | |
parent | b2417ba591addf50825f44789b707d4b2564165a (diff) | |
download | flashrom-da6ed80b27572dbb6b64041e21caf395966794e9.zip flashrom-da6ed80b27572dbb6b64041e21caf395966794e9.tar.gz |
Boards: Fix several issues with nvidia_mcp_gpio_set
- CK804, MCP04, MCP2 use the isa bridges..
- Newer nvidia mcp's do use the smbus controllers (Found by
Michael Karcher).
- gpio line check breaks EPoX EP-8RDA3+, and should be wider.
Corresponding to flashrom svn r810.
Signed-off-by: Luc Verhaegen <libv@skynet.be>
Acked-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>
-rw-r--r-- | board_enable.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/board_enable.c b/board_enable.c index 8b5ed95..9dd299e 100644 --- a/board_enable.c +++ b/board_enable.c @@ -440,20 +440,30 @@ static int nvidia_mcp_gpio_set(int gpio, int raise) uint16_t base; uint8_t tmp; - if ((gpio < 0) || (gpio > 31)) { + if ((gpio < 0) || (gpio >= 0x40)) { fprintf(stderr, "\nERROR: unsupported GPIO: %d.\n", gpio); return -1; } - dev = pci_dev_find_vendorclass(0x10DE, 0x0C05); + /* First, check the ISA Bridge */ + dev = pci_dev_find_vendorclass(0x10DE, 0x0601); switch (dev->device_id) { case 0x0030: /* CK804 */ case 0x0050: /* MCP04 */ case 0x0060: /* MCP2 */ break; default: - fprintf(stderr, "\nERROR: no nVidia SMBus controller found.\n"); + /* Newer MCPs use the SMBus Controller */ + dev = pci_dev_find_vendorclass(0x10DE, 0x0C05); + switch (dev->device_id) { + case 0x0264: /* MCP51 */ + break; + default: + fprintf(stderr, + "\nERROR: no nVidia LPC/SMBus controller found.\n"); return -1; + } + break; } base = pci_read_long(dev, 0x64) & 0x0000FF00; /* System control area */ |