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

Commit d4a94d66 authored by Shaik Sajida Bhanu's avatar Shaik Sajida Bhanu
Browse files

mmc: sdhci-msm: Add err_stat's in CQE path



Add err_stat's in CQE path for eMMC.

Change-Id: Ie1b304ab853a5956ae3e2cd9d89ceac5fcbb473b
Signed-off-by: default avatarShaik Sajida Bhanu <sbhanu@codeaurora.org>
parent 6f6827e5
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -103,6 +103,9 @@ static enum blk_eh_timer_return mmc_cqe_timed_out(struct request *req)
	enum mmc_issue_type issue_type = mmc_issue_type(mq, req);
	bool recovery_needed = false;

#if defined(CONFIG_SDC_QTI)
	host->err_stats[MMC_ERR_CMDQ_REQ_TIMEOUT]++;
#endif
	mmc_log_string(host,
		"Request timed out! Active reqs: %d Req: %p Tag: %d\n",
		mmc_cqe_qcnt(mq), req, req->tag);
+6 −0
Original line number Diff line number Diff line
@@ -887,6 +887,12 @@ irqreturn_t cqhci_irq(struct mmc_host *mmc, u32 intmask, int cmd_error,
	if ((status & CQHCI_IS_RED) || cmd_error || data_error || ice_err) {
#if defined(CONFIG_SDC_QTI)
		mmc->need_hw_reset = true;
		if (status & CQHCI_IS_RED)
			mmc->err_stats[MMC_ERR_CMDQ_RED]++;
		if (status & CQHCI_IS_GCE)
			mmc->err_stats[MMC_ERR_CMDQ_GCE]++;
		if (status & CQHCI_IS_ICCE)
			mmc->err_stats[MMC_ERR_CMDQ_ICCE]++;
#endif
		cqhci_error_irq(mmc, status, cmd_error, data_error);
	}
+16 −0
Original line number Diff line number Diff line
@@ -4064,6 +4064,22 @@ static ssize_t err_stats_show(struct device *dev,
		host->mmc->err_stats[MMC_ERR_TUNING]);
	strlcat(buf, tmp, PAGE_SIZE);

	scnprintf(tmp, sizeof(tmp), "# CMDQ RED Errors: %d\n",
		host->mmc->err_stats[MMC_ERR_CMDQ_RED]);
	strlcat(buf, tmp, PAGE_SIZE);

	scnprintf(tmp, sizeof(tmp), "# CMDQ GCE Errors: %d\n",
		host->mmc->err_stats[MMC_ERR_CMDQ_GCE]);
	strlcat(buf, tmp, PAGE_SIZE);

	scnprintf(tmp, sizeof(tmp), "# CMDQ ICCE Errors: %d\n",
		host->mmc->err_stats[MMC_ERR_CMDQ_ICCE]);
	strlcat(buf, tmp, PAGE_SIZE);

	scnprintf(tmp, sizeof(tmp), "# CMDQ Request Timedout: %d\n",
		host->mmc->err_stats[MMC_ERR_CMDQ_REQ_TIMEOUT]);
	strlcat(buf, tmp, PAGE_SIZE);

	scnprintf(tmp, sizeof(tmp), "# Request Timedout Error: %d\n",
		host->mmc->err_stats[MMC_ERR_REQ_TIMEOUT]);
	strlcat(buf, tmp, PAGE_SIZE);
+24 −7
Original line number Diff line number Diff line
@@ -3726,20 +3726,37 @@ bool sdhci_cqe_irq(struct sdhci_host *host, u32 intmask, int *cmd_error,
	if (!host->cqe_on)
		return false;

	if (intmask & (SDHCI_INT_INDEX | SDHCI_INT_END_BIT | SDHCI_INT_CRC))
	if (intmask & (SDHCI_INT_INDEX | SDHCI_INT_END_BIT | SDHCI_INT_CRC)) {
		*cmd_error = -EILSEQ;
	else if (intmask & SDHCI_INT_TIMEOUT)
#if defined(CONFIG_SDC_QTI)
		if (intmask & SDHCI_INT_CRC)
			host->mmc->err_stats[MMC_ERR_CMD_CRC]++;
#endif
	} else if (intmask & SDHCI_INT_TIMEOUT) {
		*cmd_error = -ETIMEDOUT;
	else
#if defined(CONFIG_SDC_QTI)
		host->mmc->err_stats[MMC_ERR_CMD_TIMEOUT]++;
#endif
	} else
		*cmd_error = 0;

	if (intmask & (SDHCI_INT_DATA_END_BIT | SDHCI_INT_DATA_CRC))
	if (intmask & (SDHCI_INT_DATA_END_BIT | SDHCI_INT_DATA_CRC)) {
		*data_error = -EILSEQ;
	else if (intmask & SDHCI_INT_DATA_TIMEOUT)
#if defined(CONFIG_SDC_QTI)
		if (intmask & SDHCI_INT_DATA_CRC)
			host->mmc->err_stats[MMC_ERR_DAT_CRC]++;
#endif
	} else if (intmask & SDHCI_INT_DATA_TIMEOUT) {
		*data_error = -ETIMEDOUT;
	else if (intmask & SDHCI_INT_ADMA_ERROR)
#if defined(CONFIG_SDC_QTI)
		host->mmc->err_stats[MMC_ERR_DAT_TIMEOUT]++;
#endif
	} else if (intmask & SDHCI_INT_ADMA_ERROR) {
		*data_error = -EIO;
	else
#if defined(CONFIG_SDC_QTI)
		host->mmc->err_stats[MMC_ERR_ADMA]++;
#endif
	} else
		*data_error = 0;

	/* Clear selected interrupts. */