Loading drivers/mmc/core/queue.c +3 −0 Original line number Diff line number Diff line Loading @@ -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); Loading drivers/mmc/host/cqhci.c +6 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading drivers/mmc/host/sdhci-msm.c +16 −0 Original line number Diff line number Diff line Loading @@ -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); Loading drivers/mmc/host/sdhci.c +24 −7 Original line number Diff line number Diff line Loading @@ -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 Loading
drivers/mmc/core/queue.c +3 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
drivers/mmc/host/cqhci.c +6 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading
drivers/mmc/host/sdhci-msm.c +16 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
drivers/mmc/host/sdhci.c +24 −7 Original line number Diff line number Diff line Loading @@ -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