mmc: fsl_esdhc: set Abort command type for CMD12
[oweals/u-boot.git] / drivers / mmc / fsl_esdhc.c
index 1ccc576c347c6f0f669ab35e247641df252ba1eb..ea5f4bf6c0e2fdad333019576a9732e6690f515a 100644 (file)
@@ -105,12 +105,9 @@ static uint esdhc_xfertyp(struct mmc_cmd *cmd, struct mmc_data *data)
        else if (cmd->resp_type & MMC_RSP_PRESENT)
                xfertyp |= XFERTYP_RSPTYP_48;
 
-#if defined(CONFIG_MX53) || defined(CONFIG_PPC_T4240) || \
-       defined(CONFIG_LS102XA) || defined(CONFIG_FSL_LAYERSCAPE) || \
-       defined(CONFIG_PPC_T4160)
        if (cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION)
                xfertyp |= XFERTYP_CMDTYP_ABORT;
-#endif
+
        return XFERTYP_CMD(cmd->cmdidx) | xfertyp;
 }
 
@@ -252,8 +249,15 @@ static int esdhc_setup_data(struct mmc *mmc, struct mmc_data *data)
         * Rounding up to next power of 2
         * => timeout + 13 = log2(mmc->clock/4) + 1
         * => timeout + 13 = fls(mmc->clock/4)
+        *
+        * However, the MMC spec "It is strongly recommended for hosts to
+        * implement more than 500ms timeout value even if the card
+        * indicates the 250ms maximum busy length."  Even the previous
+        * value of 300ms is known to be insufficient for some cards.
+        * So, we use
+        * => timeout + 13 = fls(mmc->clock/2)
         */
-       timeout = fls(mmc->clock/4);
+       timeout = fls(mmc->clock/2);
        timeout -= 13;
 
        if (timeout > 14)