drm/i915/huc: Check HuC status in dedicated function
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Wed, 14 Mar 2018 20:04:29 +0000 (20:04 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 21 Mar 2018 15:04:28 +0000 (15:04 +0000)
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@intel.com>
Cc: Michel Thierry <michel.thierry@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Anusha Srivatsa <anusha.srivatsa@intel.com>
Reviewed-by: Michel Thierry <michel.thierry@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20180314200429.40132-1-michal.wajdeczko@intel.com
drivers/gpu/drm/i915/i915_drv.c
drivers/gpu/drm/i915/intel_huc.c
drivers/gpu/drm/i915/intel_huc.h

index 3f637ab..a7d3275 100644 (file)
@@ -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
index 1d6c47b..2912852 100644 (file)
@@ -92,3 +92,28 @@ fail:
        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.
+ */
+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;
+}
index b185850..aa85490 100644 (file)
@@ -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)
 {