aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/xe/xe_guc.c3
-rw-r--r--drivers/gpu/drm/xe/xe_huc.c15
-rw-r--r--drivers/gpu/drm/xe/xe_uc.c10
-rw-r--r--drivers/gpu/drm/xe/xe_uc_fw.c14
-rw-r--r--drivers/gpu/drm/xe/xe_wopcm.c3
5 files changed, 26 insertions, 19 deletions
diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
index 134019fdda7e..84f0b5488783 100644
--- a/drivers/gpu/drm/xe/xe_guc.c
+++ b/drivers/gpu/drm/xe/xe_guc.c
@@ -242,6 +242,9 @@ int xe_guc_init(struct xe_guc *guc)
if (ret)
goto out;
+ if (!xe_uc_fw_is_enabled(&guc->fw))
+ return 0;
+
ret = xe_guc_log_init(&guc->log);
if (ret)
goto out;
diff --git a/drivers/gpu/drm/xe/xe_huc.c b/drivers/gpu/drm/xe/xe_huc.c
index c856da1e9422..293403d16f25 100644
--- a/drivers/gpu/drm/xe/xe_huc.c
+++ b/drivers/gpu/drm/xe/xe_huc.c
@@ -43,22 +43,21 @@ int xe_huc_init(struct xe_huc *huc)
if (ret)
goto out;
+ if (!xe_uc_fw_is_enabled(&huc->fw))
+ return 0;
+
xe_uc_fw_change_status(&huc->fw, XE_UC_FIRMWARE_LOADABLE);
return 0;
out:
- if (xe_uc_fw_is_disabled(&huc->fw)) {
- drm_info(&xe->drm, "HuC disabled\n");
- return 0;
- }
drm_err(&xe->drm, "HuC init failed with %d", ret);
return ret;
}
int xe_huc_upload(struct xe_huc *huc)
{
- if (xe_uc_fw_is_disabled(&huc->fw))
+ if (!xe_uc_fw_is_loadable(&huc->fw))
return 0;
return xe_uc_fw_upload(&huc->fw, 0, HUC_UKERNEL);
}
@@ -70,7 +69,7 @@ int xe_huc_auth(struct xe_huc *huc)
struct xe_guc *guc = huc_to_guc(huc);
int ret;
- if (xe_uc_fw_is_disabled(&huc->fw))
+ if (!xe_uc_fw_is_loadable(&huc->fw))
return 0;
xe_assert(xe, !xe_uc_fw_is_running(&huc->fw));
@@ -107,7 +106,7 @@ fail:
void xe_huc_sanitize(struct xe_huc *huc)
{
- if (xe_uc_fw_is_disabled(&huc->fw))
+ if (!xe_uc_fw_is_loadable(&huc->fw))
return;
xe_uc_fw_change_status(&huc->fw, XE_UC_FIRMWARE_LOADABLE);
}
@@ -119,7 +118,7 @@ void xe_huc_print_info(struct xe_huc *huc, struct drm_printer *p)
xe_uc_fw_print(&huc->fw, p);
- if (xe_uc_fw_is_disabled(&huc->fw))
+ if (!xe_uc_fw_is_enabled(&huc->fw))
return;
err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
diff --git a/drivers/gpu/drm/xe/xe_uc.c b/drivers/gpu/drm/xe/xe_uc.c
index 5b7d6177c1c2..784f53c5f282 100644
--- a/drivers/gpu/drm/xe/xe_uc.c
+++ b/drivers/gpu/drm/xe/xe_uc.c
@@ -31,9 +31,10 @@ int xe_uc_init(struct xe_uc *uc)
{
int ret;
- /* GuC submission not enabled, nothing to do */
- if (!xe_device_uc_enabled(uc_to_xe(uc)))
- return 0;
+ /*
+ * We call the GuC/HuC init functions even if GuC submission is off to
+ * correctly move our tracking of the FW state to "disabled".
+ */
ret = xe_guc_init(&uc->guc);
if (ret)
@@ -43,6 +44,9 @@ int xe_uc_init(struct xe_uc *uc)
if (ret)
goto err;
+ if (!xe_device_uc_enabled(uc_to_xe(uc)))
+ return 0;
+
ret = xe_wopcm_init(&uc->wopcm);
if (ret)
goto err;
diff --git a/drivers/gpu/drm/xe/xe_uc_fw.c b/drivers/gpu/drm/xe/xe_uc_fw.c
index efc70836453d..a890ece72f34 100644
--- a/drivers/gpu/drm/xe/xe_uc_fw.c
+++ b/drivers/gpu/drm/xe/xe_uc_fw.c
@@ -340,17 +340,19 @@ int xe_uc_fw_init(struct xe_uc_fw *uc_fw)
xe_assert(xe, !uc_fw->path);
uc_fw_auto_select(xe, uc_fw);
- xe_uc_fw_change_status(uc_fw, uc_fw->path ? *uc_fw->path ?
+ xe_uc_fw_change_status(uc_fw, uc_fw->path ?
XE_UC_FIRMWARE_SELECTED :
- XE_UC_FIRMWARE_DISABLED :
XE_UC_FIRMWARE_NOT_SUPPORTED);
- /* Transform no huc in the list into firmware disabled */
- if (uc_fw->type == XE_UC_FW_TYPE_HUC && !xe_uc_fw_is_supported(uc_fw)) {
+ if (!xe_uc_fw_is_supported(uc_fw))
+ return 0;
+
+ if (!xe_device_uc_enabled(xe)) {
xe_uc_fw_change_status(uc_fw, XE_UC_FIRMWARE_DISABLED);
- err = -ENOPKG;
- return err;
+ drm_dbg(&xe->drm, "%s disabled", xe_uc_fw_type_repr(uc_fw->type));
+ return 0;
}
+
err = request_firmware(&fw, uc_fw->path, dev);
if (err)
goto fail;
diff --git a/drivers/gpu/drm/xe/xe_wopcm.c b/drivers/gpu/drm/xe/xe_wopcm.c
index 9a85bcc18830..bf85d4fa56cc 100644
--- a/drivers/gpu/drm/xe/xe_wopcm.c
+++ b/drivers/gpu/drm/xe/xe_wopcm.c
@@ -139,8 +139,7 @@ static int __wopcm_init_regs(struct xe_device *xe, struct xe_gt *gt,
{
u32 base = wopcm->guc.base;
u32 size = wopcm->guc.size;
- u32 huc_agent = xe_uc_fw_is_disabled(&gt->uc.huc.fw) ? 0 :
- HUC_LOADING_AGENT_GUC;
+ u32 huc_agent = xe_uc_fw_is_available(&gt->uc.huc.fw) ? HUC_LOADING_AGENT_GUC : 0;
u32 mask;
int err;