|
@@ -124,9 +124,17 @@ static int reserve_doorbell(struct intel_guc_client *client)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static bool has_doorbell(struct intel_guc_client *client)
|
|
|
+{
|
|
|
+ if (client->doorbell_id == GUC_DOORBELL_INVALID)
|
|
|
+ return false;
|
|
|
+
|
|
|
+ return test_bit(client->doorbell_id, client->guc->doorbell_bitmap);
|
|
|
+}
|
|
|
+
|
|
|
static void unreserve_doorbell(struct intel_guc_client *client)
|
|
|
{
|
|
|
- GEM_BUG_ON(client->doorbell_id == GUC_DOORBELL_INVALID);
|
|
|
+ GEM_BUG_ON(!has_doorbell(client));
|
|
|
|
|
|
__clear_bit(client->doorbell_id, client->guc->doorbell_bitmap);
|
|
|
client->doorbell_id = GUC_DOORBELL_INVALID;
|
|
@@ -184,14 +192,6 @@ static struct guc_doorbell_info *__get_doorbell(struct intel_guc_client *client)
|
|
|
return client->vaddr + client->doorbell_offset;
|
|
|
}
|
|
|
|
|
|
-static bool has_doorbell(struct intel_guc_client *client)
|
|
|
-{
|
|
|
- if (client->doorbell_id == GUC_DOORBELL_INVALID)
|
|
|
- return false;
|
|
|
-
|
|
|
- return test_bit(client->doorbell_id, client->guc->doorbell_bitmap);
|
|
|
-}
|
|
|
-
|
|
|
static void __create_doorbell(struct intel_guc_client *client)
|
|
|
{
|
|
|
struct guc_doorbell_info *doorbell;
|
|
@@ -207,7 +207,6 @@ static void __destroy_doorbell(struct intel_guc_client *client)
|
|
|
struct guc_doorbell_info *doorbell;
|
|
|
u16 db_id = client->doorbell_id;
|
|
|
|
|
|
-
|
|
|
doorbell = __get_doorbell(client);
|
|
|
doorbell->db_status = GUC_DOORBELL_DISABLED;
|
|
|
doorbell->cookie = 0;
|
|
@@ -224,6 +223,9 @@ static int create_doorbell(struct intel_guc_client *client)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
+ if (WARN_ON(!has_doorbell(client)))
|
|
|
+ return -ENODEV; /* internal setup error, should never happen */
|
|
|
+
|
|
|
__update_doorbell_desc(client, client->doorbell_id);
|
|
|
__create_doorbell(client);
|
|
|
|