diff options
author | Thierry Reding <treding@nvidia.com> | 2017-10-12 10:18:12 +0200 |
---|---|---|
committer | Thierry Reding <treding@nvidia.com> | 2017-11-06 14:52:04 +0100 |
commit | 8fc090f2e67488022c2899891b240d081813127d (patch) | |
tree | c59c3b9f1a68c9ce99dc8e0673304e2ce4de0fe6 | |
parent | 1bea38e0255e16b71356f0d70549f97824f0b1b5 (diff) |
On setups where the device to be tested is not the first one, allow
users to override it using the IGT_DEVICE environment variable.
Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r-- | lib/drmtest.c | 91 |
1 files changed, 56 insertions, 35 deletions
diff --git a/lib/drmtest.c b/lib/drmtest.c index b2931f6f..173f1549 100644 --- a/lib/drmtest.c +++ b/lib/drmtest.c @@ -245,6 +245,47 @@ static int modprobe(const char *driver) return igt_kmod_load(driver, ""); } +static int __drm_open_device(const char *device, int chipset) +{ + int fd; + + fd = open(device, O_RDWR); + if (fd == -1) + return fd; + + if (chipset & DRIVER_INTEL && is_i915_device(fd) && + has_known_intel_chipset(fd)) + return fd; + + if (chipset & DRIVER_VC4 && + is_vc4_device(fd)) + return fd; + + if (chipset & DRIVER_VGEM && + is_vgem_device(fd)) + return fd; + + if (chipset & DRIVER_VIRTIO && + is_virtio_device(fd)) + return fd; + + if (chipset & DRIVER_AMDGPU && is_amd_device(fd)) + return fd; + + if (chipset & DRIVER_NOUVEAU && is_nouveau_device(fd)) + return fd; + + if (chipset & DRIVER_TEGRA && is_tegra_device(fd)) + return fd; + + /* Only VGEM-specific tests should be run on VGEM */ + if (chipset == DRIVER_ANY && !is_vgem_device(fd)) + return fd; + + close(fd); + return -1; +} + /** * __drm_open_driver: * @chipset: OR'd flags for each chipset to search, eg. #DRIVER_INTEL @@ -256,48 +297,25 @@ static int modprobe(const char *driver) */ int __drm_open_driver(int chipset) { + char *name = getenv("IGT_DEVICE"); + + if (name) + return __drm_open_device(name, chipset); + if (chipset & DRIVER_VGEM) modprobe("vgem"); for (int i = 0; i < 16; i++) { - char name[80]; - int fd; + int fd, ret; - sprintf(name, "/dev/dri/card%u", i); - fd = open(name, O_RDWR); - if (fd == -1) - continue; - - if (chipset & DRIVER_INTEL && is_i915_device(fd) && - has_known_intel_chipset(fd)) - return fd; - - if (chipset & DRIVER_VC4 && - is_vc4_device(fd)) - return fd; - - if (chipset & DRIVER_VGEM && - is_vgem_device(fd)) - return fd; - - if (chipset & DRIVER_VIRTIO && - is_virtio_device(fd)) - return fd; - - if (chipset & DRIVER_AMDGPU && is_amd_device(fd)) - return fd; - - if (chipset & DRIVER_NOUVEAU && is_nouveau_device(fd)) - return fd; + ret = asprintf(&name, "/dev/dri/card%u", i); + igt_assert(ret != -1); - if (chipset & DRIVER_TEGRA && is_tegra_device(fd)) - return fd; + fd = __drm_open_device(name, chipset); + free(name); - /* Only VGEM-specific tests should be run on VGEM */ - if (chipset == DRIVER_ANY && !is_vgem_device(fd)) + if (fd >= 0) return fd; - - close(fd); } return -1; @@ -305,9 +323,12 @@ int __drm_open_driver(int chipset) static int __drm_open_driver_render(int chipset) { - char *name; + char *name = getenv("IGT_DEVICE"); int i, fd; + if (name) + return __drm_open_device(name, chipset); + for (i = 128; i < (128 + 16); i++) { int ret; |