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>
This commit is contained in:
Venkat Gopalakrishnan 2015-10-01 14:34:10 -07:00 committed by Subhash Jadavani
parent 4c7ffe38b3
commit 28791b7d46

View file

@ -631,8 +631,6 @@ static int cmdq_request(struct mmc_host *mmc, struct mmc_request *mrq)
goto out; goto out;
} }
BUG_ON(cmdq_readl(cq_host, CQTDBR) & (1 << tag));
cq_host->mrq_slot[tag] = mrq; cq_host->mrq_slot[tag] = mrq;
if (cq_host->ops->set_tranfer_params) if (cq_host->ops->set_tranfer_params)
cq_host->ops->set_tranfer_params(mmc); cq_host->ops->set_tranfer_params(mmc);
@ -643,6 +641,10 @@ static int cmdq_request(struct mmc_host *mmc, struct mmc_request *mrq)
ring_doorbell: ring_doorbell:
/* Ensure the task descriptor list is flushed before ringing doorbell */ /* Ensure the task descriptor list is flushed before ringing doorbell */
wmb(); wmb();
if (cmdq_readl(cq_host, CQTDBR) & (1 << tag)) {
cmdq_dumpregs(cq_host);
BUG_ON(1);
}
cmdq_writel(cq_host, 1 << tag, CQTDBR); cmdq_writel(cq_host, 1 << tag, CQTDBR);
/* Commit the doorbell write immediately */ /* Commit the doorbell write immediately */
wmb(); wmb();