Skip to content

Commit

Permalink
drm/i915/uc: Never fail on uC preparation step
Browse files Browse the repository at this point in the history
Let's wait with decision about importance of uC failure to
hardware initialization step.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190817131144.26884-4-michal.wajdeczko@intel.com
  • Loading branch information
Michal Wajdeczko authored and Chris Wilson committed Aug 17, 2019
1 parent 4a600cb commit 0075a20
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 17 deletions.
3 changes: 3 additions & 0 deletions drivers/gpu/drm/i915/gt/uc/intel_guc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
3 changes: 3 additions & 0 deletions drivers/gpu/drm/i915/gt/uc/intel_huc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
15 changes: 7 additions & 8 deletions drivers/gpu/drm/i915/gt/uc/intel_uc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/i915/gt/uc/intel_uc.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
10 changes: 2 additions & 8 deletions drivers/gpu/drm/i915/i915_gem.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit 0075a20

Please sign in to comment.