Skip to content

Commit b112364

Browse files
tursulinzehortigoza
authored andcommitted
drm/i915: Add GuC submission interface version query
Add a new query to the GuC submission interface version. Mesa intends to use this information to check for old firmware versions with a known bug where using the render and compute command streamers simultaneously can cause GPU hangs due issues in firmware scheduling. Based on patches from Vivaik and Joonas. Compile tested only. v2: * Added branch version. Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Kenneth Graunke <kenneth@whitecape.org> Cc: Jose Souza <jose.souza@intel.com> Cc: Sagar Ghuge <sagar.ghuge@intel.com> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> Cc: John Harrison <John.C.Harrison@Intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: Jani Nikula <jani.nikula@intel.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Vivaik Balasubrawmanian <vivaik.balasubrawmanian@intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Reviewed-by: José Roberto de Souza <jose.souza@intel.com> Tested-by: José Roberto de Souza <jose.souza@intel.com> Signed-off-by: José Roberto de Souza <jose.souza@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240208082510.1363268-1-tvrtko.ursulin@linux.intel.com
1 parent 599b0d8 commit b112364

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

drivers/gpu/drm/i915/i915_query.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,38 @@ static int query_hwconfig_blob(struct drm_i915_private *i915,
551551
return hwconfig->size;
552552
}
553553

554+
static int
555+
query_guc_submission_version(struct drm_i915_private *i915,
556+
struct drm_i915_query_item *query)
557+
{
558+
struct drm_i915_query_guc_submission_version __user *query_ptr =
559+
u64_to_user_ptr(query->data_ptr);
560+
struct drm_i915_query_guc_submission_version ver;
561+
struct intel_guc *guc = &to_gt(i915)->uc.guc;
562+
const size_t size = sizeof(ver);
563+
int ret;
564+
565+
if (!intel_uc_uses_guc_submission(&to_gt(i915)->uc))
566+
return -ENODEV;
567+
568+
ret = copy_query_item(&ver, size, size, query);
569+
if (ret != 0)
570+
return ret;
571+
572+
if (ver.branch || ver.major || ver.minor || ver.patch)
573+
return -EINVAL;
574+
575+
ver.branch = 0;
576+
ver.major = guc->submission_version.major;
577+
ver.minor = guc->submission_version.minor;
578+
ver.patch = guc->submission_version.patch;
579+
580+
if (copy_to_user(query_ptr, &ver, size))
581+
return -EFAULT;
582+
583+
return 0;
584+
}
585+
554586
static int (* const i915_query_funcs[])(struct drm_i915_private *dev_priv,
555587
struct drm_i915_query_item *query_item) = {
556588
query_topology_info,
@@ -559,6 +591,7 @@ static int (* const i915_query_funcs[])(struct drm_i915_private *dev_priv,
559591
query_memregion_info,
560592
query_hwconfig_blob,
561593
query_geometry_subslices,
594+
query_guc_submission_version,
562595
};
563596

564597
int i915_query_ioctl(struct drm_device *dev, void *data, struct drm_file *file)

include/uapi/drm/i915_drm.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3013,6 +3013,7 @@ struct drm_i915_query_item {
30133013
* - %DRM_I915_QUERY_MEMORY_REGIONS (see struct drm_i915_query_memory_regions)
30143014
* - %DRM_I915_QUERY_HWCONFIG_BLOB (see `GuC HWCONFIG blob uAPI`)
30153015
* - %DRM_I915_QUERY_GEOMETRY_SUBSLICES (see struct drm_i915_query_topology_info)
3016+
* - %DRM_I915_QUERY_GUC_SUBMISSION_VERSION (see struct drm_i915_query_guc_submission_version)
30163017
*/
30173018
__u64 query_id;
30183019
#define DRM_I915_QUERY_TOPOLOGY_INFO 1
@@ -3021,6 +3022,7 @@ struct drm_i915_query_item {
30213022
#define DRM_I915_QUERY_MEMORY_REGIONS 4
30223023
#define DRM_I915_QUERY_HWCONFIG_BLOB 5
30233024
#define DRM_I915_QUERY_GEOMETRY_SUBSLICES 6
3025+
#define DRM_I915_QUERY_GUC_SUBMISSION_VERSION 7
30243026
/* Must be kept compact -- no holes and well documented */
30253027

30263028
/**
@@ -3566,6 +3568,16 @@ struct drm_i915_query_memory_regions {
35663568
struct drm_i915_memory_region_info regions[];
35673569
};
35683570

3571+
/**
3572+
* struct drm_i915_query_guc_submission_version - query GuC submission interface version
3573+
*/
3574+
struct drm_i915_query_guc_submission_version {
3575+
__u32 branch;
3576+
__u32 major;
3577+
__u32 minor;
3578+
__u32 patch;
3579+
};
3580+
35693581
/**
35703582
* DOC: GuC HWCONFIG blob uAPI
35713583
*

0 commit comments

Comments
 (0)