Signed-off-by: Otavio Salvador <ota...@ossystems.com.br>
---
 drivers/mmc/mxsmmc.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/mmc/mxsmmc.c b/drivers/mmc/mxsmmc.c
index 0a3f0c4..628d609 100644
--- a/drivers/mmc/mxsmmc.c
+++ b/drivers/mmc/mxsmmc.c
@@ -50,6 +50,7 @@ struct mxsmmc_priv {
        uint32_t                buswidth;
        int                     (*mmc_is_wp)(int);
        struct mxs_dma_desc     *desc;
+       int force_pio;
 };
 
 #define        MXSMMC_MAX_TIMEOUT      10000
@@ -184,7 +185,7 @@ mxsmmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, 
struct mmc_data *data)
        if (cmd->resp_type & MMC_RSP_136)       /* It's a 136 bits response */
                ctrl0 |= SSP_CTRL0_LONG_RESP;
 
-       if (data && (data->blocksize * data->blocks < MXSMMC_SMALL_TRANSFER))
+       if (priv->force_pio || (data && (data->blocksize * data->blocks < 
MXSMMC_SMALL_TRANSFER)))
                writel(SSP_CTRL1_DMA_ENABLE, &ssp_regs->hw_ssp_ctrl1_clr);
        else
                writel(SSP_CTRL1_DMA_ENABLE, &ssp_regs->hw_ssp_ctrl1_set);
@@ -287,7 +288,7 @@ mxsmmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, 
struct mmc_data *data)
        if (!data)
                return 0;
 
-       if (data->blocksize * data->blocks < MXSMMC_SMALL_TRANSFER) {
+       if (priv->force_pio || (data->blocksize * data->blocks < 
MXSMMC_SMALL_TRANSFER)) {
                ret = mxsmmc_send_cmd_pio(priv, data);
                if (ret) {
                        printf("MMC%d: Data timeout with command %d "
@@ -385,9 +386,11 @@ int mxsmmc_initialize(bd_t *bis, int id, int (*wp)(int))
 #if defined(CONFIG_MX23)
        const unsigned int mxsmmc_max_id = 2;
        const unsigned int mxsmmc_clk_id = 0;
+       const unsigned int mxsmmc_force_pio = 1;
 #elif defined(CONFIG_MX28)
        const unsigned int mxsmmc_max_id = 4;
        const unsigned int mxsmmc_clk_id = id;
+       const unsigned int mxsmmc_force_pio = 0;
 #endif
 
        if (id >= mxsmmc_max_id)
@@ -417,6 +420,7 @@ int mxsmmc_initialize(bd_t *bis, int id, int (*wp)(int))
        priv->mmc_is_wp = wp;
        priv->id = id;
        priv->regs = mxs_ssp_regs_by_bus(id);
+       priv->force_pio = mxsmmc_force_pio;
 
        sprintf(mmc->name, "MXS MMC");
        mmc->send_cmd = mxsmmc_send_cmd;
-- 
1.8.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to