int xe_uc_sanitize_reset(struct xe_uc *uc)
{
xe_uc_sanitize(uc);
return uc_reset(uc);
}
staticint vf_uc_load_hw(struct xe_uc *uc)
{ int err;
err = xe_uc_sanitize_reset(uc); if (err) return err;
err = xe_guc_enable_communication(&uc->guc); if (err) return err;
err = xe_gt_sriov_vf_connect(uc_to_gt(uc)); if (err) goto err_out;
uc->guc.submission_state.enabled = true;
err = xe_guc_opt_in_features_enable(&uc->guc); if (err) goto err_out;
err = xe_gt_record_default_lrcs(uc_to_gt(uc)); if (err) goto err_out;
return0;
err_out:
xe_guc_sanitize(&uc->guc); return err;
}
/* *Shouldbecalledduringdriverload,aftereveryGTreset,andafterevery *suspendtoreload/auththefirmwares.
*/ int xe_uc_load_hw(struct xe_uc *uc)
{ int ret;
/* GuC submission not enabled, nothing to do */ if (!xe_device_uc_enabled(uc_to_xe(uc))) return0;
if (IS_SRIOV_VF(uc_to_xe(uc))) return vf_uc_load_hw(uc);
ret = xe_huc_upload(&uc->huc); if (ret) return ret;
ret = xe_guc_upload(&uc->guc); if (ret) return ret;
ret = xe_guc_enable_communication(&uc->guc); if (ret) return ret;
ret = xe_gt_record_default_lrcs(uc_to_gt(uc)); if (ret) goto err_out;
ret = xe_guc_post_load_init(&uc->guc); if (ret) goto err_out;
ret = xe_guc_pc_start(&uc->guc.pc); if (ret) goto err_out;
xe_guc_engine_activity_enable_stats(&uc->guc);
/* We don't fail the driver load if HuC fails to auth, but let's warn */
ret = xe_huc_auth(&uc->huc, XE_HUC_AUTH_VIA_GUC);
xe_gt_assert(uc_to_gt(uc), !ret);
/* GSC load is async */
xe_gsc_load_start(&uc->gsc);
return0;
err_out:
xe_guc_sanitize(&uc->guc); return ret;
}
int xe_uc_reset_prepare(struct xe_uc *uc)
{ /* GuC submission not enabled, nothing to do */ if (!xe_device_uc_enabled(uc_to_xe(uc))) return0;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.