From c339b221d3f59130a39e63d4cec3de7e3de95bf3 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 26 Apr 2006 11:31:07 +0000 Subject: [PATCH] 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. --- ChangeLog | 10 ++++++++++ hw/xfree86/common/xf86pciBus.c | 11 ++++++++++- hw/xfree86/os-support/shared/stdResource.c | 5 +++-- 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 + + * 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 * 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