Skip to content

Commit

Permalink
drm/i915/huc: Mark firmware as failed on auth failure
Browse files Browse the repository at this point in the history
If we fail to authenticate HuC firmware, we should change
its load status to FAIL. While around, print HUC_STATUS
on firmware verification failure.

v2: keep the variables sorted by length (Chris)

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Anusha Srivatsa <anusha.srivatsa@intel.com>
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/20180302133718.1260-1-michal.wajdeczko@intel.com
  • Loading branch information
Michal Wajdeczko authored and Chris Wilson committed Mar 2, 2018
1 parent 7cfca4a commit 7b02676
Showing 1 changed file with 18 additions and 10 deletions.
28 changes: 18 additions & 10 deletions drivers/gpu/drm/i915/intel_huc.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ int intel_huc_auth(struct intel_huc *huc)
struct drm_i915_private *i915 = huc_to_i915(huc);
struct intel_guc *guc = &i915->guc;
struct i915_vma *vma;
u32 status;
int ret;

if (huc->fw.load_status != INTEL_UC_FIRMWARE_SUCCESS)
Expand All @@ -58,28 +59,35 @@ int intel_huc_auth(struct intel_huc *huc)
if (IS_ERR(vma)) {
ret = PTR_ERR(vma);
DRM_ERROR("HuC: Failed to pin huc fw object %d\n", ret);
return ret;
goto fail;
}

ret = intel_guc_auth_huc(guc,
guc_ggtt_offset(vma) + huc->fw.rsa_offset);
if (ret) {
DRM_ERROR("HuC: GuC did not ack Auth request %d\n", ret);
goto out;
goto fail_unpin;
}

/* Check authentication status, it should be done by now */
ret = intel_wait_for_register(i915,
HUC_STATUS2,
HUC_FW_VERIFIED,
HUC_FW_VERIFIED,
50);
ret = __intel_wait_for_register(i915,
HUC_STATUS2,
HUC_FW_VERIFIED,
HUC_FW_VERIFIED,
2, 50, &status);
if (ret) {
DRM_ERROR("HuC: Authentication failed %d\n", ret);
goto out;
DRM_ERROR("HuC: Firmware not verified %#x\n", status);
goto fail_unpin;
}

out:
i915_vma_unpin(vma);
return 0;

fail_unpin:
i915_vma_unpin(vma);
fail:
huc->fw.load_status = INTEL_UC_FIRMWARE_FAIL;

DRM_ERROR("HuC: Authentication failed %d\n", ret);
return ret;
}

0 comments on commit 7b02676

Please sign in to comment.