Commit a00cfc95 authored by Michał Winiarski's avatar Michał Winiarski Committed by Chris Wilson

drm/i915/guc: Extract doorbell verification into a function

We have the selftest that's checking doorbell create/destroy, so there's
no need to check all doorbells delaying the reset every time.
We do want to have that extra sanity check at module load/unload though.
Signed-off-by: default avatarMichał Winiarski <michal.winiarski@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: default avatarMichel Thierry <michel.thierry@intel.com>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20171213221352.7173-7-michal.winiarski@intel.com
parent 8ec52ec8
...@@ -820,9 +820,19 @@ static bool doorbell_ok(struct intel_guc *guc, u16 db_id) ...@@ -820,9 +820,19 @@ static bool doorbell_ok(struct intel_guc *guc, u16 db_id)
return false; return false;
} }
static int guc_clients_doorbell_init(struct intel_guc *guc) static bool guc_verify_doorbells(struct intel_guc *guc)
{ {
u16 db_id; u16 db_id;
for (db_id = 0; db_id < GUC_NUM_DOORBELLS; ++db_id)
if (!doorbell_ok(guc, db_id))
return false;
return true;
}
static int guc_clients_doorbell_init(struct intel_guc *guc)
{
int ret; int ret;
ret = create_doorbell(guc->execbuf_client); ret = create_doorbell(guc->execbuf_client);
...@@ -835,10 +845,6 @@ static int guc_clients_doorbell_init(struct intel_guc *guc) ...@@ -835,10 +845,6 @@ static int guc_clients_doorbell_init(struct intel_guc *guc)
return ret; return ret;
} }
/* Read back & verify all (used & unused) doorbell registers */
for (db_id = 0; db_id < GUC_NUM_DOORBELLS; ++db_id)
WARN_ON(!doorbell_ok(guc, db_id));
return 0; return 0;
} }
...@@ -1149,6 +1155,7 @@ int intel_guc_submission_init(struct intel_guc *guc) ...@@ -1149,6 +1155,7 @@ int intel_guc_submission_init(struct intel_guc *guc)
goto err_log; goto err_log;
GEM_BUG_ON(!guc->ads_vma); GEM_BUG_ON(!guc->ads_vma);
WARN_ON(!guc_verify_doorbells(guc));
ret = guc_clients_create(guc); ret = guc_clients_create(guc);
if (ret) if (ret)
return ret; return ret;
...@@ -1177,6 +1184,8 @@ void intel_guc_submission_fini(struct intel_guc *guc) ...@@ -1177,6 +1184,8 @@ void intel_guc_submission_fini(struct intel_guc *guc)
cancel_work_sync(&guc->preempt_work[id].work); cancel_work_sync(&guc->preempt_work[id].work);
guc_clients_destroy(guc); guc_clients_destroy(guc);
WARN_ON(!guc_verify_doorbells(guc));
guc_ads_destroy(guc); guc_ads_destroy(guc);
intel_guc_log_destroy(guc); intel_guc_log_destroy(guc);
guc_stage_desc_pool_destroy(guc); guc_stage_desc_pool_destroy(guc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment