[Mesa-dev] [PATCH] gbm: Support non-PCI devices
Rob Clark
robdclark at gmail.com
Tue Jul 23 11:31:48 PDT 2013
fwiw, I found a couple more places assuming a PCI device
(dri2_get_driver_for_fd() and drm_fd_get_pci_id()).. I'm kinda
thinking it would make sense to refactor this out a bit into a common
load_me_the_right_driver() type fxns..
BR,
-R
On Fri, Jul 19, 2013 at 3:13 PM, Thierry Reding
<thierry.reding at gmail.com> wrote:
> 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