[PATCH] drm/i915/huc: Cancel HuC delayed load timer on reset.

Teres Alexis, Alan Previn alan.previn.teres.alexis at intel.com
Thu Mar 16 17:04:23 UTC 2023


Reviewed-by: Alan Previn <alan.previn.teres.alexis at intel.com>

P.S. side note - while reviewing this, i wish we got rid of those "ops_on/off->intel_uc_funcname" macro obsfucations since i couldnt find intel_uc_sanitize but did find the direct
call - so inconsistent.

On Mon, 2023-03-13 at 13:55 -0700, Ceraolo Spurio, Daniele wrote:
> In the rare case where we do a full GT reset after starting the HuC
> load and before it completes (which basically boils down to i915 hanging
> during init), we need to cancel the delayed load fence, as it will be
> re-initialized in the post-reset recovery.
> 
> Fixes: 27536e03271d ("drm/i915/huc: track delayed HuC load with a fence")
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
> Cc: Alan Previn <alan.previn.teres.alexis at intel.com>
> ---
>  drivers/gpu/drm/i915/gt/uc/intel_huc.c | 7 +++++++
>  drivers/gpu/drm/i915/gt/uc/intel_huc.h | 7 +------
>  2 files changed, 8 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_huc.c b/drivers/gpu/drm/i915/gt/uc/intel_huc.c
> index 72884e21470b..aefdaa62da99 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_huc.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_huc.c
> @@ -241,6 +241,13 @@ static void delayed_huc_load_fini(struct intel_huc *huc)
>  	i915_sw_fence_fini(&huc->delayed_load.fence);
>  }
>  
> +int intel_huc_sanitize(struct intel_huc *huc)
> +{
> +	delayed_huc_load_complete(huc);
> +	intel_uc_fw_sanitize(&huc->fw);
> +	return 0;
> +}
> +
>  static bool vcs_supported(struct intel_gt *gt)
>  {
>  	intel_engine_mask_t mask = gt->info.engine_mask;
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_huc.h b/drivers/gpu/drm/i915/gt/uc/intel_huc.h
> index 52db03620c60..db555b3c1f56 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_huc.h
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_huc.h
> @@ -41,6 +41,7 @@ struct intel_huc {
>  	} delayed_load;
>  };
>  
> +int intel_huc_sanitize(struct intel_huc *huc);
>  void intel_huc_init_early(struct intel_huc *huc);
>  int intel_huc_init(struct intel_huc *huc);
>  void intel_huc_fini(struct intel_huc *huc);
> @@ -54,12 +55,6 @@ bool intel_huc_is_authenticated(struct intel_huc *huc);
>  void intel_huc_register_gsc_notifier(struct intel_huc *huc, struct bus_type *bus);
>  void intel_huc_unregister_gsc_notifier(struct intel_huc *huc, struct bus_type *bus);
>  
> -static inline int intel_huc_sanitize(struct intel_huc *huc)
> -{
> -	intel_uc_fw_sanitize(&huc->fw);
> -	return 0;
> -}
> -
>  static inline bool intel_huc_is_supported(struct intel_huc *huc)
>  {
>  	return intel_uc_fw_is_supported(&huc->fw);



More information about the dri-devel mailing list