forked from pool/xorg-x11-server
Stefan Dirsch
6ff43929b0
- Added xorg-xserver-e89edec497ba.patch to fix incompatible pointer type error with GCC 14. If the request is OK, please forward it to Factory soon too so that we can switch the default compiler. Thanks! OBS-URL: https://build.opensuse.org/request/show/1189636 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-x11-server?expand=0&rev=891
68 lines
2.7 KiB
Diff
68 lines
2.7 KiB
Diff
From: Egbert Eich <eich@suse.de>
|
|
Date: Wed Feb 10 15:55:51 2016 +0100
|
|
Subject: [PATCH]pci/primary: Fix up primary PCI device detection for the platfrom bus
|
|
Patch-mainline: to be upstreamed
|
|
Git-commit: 85d81d3ec321572aea31d34a87632442687a54f5
|
|
|
|
References: boo#835975
|
|
Signed-off-by: Egbert Eich <eich@suse.com>
|
|
|
|
The detection wheter a device is the primary PCI device currently
|
|
relies on libciaccess. This checks of the PCI device is a VGA boot
|
|
device. On some systems however, the primary card is not flagged
|
|
like that - this it is not discovered.
|
|
The subsequent PCI probing has a fallback heuristic designed for this
|
|
situation. This however causes the primary device to be flagged as a
|
|
PCI bus device, not a 'platform bus' device.
|
|
To fix this, we check in the subsequent xf86platformPrimary() wheter
|
|
the primary device is flagged as a PCI bus device. If this is the
|
|
case and the same device is in the list of the 'platform bus' devices,
|
|
we reflag it as such.
|
|
This fixes the detection of the primary device on older iMacs.
|
|
|
|
Signed-off-by: Egbert Eich <eich@suse.de>
|
|
---
|
|
hw/xfree86/common/xf86platformBus.c | 29 +++++++++++++++++++++++++++++
|
|
1 file changed, 29 insertions(+)
|
|
|
|
Index: xorg-server-21.1.1/hw/xfree86/common/xf86platformBus.c
|
|
===================================================================
|
|
--- xorg-server-21.1.1.orig/hw/xfree86/common/xf86platformBus.c
|
|
+++ xorg-server-21.1.1/hw/xfree86/common/xf86platformBus.c
|
|
@@ -766,6 +766,35 @@ void xf86platformPrimary(void)
|
|
|
|
xf86Msg(X_NONE, "\tfalling back to %s\n", primaryBus.id.plat->attribs->syspath);
|
|
}
|
|
+ } else if (xf86_num_platform_devices > 0 && primaryBus.type == BUS_PCI) {
|
|
+ /*
|
|
+ * FIXUP: platform_find_pci_info() may not always find the primary
|
|
+ * platform device. If a primary device is a platform device but was
|
|
+ * identified as PCI device, let's fix this up here.
|
|
+ */
|
|
+ int i;
|
|
+
|
|
+ for (i = 0; i < xf86_num_platform_devices; i++) {
|
|
+ char *busid = xf86_platform_odev_attributes(i)->busid;
|
|
+ int domain, bus, dev, func;
|
|
+ int ret;
|
|
+
|
|
+ if (!busid || (strncmp(busid, "pci:", 4) != 0))
|
|
+ continue;
|
|
+
|
|
+ ret = sscanf(busid, "pci:%04x:%02x:%02x.%u",
|
|
+ &domain, &bus, &dev, &func);
|
|
+ if (ret != 4)
|
|
+ continue;
|
|
+
|
|
+ if (domain == primaryBus.id.pci->domain &&
|
|
+ bus == primaryBus.id.pci->bus &&
|
|
+ dev == primaryBus.id.pci->dev &&
|
|
+ func == primaryBus.id.pci->func) {
|
|
+ primaryBus.id.plat = &xf86_platform_devices[i];
|
|
+ primaryBus.type = BUS_PLATFORM;
|
|
+ }
|
|
+ }
|
|
}
|
|
}
|
|
#endif
|