summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJordan Justen <[email protected]>2018-02-09 17:12:05 -0800
committerJordan Justen <[email protected]>2018-02-27 11:15:10 -0800
commite560bb9dc2025cceee19d05c45197d10388eb759 (patch)
tree23f64c55cf83f178df0260f544c217e80c70d913 /src
parent6b274d5cc6186c06dbb8b594e54022e75f80ed8e (diff)
intel/common: Add gen_get_pci_device_id_override
Signed-off-by: Jordan Justen <[email protected]> Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]> Reviewed-by: Scott D Phillips <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/intel/common/gen_device_info.c51
-rw-r--r--src/intel/common/gen_device_info.h1
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);