mmc: increase MMC SDHCI read status timeout
authorSteve Rae <steve.rae@raedomain.com>
Wed, 29 Jun 2016 20:42:01 +0000 (13:42 -0700)
committerTom Rini <trini@konsulko.com>
Fri, 1 Jul 2016 21:42:57 +0000 (17:42 -0400)
Otherwise,  ocassionally see errors like this:
  Flashing sparse image at offset 2078720
  Flashing Sparse Image
  sdhci_send_command: Timeout for status update!
  mmc fail to send stop cmd
  write_sparse_image: Write failed, block #2181088 [0]

This does not affect the actual writing speed, which is controlled by
the default value:
  CONFIG_SDHCI_CMD_DEFAULT_TIMEOUT

It only increases the retries when reading:
  SDHCI_INT_STATUS
to avoid the timeout error.

Signed-off-by: Steve Rae <steve.rae@raedomain.com>
Reviewed-by: Stefan Roese <sr@denx.de>
Tested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Tested-by: Jaehoon Chung <jh80.chung@samsung.com>
drivers/mmc/sdhci.c

index 5c71ab8..604f18d 100644 (file)
@@ -127,6 +127,7 @@ static int sdhci_transfer_data(struct sdhci_host *host, struct mmc_data *data,
 #define CONFIG_SDHCI_CMD_MAX_TIMEOUT           3200
 #endif
 #define CONFIG_SDHCI_CMD_DEFAULT_TIMEOUT       100
+#define SDHCI_READ_STATUS_TIMEOUT              1000
 
 static int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
                       struct mmc_data *data)
@@ -243,9 +244,9 @@ static int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
                if (stat & SDHCI_INT_ERROR)
                        break;
        } while (((stat & mask) != mask) &&
-                (get_timer(start) < CONFIG_SDHCI_CMD_DEFAULT_TIMEOUT));
+                (get_timer(start) < SDHCI_READ_STATUS_TIMEOUT));
 
-       if (get_timer(start) >= CONFIG_SDHCI_CMD_DEFAULT_TIMEOUT) {
+       if (get_timer(start) >= SDHCI_READ_STATUS_TIMEOUT) {
                if (host->quirks & SDHCI_QUIRK_BROKEN_R1B)
                        return 0;
                else {