Re: [PATCH v2] drm/i915: Add GuC submission interface version query

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2024-02-08 at 08:25 +0000, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx>
> 
> 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.

Reviewed-by: José Roberto de Souza <jose.souza@xxxxxxxxx>
Tested-by: José Roberto de Souza <jose.souza@xxxxxxxxx>
UMD: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25233

> 
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx>
> Cc: Kenneth Graunke <kenneth@xxxxxxxxxxxxx>
> Cc: Jose Souza <jose.souza@xxxxxxxxx>
> Cc: Sagar Ghuge <sagar.ghuge@xxxxxxxxx>
> Cc: Paulo Zanoni <paulo.r.zanoni@xxxxxxxxx>
> Cc: John Harrison <John.C.Harrison@xxxxxxxxx>
> Cc: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
> Cc: Jani Nikula <jani.nikula@xxxxxxxxx>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx>
> Cc: Vivaik Balasubrawmanian <vivaik.balasubrawmanian@xxxxxxxxx>
> Cc: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>
> ---
>  drivers/gpu/drm/i915/i915_query.c | 33 +++++++++++++++++++++++++++++++
>  include/uapi/drm/i915_drm.h       | 12 +++++++++++
>  2 files changed, 45 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/i915_query.c b/drivers/gpu/drm/i915/i915_query.c
> index 00871ef99792..d4dba1240b40 100644
> --- a/drivers/gpu/drm/i915/i915_query.c
> +++ b/drivers/gpu/drm/i915/i915_query.c
> @@ -551,6 +551,38 @@ static int query_hwconfig_blob(struct drm_i915_private *i915,
>  	return hwconfig->size;
>  }
>  
> +static int
> +query_guc_submission_version(struct drm_i915_private *i915,
> +			     struct drm_i915_query_item *query)
> +{
> +	struct drm_i915_query_guc_submission_version __user *query_ptr =
> +					    u64_to_user_ptr(query->data_ptr);
> +	struct drm_i915_query_guc_submission_version ver;
> +	struct intel_guc *guc = &to_gt(i915)->uc.guc;
> +	const size_t size = sizeof(ver);
> +	int ret;
> +
> +	if (!intel_uc_uses_guc_submission(&to_gt(i915)->uc))
> +		return -ENODEV;
> +
> +	ret = copy_query_item(&ver, size, size, query);
> +	if (ret != 0)
> +		return ret;
> +
> +	if (ver.branch || ver.major || ver.minor || ver.patch)
> +		return -EINVAL;
> +
> +	ver.branch = 0;
> +	ver.major = guc->submission_version.major;
> +	ver.minor = guc->submission_version.minor;
> +	ver.patch = guc->submission_version.patch;
> +
> +	if (copy_to_user(query_ptr, &ver, size))
> +		return -EFAULT;
> +
> +	return 0;
> +}
> +
>  static int (* const i915_query_funcs[])(struct drm_i915_private *dev_priv,
>  					struct drm_i915_query_item *query_item) = {
>  	query_topology_info,
> @@ -559,6 +591,7 @@ static int (* const i915_query_funcs[])(struct drm_i915_private *dev_priv,
>  	query_memregion_info,
>  	query_hwconfig_blob,
>  	query_geometry_subslices,
> +	query_guc_submission_version,
>  };
>  
>  int i915_query_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
> index 550c496ce76d..84fb7f7ea834 100644
> --- a/include/uapi/drm/i915_drm.h
> +++ b/include/uapi/drm/i915_drm.h
> @@ -3038,6 +3038,7 @@ struct drm_i915_query_item {
>  	 *  - %DRM_I915_QUERY_MEMORY_REGIONS (see struct drm_i915_query_memory_regions)
>  	 *  - %DRM_I915_QUERY_HWCONFIG_BLOB (see `GuC HWCONFIG blob uAPI`)
>  	 *  - %DRM_I915_QUERY_GEOMETRY_SUBSLICES (see struct drm_i915_query_topology_info)
> +	 *  - %DRM_I915_QUERY_GUC_SUBMISSION_VERSION (see struct drm_i915_query_guc_submission_version)
>  	 */
>  	__u64 query_id;
>  #define DRM_I915_QUERY_TOPOLOGY_INFO		1
> @@ -3046,6 +3047,7 @@ struct drm_i915_query_item {
>  #define DRM_I915_QUERY_MEMORY_REGIONS		4
>  #define DRM_I915_QUERY_HWCONFIG_BLOB		5
>  #define DRM_I915_QUERY_GEOMETRY_SUBSLICES	6
> +#define DRM_I915_QUERY_GUC_SUBMISSION_VERSION	7
>  /* Must be kept compact -- no holes and well documented */
>  
>  	/**
> @@ -3591,6 +3593,16 @@ struct drm_i915_query_memory_regions {
>  	struct drm_i915_memory_region_info regions[];
>  };
>  
> +/**
> +* struct drm_i915_query_guc_submission_version - query GuC submission interface version
> +*/
> +struct drm_i915_query_guc_submission_version {
> +	__u32 branch;
> +	__u32 major;
> +	__u32 minor;
> +	__u32 patch;
> +};
> +
>  /**
>   * DOC: GuC HWCONFIG blob uAPI
>   *





[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux