HuC is usually not a critical component, so we can safely ignore
firmware load or authentication failures unless HuC was explicitly
requested by the user.

Signed-off-by: Michal Wajdeczko <[email protected]>
Cc: Daniele Ceraolo Spurio <[email protected]>
Cc: Chris Wilson <[email protected]>
Cc: Joonas Lahtinen <[email protected]>
---
 drivers/gpu/drm/i915/gt/uc/intel_uc.c    | 8 ++++----
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c | 3 ++-
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h | 6 ++++++
 3 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c 
b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
index 5b9b20d1cb6d..99419c5c0ad3 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
@@ -472,7 +472,7 @@ int intel_uc_init_hw(struct intel_uc *uc)
 
                if (intel_uc_is_using_huc(uc)) {
                        ret = intel_huc_fw_upload(huc);
-                       if (ret)
+                       if (ret && intel_uc_fw_is_overridden(&huc->fw))
                                goto err_out;
                }
 
@@ -494,9 +494,9 @@ int intel_uc_init_hw(struct intel_uc *uc)
        if (ret)
                goto err_log_capture;
 
-       if (intel_uc_is_using_huc(uc)) {
+       if (intel_uc_is_using_huc(uc) && intel_uc_fw_is_loaded(&huc->fw)) {
                ret = intel_huc_auth(huc);
-               if (ret)
+               if (ret && intel_uc_fw_is_overridden(&huc->fw))
                        goto err_communication;
        }
 
@@ -515,7 +515,7 @@ int intel_uc_init_hw(struct intel_uc *uc)
        dev_info(i915->drm.dev, "GuC submission %s\n",
                 enableddisabled(intel_uc_is_using_guc_submission(uc)));
        dev_info(i915->drm.dev, "HuC %s\n",
-                enableddisabled(intel_uc_is_using_huc(uc)));
+                enableddisabled(intel_huc_is_authenticated(huc)));
 
        return 0;
 
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c 
b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
index 5fbdd17a864b..1e9ae38e5b10 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
@@ -146,7 +146,8 @@ __uc_fw_override(struct intel_uc_fw *uc_fw)
                break;
        }
 
-       return uc_fw->path;
+       uc_fw->user_overridden = uc_fw->path;
+       return uc_fw->user_overridden;
 }
 
 /**
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h 
b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
index eddbb237fabe..898d43eff634 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
@@ -58,6 +58,7 @@ enum intel_uc_fw_type {
  */
 struct intel_uc_fw {
        const char *path;
+       bool user_overridden;
        size_t size;
        struct drm_i915_gem_object *obj;
        enum intel_uc_fw_status status;
@@ -144,6 +145,11 @@ static inline bool intel_uc_fw_supported(struct 
intel_uc_fw *uc_fw)
        return __intel_uc_fw_status(uc_fw) != INTEL_UC_FIRMWARE_NOT_SUPPORTED;
 }
 
+static inline bool intel_uc_fw_is_overridden(const struct intel_uc_fw *uc_fw)
+{
+       return uc_fw->user_overridden;
+}
+
 static inline void intel_uc_fw_sanitize(struct intel_uc_fw *uc_fw)
 {
        if (intel_uc_fw_is_loaded(uc_fw))
-- 
2.19.2

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to