drm/i915/uc: Place uC firmware in upper range of GGTT
Currently we pin the GuC or HuC firmware image just before uploading. Perma-pin during uC initialization instead and use the range reserved at the top of the address space. Moving the firmware resulted in needing to: - use an additional pinning for the rsa signature which will be used during HuC auth as addresses above GUC_GGTT_TOP do not map through GTT. v2: Remove call to set to gtt domain Do not restore fw gtt mapping unconditionally Separate out pin/unpin functions and drop usage of pin/unpin Use uc_fw init/fini functions to bind/unbind fw object v3: Bind is only needed during xfer (Chris) Remove attempts to bind outside of xfer (Chris) Mark fw bind/unbind static Signed-off-by: Fernando Pacheco <fernando.pacheco@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20190419230015.18121-4-fernando.pacheco@intel.com
This commit is contained in:

committed by
Chris Wilson

parent
911800765e
commit
fc488b5903
@@ -280,6 +280,7 @@ void intel_uc_fini_misc(struct drm_i915_private *i915)
|
||||
int intel_uc_init(struct drm_i915_private *i915)
|
||||
{
|
||||
struct intel_guc *guc = &i915->guc;
|
||||
struct intel_huc *huc = &i915->huc;
|
||||
int ret;
|
||||
|
||||
if (!USES_GUC(i915))
|
||||
@@ -292,19 +293,30 @@ int intel_uc_init(struct drm_i915_private *i915)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (USES_HUC(i915)) {
|
||||
ret = intel_huc_init(huc);
|
||||
if (ret)
|
||||
goto err_guc;
|
||||
}
|
||||
|
||||
if (USES_GUC_SUBMISSION(i915)) {
|
||||
/*
|
||||
* This is stuff we need to have available at fw load time
|
||||
* if we are planning to enable submission later
|
||||
*/
|
||||
ret = intel_guc_submission_init(guc);
|
||||
if (ret) {
|
||||
intel_guc_fini(guc);
|
||||
return ret;
|
||||
}
|
||||
if (ret)
|
||||
goto err_huc;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_huc:
|
||||
if (USES_HUC(i915))
|
||||
intel_huc_fini(huc);
|
||||
err_guc:
|
||||
intel_guc_fini(guc);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void intel_uc_fini(struct drm_i915_private *i915)
|
||||
@@ -319,6 +331,9 @@ void intel_uc_fini(struct drm_i915_private *i915)
|
||||
if (USES_GUC_SUBMISSION(i915))
|
||||
intel_guc_submission_fini(guc);
|
||||
|
||||
if (USES_HUC(i915))
|
||||
intel_huc_fini(&i915->huc);
|
||||
|
||||
intel_guc_fini(guc);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user