Get PCI information from info->fd with drmGetDevice instead of assuming the info->fd is the first entity of scrn which is not true for multi entities scrn.
Signed-off-by: Qiang Yu <qiang...@amd.com> --- hw/xfree86/dri2/dri2.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 2165603..adc59a6 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -1440,21 +1440,16 @@ get_prime_id(void) static char * dri2_probe_driver_name(ScreenPtr pScreen, DRI2InfoPtr info) { - ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); - EntityInfoPtr pEnt = xf86GetEntityInfo(pScrn->entityList[0]); - struct pci_device *pdev = NULL; int i, j; - - if (pEnt) - pdev = xf86GetPciInfoForEntity(pEnt->index); + char *driver = NULL; + drmDevicePtr dev; /* For non-PCI devices, just assume that the 3D driver is named * the same as the kernel driver. This is currently true for vc4 * and msm (freedreno). */ - if (!pdev) { + if (drmGetDevice(info->fd, &dev)) { drmVersionPtr version = drmGetVersion(info->fd); - char *kernel_driver; if (!version) { xf86DrvMsg(pScreen->myNum, X_ERROR, @@ -1463,29 +1458,35 @@ dri2_probe_driver_name(ScreenPtr pScreen, DRI2InfoPtr info) return NULL; } - kernel_driver = strndup(version->name, version->name_len); + driver = strndup(version->name, version->name_len); drmFreeVersion(version); - return kernel_driver; + return driver; } for (i = 0; driver_map[i].driver; i++) { - if (pdev->vendor_id != driver_map[i].vendor_id) + if (dev->deviceinfo.pci->vendor_id != driver_map[i].vendor_id) continue; - if (driver_map[i].num_chips_ids == -1) - return strdup(driver_map[i].driver); + if (driver_map[i].num_chips_ids == -1) { + driver = strdup(driver_map[i].driver); + goto out; + } for (j = 0; j < driver_map[i].num_chips_ids; j++) { - if (driver_map[i].chip_ids[j] == pdev->device_id) - return strdup(driver_map[i].driver); + if (driver_map[i].chip_ids[j] == dev->deviceinfo.pci->device_id) { + driver = strdup(driver_map[i].driver); + goto out; + } } } xf86DrvMsg(pScreen->myNum, X_ERROR, "[DRI2] No driver mapping found for PCI device " "0x%04x / 0x%04x\n", - pdev->vendor_id, pdev->device_id); - return NULL; + dev->deviceinfo.pci->vendor_id, dev->deviceinfo.pci->device_id); +out: + drmFreeDevice(&dev); + return driver; } Bool -- 2.7.4 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel