mmc: cmdq_hci: verify the doorbell bit for DCMD before setting

We make sure that the doorbell bit for any regular slot is not
set before ringing the doorbell for that slot, make sure of the
same for DCMD slot too.

Change-Id: Ia96e8d6ae0c28aad21f4a3cf46b27c7a5c878971
Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
diff --git a/drivers/mmc/host/cmdq_hci.c b/drivers/mmc/host/cmdq_hci.c
index f16cb65..aeb18d2 100644
--- a/drivers/mmc/host/cmdq_hci.c
+++ b/drivers/mmc/host/cmdq_hci.c
@@ -621,8 +621,6 @@
 		goto out;
 	}
 
-	BUG_ON(cmdq_readl(cq_host, CQTDBR) & (1 << tag));
-
 	cq_host->mrq_slot[tag] = mrq;
 	if (cq_host->ops->set_tranfer_params)
 		cq_host->ops->set_tranfer_params(mmc);
@@ -633,6 +631,10 @@
 ring_doorbell:
 	/* Ensure the task descriptor list is flushed before ringing doorbell */
 	wmb();
+	if (cmdq_readl(cq_host, CQTDBR) & (1 << tag)) {
+		cmdq_dumpregs(cq_host);
+		BUG_ON(1);
+	}
 	cmdq_writel(cq_host, 1 << tag, CQTDBR);
 	/* Commit the doorbell write immediately */
 	wmb();