Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0075a20a authored by Michal Wajdeczko's avatar Michal Wajdeczko Committed by Chris Wilson
Browse files

drm/i915/uc: Never fail on uC preparation step



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

Signed-off-by: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190817131144.26884-4-michal.wajdeczko@intel.com
parent 4a600cb7
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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))
+3 −0
Original line number Diff line number Diff line
@@ -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);
}
+7 −8
Original line number Diff line number Diff line
@@ -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)
+1 −1
Original line number Diff line number Diff line
@@ -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);
+2 −8
Original line number Diff line number Diff line
@@ -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);
	}