[Intel-gfx] [PATCH] drm/i915/huc: Check HuC status in dedicated function
Michel Thierry
michel.thierry at intel.com
Wed Mar 14 20:17:29 UTC 2018
On 14/03/18 13:04, Michal Wajdeczko wrote:
> We try to keep all HuC related code in dedicated file.
> There is no need to peek HuC register directly during
> handling getparam ioctl.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
> Cc: Michel Thierry <michel.thierry at intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
> Cc: Anusha Srivatsa <anusha.srivatsa at intel.com>
> ---
> drivers/gpu/drm/i915/i915_drv.c | 6 +++---
> drivers/gpu/drm/i915/intel_huc.c | 25 +++++++++++++++++++++++++
> drivers/gpu/drm/i915/intel_huc.h | 1 +
> 3 files changed, 29 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index f03555e..a902e88 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -377,9 +377,9 @@ static int i915_getparam_ioctl(struct drm_device *dev, void *data,
> value = INTEL_INFO(dev_priv)->sseu.min_eu_in_pool;
> break;
> case I915_PARAM_HUC_STATUS:
> - intel_runtime_pm_get(dev_priv);
> - value = I915_READ(HUC_STATUS2) & HUC_FW_VERIFIED;
> - intel_runtime_pm_put(dev_priv);
> + value = intel_huc_check_status(&dev_priv->huc);
> + if (value < 0)
> + return value;
> break;
> case I915_PARAM_MMAP_GTT_VERSION:
> /* Though we've started our numbering from 1, and so class all
> diff --git a/drivers/gpu/drm/i915/intel_huc.c b/drivers/gpu/drm/i915/intel_huc.c
> index 1d6c47b..2912852 100644
> --- a/drivers/gpu/drm/i915/intel_huc.c
> +++ b/drivers/gpu/drm/i915/intel_huc.c
> @@ -92,3 +92,28 @@ int intel_huc_auth(struct intel_huc *huc)
> DRM_ERROR("HuC: Authentication failed %d\n", ret);
> return ret;
> }
> +
> +/**
> + * intel_huc_check_status() - check HuC status
> + * @huc: intel_huc structure
> + *
> + * This function reads status register to verify if HuC
> + * firmware was successfully loaded.
> + *
> + * Returns positive value if HuC firmware is loaded and verified
> + * and -ENODEV if HuC is not present.
Before if huc was not loaded, get_param would just return 0 and the
ioctl call would be OK. Maybe there's a test somewhere that would break?
(I'm not arguing -ENODEV is better).
Otherwise,
Reviewed-by: Michel Thierry <michel.thierry at intel.com>
> + */
> +int intel_huc_check_status(struct intel_huc *huc)
> +{
> + struct drm_i915_private *dev_priv = huc_to_i915(huc);
> + u32 status;
> +
> + if (!HAS_HUC(dev_priv))
> + return -ENODEV;
> +
> + intel_runtime_pm_get(dev_priv);
> + status = I915_READ(HUC_STATUS2) & HUC_FW_VERIFIED;
> + intel_runtime_pm_put(dev_priv);
> +
> + return status;
> +}
> diff --git a/drivers/gpu/drm/i915/intel_huc.h b/drivers/gpu/drm/i915/intel_huc.h
> index b185850..aa85490 100644
> --- a/drivers/gpu/drm/i915/intel_huc.h
> +++ b/drivers/gpu/drm/i915/intel_huc.h
> @@ -37,6 +37,7 @@ struct intel_huc {
>
> void intel_huc_init_early(struct intel_huc *huc);
> int intel_huc_auth(struct intel_huc *huc);
> +int intel_huc_check_status(struct intel_huc *huc);
>
> static inline int intel_huc_sanitize(struct intel_huc *huc)
> {
>
More information about the Intel-gfx
mailing list