summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri
diff options
context:
space:
mode:
authorMark Janes <[email protected]>2019-07-24 13:48:03 -0700
committerMark Janes <[email protected]>2019-08-01 16:39:44 -0700
commit96e1c945f2bc4047a603753ae10fc4f27754361c (patch)
treea930eef68d90d5ab13389d6e2beb5c339294fd7b /src/mesa/drivers/dri
parent1186f6ea6947e779b99b87e48b8e5ac6d25b87bf (diff)
i965: Move device info initialization to common code
With perf queries, initializing the device info is much more complex than just getting a PCI ID and calling gen_get_device_info. This commit adds a new gen_get_device_info_from_fd helper in common code which does all of the requisite kernel queries to get device info including all of the topology information. Reviewed-by: Kenneth Graunke <[email protected]> Reviewed-by: Lionel Landwerlin <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r--src/mesa/drivers/dri/i965/brw_performance_query.c84
-rw-r--r--src/mesa/drivers/dri/i965/intel_screen.c36
2 files changed, 6 insertions, 114 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_performance_query.c b/src/mesa/drivers/dri/i965/brw_performance_query.c
index a04bf65e1ca..bb8c2bf0fea 100644
--- a/src/mesa/drivers/dri/i965/brw_performance_query.c
+++ b/src/mesa/drivers/dri/i965/brw_performance_query.c
@@ -1682,67 +1682,6 @@ init_pipeline_statistic_query_registers(struct brw_context *brw)
query->data_size = sizeof(uint64_t) * query->n_counters;
}
-static bool
-query_topology(struct brw_context *brw)
-{
- __DRIscreen *screen = brw->screen->driScrnPriv;
- struct drm_i915_query_item item = {
- .query_id = DRM_I915_QUERY_TOPOLOGY_INFO,
- };
- struct drm_i915_query query = {
- .num_items = 1,
- .items_ptr = (uintptr_t) &item,
- };
-
- if (drmIoctl(screen->fd, DRM_IOCTL_I915_QUERY, &query))
- return false;
-
- struct drm_i915_query_topology_info *topo_info =
- (struct drm_i915_query_topology_info *) calloc(1, item.length);
- item.data_ptr = (uintptr_t) topo_info;
-
- if (drmIoctl(screen->fd, DRM_IOCTL_I915_QUERY, &query) ||
- item.length <= 0)
- return false;
-
- gen_device_info_update_from_topology(&brw->screen->devinfo,
- topo_info);
-
- free(topo_info);
-
- return true;
-}
-
-static bool
-getparam_topology(struct brw_context *brw)
-{
- __DRIscreen *screen = brw->screen->driScrnPriv;
- drm_i915_getparam_t gp;
- int ret;
-
- int slice_mask = 0;
- gp.param = I915_PARAM_SLICE_MASK;
- gp.value = &slice_mask;
- ret = drmIoctl(screen->fd, DRM_IOCTL_I915_GETPARAM, &gp);
- if (ret)
- return false;
-
- int subslice_mask = 0;
- gp.param = I915_PARAM_SUBSLICE_MASK;
- gp.value = &subslice_mask;
- ret = drmIoctl(screen->fd, DRM_IOCTL_I915_GETPARAM, &gp);
- if (ret)
- return false;
-
- if (!gen_device_info_update_from_masks(&brw->screen->devinfo,
- slice_mask,
- subslice_mask,
- brw->screen->eu_total))
- return false;
-
- return true;
-}
-
/* gen_device_info will have incorrect default topology values for unsupported kernels.
* verify kernel support to ensure OA metrics are accurate.
*/
@@ -1797,28 +1736,9 @@ brw_init_perf_query_info(struct gl_context *ctx)
brw->perfquery.perf = gen_perf_new(brw, drmIoctl);
init_pipeline_statistic_query_registers(brw);
- brw_perf_query_register_mdapi_statistic_query(brw);
-
- if (!oa_metrics_kernel_support(screen->fd, devinfo))
- return false;
-
- if (!query_topology(brw)) {
- /* We need the i915 query uAPI on CNL+ (kernel 4.17+). */
- if (devinfo->gen >= 10)
- return false;
-
- if (!getparam_topology(brw)) {
- /* We need the SLICE_MASK/SUBSLICE_MASK on gen8+ (kernel 4.13+). */
- if (devinfo->gen >= 8)
- return false;
-
- /* On Haswell, the values are already computed for us in
- * gen_device_info.
- */
- }
- }
- if (gen_perf_load_oa_metrics(brw->perfquery.perf, screen->fd, devinfo))
+ if ((oa_metrics_kernel_support(screen->fd, devinfo)) &&
+ (gen_perf_load_oa_metrics(brw->perfquery.perf, screen->fd, devinfo)))
brw_perf_query_register_mdapi_oa_query(brw);
brw->perfquery.unaccumulated =
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index 2bc2e41178d..6c4d7c5be27 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -2413,28 +2413,6 @@ set_max_gl_versions(struct intel_screen *screen)
}
}
-/**
- * Return the revision (generally the revid field of the PCI header) of the
- * graphics device.
- */
-static int
-intel_device_get_revision(int fd)
-{
- struct drm_i915_getparam gp;
- int revision;
- int ret;
-
- memset(&gp, 0, sizeof(gp));
- gp.param = I915_PARAM_REVISION;
- gp.value = &revision;
-
- ret = drmCommandWriteRead(fd, DRM_I915_GETPARAM, &gp, sizeof(gp));
- if (ret)
- revision = -1;
-
- return revision;
-}
-
static void
shader_debug_log_mesa(void *data, const char *fmt, ...)
{
@@ -2513,22 +2491,16 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen)
screen->driScrnPriv = dri_screen;
dri_screen->driverPrivate = (void *) screen;
- screen->deviceID = gen_get_pci_device_id_override();
- if (screen->deviceID < 0)
- screen->deviceID = intel_get_integer(screen, I915_PARAM_CHIPSET_ID);
- else
- screen->no_hw = true;
-
- if (!gen_get_device_info(screen->deviceID, &screen->devinfo))
+ if (!gen_get_device_info_from_fd(dri_screen->fd, &screen->devinfo))
return NULL;
- screen->devinfo.revision = intel_device_get_revision(dri_screen->fd);
+ const struct gen_device_info *devinfo = &screen->devinfo;
+ screen->deviceID = devinfo->chipset_id;
+ screen->no_hw = devinfo->no_hw;
if (!intel_init_bufmgr(screen))
return NULL;
- const struct gen_device_info *devinfo = &screen->devinfo;
-
brw_process_intel_debug_variable();
if ((INTEL_DEBUG & DEBUG_SHADER_TIME) && devinfo->gen < 7) {