aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host
diff options
context:
space:
mode:
authorTeppei Kamijou <teppei.kamijou.yb@renesas.com>2012-12-12 09:38:18 -0500
committerChris Ball <cjb@laptop.org>2013-02-11 13:28:41 -0500
commite475b2702f612901772d12110614ad8c3fb5d89b (patch)
treec2f21678eb8b8b4fc621f0516a9a9e78f5fb140b /drivers/mmc/host
parent276bc96b2abfa2a6bb219aa4eda13c4c331c53eb (diff)
mmc: sh_mmcif: report all errors
Make error reporting in the driver more verbose. This patch is based on an earlier work by Teppei Kamijou, but we try to not add any new error messages to the log in the normal case to avoid confusing the user, and also add a few more dev_dbg() calls. Signed-off-by: Teppei Kamijou <teppei.kamijou.yb@renesas.com> Signed-off-by: Shinya Kuribayashi <shinya.kuribayashi.px@renesas.com> [g.liakhovetski@gmx.de: avoid producing new errors in normal case] Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc/host')
-rw-r--r--drivers/mmc/host/sh_mmcif.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c
index e6a6d2363a4d..b4180c7bffc4 100644
--- a/drivers/mmc/host/sh_mmcif.c
+++ b/drivers/mmc/host/sh_mmcif.c
@@ -514,13 +514,16 @@ static int sh_mmcif_error_manage(struct sh_mmcif_host *host)
514 } 514 }
515 515
516 if (state2 & STS2_CRC_ERR) { 516 if (state2 & STS2_CRC_ERR) {
517 dev_dbg(&host->pd->dev, ": CRC error\n"); 517 dev_err(&host->pd->dev, " CRC error: state %u, wait %u\n",
518 host->state, host->wait_for);
518 ret = -EIO; 519 ret = -EIO;
519 } else if (state2 & STS2_TIMEOUT_ERR) { 520 } else if (state2 & STS2_TIMEOUT_ERR) {
520 dev_dbg(&host->pd->dev, ": Timeout\n"); 521 dev_err(&host->pd->dev, " Timeout: state %u, wait %u\n",
522 host->state, host->wait_for);
521 ret = -ETIMEDOUT; 523 ret = -ETIMEDOUT;
522 } else { 524 } else {
523 dev_dbg(&host->pd->dev, ": End/Index error\n"); 525 dev_dbg(&host->pd->dev, " End/Index error: state %u, wait %u\n",
526 host->state, host->wait_for);
524 ret = -EIO; 527 ret = -EIO;
525 } 528 }
526 return ret; 529 return ret;
@@ -566,6 +569,7 @@ static bool sh_mmcif_read_block(struct sh_mmcif_host *host)
566 569
567 if (host->sd_error) { 570 if (host->sd_error) {
568 data->error = sh_mmcif_error_manage(host); 571 data->error = sh_mmcif_error_manage(host);
572 dev_dbg(&host->pd->dev, "%s(): %d\n", __func__, data->error);
569 return false; 573 return false;
570 } 574 }
571 575
@@ -606,6 +610,7 @@ static bool sh_mmcif_mread_block(struct sh_mmcif_host *host)
606 610
607 if (host->sd_error) { 611 if (host->sd_error) {
608 data->error = sh_mmcif_error_manage(host); 612 data->error = sh_mmcif_error_manage(host);
613 dev_dbg(&host->pd->dev, "%s(): %d\n", __func__, data->error);
609 return false; 614 return false;
610 } 615 }
611 616
@@ -642,6 +647,7 @@ static bool sh_mmcif_write_block(struct sh_mmcif_host *host)
642 647
643 if (host->sd_error) { 648 if (host->sd_error) {
644 data->error = sh_mmcif_error_manage(host); 649 data->error = sh_mmcif_error_manage(host);
650 dev_dbg(&host->pd->dev, "%s(): %d\n", __func__, data->error);
645 return false; 651 return false;
646 } 652 }
647 653
@@ -682,6 +688,7 @@ static bool sh_mmcif_mwrite_block(struct sh_mmcif_host *host)
682 688
683 if (host->sd_error) { 689 if (host->sd_error) {
684 data->error = sh_mmcif_error_manage(host); 690 data->error = sh_mmcif_error_manage(host);
691 dev_dbg(&host->pd->dev, "%s(): %d\n", __func__, data->error);
685 return false; 692 return false;
686 } 693 }
687 694
@@ -823,7 +830,7 @@ static int sh_mmcif_data_trans(struct sh_mmcif_host *host,
823 sh_mmcif_single_read(host, mrq); 830 sh_mmcif_single_read(host, mrq);
824 return 0; 831 return 0;
825 default: 832 default:
826 dev_err(&host->pd->dev, "UNSUPPORTED CMD = d'%08d\n", opc); 833 dev_err(&host->pd->dev, "Unsupported CMD%d\n", opc);
827 return -EINVAL; 834 return -EINVAL;
828 } 835 }
829} 836}
@@ -894,6 +901,7 @@ static void sh_mmcif_request(struct mmc_host *mmc, struct mmc_request *mrq)
894 901
895 spin_lock_irqsave(&host->lock, flags); 902 spin_lock_irqsave(&host->lock, flags);
896 if (host->state != STATE_IDLE) { 903 if (host->state != STATE_IDLE) {
904 dev_dbg(&host->pd->dev, "%s() rejected, state %u\n", __func__, host->state);
897 spin_unlock_irqrestore(&host->lock, flags); 905 spin_unlock_irqrestore(&host->lock, flags);
898 mrq->cmd->error = -EAGAIN; 906 mrq->cmd->error = -EAGAIN;
899 mmc_request_done(mmc, mrq); 907 mmc_request_done(mmc, mrq);
@@ -957,6 +965,7 @@ static void sh_mmcif_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
957 965
958 spin_lock_irqsave(&host->lock, flags); 966 spin_lock_irqsave(&host->lock, flags);
959 if (host->state != STATE_IDLE) { 967 if (host->state != STATE_IDLE) {
968 dev_dbg(&host->pd->dev, "%s() rejected, state %u\n", __func__, host->state);
960 spin_unlock_irqrestore(&host->lock, flags); 969 spin_unlock_irqrestore(&host->lock, flags);
961 return; 970 return;
962 } 971 }
@@ -1042,10 +1051,10 @@ static bool sh_mmcif_end_cmd(struct sh_mmcif_host *host)
1042 break; 1051 break;
1043 default: 1052 default:
1044 cmd->error = sh_mmcif_error_manage(host); 1053 cmd->error = sh_mmcif_error_manage(host);
1045 dev_dbg(&host->pd->dev, "Cmd(d'%d) error %d\n",
1046 cmd->opcode, cmd->error);
1047 break; 1054 break;
1048 } 1055 }
1056 dev_dbg(&host->pd->dev, "CMD%d error %d\n",
1057 cmd->opcode, cmd->error);
1049 host->sd_error = false; 1058 host->sd_error = false;
1050 return false; 1059 return false;
1051 } 1060 }
@@ -1097,8 +1106,11 @@ static bool sh_mmcif_end_cmd(struct sh_mmcif_host *host)
1097 /* Woken up by an error IRQ: abort DMA */ 1106 /* Woken up by an error IRQ: abort DMA */
1098 data->error = sh_mmcif_error_manage(host); 1107 data->error = sh_mmcif_error_manage(host);
1099 } else if (!time) { 1108 } else if (!time) {
1109 dev_err(host->mmc->parent, "DMA timeout!\n");
1100 data->error = -ETIMEDOUT; 1110 data->error = -ETIMEDOUT;
1101 } else if (time < 0) { 1111 } else if (time < 0) {
1112 dev_err(host->mmc->parent,
1113 "wait_for_completion_...() error %ld!\n", time);
1102 data->error = time; 1114 data->error = time;
1103 } 1115 }
1104 sh_mmcif_bitclr(host, MMCIF_CE_BUF_ACC, 1116 sh_mmcif_bitclr(host, MMCIF_CE_BUF_ACC,
@@ -1167,6 +1179,7 @@ static irqreturn_t sh_mmcif_irqt(int irq, void *dev_id)
1167 case MMCIF_WAIT_FOR_STOP: 1179 case MMCIF_WAIT_FOR_STOP:
1168 if (host->sd_error) { 1180 if (host->sd_error) {
1169 mrq->stop->error = sh_mmcif_error_manage(host); 1181 mrq->stop->error = sh_mmcif_error_manage(host);
1182 dev_dbg(&host->pd->dev, "%s(): %d\n", __func__, mrq->stop->error);
1170 break; 1183 break;
1171 } 1184 }
1172 sh_mmcif_get_cmd12response(host, mrq->stop); 1185 sh_mmcif_get_cmd12response(host, mrq->stop);
@@ -1174,8 +1187,10 @@ static irqreturn_t sh_mmcif_irqt(int irq, void *dev_id)
1174 break; 1187 break;
1175 case MMCIF_WAIT_FOR_READ_END: 1188 case MMCIF_WAIT_FOR_READ_END:
1176 case MMCIF_WAIT_FOR_WRITE_END: 1189 case MMCIF_WAIT_FOR_WRITE_END:
1177 if (host->sd_error) 1190 if (host->sd_error) {
1178 mrq->data->error = sh_mmcif_error_manage(host); 1191 mrq->data->error = sh_mmcif_error_manage(host);
1192 dev_dbg(&host->pd->dev, "%s(): %d\n", __func__, mrq->data->error);
1193 }
1179 break; 1194 break;
1180 default: 1195 default:
1181 BUG(); 1196 BUG();
@@ -1292,7 +1307,7 @@ static void mmcif_timeout_work(struct work_struct *work)
1292 /* Don't run after mmc_remove_host() */ 1307 /* Don't run after mmc_remove_host() */
1293 return; 1308 return;
1294 1309
1295 dev_dbg(&host->pd->dev, "Timeout waiting for %u, opcode %u\n", 1310 dev_err(&host->pd->dev, "Timeout waiting for %u on CMD%u\n",
1296 host->wait_for, mrq->cmd->opcode); 1311 host->wait_for, mrq->cmd->opcode);
1297 1312
1298 spin_lock_irqsave(&host->lock, flags); 1313 spin_lock_irqsave(&host->lock, flags);