diff options
| -rw-r--r-- | drivers/mmc/host/s3cmci.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/mmc/host/s3cmci.c b/drivers/mmc/host/s3cmci.c index c6a4d3cadf2b..4db5bd7c0494 100644 --- a/drivers/mmc/host/s3cmci.c +++ b/drivers/mmc/host/s3cmci.c | |||
| @@ -461,9 +461,19 @@ static irqreturn_t s3cmci_irq(int irq, void *dev_id) | |||
| 461 | 461 | ||
| 462 | if (mci_csta & S3C2410_SDICMDSTAT_CRCFAIL) { | 462 | if (mci_csta & S3C2410_SDICMDSTAT_CRCFAIL) { |
| 463 | if (cmd->flags & MMC_RSP_CRC) { | 463 | if (cmd->flags & MMC_RSP_CRC) { |
| 464 | cmd->error = -EILSEQ; | 464 | if (host->mrq->cmd->flags & MMC_RSP_136) { |
| 465 | host->status = "error: bad command crc"; | 465 | dbg(host, dbg_irq, |
| 466 | goto fail_transfer; | 466 | "fixup: ignore CRC fail with long rsp\n"); |
| 467 | } else { | ||
| 468 | /* note, we used to fail the transfer | ||
| 469 | * here, but it seems that this is just | ||
| 470 | * the hardware getting it wrong. | ||
| 471 | * | ||
| 472 | * cmd->error = -EILSEQ; | ||
| 473 | * host->status = "error: bad command crc"; | ||
| 474 | * goto fail_transfer; | ||
| 475 | */ | ||
| 476 | } | ||
| 467 | } | 477 | } |
| 468 | 478 | ||
| 469 | mci_cclear |= S3C2410_SDICMDSTAT_CRCFAIL; | 479 | mci_cclear |= S3C2410_SDICMDSTAT_CRCFAIL; |
