|
@@ -214,26 +214,20 @@ void intel_uc_fini_wq(struct drm_i915_private *dev_priv)
|
|
intel_guc_fini_wq(&dev_priv->guc);
|
|
intel_guc_fini_wq(&dev_priv->guc);
|
|
}
|
|
}
|
|
|
|
|
|
-int intel_uc_init_hw(struct drm_i915_private *dev_priv)
|
|
|
|
|
|
+int intel_uc_init(struct drm_i915_private *dev_priv)
|
|
{
|
|
{
|
|
struct intel_guc *guc = &dev_priv->guc;
|
|
struct intel_guc *guc = &dev_priv->guc;
|
|
- struct intel_huc *huc = &dev_priv->huc;
|
|
|
|
- int ret, attempts;
|
|
|
|
|
|
+ int ret;
|
|
|
|
|
|
if (!USES_GUC(dev_priv))
|
|
if (!USES_GUC(dev_priv))
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
- if (!HAS_GUC(dev_priv)) {
|
|
|
|
- ret = -ENODEV;
|
|
|
|
- goto err_out;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- guc_disable_communication(guc);
|
|
|
|
- gen9_reset_guc_interrupts(dev_priv);
|
|
|
|
|
|
+ if (!HAS_GUC(dev_priv))
|
|
|
|
+ return -ENODEV;
|
|
|
|
|
|
ret = intel_guc_init(guc);
|
|
ret = intel_guc_init(guc);
|
|
if (ret)
|
|
if (ret)
|
|
- goto err_out;
|
|
|
|
|
|
+ return ret;
|
|
|
|
|
|
if (USES_GUC_SUBMISSION(dev_priv)) {
|
|
if (USES_GUC_SUBMISSION(dev_priv)) {
|
|
/*
|
|
/*
|
|
@@ -241,10 +235,44 @@ int intel_uc_init_hw(struct drm_i915_private *dev_priv)
|
|
* if we are planning to enable submission later
|
|
* if we are planning to enable submission later
|
|
*/
|
|
*/
|
|
ret = intel_guc_submission_init(guc);
|
|
ret = intel_guc_submission_init(guc);
|
|
- if (ret)
|
|
|
|
- goto err_guc;
|
|
|
|
|
|
+ if (ret) {
|
|
|
|
+ intel_guc_fini(guc);
|
|
|
|
+ return ret;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void intel_uc_fini(struct drm_i915_private *dev_priv)
|
|
|
|
+{
|
|
|
|
+ struct intel_guc *guc = &dev_priv->guc;
|
|
|
|
+
|
|
|
|
+ if (!USES_GUC(dev_priv))
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ GEM_BUG_ON(!HAS_GUC(dev_priv));
|
|
|
|
+
|
|
|
|
+ if (USES_GUC_SUBMISSION(dev_priv))
|
|
|
|
+ intel_guc_submission_fini(guc);
|
|
|
|
+
|
|
|
|
+ intel_guc_fini(guc);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+int intel_uc_init_hw(struct drm_i915_private *dev_priv)
|
|
|
|
+{
|
|
|
|
+ struct intel_guc *guc = &dev_priv->guc;
|
|
|
|
+ struct intel_huc *huc = &dev_priv->huc;
|
|
|
|
+ int ret, attempts;
|
|
|
|
+
|
|
|
|
+ if (!USES_GUC(dev_priv))
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
+ GEM_BUG_ON(!HAS_GUC(dev_priv));
|
|
|
|
+
|
|
|
|
+ guc_disable_communication(guc);
|
|
|
|
+ gen9_reset_guc_interrupts(dev_priv);
|
|
|
|
+
|
|
/* init WOPCM */
|
|
/* init WOPCM */
|
|
I915_WRITE(GUC_WOPCM_SIZE, intel_guc_wopcm_size(dev_priv));
|
|
I915_WRITE(GUC_WOPCM_SIZE, intel_guc_wopcm_size(dev_priv));
|
|
I915_WRITE(DMA_GUC_WOPCM_OFFSET,
|
|
I915_WRITE(DMA_GUC_WOPCM_OFFSET,
|
|
@@ -264,12 +292,12 @@ int intel_uc_init_hw(struct drm_i915_private *dev_priv)
|
|
*/
|
|
*/
|
|
ret = __intel_uc_reset_hw(dev_priv);
|
|
ret = __intel_uc_reset_hw(dev_priv);
|
|
if (ret)
|
|
if (ret)
|
|
- goto err_submission;
|
|
|
|
|
|
+ goto err_out;
|
|
|
|
|
|
if (USES_HUC(dev_priv)) {
|
|
if (USES_HUC(dev_priv)) {
|
|
ret = intel_huc_init_hw(huc);
|
|
ret = intel_huc_init_hw(huc);
|
|
if (ret)
|
|
if (ret)
|
|
- goto err_submission;
|
|
|
|
|
|
+ goto err_out;
|
|
}
|
|
}
|
|
|
|
|
|
intel_guc_init_params(guc);
|
|
intel_guc_init_params(guc);
|
|
@@ -322,11 +350,6 @@ err_communication:
|
|
guc_disable_communication(guc);
|
|
guc_disable_communication(guc);
|
|
err_log_capture:
|
|
err_log_capture:
|
|
guc_capture_load_err_log(guc);
|
|
guc_capture_load_err_log(guc);
|
|
-err_submission:
|
|
|
|
- if (USES_GUC_SUBMISSION(dev_priv))
|
|
|
|
- intel_guc_submission_fini(guc);
|
|
|
|
-err_guc:
|
|
|
|
- intel_guc_fini(guc);
|
|
|
|
err_out:
|
|
err_out:
|
|
/*
|
|
/*
|
|
* Note that there is no fallback as either user explicitly asked for
|
|
* Note that there is no fallback as either user explicitly asked for
|
|
@@ -348,15 +371,13 @@ void intel_uc_fini_hw(struct drm_i915_private *dev_priv)
|
|
if (!USES_GUC(dev_priv))
|
|
if (!USES_GUC(dev_priv))
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
+ GEM_BUG_ON(!HAS_GUC(dev_priv));
|
|
|
|
+
|
|
if (USES_GUC_SUBMISSION(dev_priv))
|
|
if (USES_GUC_SUBMISSION(dev_priv))
|
|
intel_guc_submission_disable(guc);
|
|
intel_guc_submission_disable(guc);
|
|
|
|
|
|
guc_disable_communication(guc);
|
|
guc_disable_communication(guc);
|
|
|
|
|
|
- if (USES_GUC_SUBMISSION(dev_priv)) {
|
|
|
|
|
|
+ if (USES_GUC_SUBMISSION(dev_priv))
|
|
gen9_disable_guc_interrupts(dev_priv);
|
|
gen9_disable_guc_interrupts(dev_priv);
|
|
- intel_guc_submission_fini(guc);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- intel_guc_fini(guc);
|
|
|
|
}
|
|
}
|