[Mesa-dev] [PATCH] gbm: Support non-PCI devices
Thierry Reding
thierry.reding at gmail.com
Fri Jul 19 12:13:42 PDT 2013
From: Thierry Reding <thierry.reding at avionic-design.de>
When probing non-PCI DRM devices, such as those found in a lot of SoCs,
GBM errors out because it expects the device to have an associated PCI
ID which can be used to lookup the driver name in a table.
This patch removes this restriction by using the driver name from the
drmVersion structure as a fallback if a device doesn't have an
associated PCI ID.
Signed-off-by: Thierry Reding <thierry.reding at avionic-design.de>
Tested-by: Rob Clark <robclark at freedesktop.org>
---
src/gbm/backends/dri/driver_name.c | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/src/gbm/backends/dri/driver_name.c b/src/gbm/backends/dri/driver_name.c
index 2ed209f..be74023 100644
--- a/src/gbm/backends/dri/driver_name.c
+++ b/src/gbm/backends/dri/driver_name.c
@@ -30,6 +30,7 @@
#include <string.h>
#include <libudev.h>
+#include <xf86drm.h>
#include "gbm_driint.h"
#define DRIVER_MAP_DRI2_ONLY
@@ -43,6 +44,7 @@ dri_fd_get_driver_name(int fd)
const char *pci_id;
char *driver = NULL;
int vendor_id, chip_id, i, j;
+ drmVersionPtr version;
udev = udev_new();
device = _gbm_udev_device_new_from_fd(udev, fd);
@@ -56,9 +58,22 @@ dri_fd_get_driver_name(int fd)
}
pci_id = udev_device_get_property_value(parent, "PCI_ID");
- if (pci_id == NULL ||
- sscanf(pci_id, "%x:%x", &vendor_id, &chip_id) != 2) {
- fprintf(stderr, "gbm: malformed or no PCI ID");
+ if (pci_id == NULL) {
+ version = drmGetVersion(fd);
+ if (!version) {
+ fprintf(stderr, "gbm: cannot get DRM module version\n");
+ goto out;
+ }
+
+ driver = strndup(version->name, version->name_len);
+ _gbm_log("using driver %s for %d\n", driver, fd);
+
+ drmFreeVersion(version);
+ goto out;
+ }
+
+ if (sscanf(pci_id, "%x:%x", &vendor_id, &chip_id) != 2) {
+ fprintf(stderr, "gbm: malformed PCI ID");
goto out;
}
--
1.8.1.5
More information about the mesa-dev
mailing list