Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit af9aeae5 authored by Sahitya Tummala's avatar Sahitya Tummala Committed by Gerrit - the friendly Code Review server
Browse files

mmc: block: send CMD13 when a response error detected in CQ mode



When CQE detects a RED error (response error) from the device,
it triggers a RED interrupt. The SW driver as part of the RED
IRQ handling, puts the CQ in either halt or disabled state
before scheduling the error work. Hence, send the status CMD13
in legacy mode to decode the RED error for further debugging.

Change-Id: I90d17cbc73783b88bbafbdf7048c8a26eb8434bc
Signed-off-by: default avatarSahitya Tummala <stummala@codeaurora.org>
Signed-off-by: default avatarSayali Lokhande <sayalil@codeaurora.org>
parent 26dc8d99
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -3104,7 +3104,8 @@ static void mmc_blk_cmdq_err(struct mmc_queue *mq)
	struct mmc_request *mrq = host->err_mrq;
	struct mmc_cmdq_context_info *ctx_info = &host->cmdq_ctx;
	struct request_queue *q;
	int err;
	int err, ret;
	u32 status = 0;

	mmc_host_clk_hold(host);
	host->cmdq_ops->dumpstate(host);
@@ -3123,8 +3124,14 @@ static void mmc_blk_cmdq_err(struct mmc_queue *mq)
	/* RED error - Fatal: requires reset */
	if (mrq->cmdq_req->resp_err) {
		err = mrq->cmdq_req->resp_err;
		pr_crit("%s: Response error detected: Device in bad state\n",
			mmc_hostname(host));
		if (mmc_host_halt(host) || mmc_host_cq_disable(host)) {
			ret = get_card_status(host->card, &status, 0);
			if (ret)
				pr_err("%s: CMD13 failed with err %d\n",
						mmc_hostname(host), ret);
		}
		pr_err("%s: Response error detected with device status 0x%08x\n",
			mmc_hostname(host), status);
		goto reset;
	}