summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHervé Poussineau <hpoussin@reactos.org>2014-04-23 23:19:34 +0200
committerAndreas Färber <andreas.faerber@web.de>2014-07-04 17:23:02 +0200
commit8a5d9dcfa14f82a0246958e0220a53a2618b53dd (patch)
tree6a480101995c823aecd0bb198d6ac6f81460290f
parent1af7e55425e58a6dcb5133b092fcf16f8c654fb9 (diff)
downloadqemu-openhackware-8a5d9dcfa14f82a0246958e0220a53a2618b53dd.tar.gz
Correctly program BAR addresses of PCI devices
Note that offsets are PReP ones, so this breaks compatibility with hardware which has different values. Signed-off-by: Hervé Poussineau <hpoussin@reactos.org> Signed-off-by: Andreas Färber <andreas.faerber@web.de>
-rw-r--r--src/pci.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/pci.c b/src/pci.c
index 38aad27..d917370 100644
--- a/src/pci.c
+++ b/src/pci.c
@@ -1723,8 +1723,13 @@ static inline void pci_update_device (pci_bridge_t *bridge,
addr = 0x30; /* PCI ROM */
else
addr = 0x10 + (i * sizeof(uint32_t));
+ if (device->regions[i] & 0x00000001) {
pci_config_writel(bridge, device->bus, device->devfn,
- addr, device->regions[i]);
+ addr, device->regions[i] - 0x80000000);
+ } else {
+ pci_config_writel(bridge, device->bus, device->devfn,
+ addr, device->regions[i] - 0xc0000000);
+ }
}
}
}