diff options
-rw-r--r-- | src/intel/common/gen_device_info.c | 51 | ||||
-rw-r--r-- | src/intel/common/gen_device_info.h | 1 |
2 files changed, 52 insertions, 0 deletions
diff --git a/src/intel/common/gen_device_info.c b/src/intel/common/gen_device_info.c index a08a13a32a4..113a9dca1ff 100644 --- a/src/intel/common/gen_device_info.c +++ b/src/intel/common/gen_device_info.c @@ -24,10 +24,61 @@ #include <assert.h> #include <stdio.h> #include <stdlib.h> +#include <string.h> +#include <unistd.h> #include "gen_device_info.h" #include "compiler/shader_enums.h" #include "util/macros.h" +static int +parse_devid_override(const char *devid_override) +{ + static const struct { + const char *name; + int pci_id; + } name_map[] = { + { "brw", 0x2a02 }, + { "g4x", 0x2a42 }, + { "ilk", 0x0042 }, + { "snb", 0x0126 }, + { "ivb", 0x016a }, + { "hsw", 0x0d2e }, + { "byt", 0x0f33 }, + { "bdw", 0x162e }, + { "chv", 0x22B3 }, + { "skl", 0x1912 }, + { "bxt", 0x5A85 }, + { "kbl", 0x5912 }, + { "glk", 0x3185 }, + { "cnl", 0x5a52 }, + }; + + for (unsigned i = 0; i < ARRAY_SIZE(name_map); i++) { + if (!strcmp(name_map[i].name, devid_override)) + return name_map[i].pci_id; + } + + return strtol(devid_override, NULL, 0); +} + +/** + * Get the overridden PCI ID for the device. This is set with the + * INTEL_DEVID_OVERRIDE environment variable. + * + * Returns -1 if the override is not set. + */ +int +gen_get_pci_device_id_override(void) +{ + if (geteuid() == getuid()) { + const char *devid_override = getenv("INTEL_DEVID_OVERRIDE"); + if (devid_override) + return parse_devid_override(devid_override); + } + + return -1; +} + static const struct gen_device_info gen_device_info_i965 = { .gen = 4, .has_negative_rhw_bug = true, diff --git a/src/intel/common/gen_device_info.h b/src/intel/common/gen_device_info.h index fd9c17531db..6a96143cebb 100644 --- a/src/intel/common/gen_device_info.h +++ b/src/intel/common/gen_device_info.h @@ -199,6 +199,7 @@ struct gen_device_info #define gen_device_info_is_9lp(devinfo) \ ((devinfo)->is_broxton || (devinfo)->is_geminilake) +int gen_get_pci_device_id_override(void); bool gen_get_device_info(int devid, struct gen_device_info *devinfo); const char *gen_get_device_name(int devid); |