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 |
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 --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
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(-)