diff options
-rw-r--r-- | drivers/gpu/drm/xe/xe_guc.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/xe/xe_huc.c | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/xe/xe_uc.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/xe/xe_uc_fw.c | 14 | ||||
-rw-r--r-- | drivers/gpu/drm/xe/xe_wopcm.c | 3 |
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(>->uc.huc.fw) ? 0 : - HUC_LOADING_AGENT_GUC; + u32 huc_agent = xe_uc_fw_is_available(>->uc.huc.fw) ? HUC_LOADING_AGENT_GUC : 0; u32 mask; int err; |