[PATCH 10/11] drm/i915/guc: Only initialise GuC submission once
Chris Wilson
chris at chris-wilson.co.uk
Sun Nov 20 17:24:40 UTC 2016
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
drivers/gpu/drm/i915/i915_guc_submission.c | 15 +++++----------
drivers/gpu/drm/i915/intel_guc_loader.c | 8 +++-----
2 files changed, 8 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c b/drivers/gpu/drm/i915/i915_guc_submission.c
index b88d4a525c7c..8d6e93473b4b 100644
--- a/drivers/gpu/drm/i915/i915_guc_submission.c
+++ b/drivers/gpu/drm/i915/i915_guc_submission.c
@@ -772,6 +772,8 @@ static void guc_init_doorbell_hw(struct intel_guc *guc)
uint16_t db_id;
int i, err;
+ /* Wipe bitmap & delete client in case of reinitialisation */
+ bitmap_clear(guc->doorbell_bitmap, 0, GUC_MAX_DOORBELLS);
guc_disable_doorbell(guc, client);
for (i = 0; i < GUC_MAX_DOORBELLS; ++i) {
@@ -1486,16 +1488,6 @@ int i915_guc_submission_init(struct drm_i915_private *dev_priv)
if (!HAS_GUC_SCHED(dev_priv))
return 0;
- /* Wipe bitmap & delete client in case of reinitialisation */
- bitmap_clear(guc->doorbell_bitmap, 0, GUC_MAX_DOORBELLS);
- i915_guc_submission_disable(dev_priv);
-
- if (!i915.enable_guc_submission)
- return 0; /* not enabled */
-
- if (guc->ctx_pool_vma)
- return 0; /* already allocated */
-
vma = guc_allocate_vma(guc, gemsize);
if (IS_ERR(vma))
return PTR_ERR(vma);
@@ -1536,6 +1528,9 @@ int i915_guc_submission_enable(struct drm_i915_private *dev_priv)
struct intel_engine_cs *engine;
enum intel_engine_id id;
+ if (!guc->execbuf_client)
+ return 0;
+
host2guc_sample_forcewake(guc, client);
guc_init_doorbell_hw(guc);
guc_reset_wq(client);
diff --git a/drivers/gpu/drm/i915/intel_guc_loader.c b/drivers/gpu/drm/i915/intel_guc_loader.c
index 34d6ad2cf7c1..143215bc6613 100644
--- a/drivers/gpu/drm/i915/intel_guc_loader.c
+++ b/drivers/gpu/drm/i915/intel_guc_loader.c
@@ -493,10 +493,6 @@ int intel_guc_setup(struct drm_device *dev)
intel_guc_fw_status_repr(guc_fw->guc_fw_fetch_status),
intel_guc_fw_status_repr(guc_fw->guc_fw_load_status));
- err = i915_guc_submission_init(dev_priv);
- if (err)
- goto fail;
-
/*
* WaEnableuKernelHeaderValidFix:skl,bxt
* For BXT, this is only upto B0 but below WA is required for later
@@ -547,7 +543,6 @@ int intel_guc_setup(struct drm_device *dev)
guc_interrupts_release(dev_priv);
i915_guc_submission_disable(dev_priv);
- i915_guc_submission_fini(dev_priv);
/*
* We've failed to load the firmware :(
@@ -759,6 +754,9 @@ void intel_guc_init(struct drm_device *dev)
guc_fw->guc_fw_fetch_status = GUC_FIRMWARE_NONE;
guc_fw->guc_fw_load_status = GUC_FIRMWARE_NONE;
+ if (i915.enable_guc_submission && i915_guc_submission_enable(dev_priv))
+ i915.enable_guc_submission = 0;
+
/* Early (and silent) return if GuC loading is disabled */
if (!i915.enable_guc_loading)
return;
--
2.10.2
More information about the Intel-gfx-trybot
mailing list