All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] mmc: meson-gx: factor out setting block size
@ 2017-03-27 19:57 ` Heiner Kallweit
  0 siblings, 0 replies; 12+ messages in thread
From: Heiner Kallweit @ 2017-03-27 19:57 UTC (permalink / raw)
  To: Ulf Hansson, Kevin Hilman; +Cc: linux-mmc, linux-amlogic

Factor out setting the block size. This also contributes to reducing
complexity of function meson_mmc_start_cmd.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/mmc/host/meson-gx-mmc.c | 42 ++++++++++++++++++++++++++---------------
 1 file changed, 27 insertions(+), 15 deletions(-)

diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
index f5dd5cc7..0de32008 100644
--- a/drivers/mmc/host/meson-gx-mmc.c
+++ b/drivers/mmc/host/meson-gx-mmc.c
@@ -431,12 +431,36 @@ static void meson_mmc_request_done(struct mmc_host *mmc,
 	mmc_request_done(host->mmc, mrq);
 }
 
+static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)
+{
+	struct meson_host *host = mmc_priv(mmc);
+	u32 cfg, blksz_old;
+
+	cfg = readl(host->regs + SD_EMMC_CFG);
+	blksz_old = FIELD_GET(CFG_BLK_LEN_MASK, cfg);
+
+	if (!is_power_of_2(blksz))
+		dev_err(host->dev, "blksz %u is not a power of 2\n", blksz);
+
+	blksz = ilog2(blksz);
+
+	/* check if block-size matches, if not update */
+	if (blksz == blksz_old)
+		return;
+
+	dev_dbg(host->dev, "%s: update blk_len %d -> %d\n", __func__,
+		blksz_old, blksz);
+
+	cfg &= ~CFG_BLK_LEN_MASK;
+	cfg |= FIELD_PREP(CFG_BLK_LEN_MASK, blksz);
+	writel(cfg, host->regs + SD_EMMC_CFG);
+}
+
 static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
 {
 	struct meson_host *host = mmc_priv(mmc);
 	struct mmc_data *data = cmd->data;
-	u32 cfg, cmd_cfg = 0, cmd_data = 0;
-	u8 blk_len;
+	u32 cmd_cfg = 0, cmd_data = 0;
 	unsigned int xfer_bytes = 0;
 
 	/* Setup descriptors */
@@ -470,19 +494,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
 			cmd_cfg |= CMD_CFG_BLOCK_MODE;
 			cmd_cfg |= FIELD_PREP(CMD_CFG_LENGTH_MASK,
 					      data->blocks);
-
-			/* check if block-size matches, if not update */
-			cfg = readl(host->regs + SD_EMMC_CFG);
-			blk_len = FIELD_GET(CFG_BLK_LEN_MASK, cfg);
-			if (blk_len != ilog2(data->blksz)) {
-				dev_dbg(host->dev, "%s: update blk_len %d -> %d\n",
-					__func__, blk_len,
-					ilog2(data->blksz));
-				blk_len = ilog2(data->blksz);
-				cfg &= ~CFG_BLK_LEN_MASK;
-				cfg |= FIELD_PREP(CFG_BLK_LEN_MASK, blk_len);
-				writel(cfg, host->regs + SD_EMMC_CFG);
-			}
+			meson_mmc_set_blksz(mmc, data->blksz);
 		} else {
 			cmd_cfg |= FIELD_PREP(CMD_CFG_LENGTH_MASK, data->blksz);
 		}
-- 
2.12.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 1/2] mmc: meson-gx: factor out setting block size
@ 2017-03-27 19:57 ` Heiner Kallweit
  0 siblings, 0 replies; 12+ messages in thread
From: Heiner Kallweit @ 2017-03-27 19:57 UTC (permalink / raw)
  To: linus-amlogic

Factor out setting the block size. This also contributes to reducing
complexity of function meson_mmc_start_cmd.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/mmc/host/meson-gx-mmc.c | 42 ++++++++++++++++++++++++++---------------
 1 file changed, 27 insertions(+), 15 deletions(-)

diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
index f5dd5cc7..0de32008 100644
--- a/drivers/mmc/host/meson-gx-mmc.c
+++ b/drivers/mmc/host/meson-gx-mmc.c
@@ -431,12 +431,36 @@ static void meson_mmc_request_done(struct mmc_host *mmc,
 	mmc_request_done(host->mmc, mrq);
 }
 
+static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)
+{
+	struct meson_host *host = mmc_priv(mmc);
+	u32 cfg, blksz_old;
+
+	cfg = readl(host->regs + SD_EMMC_CFG);
+	blksz_old = FIELD_GET(CFG_BLK_LEN_MASK, cfg);
+
+	if (!is_power_of_2(blksz))
+		dev_err(host->dev, "blksz %u is not a power of 2\n", blksz);
+
+	blksz = ilog2(blksz);
+
+	/* check if block-size matches, if not update */
+	if (blksz == blksz_old)
+		return;
+
+	dev_dbg(host->dev, "%s: update blk_len %d -> %d\n", __func__,
+		blksz_old, blksz);
+
+	cfg &= ~CFG_BLK_LEN_MASK;
+	cfg |= FIELD_PREP(CFG_BLK_LEN_MASK, blksz);
+	writel(cfg, host->regs + SD_EMMC_CFG);
+}
+
 static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
 {
 	struct meson_host *host = mmc_priv(mmc);
 	struct mmc_data *data = cmd->data;
-	u32 cfg, cmd_cfg = 0, cmd_data = 0;
-	u8 blk_len;
+	u32 cmd_cfg = 0, cmd_data = 0;
 	unsigned int xfer_bytes = 0;
 
 	/* Setup descriptors */
@@ -470,19 +494,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
 			cmd_cfg |= CMD_CFG_BLOCK_MODE;
 			cmd_cfg |= FIELD_PREP(CMD_CFG_LENGTH_MASK,
 					      data->blocks);
-
-			/* check if block-size matches, if not update */
-			cfg = readl(host->regs + SD_EMMC_CFG);
-			blk_len = FIELD_GET(CFG_BLK_LEN_MASK, cfg);
-			if (blk_len != ilog2(data->blksz)) {
-				dev_dbg(host->dev, "%s: update blk_len %d -> %d\n",
-					__func__, blk_len,
-					ilog2(data->blksz));
-				blk_len = ilog2(data->blksz);
-				cfg &= ~CFG_BLK_LEN_MASK;
-				cfg |= FIELD_PREP(CFG_BLK_LEN_MASK, blk_len);
-				writel(cfg, host->regs + SD_EMMC_CFG);
-			}
+			meson_mmc_set_blksz(mmc, data->blksz);
 		} else {
 			cmd_cfg |= FIELD_PREP(CMD_CFG_LENGTH_MASK, data->blksz);
 		}
-- 
2.12.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/2] mmc: meson-gx: factor out setting response configuration bits
  2017-03-27 19:57 ` Heiner Kallweit
@ 2017-03-27 20:02   ` Heiner Kallweit
  -1 siblings, 0 replies; 12+ messages in thread
From: Heiner Kallweit @ 2017-03-27 20:02 UTC (permalink / raw)
  To: Ulf Hansson, Kevin Hilman; +Cc: linux-mmc, linux-amlogic

Factor out setting the response configuration bits thus further reducing
complexity of function meson_mmc_start_cmd.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/mmc/host/meson-gx-mmc.c | 32 ++++++++++++++++++--------------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
index 0de32008..0036680b 100644
--- a/drivers/mmc/host/meson-gx-mmc.c
+++ b/drivers/mmc/host/meson-gx-mmc.c
@@ -456,6 +456,23 @@ static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)
 	writel(cfg, host->regs + SD_EMMC_CFG);
 }
 
+static void meson_mmc_set_response_bits(struct mmc_command *cmd, u32 *cmd_cfg)
+{
+	if (cmd->flags & MMC_RSP_PRESENT) {
+		if (cmd->flags & MMC_RSP_136)
+			*cmd_cfg |= CMD_CFG_RESP_128;
+		*cmd_cfg |= CMD_CFG_RESP_NUM;
+
+		if (!(cmd->flags & MMC_RSP_CRC))
+			*cmd_cfg |= CMD_CFG_RESP_NOCRC;
+
+		if (cmd->flags & MMC_RSP_BUSY)
+			*cmd_cfg |= CMD_CFG_R1B;
+	} else {
+		*cmd_cfg |= CMD_CFG_NO_RESP;
+	}
+}
+
 static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
 {
 	struct meson_host *host = mmc_priv(mmc);
@@ -469,20 +486,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
 	cmd_cfg |= FIELD_PREP(CMD_CFG_CMD_INDEX_MASK, cmd->opcode);
 	cmd_cfg |= CMD_CFG_OWNER;  /* owned by CPU */
 
-	/* Response */
-	if (cmd->flags & MMC_RSP_PRESENT) {
-		if (cmd->flags & MMC_RSP_136)
-			cmd_cfg |= CMD_CFG_RESP_128;
-		cmd_cfg |= CMD_CFG_RESP_NUM;
-
-		if (!(cmd->flags & MMC_RSP_CRC))
-			cmd_cfg |= CMD_CFG_RESP_NOCRC;
-
-		if (cmd->flags & MMC_RSP_BUSY)
-			cmd_cfg |= CMD_CFG_R1B;
-	} else {
-		cmd_cfg |= CMD_CFG_NO_RESP;
-	}
+	meson_mmc_set_response_bits(cmd, &cmd_cfg);
 
 	/* data? */
 	if (data) {
-- 
2.12.1



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/2] mmc: meson-gx: factor out setting response configuration bits
@ 2017-03-27 20:02   ` Heiner Kallweit
  0 siblings, 0 replies; 12+ messages in thread
From: Heiner Kallweit @ 2017-03-27 20:02 UTC (permalink / raw)
  To: linus-amlogic

Factor out setting the response configuration bits thus further reducing
complexity of function meson_mmc_start_cmd.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/mmc/host/meson-gx-mmc.c | 32 ++++++++++++++++++--------------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
index 0de32008..0036680b 100644
--- a/drivers/mmc/host/meson-gx-mmc.c
+++ b/drivers/mmc/host/meson-gx-mmc.c
@@ -456,6 +456,23 @@ static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)
 	writel(cfg, host->regs + SD_EMMC_CFG);
 }
 
+static void meson_mmc_set_response_bits(struct mmc_command *cmd, u32 *cmd_cfg)
+{
+	if (cmd->flags & MMC_RSP_PRESENT) {
+		if (cmd->flags & MMC_RSP_136)
+			*cmd_cfg |= CMD_CFG_RESP_128;
+		*cmd_cfg |= CMD_CFG_RESP_NUM;
+
+		if (!(cmd->flags & MMC_RSP_CRC))
+			*cmd_cfg |= CMD_CFG_RESP_NOCRC;
+
+		if (cmd->flags & MMC_RSP_BUSY)
+			*cmd_cfg |= CMD_CFG_R1B;
+	} else {
+		*cmd_cfg |= CMD_CFG_NO_RESP;
+	}
+}
+
 static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
 {
 	struct meson_host *host = mmc_priv(mmc);
@@ -469,20 +486,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
 	cmd_cfg |= FIELD_PREP(CMD_CFG_CMD_INDEX_MASK, cmd->opcode);
 	cmd_cfg |= CMD_CFG_OWNER;  /* owned by CPU */
 
-	/* Response */
-	if (cmd->flags & MMC_RSP_PRESENT) {
-		if (cmd->flags & MMC_RSP_136)
-			cmd_cfg |= CMD_CFG_RESP_128;
-		cmd_cfg |= CMD_CFG_RESP_NUM;
-
-		if (!(cmd->flags & MMC_RSP_CRC))
-			cmd_cfg |= CMD_CFG_RESP_NOCRC;
-
-		if (cmd->flags & MMC_RSP_BUSY)
-			cmd_cfg |= CMD_CFG_R1B;
-	} else {
-		cmd_cfg |= CMD_CFG_NO_RESP;
-	}
+	meson_mmc_set_response_bits(cmd, &cmd_cfg);
 
 	/* data? */
 	if (data) {
-- 
2.12.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] mmc: meson-gx: factor out setting block size
  2017-03-27 19:57 ` Heiner Kallweit
@ 2017-03-28 15:04   ` Kevin Hilman
  -1 siblings, 0 replies; 12+ messages in thread
From: Kevin Hilman @ 2017-03-28 15:04 UTC (permalink / raw)
  To: Heiner Kallweit; +Cc: Ulf Hansson, linux-mmc, linux-amlogic

Heiner Kallweit <hkallweit1@gmail.com> writes:

> Factor out setting the block size. This also contributes to reducing
> complexity of function meson_mmc_start_cmd.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>

Reviewed-by: Kevin Hilman <khilman@baylibre.com>

> ---
>  drivers/mmc/host/meson-gx-mmc.c | 42 ++++++++++++++++++++++++++---------------
>  1 file changed, 27 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
> index f5dd5cc7..0de32008 100644
> --- a/drivers/mmc/host/meson-gx-mmc.c
> +++ b/drivers/mmc/host/meson-gx-mmc.c
> @@ -431,12 +431,36 @@ static void meson_mmc_request_done(struct mmc_host *mmc,
>  	mmc_request_done(host->mmc, mrq);
>  }
>  
> +static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)
> +{
> +	struct meson_host *host = mmc_priv(mmc);
> +	u32 cfg, blksz_old;
> +
> +	cfg = readl(host->regs + SD_EMMC_CFG);
> +	blksz_old = FIELD_GET(CFG_BLK_LEN_MASK, cfg);
> +
> +	if (!is_power_of_2(blksz))
> +		dev_err(host->dev, "blksz %u is not a power of 2\n", blksz);
> +
> +	blksz = ilog2(blksz);
> +
> +	/* check if block-size matches, if not update */
> +	if (blksz == blksz_old)
> +		return;
> +
> +	dev_dbg(host->dev, "%s: update blk_len %d -> %d\n", __func__,
> +		blksz_old, blksz);
> +
> +	cfg &= ~CFG_BLK_LEN_MASK;
> +	cfg |= FIELD_PREP(CFG_BLK_LEN_MASK, blksz);
> +	writel(cfg, host->regs + SD_EMMC_CFG);
> +}
> +
>  static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>  {
>  	struct meson_host *host = mmc_priv(mmc);
>  	struct mmc_data *data = cmd->data;
> -	u32 cfg, cmd_cfg = 0, cmd_data = 0;
> -	u8 blk_len;
> +	u32 cmd_cfg = 0, cmd_data = 0;
>  	unsigned int xfer_bytes = 0;
>  
>  	/* Setup descriptors */
> @@ -470,19 +494,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>  			cmd_cfg |= CMD_CFG_BLOCK_MODE;
>  			cmd_cfg |= FIELD_PREP(CMD_CFG_LENGTH_MASK,
>  					      data->blocks);
> -
> -			/* check if block-size matches, if not update */
> -			cfg = readl(host->regs + SD_EMMC_CFG);
> -			blk_len = FIELD_GET(CFG_BLK_LEN_MASK, cfg);
> -			if (blk_len != ilog2(data->blksz)) {
> -				dev_dbg(host->dev, "%s: update blk_len %d -> %d\n",
> -					__func__, blk_len,
> -					ilog2(data->blksz));
> -				blk_len = ilog2(data->blksz);
> -				cfg &= ~CFG_BLK_LEN_MASK;
> -				cfg |= FIELD_PREP(CFG_BLK_LEN_MASK, blk_len);
> -				writel(cfg, host->regs + SD_EMMC_CFG);
> -			}
> +			meson_mmc_set_blksz(mmc, data->blksz);
>  		} else {
>  			cmd_cfg |= FIELD_PREP(CMD_CFG_LENGTH_MASK, data->blksz);
>  		}

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/2] mmc: meson-gx: factor out setting block size
@ 2017-03-28 15:04   ` Kevin Hilman
  0 siblings, 0 replies; 12+ messages in thread
From: Kevin Hilman @ 2017-03-28 15:04 UTC (permalink / raw)
  To: linus-amlogic

Heiner Kallweit <hkallweit1@gmail.com> writes:

> Factor out setting the block size. This also contributes to reducing
> complexity of function meson_mmc_start_cmd.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>

Reviewed-by: Kevin Hilman <khilman@baylibre.com>

> ---
>  drivers/mmc/host/meson-gx-mmc.c | 42 ++++++++++++++++++++++++++---------------
>  1 file changed, 27 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
> index f5dd5cc7..0de32008 100644
> --- a/drivers/mmc/host/meson-gx-mmc.c
> +++ b/drivers/mmc/host/meson-gx-mmc.c
> @@ -431,12 +431,36 @@ static void meson_mmc_request_done(struct mmc_host *mmc,
>  	mmc_request_done(host->mmc, mrq);
>  }
>  
> +static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)
> +{
> +	struct meson_host *host = mmc_priv(mmc);
> +	u32 cfg, blksz_old;
> +
> +	cfg = readl(host->regs + SD_EMMC_CFG);
> +	blksz_old = FIELD_GET(CFG_BLK_LEN_MASK, cfg);
> +
> +	if (!is_power_of_2(blksz))
> +		dev_err(host->dev, "blksz %u is not a power of 2\n", blksz);
> +
> +	blksz = ilog2(blksz);
> +
> +	/* check if block-size matches, if not update */
> +	if (blksz == blksz_old)
> +		return;
> +
> +	dev_dbg(host->dev, "%s: update blk_len %d -> %d\n", __func__,
> +		blksz_old, blksz);
> +
> +	cfg &= ~CFG_BLK_LEN_MASK;
> +	cfg |= FIELD_PREP(CFG_BLK_LEN_MASK, blksz);
> +	writel(cfg, host->regs + SD_EMMC_CFG);
> +}
> +
>  static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>  {
>  	struct meson_host *host = mmc_priv(mmc);
>  	struct mmc_data *data = cmd->data;
> -	u32 cfg, cmd_cfg = 0, cmd_data = 0;
> -	u8 blk_len;
> +	u32 cmd_cfg = 0, cmd_data = 0;
>  	unsigned int xfer_bytes = 0;
>  
>  	/* Setup descriptors */
> @@ -470,19 +494,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>  			cmd_cfg |= CMD_CFG_BLOCK_MODE;
>  			cmd_cfg |= FIELD_PREP(CMD_CFG_LENGTH_MASK,
>  					      data->blocks);
> -
> -			/* check if block-size matches, if not update */
> -			cfg = readl(host->regs + SD_EMMC_CFG);
> -			blk_len = FIELD_GET(CFG_BLK_LEN_MASK, cfg);
> -			if (blk_len != ilog2(data->blksz)) {
> -				dev_dbg(host->dev, "%s: update blk_len %d -> %d\n",
> -					__func__, blk_len,
> -					ilog2(data->blksz));
> -				blk_len = ilog2(data->blksz);
> -				cfg &= ~CFG_BLK_LEN_MASK;
> -				cfg |= FIELD_PREP(CFG_BLK_LEN_MASK, blk_len);
> -				writel(cfg, host->regs + SD_EMMC_CFG);
> -			}
> +			meson_mmc_set_blksz(mmc, data->blksz);
>  		} else {
>  			cmd_cfg |= FIELD_PREP(CMD_CFG_LENGTH_MASK, data->blksz);
>  		}

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/2] mmc: meson-gx: factor out setting response configuration bits
  2017-03-27 20:02   ` Heiner Kallweit
@ 2017-03-28 15:05     ` Kevin Hilman
  -1 siblings, 0 replies; 12+ messages in thread
From: Kevin Hilman @ 2017-03-28 15:05 UTC (permalink / raw)
  To: Heiner Kallweit; +Cc: Ulf Hansson, linux-mmc, linux-amlogic

Heiner Kallweit <hkallweit1@gmail.com> writes:

> Factor out setting the response configuration bits thus further reducing
> complexity of function meson_mmc_start_cmd.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>

Reviewed-by: Kevin Hilman <khilman@baylibre.com>

> ---
>  drivers/mmc/host/meson-gx-mmc.c | 32 ++++++++++++++++++--------------
>  1 file changed, 18 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
> index 0de32008..0036680b 100644
> --- a/drivers/mmc/host/meson-gx-mmc.c
> +++ b/drivers/mmc/host/meson-gx-mmc.c
> @@ -456,6 +456,23 @@ static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)
>  	writel(cfg, host->regs + SD_EMMC_CFG);
>  }
>  
> +static void meson_mmc_set_response_bits(struct mmc_command *cmd, u32 *cmd_cfg)
> +{
> +	if (cmd->flags & MMC_RSP_PRESENT) {
> +		if (cmd->flags & MMC_RSP_136)
> +			*cmd_cfg |= CMD_CFG_RESP_128;
> +		*cmd_cfg |= CMD_CFG_RESP_NUM;
> +
> +		if (!(cmd->flags & MMC_RSP_CRC))
> +			*cmd_cfg |= CMD_CFG_RESP_NOCRC;
> +
> +		if (cmd->flags & MMC_RSP_BUSY)
> +			*cmd_cfg |= CMD_CFG_R1B;
> +	} else {
> +		*cmd_cfg |= CMD_CFG_NO_RESP;
> +	}
> +}
> +
>  static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>  {
>  	struct meson_host *host = mmc_priv(mmc);
> @@ -469,20 +486,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>  	cmd_cfg |= FIELD_PREP(CMD_CFG_CMD_INDEX_MASK, cmd->opcode);
>  	cmd_cfg |= CMD_CFG_OWNER;  /* owned by CPU */
>  
> -	/* Response */
> -	if (cmd->flags & MMC_RSP_PRESENT) {
> -		if (cmd->flags & MMC_RSP_136)
> -			cmd_cfg |= CMD_CFG_RESP_128;
> -		cmd_cfg |= CMD_CFG_RESP_NUM;
> -
> -		if (!(cmd->flags & MMC_RSP_CRC))
> -			cmd_cfg |= CMD_CFG_RESP_NOCRC;
> -
> -		if (cmd->flags & MMC_RSP_BUSY)
> -			cmd_cfg |= CMD_CFG_R1B;
> -	} else {
> -		cmd_cfg |= CMD_CFG_NO_RESP;
> -	}
> +	meson_mmc_set_response_bits(cmd, &cmd_cfg);
>  
>  	/* data? */
>  	if (data) {

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 2/2] mmc: meson-gx: factor out setting response configuration bits
@ 2017-03-28 15:05     ` Kevin Hilman
  0 siblings, 0 replies; 12+ messages in thread
From: Kevin Hilman @ 2017-03-28 15:05 UTC (permalink / raw)
  To: linus-amlogic

Heiner Kallweit <hkallweit1@gmail.com> writes:

> Factor out setting the response configuration bits thus further reducing
> complexity of function meson_mmc_start_cmd.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>

Reviewed-by: Kevin Hilman <khilman@baylibre.com>

> ---
>  drivers/mmc/host/meson-gx-mmc.c | 32 ++++++++++++++++++--------------
>  1 file changed, 18 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
> index 0de32008..0036680b 100644
> --- a/drivers/mmc/host/meson-gx-mmc.c
> +++ b/drivers/mmc/host/meson-gx-mmc.c
> @@ -456,6 +456,23 @@ static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)
>  	writel(cfg, host->regs + SD_EMMC_CFG);
>  }
>  
> +static void meson_mmc_set_response_bits(struct mmc_command *cmd, u32 *cmd_cfg)
> +{
> +	if (cmd->flags & MMC_RSP_PRESENT) {
> +		if (cmd->flags & MMC_RSP_136)
> +			*cmd_cfg |= CMD_CFG_RESP_128;
> +		*cmd_cfg |= CMD_CFG_RESP_NUM;
> +
> +		if (!(cmd->flags & MMC_RSP_CRC))
> +			*cmd_cfg |= CMD_CFG_RESP_NOCRC;
> +
> +		if (cmd->flags & MMC_RSP_BUSY)
> +			*cmd_cfg |= CMD_CFG_R1B;
> +	} else {
> +		*cmd_cfg |= CMD_CFG_NO_RESP;
> +	}
> +}
> +
>  static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>  {
>  	struct meson_host *host = mmc_priv(mmc);
> @@ -469,20 +486,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>  	cmd_cfg |= FIELD_PREP(CMD_CFG_CMD_INDEX_MASK, cmd->opcode);
>  	cmd_cfg |= CMD_CFG_OWNER;  /* owned by CPU */
>  
> -	/* Response */
> -	if (cmd->flags & MMC_RSP_PRESENT) {
> -		if (cmd->flags & MMC_RSP_136)
> -			cmd_cfg |= CMD_CFG_RESP_128;
> -		cmd_cfg |= CMD_CFG_RESP_NUM;
> -
> -		if (!(cmd->flags & MMC_RSP_CRC))
> -			cmd_cfg |= CMD_CFG_RESP_NOCRC;
> -
> -		if (cmd->flags & MMC_RSP_BUSY)
> -			cmd_cfg |= CMD_CFG_R1B;
> -	} else {
> -		cmd_cfg |= CMD_CFG_NO_RESP;
> -	}
> +	meson_mmc_set_response_bits(cmd, &cmd_cfg);
>  
>  	/* data? */
>  	if (data) {

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] mmc: meson-gx: factor out setting block size
  2017-03-27 19:57 ` Heiner Kallweit
@ 2017-03-30 19:31   ` Ulf Hansson
  -1 siblings, 0 replies; 12+ messages in thread
From: Ulf Hansson @ 2017-03-30 19:31 UTC (permalink / raw)
  To: Heiner Kallweit; +Cc: Kevin Hilman, linux-mmc, linux-amlogic

On 27 March 2017 at 21:57, Heiner Kallweit <hkallweit1@gmail.com> wrote:
> Factor out setting the block size. This also contributes to reducing
> complexity of function meson_mmc_start_cmd.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>


Thanks, applied for next!

Kind regards
Uffe


> ---
>  drivers/mmc/host/meson-gx-mmc.c | 42 ++++++++++++++++++++++++++---------------
>  1 file changed, 27 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
> index f5dd5cc7..0de32008 100644
> --- a/drivers/mmc/host/meson-gx-mmc.c
> +++ b/drivers/mmc/host/meson-gx-mmc.c
> @@ -431,12 +431,36 @@ static void meson_mmc_request_done(struct mmc_host *mmc,
>         mmc_request_done(host->mmc, mrq);
>  }
>
> +static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)
> +{
> +       struct meson_host *host = mmc_priv(mmc);
> +       u32 cfg, blksz_old;
> +
> +       cfg = readl(host->regs + SD_EMMC_CFG);
> +       blksz_old = FIELD_GET(CFG_BLK_LEN_MASK, cfg);
> +
> +       if (!is_power_of_2(blksz))
> +               dev_err(host->dev, "blksz %u is not a power of 2\n", blksz);
> +
> +       blksz = ilog2(blksz);
> +
> +       /* check if block-size matches, if not update */
> +       if (blksz == blksz_old)
> +               return;
> +
> +       dev_dbg(host->dev, "%s: update blk_len %d -> %d\n", __func__,
> +               blksz_old, blksz);
> +
> +       cfg &= ~CFG_BLK_LEN_MASK;
> +       cfg |= FIELD_PREP(CFG_BLK_LEN_MASK, blksz);
> +       writel(cfg, host->regs + SD_EMMC_CFG);
> +}
> +
>  static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>  {
>         struct meson_host *host = mmc_priv(mmc);
>         struct mmc_data *data = cmd->data;
> -       u32 cfg, cmd_cfg = 0, cmd_data = 0;
> -       u8 blk_len;
> +       u32 cmd_cfg = 0, cmd_data = 0;
>         unsigned int xfer_bytes = 0;
>
>         /* Setup descriptors */
> @@ -470,19 +494,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>                         cmd_cfg |= CMD_CFG_BLOCK_MODE;
>                         cmd_cfg |= FIELD_PREP(CMD_CFG_LENGTH_MASK,
>                                               data->blocks);
> -
> -                       /* check if block-size matches, if not update */
> -                       cfg = readl(host->regs + SD_EMMC_CFG);
> -                       blk_len = FIELD_GET(CFG_BLK_LEN_MASK, cfg);
> -                       if (blk_len != ilog2(data->blksz)) {
> -                               dev_dbg(host->dev, "%s: update blk_len %d -> %d\n",
> -                                       __func__, blk_len,
> -                                       ilog2(data->blksz));
> -                               blk_len = ilog2(data->blksz);
> -                               cfg &= ~CFG_BLK_LEN_MASK;
> -                               cfg |= FIELD_PREP(CFG_BLK_LEN_MASK, blk_len);
> -                               writel(cfg, host->regs + SD_EMMC_CFG);
> -                       }
> +                       meson_mmc_set_blksz(mmc, data->blksz);
>                 } else {
>                         cmd_cfg |= FIELD_PREP(CMD_CFG_LENGTH_MASK, data->blksz);
>                 }
> --
> 2.12.1
>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/2] mmc: meson-gx: factor out setting block size
@ 2017-03-30 19:31   ` Ulf Hansson
  0 siblings, 0 replies; 12+ messages in thread
From: Ulf Hansson @ 2017-03-30 19:31 UTC (permalink / raw)
  To: linus-amlogic

On 27 March 2017 at 21:57, Heiner Kallweit <hkallweit1@gmail.com> wrote:
> Factor out setting the block size. This also contributes to reducing
> complexity of function meson_mmc_start_cmd.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>


Thanks, applied for next!

Kind regards
Uffe


> ---
>  drivers/mmc/host/meson-gx-mmc.c | 42 ++++++++++++++++++++++++++---------------
>  1 file changed, 27 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
> index f5dd5cc7..0de32008 100644
> --- a/drivers/mmc/host/meson-gx-mmc.c
> +++ b/drivers/mmc/host/meson-gx-mmc.c
> @@ -431,12 +431,36 @@ static void meson_mmc_request_done(struct mmc_host *mmc,
>         mmc_request_done(host->mmc, mrq);
>  }
>
> +static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)
> +{
> +       struct meson_host *host = mmc_priv(mmc);
> +       u32 cfg, blksz_old;
> +
> +       cfg = readl(host->regs + SD_EMMC_CFG);
> +       blksz_old = FIELD_GET(CFG_BLK_LEN_MASK, cfg);
> +
> +       if (!is_power_of_2(blksz))
> +               dev_err(host->dev, "blksz %u is not a power of 2\n", blksz);
> +
> +       blksz = ilog2(blksz);
> +
> +       /* check if block-size matches, if not update */
> +       if (blksz == blksz_old)
> +               return;
> +
> +       dev_dbg(host->dev, "%s: update blk_len %d -> %d\n", __func__,
> +               blksz_old, blksz);
> +
> +       cfg &= ~CFG_BLK_LEN_MASK;
> +       cfg |= FIELD_PREP(CFG_BLK_LEN_MASK, blksz);
> +       writel(cfg, host->regs + SD_EMMC_CFG);
> +}
> +
>  static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>  {
>         struct meson_host *host = mmc_priv(mmc);
>         struct mmc_data *data = cmd->data;
> -       u32 cfg, cmd_cfg = 0, cmd_data = 0;
> -       u8 blk_len;
> +       u32 cmd_cfg = 0, cmd_data = 0;
>         unsigned int xfer_bytes = 0;
>
>         /* Setup descriptors */
> @@ -470,19 +494,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>                         cmd_cfg |= CMD_CFG_BLOCK_MODE;
>                         cmd_cfg |= FIELD_PREP(CMD_CFG_LENGTH_MASK,
>                                               data->blocks);
> -
> -                       /* check if block-size matches, if not update */
> -                       cfg = readl(host->regs + SD_EMMC_CFG);
> -                       blk_len = FIELD_GET(CFG_BLK_LEN_MASK, cfg);
> -                       if (blk_len != ilog2(data->blksz)) {
> -                               dev_dbg(host->dev, "%s: update blk_len %d -> %d\n",
> -                                       __func__, blk_len,
> -                                       ilog2(data->blksz));
> -                               blk_len = ilog2(data->blksz);
> -                               cfg &= ~CFG_BLK_LEN_MASK;
> -                               cfg |= FIELD_PREP(CFG_BLK_LEN_MASK, blk_len);
> -                               writel(cfg, host->regs + SD_EMMC_CFG);
> -                       }
> +                       meson_mmc_set_blksz(mmc, data->blksz);
>                 } else {
>                         cmd_cfg |= FIELD_PREP(CMD_CFG_LENGTH_MASK, data->blksz);
>                 }
> --
> 2.12.1
>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/2] mmc: meson-gx: factor out setting response configuration bits
  2017-03-27 20:02   ` Heiner Kallweit
@ 2017-03-30 19:31     ` Ulf Hansson
  -1 siblings, 0 replies; 12+ messages in thread
From: Ulf Hansson @ 2017-03-30 19:31 UTC (permalink / raw)
  To: Heiner Kallweit; +Cc: Kevin Hilman, linux-mmc, linux-amlogic

On 27 March 2017 at 22:02, Heiner Kallweit <hkallweit1@gmail.com> wrote:
> Factor out setting the response configuration bits thus further reducing
> complexity of function meson_mmc_start_cmd.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>


Thanks, applied for next!

Kind regards
Uffe


> ---
>  drivers/mmc/host/meson-gx-mmc.c | 32 ++++++++++++++++++--------------
>  1 file changed, 18 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
> index 0de32008..0036680b 100644
> --- a/drivers/mmc/host/meson-gx-mmc.c
> +++ b/drivers/mmc/host/meson-gx-mmc.c
> @@ -456,6 +456,23 @@ static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)
>         writel(cfg, host->regs + SD_EMMC_CFG);
>  }
>
> +static void meson_mmc_set_response_bits(struct mmc_command *cmd, u32 *cmd_cfg)
> +{
> +       if (cmd->flags & MMC_RSP_PRESENT) {
> +               if (cmd->flags & MMC_RSP_136)
> +                       *cmd_cfg |= CMD_CFG_RESP_128;
> +               *cmd_cfg |= CMD_CFG_RESP_NUM;
> +
> +               if (!(cmd->flags & MMC_RSP_CRC))
> +                       *cmd_cfg |= CMD_CFG_RESP_NOCRC;
> +
> +               if (cmd->flags & MMC_RSP_BUSY)
> +                       *cmd_cfg |= CMD_CFG_R1B;
> +       } else {
> +               *cmd_cfg |= CMD_CFG_NO_RESP;
> +       }
> +}
> +
>  static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>  {
>         struct meson_host *host = mmc_priv(mmc);
> @@ -469,20 +486,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>         cmd_cfg |= FIELD_PREP(CMD_CFG_CMD_INDEX_MASK, cmd->opcode);
>         cmd_cfg |= CMD_CFG_OWNER;  /* owned by CPU */
>
> -       /* Response */
> -       if (cmd->flags & MMC_RSP_PRESENT) {
> -               if (cmd->flags & MMC_RSP_136)
> -                       cmd_cfg |= CMD_CFG_RESP_128;
> -               cmd_cfg |= CMD_CFG_RESP_NUM;
> -
> -               if (!(cmd->flags & MMC_RSP_CRC))
> -                       cmd_cfg |= CMD_CFG_RESP_NOCRC;
> -
> -               if (cmd->flags & MMC_RSP_BUSY)
> -                       cmd_cfg |= CMD_CFG_R1B;
> -       } else {
> -               cmd_cfg |= CMD_CFG_NO_RESP;
> -       }
> +       meson_mmc_set_response_bits(cmd, &cmd_cfg);
>
>         /* data? */
>         if (data) {
> --
> 2.12.1
>
>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 2/2] mmc: meson-gx: factor out setting response configuration bits
@ 2017-03-30 19:31     ` Ulf Hansson
  0 siblings, 0 replies; 12+ messages in thread
From: Ulf Hansson @ 2017-03-30 19:31 UTC (permalink / raw)
  To: linus-amlogic

On 27 March 2017 at 22:02, Heiner Kallweit <hkallweit1@gmail.com> wrote:
> Factor out setting the response configuration bits thus further reducing
> complexity of function meson_mmc_start_cmd.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>


Thanks, applied for next!

Kind regards
Uffe


> ---
>  drivers/mmc/host/meson-gx-mmc.c | 32 ++++++++++++++++++--------------
>  1 file changed, 18 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
> index 0de32008..0036680b 100644
> --- a/drivers/mmc/host/meson-gx-mmc.c
> +++ b/drivers/mmc/host/meson-gx-mmc.c
> @@ -456,6 +456,23 @@ static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)
>         writel(cfg, host->regs + SD_EMMC_CFG);
>  }
>
> +static void meson_mmc_set_response_bits(struct mmc_command *cmd, u32 *cmd_cfg)
> +{
> +       if (cmd->flags & MMC_RSP_PRESENT) {
> +               if (cmd->flags & MMC_RSP_136)
> +                       *cmd_cfg |= CMD_CFG_RESP_128;
> +               *cmd_cfg |= CMD_CFG_RESP_NUM;
> +
> +               if (!(cmd->flags & MMC_RSP_CRC))
> +                       *cmd_cfg |= CMD_CFG_RESP_NOCRC;
> +
> +               if (cmd->flags & MMC_RSP_BUSY)
> +                       *cmd_cfg |= CMD_CFG_R1B;
> +       } else {
> +               *cmd_cfg |= CMD_CFG_NO_RESP;
> +       }
> +}
> +
>  static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>  {
>         struct meson_host *host = mmc_priv(mmc);
> @@ -469,20 +486,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd)
>         cmd_cfg |= FIELD_PREP(CMD_CFG_CMD_INDEX_MASK, cmd->opcode);
>         cmd_cfg |= CMD_CFG_OWNER;  /* owned by CPU */
>
> -       /* Response */
> -       if (cmd->flags & MMC_RSP_PRESENT) {
> -               if (cmd->flags & MMC_RSP_136)
> -                       cmd_cfg |= CMD_CFG_RESP_128;
> -               cmd_cfg |= CMD_CFG_RESP_NUM;
> -
> -               if (!(cmd->flags & MMC_RSP_CRC))
> -                       cmd_cfg |= CMD_CFG_RESP_NOCRC;
> -
> -               if (cmd->flags & MMC_RSP_BUSY)
> -                       cmd_cfg |= CMD_CFG_R1B;
> -       } else {
> -               cmd_cfg |= CMD_CFG_NO_RESP;
> -       }
> +       meson_mmc_set_response_bits(cmd, &cmd_cfg);
>
>         /* data? */
>         if (data) {
> --
> 2.12.1
>
>

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2017-03-30 19:31 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-27 19:57 [PATCH 1/2] mmc: meson-gx: factor out setting block size Heiner Kallweit
2017-03-27 19:57 ` Heiner Kallweit
2017-03-27 20:02 ` [PATCH 2/2] mmc: meson-gx: factor out setting response configuration bits Heiner Kallweit
2017-03-27 20:02   ` Heiner Kallweit
2017-03-28 15:05   ` Kevin Hilman
2017-03-28 15:05     ` Kevin Hilman
2017-03-30 19:31   ` Ulf Hansson
2017-03-30 19:31     ` Ulf Hansson
2017-03-28 15:04 ` [PATCH 1/2] mmc: meson-gx: factor out setting block size Kevin Hilman
2017-03-28 15:04   ` Kevin Hilman
2017-03-30 19:31 ` Ulf Hansson
2017-03-30 19:31   ` Ulf Hansson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.