LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Jason Lai <jasonlai.genesyslogic@gmail.com>
To: ulf.hansson@linaro.org, adrian.hunter@intel.com
Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org,
ben.chuang@genesyslogic.com.tw, greg.tu@genesyslogic.com.tw,
jason.lai@genesyslogiv.com.tw,
AKASHI Takahiro <takahiro.akashi@linaro.org>
Subject: [RFC PATCH v3.2 12/29] mmc: sdhci-uhs2: add reset function
Date: Thu, 22 Jul 2021 12:01:07 +0800 [thread overview]
Message-ID: <20210722040124.7573-12-jasonlai.genesyslogic@gmail.com> (raw)
In-Reply-To: <20210722040124.7573-1-jasonlai.genesyslogic@gmail.com>
Sdhci_uhs2_reset() does a UHS-II specific reset operation.
Signed-off-by: Ben Chuang <ben.chuang@genesyslogic.com.tw>
Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
---
drivers/mmc/host/sdhci-uhs2.c | 49 +++++++++++++++++++++++++++++++++++
drivers/mmc/host/sdhci-uhs2.h | 1 +
drivers/mmc/host/sdhci.c | 3 ++-
drivers/mmc/host/sdhci.h | 1 +
4 files changed, 53 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/host/sdhci-uhs2.c b/drivers/mmc/host/sdhci-uhs2.c
index 08905ed081fb..e2b9743fe17d 100644
--- a/drivers/mmc/host/sdhci-uhs2.c
+++ b/drivers/mmc/host/sdhci-uhs2.c
@@ -10,6 +10,7 @@
* Author: AKASHI Takahiro <takahiro.akashi@linaro.org>
*/
+#include <linux/delay.h>
#include <linux/module.h>
#include "sdhci.h"
@@ -49,6 +50,54 @@ void sdhci_uhs2_dump_regs(struct sdhci_host *host)
}
EXPORT_SYMBOL_GPL(sdhci_uhs2_dump_regs);
+/*****************************************************************************\
+ * *
+ * Low level functions *
+ * *
+\*****************************************************************************/
+
+/**
+ * sdhci_uhs2_reset - invoke SW reset
+ * @host: SDHCI host
+ * @mask: Control mask
+ *
+ * Invoke SW reset, depending on a bit in @mask and wait for completion.
+ */
+void sdhci_uhs2_reset(struct sdhci_host *host, u16 mask)
+{
+ unsigned long timeout;
+
+ if (!(host->mmc->caps & MMC_CAP_UHS2))
+ return;
+
+ sdhci_writew(host, mask, SDHCI_UHS2_SW_RESET);
+
+ if (mask & SDHCI_UHS2_SW_RESET_FULL) {
+ host->clock = 0;
+ /* Reset-all turns off SD Bus Power */
+ if (host->quirks2 & SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON)
+ sdhci_runtime_pm_bus_off(host);
+ }
+
+ /* Wait max 100 ms */
+ timeout = 10000;
+
+ /* hw clears the bit when it's done */
+ while (sdhci_readw(host, SDHCI_UHS2_SW_RESET) & mask) {
+ if (timeout == 0) {
+ pr_err("%s: %s: Reset 0x%x never completed.\n",
+ __func__, mmc_hostname(host->mmc), (int)mask);
+ pr_err("%s: clean reset bit\n",
+ mmc_hostname(host->mmc));
+ sdhci_writeb(host, 0, SDHCI_UHS2_SW_RESET);
+ return;
+ }
+ timeout--;
+ udelay(10);
+ }
+}
+EXPORT_SYMBOL_GPL(sdhci_uhs2_reset);
+
/*****************************************************************************\
* *
* Driver init/exit *
diff --git a/drivers/mmc/host/sdhci-uhs2.h b/drivers/mmc/host/sdhci-uhs2.h
index b9529d32b58d..7bb7a0d67109 100644
--- a/drivers/mmc/host/sdhci-uhs2.h
+++ b/drivers/mmc/host/sdhci-uhs2.h
@@ -210,5 +210,6 @@
struct sdhci_host;
void sdhci_uhs2_dump_regs(struct sdhci_host *host);
+void sdhci_uhs2_reset(struct sdhci_host *host, u16 mask);
#endif /* __SDHCI_UHS2_H */
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 97e7e04e4614..78db850dc1f3 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -194,13 +194,14 @@ static void sdhci_runtime_pm_bus_on(struct sdhci_host *host)
pm_runtime_get_noresume(mmc_dev(host->mmc));
}
-static void sdhci_runtime_pm_bus_off(struct sdhci_host *host)
+void sdhci_runtime_pm_bus_off(struct sdhci_host *host)
{
if (!host->bus_on)
return;
host->bus_on = false;
pm_runtime_put_noidle(mmc_dev(host->mmc));
}
+EXPORT_SYMBOL_GPL(sdhci_runtime_pm_bus_off);
void sdhci_reset(struct sdhci_host *host, u8 mask)
{
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index d9d7a76cedc1..b9932423db08 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -831,6 +831,7 @@ static inline void sdhci_read_caps(struct sdhci_host *host)
__sdhci_read_caps(host, NULL, NULL, NULL);
}
+void sdhci_runtime_pm_bus_off(struct sdhci_host *host);
u16 sdhci_calc_clk(struct sdhci_host *host, unsigned int clock,
unsigned int *actual_clock);
void sdhci_set_clock(struct sdhci_host *host, unsigned int clock);
--
2.32.0
next prev parent reply other threads:[~2021-07-22 4:02 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-22 4:00 [RFC PATCH v3.2 01/29] mmc: add UHS-II related definitions in public headers Jason Lai
2021-07-22 4:00 ` [RFC PATCH v3.2 02/29] mmc: core: UHS-II support, modify power-up sequence Jason Lai
2021-07-22 4:00 ` [RFC PATCH v3.2 03/29] mmc: core: UHS-II support, skip set_chip_select() Jason Lai
2021-07-22 4:00 ` [RFC PATCH v3.2 04/29] mmc: core: UHS-II support, try to select UHS-II interface Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 05/29] mmc: core: UHS-II support, skip TMODE setup in some cases Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 06/29] mmc: core: UHS-II support, generate UHS-II SD command packet Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 07/29] mmc: core: UHS-II support, set APP_CMD bit if necessary Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 08/29] mmc: sdhci: add a kernel configuration for enabling UHS-II support Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 09/29] mmc: sdhci: add UHS-II related definitions in headers Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 10/29] mmc: sdhci: add UHS-II module Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 11/29] mmc: sdhci-uhs2: dump UHS-II registers Jason Lai
2021-07-22 4:01 ` Jason Lai [this message]
2021-07-22 4:01 ` [RFC PATCH v3.2 13/29] mmc: sdhci-uhs2: add set_power() to support vdd2 Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 14/29] mmc: sdhci-uhs2: skip signal_voltage_switch() Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 15/29] mmc: sdhci-uhs2: add set_timeout() Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 16/29] mmc: sdhci-uhs2: add set_ios() Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 17/29] mmc: sdhci-uhs2: add detect_init() to detect the interface Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 18/29] mmc: sdhci-uhs2: add clock operations Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 19/29] mmc: sdhci-uhs2: add set_reg() to initialise the interface Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 20/29] mmc: sdhci-uhs2: add request() and others Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 21/29] mmc: sdhci-uhs2: add irq() " Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 22/29] mmc: sdhci-uhs2: add add_host() and others to set up the driver Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 23/29] mmc: sdhci-uhs2: add pre-detect_init hook Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 24/29] mmc: core: add post-mmc_attach_sd hook Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 25/29] mmc: sdhci-uhs2: " Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 26/29] mmc: sdhci-pci: add UHS-II support framework Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 27/29] mmc: sdhci-pci-gli: enable UHS-II mode for GL9755 Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 28/29] mmc: Remove duplicate code Jason Lai
2021-07-22 4:01 ` [RFC PATCH v3.2 29/29] mmc: core: Apply Ulf's patch for supporting UHS-II card Jason Lai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210722040124.7573-12-jasonlai.genesyslogic@gmail.com \
--to=jasonlai.genesyslogic@gmail.com \
--cc=adrian.hunter@intel.com \
--cc=ben.chuang@genesyslogic.com.tw \
--cc=greg.tu@genesyslogic.com.tw \
--cc=jason.lai@genesyslogiv.com.tw \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=takahiro.akashi@linaro.org \
--cc=ulf.hansson@linaro.org \
--subject='Re: [RFC PATCH v3.2 12/29] mmc: sdhci-uhs2: add reset function' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).