Hi Gérald,

> On Dec 13, 2014, at 22:35 , Gérald Kerma <[email protected]> wrote:
> 
> Clean mvebu_mmc_send_cmd
> 
> Signed-off-by: Gérald Kerma <[email protected]>
> ---
> drivers/mmc/mvebu_mmc.c | 40 ++++++++++++++++++++--------------------
> 1 file changed, 20 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
> index 3e08f40..721ebcc 100644
> --- a/drivers/mmc/mvebu_mmc.c
> +++ b/drivers/mmc/mvebu_mmc.c
> @@ -103,16 +103,9 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct 
> mmc_cmd *cmd,
>                     DRIVER_NAME, hw_state, count, (get_timer(0) - (start)));
>       }
> 
> -     /* Set up for a data transfer if we have one */
> -     if (data) {
> -             int err = mvebu_mmc_setup_data(data);
> -
> -             if (err) {
> -                     debug("%s: command DATA error :%x\n",
> -                           DRIVER_NAME, err);
> -                     return err;
> -             }
> -     }
> +     /* Clear status */
> +     mvebu_mmc_write(SDIO_NOR_INTR_STATUS, SDIO_POLL_MASK);
> +     mvebu_mmc_write(SDIO_ERR_INTR_STATUS, SDIO_POLL_MASK);
> 
>       resptype = SDIO_CMD_INDEX(cmd->cmdidx);
> 
> @@ -138,6 +131,14 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct 
> mmc_cmd *cmd,
>       }
> 
>       if (data) {
> +             int err = mvebu_mmc_setup_data(data);
> +
> +             if (err) {
> +                     debug("%s: command DATA error :%x\n",
> +                           DRIVER_NAME, err);
> +                     return err;
> +             }
> +
>               resptype |= SDIO_CMD_DATA_PRESENT | SDIO_CMD_CHECK_DATACRC16;
>               xfertype |= SDIO_XFER_MODE_HW_WR_DATA_EN;
>               if (data->flags & MMC_DATA_READ) {
> @@ -157,15 +158,9 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct 
> mmc_cmd *cmd,
>       /* Setting Xfer mode */
>       mvebu_mmc_write(SDIO_XFER_MODE, xfertype);
> 
> -     mvebu_mmc_write(SDIO_NOR_INTR_STATUS, ~SDIO_NOR_CARD_INT);
> -     mvebu_mmc_write(SDIO_ERR_INTR_STATUS, SDIO_POLL_MASK);
> -
>       /* Sending command */
>       mvebu_mmc_write(SDIO_CMD, resptype);
> 
> -     mvebu_mmc_write(SDIO_NOR_INTR_EN, SDIO_POLL_MASK);
> -     mvebu_mmc_write(SDIO_ERR_INTR_EN, SDIO_POLL_MASK);
> -
>       start = get_timer(0);
> 
>       while (!((mvebu_mmc_read(SDIO_NOR_INTR_STATUS)) & waittype)) {
> @@ -189,10 +184,6 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct 
> mmc_cmd *cmd,
>               }
>       }
> 
> -     if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
> -             (SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
> -             return TIMEOUT;
> -
>       /* Handling response */
>       if (cmd->resp_type & MMC_RSP_136) {
>               uint response[8];
> @@ -225,6 +216,11 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct 
> mmc_cmd *cmd,
>               cmd->response[1] =      ((response[0] & 0xfc00) >> 10);
>               cmd->response[2] =      0;
>               cmd->response[3] =      0;
> +     } else {
> +             cmd->response[0] =      0;
> +             cmd->response[1] =      0;
> +             cmd->response[2] =      0;
> +             cmd->response[3] =      0;
>       }
> 
>       debug("%s: resp[0x%x] ", DRIVER_NAME, cmd->resp_type);
> @@ -234,6 +230,10 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct 
> mmc_cmd *cmd,
>       debug("[0x%x] ", cmd->response[3]);
>       debug("\n");
> 
> +     if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
> +             (SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
> +             return TIMEOUT;
> +
>       return 0;
> }
> 
> -- 
> 2.1.3

Applied, thanks

— Pantelis

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to