diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | hw/xfree86/common/xf86pciBus.c | 11 | ||||
-rw-r--r-- | hw/xfree86/os-support/shared/stdResource.c | 5 |
3 files changed, 23 insertions, 3 deletions
@@ -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 |