diff mbox

[U-Boot,v3,5/6] MVEBUMMC : CLEAN code

Message ID 1418502936-6158-6-git-send-email-drEagle@doukki.net
State Accepted
Delegated to: Pantelis Antoniou
Headers show

Commit Message

DrEagle Dec. 13, 2014, 8:35 p.m. UTC
Clean mvebu_mmc_send_cmd

Signed-off-by: Gérald Kerma <drEagle@doukki.net>
---
 drivers/mmc/mvebu_mmc.c | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

Comments

Pantelis Antoniou Jan. 5, 2015, 6:30 p.m. UTC | #1
Hi Gérald,

> On Dec 13, 2014, at 22:35 , Gérald Kerma <drEagle@doukki.net> wrote:
> 
> Clean mvebu_mmc_send_cmd
> 
> Signed-off-by: Gérald Kerma <drEagle@doukki.net>
> ---
> 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
diff mbox

Patch

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;
 }