]> git.baikalelectronics.ru Git - kernel.git/commitdiff
mmc: core: Enable re-use of mmc_blk_in_tran_state()
authorUlf Hansson <ulf.hansson@linaro.org>
Tue, 4 Feb 2020 08:54:43 +0000 (09:54 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 24 Mar 2020 13:35:39 +0000 (14:35 +0100)
To allow subsequent changes to re-use the code from the static function
mmc_blk_in_tran_state(), let's move it to a public header. While at it,
let's also rename it to mmc_ready_for_data(), as to try to better describe
its purpose.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Tested-by: Baolin Wang <baolin.wang7@gmail.com>
Tested-by: Ludovic Barre <ludovic.barre@st.com>
Reviewed-by: Ludovic Barre <ludovic.barre@st.com>
Link: https://lore.kernel.org/r/20200204085449.32585-7-ulf.hansson@linaro.org
drivers/mmc/core/block.c
include/linux/mmc/mmc.h

index 55d52fc467580598bd67b33001c145b41788cff2..7634894df853ced2026e442cc2235a28278b0a55 100644 (file)
@@ -441,16 +441,6 @@ out:
        return err;
 }
 
-static inline bool mmc_blk_in_tran_state(u32 status)
-{
-       /*
-        * Some cards mishandle the status bits, so make sure to check both the
-        * busy indication and the card state.
-        */
-       return status & R1_READY_FOR_DATA &&
-              (R1_CURRENT_STATE(status) == R1_STATE_TRAN);
-}
-
 static int card_busy_detect(struct mmc_card *card, unsigned int timeout_ms,
                            u32 *resp_errs)
 {
@@ -482,13 +472,7 @@ static int card_busy_detect(struct mmc_card *card, unsigned int timeout_ms,
                                 __func__, status);
                        return -ETIMEDOUT;
                }
-
-               /*
-                * Some cards mishandle the status bits,
-                * so make sure to check both the busy
-                * indication and the card state.
-                */
-       } while (!mmc_blk_in_tran_state(status));
+       } while (!mmc_ready_for_data(status));
 
        return err;
 }
@@ -1692,7 +1676,7 @@ static void mmc_blk_read_single(struct mmc_queue *mq, struct request *req)
                        goto error_exit;
 
                if (!mmc_host_is_spi(host) &&
-                   !mmc_blk_in_tran_state(status)) {
+                   !mmc_ready_for_data(status)) {
                        err = mmc_blk_fix_state(card, req);
                        if (err)
                                goto error_exit;
@@ -1752,7 +1736,7 @@ static bool mmc_blk_status_error(struct request *req, u32 status)
        return brq->cmd.resp[0]  & CMD_ERRORS    ||
               brq->stop.resp[0] & stop_err_bits ||
               status            & stop_err_bits ||
-              (rq_data_dir(req) == WRITE && !mmc_blk_in_tran_state(status));
+              (rq_data_dir(req) == WRITE && !mmc_ready_for_data(status));
 }
 
 static inline bool mmc_blk_cmd_started(struct mmc_blk_request *brq)
@@ -1814,7 +1798,7 @@ static void mmc_blk_mq_rw_recovery(struct mmc_queue *mq, struct request *req)
 
        /* Try to get back to "tran" state */
        if (!mmc_host_is_spi(mq->card->host) &&
-           (err || !mmc_blk_in_tran_state(status)))
+           (err || !mmc_ready_for_data(status)))
                err = mmc_blk_fix_state(mq->card, req);
 
        /*
index 897a87c4c8275f7187a3e8dd0c1cd070435f0d73..4b85ef05a9066a09b7a59f0a981a653fed59718f 100644 (file)
@@ -161,6 +161,16 @@ static inline bool mmc_op_multi(u32 opcode)
 #define R1_STATE_PRG   7
 #define R1_STATE_DIS   8
 
+static inline bool mmc_ready_for_data(u32 status)
+{
+       /*
+        * Some cards mishandle the status bits, so make sure to check both the
+        * busy indication and the card state.
+        */
+       return status & R1_READY_FOR_DATA &&
+              R1_CURRENT_STATE(status) == R1_STATE_TRAN;
+}
+
 /*
  * MMC/SD in SPI mode reports R1 status always, and R2 for SEND_STATUS
  * R1 is the low order byte; R2 is the next highest byte, when present.