[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220321115059.21803-2-wsa+renesas@sang-engineering.com>
Date: Mon, 21 Mar 2022 12:50:47 +0100
From: Wolfram Sang <wsa+renesas@...g-engineering.com>
To: linux-mmc@...r.kernel.org
Cc: linux-renesas-soc@...r.kernel.org, linux-kernel@...r.kernel.org,
Wolfram Sang <wsa+renesas@...g-engineering.com>,
Ulf Hansson <ulf.hansson@...aro.org>
Subject: [RFC PATCH 01/10] mmc: core: improve API to make clear mmc_hw_reset is for cards
To make it unambiguous that mmc_hw_reset() is for cards and not for
controllers, we a) add 'card' to the function name and b) make the
function argument mmc_card instead of mmc_host. A fallback is provided
until all users are converted.
Signed-off-by: Wolfram Sang <wsa+renesas@...g-engineering.com>
---
drivers/mmc/core/block.c | 2 +-
drivers/mmc/core/core.c | 18 +++++++++++++-----
drivers/mmc/core/mmc_test.c | 3 +--
include/linux/mmc/core.h | 1 +
4 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
index 4e67c1403cc9..74674a4650b0 100644
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -993,7 +993,7 @@ static int mmc_blk_reset(struct mmc_blk_data *md, struct mmc_host *host,
return -EEXIST;
md->reset_done |= type;
- err = mmc_hw_reset(host);
+ err = mmc_card_hw_reset(host->card);
/* Ensure we switch back to the correct partition */
if (err) {
struct mmc_blk_data *main_md =
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 368f10405e13..71e75196bc53 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -1984,7 +1984,8 @@ int mmc_set_blocklen(struct mmc_card *card, unsigned int blocklen)
}
EXPORT_SYMBOL(mmc_set_blocklen);
-static void mmc_hw_reset_for_init(struct mmc_host *host)
+/* we can't use mmc_card as a parameter, it is not populated yet */
+static void mmc_card_hw_reset_for_init(struct mmc_host *host)
{
mmc_pwrseq_reset(host);
@@ -1994,8 +1995,8 @@ static void mmc_hw_reset_for_init(struct mmc_host *host)
}
/**
- * mmc_hw_reset - reset the card in hardware
- * @host: MMC host to which the card is attached
+ * mmc_card_hw_reset - reset the card in hardware
+ * @card: card to be reset
*
* Hard reset the card. This function is only for upper layers, like the
* block layer or card drivers. You cannot use it in host drivers (struct
@@ -2003,8 +2004,9 @@ static void mmc_hw_reset_for_init(struct mmc_host *host)
*
* Return: 0 on success, -errno on failure
*/
-int mmc_hw_reset(struct mmc_host *host)
+int mmc_card_hw_reset(struct mmc_card *card)
{
+ struct mmc_host *host = card->host;
int ret;
ret = host->bus_ops->hw_reset(host);
@@ -2014,6 +2016,12 @@ int mmc_hw_reset(struct mmc_host *host)
return ret;
}
+EXPORT_SYMBOL(mmc_card_hw_reset);
+
+int mmc_hw_reset(struct mmc_host *host)
+{
+ return mmc_card_hw_reset(host->card);
+}
EXPORT_SYMBOL(mmc_hw_reset);
int mmc_sw_reset(struct mmc_host *host)
@@ -2045,7 +2053,7 @@ static int mmc_rescan_try_freq(struct mmc_host *host, unsigned freq)
* Some eMMCs (with VCCQ always on) may not be reset after power up, so
* do a hardware reset if possible.
*/
- mmc_hw_reset_for_init(host);
+ mmc_card_hw_reset_for_init(host);
/*
* sdio_reset sends CMD52 to reset card. Since we do not know
diff --git a/drivers/mmc/core/mmc_test.c b/drivers/mmc/core/mmc_test.c
index e6a2fd2c6d5c..bfcae8f79cbd 100644
--- a/drivers/mmc/core/mmc_test.c
+++ b/drivers/mmc/core/mmc_test.c
@@ -2325,10 +2325,9 @@ static int mmc_test_profile_sglen_r_nonblock_perf(struct mmc_test_card *test)
static int mmc_test_reset(struct mmc_test_card *test)
{
struct mmc_card *card = test->card;
- struct mmc_host *host = card->host;
int err;
- err = mmc_hw_reset(host);
+ err = mmc_card_hw_reset(card);
if (!err) {
/*
* Reset will re-enable the card's command queue, but tests
diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h
index 71101d1ec825..25a7cf69d919 100644
--- a/include/linux/mmc/core.h
+++ b/include/linux/mmc/core.h
@@ -176,6 +176,7 @@ int mmc_wait_for_cmd(struct mmc_host *host, struct mmc_command *cmd,
int retries);
int mmc_hw_reset(struct mmc_host *host);
+int mmc_card_hw_reset(struct mmc_card *card);
int mmc_sw_reset(struct mmc_host *host);
void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card);
--
2.30.2
Powered by blists - more mailing lists