summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/xe/display/xe_hdcp_gsc.c2
-rw-r--r--drivers/gpu/drm/xe/xe_gsc.c13
-rw-r--r--drivers/gpu/drm/xe/xe_uc_fw.c10
3 files changed, 15 insertions, 10 deletions
diff --git a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
index 07acae121aa7..ed1f65f5ef4d 100644
--- a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
+++ b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
@@ -39,7 +39,7 @@ static bool intel_hdcp_gsc_check_status(struct drm_device *drm)
struct xe_gt *gt = tile->media_gt;
struct xe_gsc *gsc = &gt->uc.gsc;
- if (!gsc || !xe_uc_fw_is_enabled(&gsc->fw)) {
+ if (!gsc || !xe_uc_fw_is_available(&gsc->fw)) {
drm_dbg_kms(&xe->drm,
"GSC Components not ready for HDCP2.x\n");
return false;
diff --git a/drivers/gpu/drm/xe/xe_gsc.c b/drivers/gpu/drm/xe/xe_gsc.c
index a3157b0fe791..e5c234f3d795 100644
--- a/drivers/gpu/drm/xe/xe_gsc.c
+++ b/drivers/gpu/drm/xe/xe_gsc.c
@@ -414,15 +414,16 @@ int xe_gsc_init(struct xe_gsc *gsc)
}
/*
- * Some platforms can have GuC but not GSC. That would cause
- * xe_uc_fw_init(gsc) to return a "not supported" failure code and abort
- * all firmware loading. So check for GSC being enabled before
- * propagating the failure back up. That way the higher level will keep
- * going and load GuC as appropriate.
+ * Starting from BMG the GSC is no longer needed for MC6 entry, so the
+ * only missing features if the FW is lacking would be the content
+ * protection ones. This is acceptable, so we allow the driver load to
+ * continue if the GSC FW is missing.
*/
ret = xe_uc_fw_init(&gsc->fw);
if (!xe_uc_fw_is_enabled(&gsc->fw))
return 0;
+ else if (gt_to_xe(gt)->info.platform >= XE_BATTLEMAGE && !xe_uc_fw_is_available(&gsc->fw))
+ return 0;
else if (ret)
goto out;
@@ -614,7 +615,7 @@ void xe_gsc_print_info(struct xe_gsc *gsc, struct drm_printer *p)
drm_printf(p, "\tfound security version %u\n", gsc->security_version);
- if (!xe_uc_fw_is_enabled(&gsc->fw))
+ if (!xe_uc_fw_is_available(&gsc->fw))
return;
CLASS(xe_force_wake, fw_ref)(gt_to_fw(gt), XE_FW_GSC);
diff --git a/drivers/gpu/drm/xe/xe_uc_fw.c b/drivers/gpu/drm/xe/xe_uc_fw.c
index 85544c214274..5d10a6c34604 100644
--- a/drivers/gpu/drm/xe/xe_uc_fw.c
+++ b/drivers/gpu/drm/xe/xe_uc_fw.c
@@ -739,7 +739,7 @@ static int uc_fw_request(struct xe_uc_fw *uc_fw, const struct firmware **firmwar
return 0;
}
- err = request_firmware(&fw, uc_fw->path, dev);
+ err = firmware_request_nowarn(&fw, uc_fw->path, dev);
if (err)
goto fail;
@@ -768,8 +768,12 @@ fail:
XE_UC_FIRMWARE_MISSING :
XE_UC_FIRMWARE_ERROR);
- xe_gt_notice(gt, "%s firmware %s: fetch failed with error %pe\n",
- xe_uc_fw_type_repr(uc_fw->type), uc_fw->path, ERR_PTR(err));
+ if (err == -ENOENT)
+ xe_gt_info(gt, "%s firmware %s not found\n",
+ xe_uc_fw_type_repr(uc_fw->type), uc_fw->path);
+ else
+ xe_gt_notice(gt, "%s firmware %s: fetch failed with error %pe\n",
+ xe_uc_fw_type_repr(uc_fw->type), uc_fw->path, ERR_PTR(err));
xe_gt_info(gt, "%s firmware(s) can be downloaded from %s\n",
xe_uc_fw_type_repr(uc_fw->type), XE_UC_FIRMWARE_URL);