drm/i915/guc: Extract doorbell verification into a function
authorMichał Winiarski <michal.winiarski@intel.com>
Wed, 13 Dec 2017 22:13:52 +0000 (23:13 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 14 Dec 2017 08:07:00 +0000 (08:07 +0000)
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: Michał 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: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Michel Thierry <michel.thierry@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20171213221352.7173-7-michal.winiarski@intel.com
drivers/gpu/drm/i915/intel_guc_submission.c

index 4881106..4d24094 100644 (file)
@@ -820,9 +820,19 @@ static bool doorbell_ok(struct intel_guc *guc, u16 db_id)
        return false;
 }
 
-static int guc_clients_doorbell_init(struct intel_guc *guc)
+static bool guc_verify_doorbells(struct intel_guc *guc)
 {
        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;
 
        ret = create_doorbell(guc->execbuf_client);
@@ -835,10 +845,6 @@ static int guc_clients_doorbell_init(struct intel_guc *guc)
                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;
 }
 
@@ -1149,6 +1155,7 @@ int intel_guc_submission_init(struct intel_guc *guc)
                goto err_log;
        GEM_BUG_ON(!guc->ads_vma);
 
+       WARN_ON(!guc_verify_doorbells(guc));
        ret = guc_clients_create(guc);
        if (ret)
                return ret;
@@ -1177,6 +1184,8 @@ void intel_guc_submission_fini(struct intel_guc *guc)
                cancel_work_sync(&guc->preempt_work[id].work);
 
        guc_clients_destroy(guc);
+       WARN_ON(!guc_verify_doorbells(guc));
+
        guc_ads_destroy(guc);
        intel_guc_log_destroy(guc);
        guc_stage_desc_pool_destroy(guc);