summaryrefslogtreecommitdiff
path: root/pcidev.c
diff options
context:
space:
mode:
authoruwe <uwe@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2009-05-16 01:30:48 +0000
committeruwe <uwe@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2009-05-16 01:30:48 +0000
commit2a97d2afd35986c5c5208c4b6f58eab11cbaf3ec (patch)
treea1ae8fe1136cb4e2d406477fb5c3e5a758801c0d /pcidev.c
parent9442edc06e3bdfa80fd8acd948c62122c6a90559 (diff)
downloadflashrom-2a97d2afd35986c5c5208c4b6f58eab11cbaf3ec.tar.gz
Older libpci versions (e.g. 2.2.8, as it's default on current FreeBSD 7.2)
don't properly fill the base_addr[0] struct member, so revert back to an explicit pci_read_long() call, otherwise detection of PCI devices and their base address will fail with strange error messages. Thanks Idwer Vollering <vidwer@gmail.com> for reporting and testing. Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de> Acked-by: Uwe Hermann <uwe@hermann-uwe.de> git-svn-id: https://code.coreboot.org/svn/flashrom/trunk@518 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'pcidev.c')
-rw-r--r--pcidev.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/pcidev.c b/pcidev.c
index 549d083..f07fe80 100644
--- a/pcidev.c
+++ b/pcidev.c
@@ -26,6 +26,8 @@
#include <errno.h>
#include "flash.h"
+#define PCI_IO_BASE_ADDRESS 0x10
+
uint32_t io_base_addr;
struct pci_access *pacc;
struct pci_filter filter;
@@ -40,7 +42,8 @@ uint32_t pcidev_validate(struct pci_dev *dev, struct pcidev_status *devs)
if (dev->device_id != devs[i].device_id)
continue;
- addr = (uint32_t)(dev->base_addr[0] & ~0x03);
+ /* Don't use dev->base_addr[0], won't work on older libpci. */
+ addr = pci_read_long(dev, PCI_IO_BASE_ADDRESS) & ~0x03;
printf("Found \"%s %s\" (%04x:%04x, BDF %02x:%02x.%x)\n",
devs[i].vendor_name, devs[i].device_name, dev->vendor_id,