summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Wajdeczko <michal.wajdeczko@intel.com>2019-07-29 11:26:12 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2019-07-29 22:03:39 +0100
commit301efe96f777c0197502b9399694ae83779579b3 (patch)
tree5d1376bb7f9a29ad730f9cde0cfa7d1029b5715e
parented32f8d42cee118b075e4372a55c7739a11094b2 (diff)
downloadlinux-stable-301efe96f777c0197502b9399694ae83779579b3.tar.gz
linux-stable-301efe96f777c0197502b9399694ae83779579b3.tar.bz2
linux-stable-301efe96f777c0197502b9399694ae83779579b3.zip
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
-rw-r--r--drivers/gpu/drm/i915/gt/uc/intel_uc.c8
-rw-r--r--drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c5
-rw-r--r--drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h6
3 files changed, 13 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
index fafa9be1e12a..6eb8bb3fa252 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
@@ -422,7 +422,7 @@ int intel_uc_init_hw(struct intel_uc *uc)
if (intel_uc_is_using_huc(uc)) {
ret = intel_huc_fw_upload(huc);
- if (ret)
+ if (ret && intel_uc_fw_is_overridden(&huc->fw))
goto err_out;
}
@@ -444,9 +444,9 @@ int intel_uc_init_hw(struct intel_uc *uc)
if (ret)
goto err_log_capture;
- if (intel_uc_is_using_huc(uc)) {
+ if (intel_uc_fw_is_loaded(&huc->fw)) {
ret = intel_huc_auth(huc);
- if (ret)
+ if (ret && intel_uc_fw_is_overridden(&huc->fw))
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",
enableddisabled(intel_uc_is_using_guc_submission(uc)));
dev_info(i915->drm.dev, "HuC %s\n",
- enableddisabled(intel_uc_is_using_huc(uc)));
+ enableddisabled(intel_huc_is_authenticated(huc)));
return 0;
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
index 0f9badf44837..ac91e3efd02b 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
@@ -146,7 +146,8 @@ __uc_fw_override(struct intel_uc_fw *uc_fw)
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,
INTEL_REVID(i915));
- if (uc_fw->path)
+ if (uc_fw->path && *uc_fw->path)
uc_fw->status = INTEL_UC_FIRMWARE_SELECTED;
else
uc_fw->status = INTEL_UC_FIRMWARE_NOT_SUPPORTED;
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
index c2ab2803715d..6b64b8073703 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
@@ -61,6 +61,7 @@ struct intel_uc_fw {
enum intel_uc_fw_type type;
enum intel_uc_fw_status status;
const char *path;
+ bool user_overridden;
size_t size;
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;
}
+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)
{
if (intel_uc_fw_is_loaded(uc_fw))