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;
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);
}
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));
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);
}
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);
{
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)
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;
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;
{
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;