diff mbox series

[1/3] mmc: core: add helper to send STOP

Message ID 20210914182023.8103-2-wsa+renesas@sang-engineering.com (mailing list archive)
State New, archived
Headers show
Series mmc: also abort tuning with CMD12 for SD | expand

Commit Message

Wolfram Sang Sept. 14, 2021, 6:20 p.m. UTC
There was a helper in the block layer already, but we need it in other
parts soon as well. So, make it more generic by adding the 'retries'
parameter and add the helper to mmc_ops.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
---
 drivers/mmc/core/block.c   | 14 +-------------
 drivers/mmc/core/mmc_ops.h | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 13 deletions(-)

Comments

Ulf Hansson Sept. 23, 2021, 11:49 a.m. UTC | #1
On Tue, 14 Sept 2021 at 20:20, Wolfram Sang
<wsa+renesas@sang-engineering.com> wrote:
>
> There was a helper in the block layer already, but we need it in other
> parts soon as well. So, make it more generic by adding the 'retries'
> parameter and add the helper to mmc_ops.
>
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> ---
>  drivers/mmc/core/block.c   | 14 +-------------
>  drivers/mmc/core/mmc_ops.h | 14 ++++++++++++++
>  2 files changed, 15 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
> index 431af5e8be2f..58f1aa5ac33f 100644
> --- a/drivers/mmc/core/block.c
> +++ b/drivers/mmc/core/block.c
> @@ -1642,18 +1642,6 @@ static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq,
>  #define MMC_DATA_RETRIES       2
>  #define MMC_NO_RETRIES         (MMC_MAX_RETRIES + 1)
>
> -static int mmc_blk_send_stop(struct mmc_card *card, unsigned int timeout)
> -{
> -       struct mmc_command cmd = {
> -               .opcode = MMC_STOP_TRANSMISSION,
> -               .flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC,
> -               /* Some hosts wait for busy anyway, so provide a busy timeout */
> -               .busy_timeout = timeout,
> -       };
> -
> -       return mmc_wait_for_cmd(card->host, &cmd, 5);
> -}
> -
>  static int mmc_blk_fix_state(struct mmc_card *card, struct request *req)
>  {
>         struct mmc_queue_req *mqrq = req_to_mmc_queue_req(req);
> @@ -1663,7 +1651,7 @@ static int mmc_blk_fix_state(struct mmc_card *card, struct request *req)
>
>         mmc_retune_hold_now(card->host);
>
> -       mmc_blk_send_stop(card, timeout);
> +       mmc_send_stop(card->host, timeout, 5);
>
>         err = mmc_poll_for_busy(card, timeout, false, MMC_BUSY_IO);
>
> diff --git a/drivers/mmc/core/mmc_ops.h b/drivers/mmc/core/mmc_ops.h
> index ae25ffc2e870..6e9d1b6b9e55 100644
> --- a/drivers/mmc/core/mmc_ops.h
> +++ b/drivers/mmc/core/mmc_ops.h
> @@ -9,6 +9,7 @@
>  #define _MMC_MMC_OPS_H
>
>  #include <linux/types.h>
> +#include <linux/mmc/mmc.h>
>
>  enum mmc_busy_cmd {
>         MMC_BUSY_CMD6,
> @@ -57,5 +58,18 @@ int mmc_cmdq_enable(struct mmc_card *card);
>  int mmc_cmdq_disable(struct mmc_card *card);
>  int mmc_sanitize(struct mmc_card *card, unsigned int timeout_ms);
>
> +static inline int mmc_send_stop(struct mmc_host *host, unsigned int timeout,

Nitpick: Would you mind renaming timeout to timeout_ms, as to clarify its unit.

> +                          unsigned int retries)
> +{
> +       struct mmc_command cmd = {
> +               .opcode = MMC_STOP_TRANSMISSION,
> +               .flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC,
> +               /* Some hosts wait for busy anyway, so provide a busy timeout */
> +               .busy_timeout = timeout,
> +       };
> +
> +       return mmc_wait_for_cmd(host, &cmd, retries);
> +}
> +
>  #endif
>
> --
> 2.30.2
>

Otherwise, this looks good to me!

Kind regards
Uffe
diff mbox series

Patch

diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
index 431af5e8be2f..58f1aa5ac33f 100644
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -1642,18 +1642,6 @@  static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq,
 #define MMC_DATA_RETRIES	2
 #define MMC_NO_RETRIES		(MMC_MAX_RETRIES + 1)
 
-static int mmc_blk_send_stop(struct mmc_card *card, unsigned int timeout)
-{
-	struct mmc_command cmd = {
-		.opcode = MMC_STOP_TRANSMISSION,
-		.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC,
-		/* Some hosts wait for busy anyway, so provide a busy timeout */
-		.busy_timeout = timeout,
-	};
-
-	return mmc_wait_for_cmd(card->host, &cmd, 5);
-}
-
 static int mmc_blk_fix_state(struct mmc_card *card, struct request *req)
 {
 	struct mmc_queue_req *mqrq = req_to_mmc_queue_req(req);
@@ -1663,7 +1651,7 @@  static int mmc_blk_fix_state(struct mmc_card *card, struct request *req)
 
 	mmc_retune_hold_now(card->host);
 
-	mmc_blk_send_stop(card, timeout);
+	mmc_send_stop(card->host, timeout, 5);
 
 	err = mmc_poll_for_busy(card, timeout, false, MMC_BUSY_IO);
 
diff --git a/drivers/mmc/core/mmc_ops.h b/drivers/mmc/core/mmc_ops.h
index ae25ffc2e870..6e9d1b6b9e55 100644
--- a/drivers/mmc/core/mmc_ops.h
+++ b/drivers/mmc/core/mmc_ops.h
@@ -9,6 +9,7 @@ 
 #define _MMC_MMC_OPS_H
 
 #include <linux/types.h>
+#include <linux/mmc/mmc.h>
 
 enum mmc_busy_cmd {
 	MMC_BUSY_CMD6,
@@ -57,5 +58,18 @@  int mmc_cmdq_enable(struct mmc_card *card);
 int mmc_cmdq_disable(struct mmc_card *card);
 int mmc_sanitize(struct mmc_card *card, unsigned int timeout_ms);
 
+static inline int mmc_send_stop(struct mmc_host *host, unsigned int timeout,
+			   unsigned int retries)
+{
+	struct mmc_command cmd = {
+		.opcode = MMC_STOP_TRANSMISSION,
+		.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC,
+		/* Some hosts wait for busy anyway, so provide a busy timeout */
+		.busy_timeout = timeout,
+	};
+
+	return mmc_wait_for_cmd(host, &cmd, retries);
+}
+
 #endif