diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | hw/xfree86/common/xf86pciBus.c | 11 | ||||
-rw-r--r-- | hw/xfree86/os-support/shared/stdResource.c | 5 |
3 files changed, 19 insertions, 3 deletions
@@ -1,5 +1,11 @@ 2006-04-28 Adam Jackson <ajax@freedesktop.org> + * hw/xfree86/common/xf86pciBus.c: + * hw/xfree86/os-support/shared/stdResource.c: + Bug #6750: Fixup for quirky Intel bridges. (Dave Airlie) + +2006-04-28 Adam Jackson <ajax@freedesktop.org> + * hw/xfree86/os-support/bus/Pci.c: * hw/xfree86/os-support/bus/Pci.h: * hw/xfree86/os-support/bus/linuxPci.c: 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 |