mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-08 12:58:12 -04:00
Merge "mmc: sdhci-msm: Add err_stat's in CQE path"
This commit is contained in:
commit
a0d74020c7
4 changed files with 49 additions and 7 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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. */
|
||||
|
|
|
|||
Loading…
Reference in a new issue