drm/i915/uc: Don't fail on HuC firmware failure
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. v2: add convenient way to disable loading (Chris) 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> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> #v1 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20190729112612.37476-1-michal.wajdeczko@intel.com
This commit is contained in:
parent
ed32f8d42c
commit
301efe96f7
@ -422,7 +422,7 @@ int intel_uc_init_hw(struct intel_uc *uc)
|
|||||||
|
|
||||||
if (intel_uc_is_using_huc(uc)) {
|
if (intel_uc_is_using_huc(uc)) {
|
||||||
ret = intel_huc_fw_upload(huc);
|
ret = intel_huc_fw_upload(huc);
|
||||||
if (ret)
|
if (ret && intel_uc_fw_is_overridden(&huc->fw))
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -444,9 +444,9 @@ int intel_uc_init_hw(struct intel_uc *uc)
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto err_log_capture;
|
goto err_log_capture;
|
||||||
|
|
||||||
if (intel_uc_is_using_huc(uc)) {
|
if (intel_uc_fw_is_loaded(&huc->fw)) {
|
||||||
ret = intel_huc_auth(huc);
|
ret = intel_huc_auth(huc);
|
||||||
if (ret)
|
if (ret && intel_uc_fw_is_overridden(&huc->fw))
|
||||||
goto err_communication;
|
goto err_communication;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -465,7 +465,7 @@ int intel_uc_init_hw(struct intel_uc *uc)
|
|||||||
dev_info(i915->drm.dev, "GuC submission %s\n",
|
dev_info(i915->drm.dev, "GuC submission %s\n",
|
||||||
enableddisabled(intel_uc_is_using_guc_submission(uc)));
|
enableddisabled(intel_uc_is_using_guc_submission(uc)));
|
||||||
dev_info(i915->drm.dev, "HuC %s\n",
|
dev_info(i915->drm.dev, "HuC %s\n",
|
||||||
enableddisabled(intel_uc_is_using_huc(uc)));
|
enableddisabled(intel_huc_is_authenticated(huc)));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -146,7 +146,8 @@ __uc_fw_override(struct intel_uc_fw *uc_fw)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return uc_fw->path;
|
uc_fw->user_overridden = uc_fw->path;
|
||||||
|
return uc_fw->user_overridden;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -176,7 +177,7 @@ void intel_uc_fw_init_early(struct intel_uc_fw *uc_fw,
|
|||||||
__uc_fw_auto_select(uc_fw, INTEL_INFO(i915)->platform,
|
__uc_fw_auto_select(uc_fw, INTEL_INFO(i915)->platform,
|
||||||
INTEL_REVID(i915));
|
INTEL_REVID(i915));
|
||||||
|
|
||||||
if (uc_fw->path)
|
if (uc_fw->path && *uc_fw->path)
|
||||||
uc_fw->status = INTEL_UC_FIRMWARE_SELECTED;
|
uc_fw->status = INTEL_UC_FIRMWARE_SELECTED;
|
||||||
else
|
else
|
||||||
uc_fw->status = INTEL_UC_FIRMWARE_NOT_SUPPORTED;
|
uc_fw->status = INTEL_UC_FIRMWARE_NOT_SUPPORTED;
|
||||||
|
@ -61,6 +61,7 @@ struct intel_uc_fw {
|
|||||||
enum intel_uc_fw_type type;
|
enum intel_uc_fw_type type;
|
||||||
enum intel_uc_fw_status status;
|
enum intel_uc_fw_status status;
|
||||||
const char *path;
|
const char *path;
|
||||||
|
bool user_overridden;
|
||||||
size_t size;
|
size_t size;
|
||||||
struct drm_i915_gem_object *obj;
|
struct drm_i915_gem_object *obj;
|
||||||
|
|
||||||
@ -141,6 +142,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;
|
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)
|
static inline void intel_uc_fw_sanitize(struct intel_uc_fw *uc_fw)
|
||||||
{
|
{
|
||||||
if (intel_uc_fw_is_loaded(uc_fw))
|
if (intel_uc_fw_is_loaded(uc_fw))
|
||||||
|
Loading…
Reference in New Issue
Block a user