Let's wait with decision about importance of uC failure to
hardware initialization step.

Signed-off-by: Michal Wajdeczko <[email protected]>
Cc: Daniele Ceraolo Spurio <[email protected]>
Cc: Chris Wilson <[email protected]>
---
 drivers/gpu/drm/i915/gt/uc/intel_guc.c |  3 +++
 drivers/gpu/drm/i915/gt/uc/intel_huc.c |  3 +++
 drivers/gpu/drm/i915/gt/uc/intel_uc.c  | 15 +++++++--------
 drivers/gpu/drm/i915/gt/uc/intel_uc.h  |  2 +-
 drivers/gpu/drm/i915/i915_gem.c        | 10 ++--------
 5 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c 
b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
index 180973d79ef3..249c747e9756 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
@@ -310,6 +310,9 @@ void intel_guc_fini(struct intel_guc *guc)
 {
        struct intel_gt *gt = guc_to_gt(guc);
 
+       if (!intel_uc_fw_is_available(&guc->fw))
+               return;
+
        i915_ggtt_disable_guc(gt->ggtt);
 
        if (intel_guc_is_submission_supported(guc))
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_huc.c 
b/drivers/gpu/drm/i915/gt/uc/intel_huc.c
index 6f1475ba0871..af61ae864ab8 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_huc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_huc.c
@@ -105,6 +105,9 @@ int intel_huc_init(struct intel_huc *huc)
 
 void intel_huc_fini(struct intel_huc *huc)
 {
+       if (!intel_uc_fw_is_available(&huc->fw))
+               return;
+
        intel_huc_rsa_data_destroy(huc);
        intel_uc_fw_fini(&huc->fw);
 }
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c 
b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
index d8e9be1d7b0e..6f0b9e05a5f6 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
@@ -288,27 +288,26 @@ void intel_uc_cleanup_firmwares(struct intel_uc *uc)
        intel_uc_fw_cleanup_fetch(&uc->guc.fw);
 }
 
-int intel_uc_init(struct intel_uc *uc)
+void intel_uc_init(struct intel_uc *uc)
 {
        struct intel_guc *guc = &uc->guc;
        struct intel_huc *huc = &uc->huc;
        int ret;
 
        if (!intel_uc_uses_guc(uc))
-               return 0;
+               return;
 
        /* XXX: GuC submission is unavailable for now */
        GEM_BUG_ON(intel_uc_supports_guc_submission(uc));
 
        ret = intel_guc_init(guc);
-       if (ret)
-               return ret;
-
-       if (intel_uc_uses_huc(uc)) {
-               intel_huc_init(huc);
+       if (ret) {
+               intel_uc_fw_cleanup_fetch(&huc->fw);
+               return;
        }
 
-       return 0;
+       if (intel_uc_uses_huc(uc))
+               intel_huc_init(huc);
 }
 
 void intel_uc_fini(struct intel_uc *uc)
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.h 
b/drivers/gpu/drm/i915/gt/uc/intel_uc.h
index 1b9404a75ac0..527995c21196 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc.h
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.h
@@ -24,9 +24,9 @@ void intel_uc_init_mmio(struct intel_uc *uc);
 void intel_uc_fetch_firmwares(struct intel_uc *uc);
 void intel_uc_cleanup_firmwares(struct intel_uc *uc);
 void intel_uc_sanitize(struct intel_uc *uc);
+void intel_uc_init(struct intel_uc *uc);
 int intel_uc_init_hw(struct intel_uc *uc);
 void intel_uc_fini_hw(struct intel_uc *uc);
-int intel_uc_init(struct intel_uc *uc);
 void intel_uc_fini(struct intel_uc *uc);
 void intel_uc_reset_prepare(struct intel_uc *uc);
 void intel_uc_suspend(struct intel_uc *uc);
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 3f0d88cb47dd..cdf2dbf84aa3 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1464,11 +1464,7 @@ int i915_gem_init(struct drm_i915_private *dev_priv)
 
        intel_init_gt_powersave(dev_priv);
 
-       ret = intel_uc_init(&dev_priv->gt.uc);
-       if (ret) {
-               GEM_BUG_ON(ret == -EIO);
-               goto err_pm;
-       }
+       intel_uc_init(&dev_priv->gt.uc);
 
        ret = i915_gem_init_hw(dev_priv);
        if (ret)
@@ -1530,10 +1526,8 @@ int i915_gem_init(struct drm_i915_private *dev_priv)
 err_init_hw:
        intel_uc_fini_hw(&dev_priv->gt.uc);
 err_uc_init:
-       if (ret != -EIO)
-               intel_uc_fini(&dev_priv->gt.uc);
-err_pm:
        if (ret != -EIO) {
+               intel_uc_fini(&dev_priv->gt.uc);
                intel_cleanup_gt_powersave(dev_priv);
                intel_engines_cleanup(dev_priv);
        }
-- 
2.19.2

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

Reply via email to