summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--hw/xfree86/common/xf86pciBus.c11
-rw-r--r--hw/xfree86/os-support/shared/stdResource.c5
3 files changed, 23 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index d619cb72d..6d3730e65 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2006-04-26 Dave Airlie <airlied@linux.ie>
+
+ * hw/xfree86/common/xf86pciBus.c:
+ * hw/xfree86/os-support/shared/stdResource.c:
+ (xf86StdAccResFromOS):
+ Bug #6750: This patch detects Intel bridges that are transparent
+ but aren't reported as such. From the Linux kernel fixups.
+ This patch also removes the reserved BIOS area from the
+ area to allocate resources in.
+
2006-04-25 Eric Anholt <anholt@FreeBSD.org>
* exa/exa_migration.c: (exaPixmapSave), (exaMoveInPixmap),
diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
index e06dce524..af19b37eb 100644
--- a/hw/xfree86/common/xf86pciBus.c
+++ b/hw/xfree86/common/xf86pciBus.c
@@ -1774,7 +1774,16 @@ xf86GetPciBridgeInfo(void)
PciBus->brfunc = pcrp->funcnum;
PciBus->subclass = sub_class;
- PciBus->interface = pcrp->pci_prog_if;
+
+ /* The Intel bridges don't report as transparent
+ but guess what they are - from Linux kernel - airlied */
+ if ((pcrp->pci_vendor == PCI_VENDOR_INTEL) &&
+ ((pcrp->pci_device & 0xff00) == 0x2400)) {
+ xf86MsgVerb(X_INFO, 3, "Intel Bridge workaround enabled\n");
+ PciBus->interface = PCI_IF_BRIDGE_PCI_SUBTRACTIVE;
+ } else {
+ PciBus->interface = pcrp->pci_prog_if;
+ }
if (pBusInfo && pBusInfo->funcs->pciControlBridge)
PciBus->brcontrol =
diff --git a/hw/xfree86/os-support/shared/stdResource.c b/hw/xfree86/os-support/shared/stdResource.c
index 859997309..83ad0bb42 100644
--- a/hw/xfree86/os-support/shared/stdResource.c
+++ b/hw/xfree86/os-support/shared/stdResource.c
@@ -150,10 +150,11 @@ xf86StdAccResFromOS(resPtr ret)
ret = xf86AddResToList(ret, &range, -1);
RANGE(range, 0xfee00000, 0xfeefffff, ResExcMemBlock | ResBios);
ret = xf86AddResToList(ret, &range, -1);
-#endif
+ /* airlied - remove BIOS range it shouldn't be here
+ this should use E820 - or THE OS */
RANGE(range, 0xffe00000, 0xffffffff, ResExcMemBlock | ResBios);
ret = xf86AddResToList(ret, &range, -1);
-
+#endif
/*
* Fallback would be to claim well known ports in the 0x0 - 0x3ff range
* along with their sparse I/O aliases, but that's too imprecise. Instead