diff options
author | Uwe Hermann <uwe@hermann-uwe.de> | 2009-05-16 01:30:48 +0000 |
---|---|---|
committer | Uwe Hermann <uwe@hermann-uwe.de> | 2009-05-16 01:30:48 +0000 |
commit | 4059598a068f7694f2238a3811d85cbfa520a8d5 (patch) | |
tree | a1ae8fe1136cb4e2d406477fb5c3e5a758801c0d /pcidev.c | |
parent | 9ee107721f746b0b81dcacf2f59c4f48d4210b9e (diff) | |
download | flashrom-4059598a068f7694f2238a3811d85cbfa520a8d5.tar.gz flashrom-4059598a068f7694f2238a3811d85cbfa520a8d5.tar.bz2 flashrom-4059598a068f7694f2238a3811d85cbfa520a8d5.zip |
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.
Corresponding to flashrom svn r518.
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
Diffstat (limited to 'pcidev.c')
-rw-r--r-- | pcidev.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -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, |