All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards
@ 2021-02-25 17:03 Ulf Hansson
  2021-02-25 17:03 ` [PATCH 1/4] mmc: core: Cleanup printing of speed mode at card insertion Ulf Hansson
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Ulf Hansson @ 2021-02-25 17:03 UTC (permalink / raw)
  To: linux-mmc, Ulf Hansson, Adrian Hunter
  Cc: AKASHI Takahiro, Ben Chuang, greg.tu, Renius Chen,
	Masami Hiramatsu, Takao Orito, linux-kernel

A series [1] that has been collaborative worked upon by Takahiro Akashi
(Linaro) and Ben Chuang (Genesys Logic) is targeting to add SD UHS-II support
to the mmc subsystem.

Throughout the reviews, we realized that the changes affecting the mmc core to
support the UHS-II interface/protocol might not be entirely straightforward to
implement. Especially, I expressed some concerns about the code that manages
power on/off, initialization and power management of a SD UHS-II card.

Therefore, I have posted this small series to try to help to put some of the
foundation in the mmc core in place. Hopefully this can provide some guidance
and an overall structure, of how I think the code could evolve.

More details are available in the commit messages and through comments in the
code, for each path.

Kind regards
Uffe

[1]
https://lkml.org/lkml/2020/11/5/1472


Ulf Hansson (4):
  mmc: core: Cleanup printing of speed mode at card insertion
  mmc: core: Prepare to support SD UHS-II cards
  mmc: core: Announce successful insertion of an SD UHS-II card
  mmc: core: Extend support for mmc regulators with a vqmmc2

 drivers/mmc/core/Makefile    |   2 +-
 drivers/mmc/core/bus.c       |  38 +++--
 drivers/mmc/core/core.c      |  17 ++-
 drivers/mmc/core/core.h      |   1 +
 drivers/mmc/core/host.h      |   5 +
 drivers/mmc/core/regulator.c |  34 +++++
 drivers/mmc/core/sd_uhs2.c   | 289 +++++++++++++++++++++++++++++++++++
 include/linux/mmc/card.h     |   6 +
 include/linux/mmc/host.h     |  30 ++++
 9 files changed, 404 insertions(+), 18 deletions(-)
 create mode 100644 drivers/mmc/core/sd_uhs2.c

-- 
2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/4] mmc: core: Cleanup printing of speed mode at card insertion
  2021-02-25 17:03 [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards Ulf Hansson
@ 2021-02-25 17:03 ` Ulf Hansson
  2021-02-25 17:03 ` [PATCH 2/4] mmc: core: Prepare to support SD UHS-II cards Ulf Hansson
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Ulf Hansson @ 2021-02-25 17:03 UTC (permalink / raw)
  To: linux-mmc, Ulf Hansson, Adrian Hunter
  Cc: AKASHI Takahiro, Ben Chuang, greg.tu, Renius Chen,
	Masami Hiramatsu, Takao Orito, linux-kernel

The current print of the bus speed mode in mmc_add_card() has grown over
the years and is now difficult to parse. Let's clean up the code and also
take the opportunity to properly announce "DDR" for eMMCs as
"high speed DDR", which is according to the eMMC spec.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
---
 drivers/mmc/core/bus.c | 36 ++++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c
index c2e70b757dd1..f4851ec8290c 100644
--- a/drivers/mmc/core/bus.c
+++ b/drivers/mmc/core/bus.c
@@ -311,6 +311,7 @@ int mmc_add_card(struct mmc_card *card)
 {
 	int ret;
 	const char *type;
+	const char *speed_mode = "";
 	const char *uhs_bus_speed_mode = "";
 	static const char *const uhs_speeds[] = {
 		[UHS_SDR12_BUS_SPEED] = "SDR12 ",
@@ -349,27 +350,30 @@ int mmc_add_card(struct mmc_card *card)
 		break;
 	}
 
+	if (mmc_card_hs(card))
+		speed_mode = "high speed ";
+	else if (mmc_card_uhs(card))
+		speed_mode = "ultra high speed ";
+	else if	(mmc_card_ddr52(card))
+		speed_mode = "high speed DDR ";
+	else if (mmc_card_hs200(card))
+		speed_mode = "HS200 ";
+	else if (mmc_card_hs400es(card))
+		speed_mode = "HS400 Enhanced strobe ";
+	else if (mmc_card_hs400(card))
+		speed_mode = "HS400 ";
+
 	if (mmc_card_uhs(card) &&
 		(card->sd_bus_speed < ARRAY_SIZE(uhs_speeds)))
 		uhs_bus_speed_mode = uhs_speeds[card->sd_bus_speed];
 
-	if (mmc_host_is_spi(card->host)) {
-		pr_info("%s: new %s%s%s card on SPI\n",
-			mmc_hostname(card->host),
-			mmc_card_hs(card) ? "high speed " : "",
-			mmc_card_ddr52(card) ? "DDR " : "",
-			type);
-	} else {
-		pr_info("%s: new %s%s%s%s%s%s card at address %04x\n",
-			mmc_hostname(card->host),
-			mmc_card_uhs(card) ? "ultra high speed " :
-			(mmc_card_hs(card) ? "high speed " : ""),
-			mmc_card_hs400(card) ? "HS400 " :
-			(mmc_card_hs200(card) ? "HS200 " : ""),
-			mmc_card_hs400es(card) ? "Enhanced strobe " : "",
-			mmc_card_ddr52(card) ? "DDR " : "",
+	if (mmc_host_is_spi(card->host))
+		pr_info("%s: new %s%s card on SPI\n",
+			mmc_hostname(card->host), speed_mode, type);
+	else
+		pr_info("%s: new %s%s%s card at address %04x\n",
+			mmc_hostname(card->host), speed_mode,
 			uhs_bus_speed_mode, type, card->rca);
-	}
 
 #ifdef CONFIG_DEBUG_FS
 	mmc_add_card_debugfs(card);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 2/4] mmc: core: Prepare to support SD UHS-II cards
  2021-02-25 17:03 [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards Ulf Hansson
  2021-02-25 17:03 ` [PATCH 1/4] mmc: core: Cleanup printing of speed mode at card insertion Ulf Hansson
@ 2021-02-25 17:03 ` Ulf Hansson
  2021-07-02  8:00   ` Jason Lai
  2021-07-02  8:31   ` Ulf Hansson
  2021-02-25 17:03 ` [PATCH 3/4] mmc: core: Announce successful insertion of an SD UHS-II card Ulf Hansson
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 11+ messages in thread
From: Ulf Hansson @ 2021-02-25 17:03 UTC (permalink / raw)
  To: linux-mmc, Ulf Hansson, Adrian Hunter
  Cc: AKASHI Takahiro, Ben Chuang, greg.tu, Renius Chen,
	Masami Hiramatsu, Takao Orito, linux-kernel

The SD UHS-II interface was introduced to the SD spec v4.00 several years
ago. The interface is fundamentally different from an electrical and a
protocol point of view, comparing to the legacy SD interface.

However, the legacy SD protocol is supported through a specific transport
layer (SD-TRAN) defined in the UHS-II addendum of the spec. This allows the
SD card to be managed in a very similar way as a legacy SD card, hence a
lot of code can be re-used to support these new types of cards through the
mmc subsystem.

Moreover, an SD card that supports the UHS-II interface shall also be
backwards compatible with the legacy SD interface, which allows a UHS-II
card to be inserted into a legacy slot. As a matter of fact, this is
already supported by mmc subsystem as of today.

To prepare to add support for UHS-II, this change puts the basic foundation
in the mmc core in place, allowing it to be more easily reviewed before
subsequent changes implements the actual support.

Basically, the approach here adds a new UHS-II bus_ops type and adds a
separate initialization path for the UHS-II card. The intent is to avoid us
from sprinkling the legacy initialization path, but also to simplify
implementation of the UHS-II specific bits.

At this point, there is only one new host ops added to manage the various
ios settings needed for UHS-II. Additional host ops that are needed, are
being added from subsequent changes.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
---
 drivers/mmc/core/Makefile  |   2 +-
 drivers/mmc/core/core.c    |  17 ++-
 drivers/mmc/core/core.h    |   1 +
 drivers/mmc/core/sd_uhs2.c | 289 +++++++++++++++++++++++++++++++++++++
 include/linux/mmc/card.h   |   6 +
 include/linux/mmc/host.h   |  19 +++
 6 files changed, 332 insertions(+), 2 deletions(-)
 create mode 100644 drivers/mmc/core/sd_uhs2.c

diff --git a/drivers/mmc/core/Makefile b/drivers/mmc/core/Makefile
index 6a907736cd7a..10f1c3ca5e4a 100644
--- a/drivers/mmc/core/Makefile
+++ b/drivers/mmc/core/Makefile
@@ -8,7 +8,7 @@ mmc_core-y			:= core.o bus.o host.o \
 				   mmc.o mmc_ops.o sd.o sd_ops.o \
 				   sdio.o sdio_ops.o sdio_bus.o \
 				   sdio_cis.o sdio_io.o sdio_irq.o \
-				   slot-gpio.o regulator.o
+				   slot-gpio.o regulator.o sd_uhs2.o
 mmc_core-$(CONFIG_OF)		+= pwrseq.o
 obj-$(CONFIG_PWRSEQ_SIMPLE)	+= pwrseq_simple.o
 obj-$(CONFIG_PWRSEQ_SD8787)	+= pwrseq_sd8787.o
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 860995eb548b..7f785774f59e 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -2207,6 +2207,18 @@ void mmc_rescan(struct work_struct *work)
 		goto out;
 	}
 
+	/*
+	 * Ideally we should favor initialization of legacy SD cards and defer
+	 * UHS-II enumeration. However, it seems like cards doesn't reliably
+	 * announce their support for UHS-II in the response to the ACMD41,
+	 * while initializing the legacy SD interface. Therefore, let's start
+	 * with UHS-II for now.
+	 */
+	if (!mmc_attach_sd_uhs2(host)) {
+		mmc_release_host(host);
+		goto out;
+	}
+
 	for (i = 0; i < ARRAY_SIZE(freqs); i++) {
 		unsigned int freq = freqs[i];
 		if (freq > host->f_max) {
@@ -2228,10 +2240,13 @@ void mmc_rescan(struct work_struct *work)
 
 void mmc_start_host(struct mmc_host *host)
 {
+	bool power_up = !(host->caps2 &
+			 (MMC_CAP2_NO_PRESCAN_POWERUP | MMC_CAP2_SD_UHS2));
+
 	host->f_init = max(min(freqs[0], host->f_max), host->f_min);
 	host->rescan_disable = 0;
 
-	if (!(host->caps2 & MMC_CAP2_NO_PRESCAN_POWERUP)) {
+	if (power_up) {
 		mmc_claim_host(host);
 		mmc_power_up(host, host->ocr_avail);
 		mmc_release_host(host);
diff --git a/drivers/mmc/core/core.h b/drivers/mmc/core/core.h
index 575ac0257af2..cbbf92b60a8a 100644
--- a/drivers/mmc/core/core.h
+++ b/drivers/mmc/core/core.h
@@ -78,6 +78,7 @@ int mmc_detect_card_removed(struct mmc_host *host);
 int mmc_attach_mmc(struct mmc_host *host);
 int mmc_attach_sd(struct mmc_host *host);
 int mmc_attach_sdio(struct mmc_host *host);
+int mmc_attach_sd_uhs2(struct mmc_host *host);
 
 /* Module parameters */
 extern bool use_spi_crc;
diff --git a/drivers/mmc/core/sd_uhs2.c b/drivers/mmc/core/sd_uhs2.c
new file mode 100644
index 000000000000..800957f74632
--- /dev/null
+++ b/drivers/mmc/core/sd_uhs2.c
@@ -0,0 +1,289 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2021 Linaro Ltd
+ *
+ * Author: Ulf Hansson <ulf.hansson@linaro.org>
+ *
+ * Support for SD UHS-II cards
+ */
+#include <linux/err.h>
+
+#include <linux/mmc/host.h>
+#include <linux/mmc/card.h>
+
+#include "core.h"
+#include "bus.h"
+#include "sd.h"
+#include "mmc_ops.h"
+
+static const unsigned int sd_uhs2_freqs[] = { 52000000, 26000000 };
+
+static int sd_uhs2_set_ios(struct mmc_host *host)
+{
+	struct mmc_ios *ios = &host->ios;
+
+	return host->ops->uhs2_set_ios(host, ios);
+}
+
+static int sd_uhs2_power_up(struct mmc_host *host)
+{
+	host->ios.vdd = fls(host->ocr_avail) - 1;
+	host->ios.clock = host->f_init;
+	host->ios.timing = MMC_TIMING_SD_UHS2;
+	host->ios.power_mode = MMC_POWER_UP;
+
+	return sd_uhs2_set_ios(host);
+}
+
+static void sd_uhs2_power_off(struct mmc_host *host)
+{
+	host->ios.vdd = 0;
+	host->ios.clock = 0;
+	host->ios.timing = MMC_TIMING_LEGACY;
+	host->ios.power_mode = MMC_POWER_OFF;
+
+	sd_uhs2_set_ios(host);
+}
+
+/*
+ * Run the phy initialization sequence, which mainly relies on the UHS-II host
+ * to check that we reach the expected electrical state, between the host and
+ * the card.
+ */
+static int sd_uhs2_phy_init(struct mmc_host *host)
+{
+	return 0;
+}
+
+/*
+ * Do the early initialization of the card, by sending the device init broadcast
+ * command and wait for the process to be completed.
+ */
+static int sd_uhs2_dev_init(struct mmc_host *host)
+{
+	return 0;
+}
+
+/*
+ * Run the enumeration process by sending the enumerate command to the card.
+ * Note that, we currently support only the point to point connection, which
+ * means only one card can be attached per host/slot.
+ */
+static int sd_uhs2_enum(struct mmc_host *host, u32 *node_id)
+{
+	return 0;
+}
+
+/*
+ * Read the UHS-II configuration registers (CFG_REG) of the card, by sending it
+ * commands and by parsing the responses. Store a copy of the relevant data in
+ * card->uhs2_config.
+ */
+static int sd_uhs2_config_read(struct mmc_host *host, struct mmc_card *card)
+{
+	return 0;
+}
+
+/*
+ * Based on the card's and host's UHS-II capabilities, let's update the
+ * configuration of the card and the host. This may also include to move to a
+ * greater speed range/mode. Depending on the updated configuration, we may need
+ * to do a soft reset of the card via sending it a GO_DORMANT_STATE command.
+ *
+ * In the final step, let's check if the card signals "config completion", which
+ * indicates that the card has moved from config state into active state.
+ */
+static int sd_uhs2_config_write(struct mmc_host *host, struct mmc_card *card)
+{
+	return 0;
+}
+
+/*
+ * Initialize the UHS-II card through the SD-TRAN transport layer. This enables
+ * commands/requests to be backwards compatible through the legacy SD protocol.
+ * UHS-II cards has a specific power limit specified for VDD1/VDD2, that should
+ * be set through a legacy CMD6. Note that, the power limit that becomes set,
+ * survives a soft reset through the GO_DORMANT_STATE command.
+ */
+static int sd_uhs2_legacy_init(struct mmc_host *host, struct mmc_card *card)
+{
+	return 0;
+}
+
+/*
+ * Allocate the data structure for the mmc_card and run the UHS-II specific
+ * initialization sequence.
+ */
+static int sd_uhs2_init_card(struct mmc_host *host)
+{
+	struct mmc_card *card;
+	u32 node_id;
+	int err;
+
+	err = sd_uhs2_dev_init(host);
+	if (err)
+		return err;
+
+	err = sd_uhs2_enum(host, &node_id);
+	if (err)
+		return err;
+
+	card = mmc_alloc_card(host, &sd_type);
+	if (IS_ERR(card))
+		return PTR_ERR(card);
+
+	card->uhs2_config.node_id = node_id;
+	card->type = MMC_TYPE_SD;
+
+	err = sd_uhs2_config_read(host, card);
+	if (err)
+		goto err;
+
+	err = sd_uhs2_config_write(host, card);
+	if (err)
+		goto err;
+
+	err = sd_uhs2_legacy_init(host, card);
+	if (err)
+		goto err;
+
+	host->card = card;
+	return 0;
+
+err:
+	mmc_remove_card(card);
+	return err;
+}
+
+static void sd_uhs2_remove(struct mmc_host *host)
+{
+	mmc_remove_card(host->card);
+	host->card = NULL;
+}
+
+static int sd_uhs2_alive(struct mmc_host *host)
+{
+	return mmc_send_status(host->card, NULL);
+}
+
+static void sd_uhs2_detect(struct mmc_host *host)
+{
+	int err;
+
+	mmc_get_card(host->card, NULL);
+	err = _mmc_detect_card_removed(host);
+	mmc_put_card(host->card, NULL);
+
+	if (err) {
+		sd_uhs2_remove(host);
+
+		mmc_claim_host(host);
+		mmc_detach_bus(host);
+		sd_uhs2_power_off(host);
+		mmc_release_host(host);
+	}
+}
+
+static int sd_uhs2_suspend(struct mmc_host *host)
+{
+	return 0;
+}
+
+static int sd_uhs2_resume(struct mmc_host *host)
+{
+	return 0;
+}
+
+static int sd_uhs2_runtime_suspend(struct mmc_host *host)
+{
+	return 0;
+}
+
+static int sd_uhs2_runtime_resume(struct mmc_host *host)
+{
+	return 0;
+}
+
+static int sd_uhs2_shutdown(struct mmc_host *host)
+{
+	return 0;
+}
+
+static int sd_uhs2_hw_reset(struct mmc_host *host)
+{
+	return 0;
+}
+
+static const struct mmc_bus_ops sd_uhs2_ops = {
+	.remove = sd_uhs2_remove,
+	.alive = sd_uhs2_alive,
+	.detect = sd_uhs2_detect,
+	.suspend = sd_uhs2_suspend,
+	.resume = sd_uhs2_resume,
+	.runtime_suspend = sd_uhs2_runtime_suspend,
+	.runtime_resume = sd_uhs2_runtime_resume,
+	.shutdown = sd_uhs2_shutdown,
+	.hw_reset = sd_uhs2_hw_reset,
+};
+
+static int sd_uhs2_attach(struct mmc_host *host)
+{
+	int err;
+
+	err = sd_uhs2_power_up(host);
+	if (err)
+		goto err;
+
+	err = sd_uhs2_phy_init(host);
+	if (err)
+		goto err;
+
+	err = sd_uhs2_init_card(host);
+	if (err)
+		goto err;
+
+	mmc_attach_bus(host, &sd_uhs2_ops);
+
+	mmc_release_host(host);
+
+	err = mmc_add_card(host->card);
+	if (err)
+		goto remove_card;
+
+	mmc_claim_host(host);
+	return 0;
+
+remove_card:
+	mmc_remove_card(host->card);
+	host->card = NULL;
+	mmc_claim_host(host);
+	mmc_detach_bus(host);
+err:
+	sd_uhs2_power_off(host);
+	return err;
+}
+
+int mmc_attach_sd_uhs2(struct mmc_host *host)
+{
+	int i, err = 0;
+
+	if (!(host->caps2 & MMC_CAP2_SD_UHS2))
+		return -EOPNOTSUPP;
+
+	/* Turn off the legacy SD interface before trying with UHS-II. */
+	mmc_power_off(host);
+
+	/*
+	 * Start UHS-II initialization at 52MHz and possibly make a retry at
+	 * 26MHz according to the spec. It's required that the host driver
+	 * validates ios->clock, to set a rate within the correct range.
+	 */
+	for (i = 0; i < ARRAY_SIZE(sd_uhs2_freqs); i++) {
+		host->f_init = sd_uhs2_freqs[i];
+		err = sd_uhs2_attach(host);
+		if (!err)
+			break;
+	}
+
+	return err;
+}
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
index f9ad35dd6012..3f73b446ec2a 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -189,6 +189,11 @@ struct sd_switch_caps {
 #define SD_MAX_CURRENT_800	(1 << SD_SET_CURRENT_LIMIT_800)
 };
 
+struct sd_uhs2_config {
+	u32			node_id;
+	/* TODO: Extend with more register configs. */
+};
+
 struct sdio_cccr {
 	unsigned int		sdio_vsn;
 	unsigned int		sd_vsn;
@@ -290,6 +295,7 @@ struct mmc_card {
 	struct sd_scr		scr;		/* extra SD information */
 	struct sd_ssr		ssr;		/* yet more SD information */
 	struct sd_switch_caps	sw_caps;	/* switch (CMD6) caps */
+	struct sd_uhs2_config	uhs2_config;	/* SD UHS-II config */
 
 	unsigned int		sdio_funcs;	/* number of SDIO functions */
 	atomic_t		sdio_funcs_probed; /* number of probed SDIO funcs */
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index a001ad2f5f23..0a777caaf7f3 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -63,6 +63,7 @@ struct mmc_ios {
 #define MMC_TIMING_MMC_HS400	10
 #define MMC_TIMING_SD_EXP	11
 #define MMC_TIMING_SD_EXP_1_2V	12
+#define MMC_TIMING_SD_UHS2	13
 
 	unsigned char	signal_voltage;		/* signalling voltage (1.8V or 3.3V) */
 
@@ -91,6 +92,10 @@ struct mmc_clk_phase_map {
 	struct mmc_clk_phase phase[MMC_NUM_CLK_PHASES];
 };
 
+struct sd_uhs2_caps {
+	/* TODO: Add UHS-II capabilities for the host. */
+};
+
 struct mmc_host;
 
 struct mmc_host_ops {
@@ -126,6 +131,17 @@ struct mmc_host_ops {
 	 */
 	void	(*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
 
+	/*
+	 * The uhs2_set_ios callback is mandatory to implement for hosts that
+	 * supports the SD UHS-II interface (MMC_CAP2_SD_UHS2), while the
+	 * callback is unused for the other cases. Note that, the struct
+	 * mmc_ios is being re-used for this as well.
+	 *
+	 * Expected return values for the uhs2_set_ios callback are a negative
+	 * errno in case of a failure or zero for success.
+	 */
+	int	(*uhs2_set_ios)(struct mmc_host *host, struct mmc_ios *ios);
+
 	/*
 	 * Return values for the get_ro callback should be:
 	 *   0 for a read/write card
@@ -377,6 +393,7 @@ struct mmc_host {
 				 MMC_CAP2_HS200_1_2V_SDR)
 #define MMC_CAP2_SD_EXP		(1 << 7)	/* SD express via PCIe */
 #define MMC_CAP2_SD_EXP_1_2V	(1 << 8)	/* SD express 1.2V */
+#define MMC_CAP2_SD_UHS2	(1 << 9)	/* SD UHS-II support */
 #define MMC_CAP2_CD_ACTIVE_HIGH	(1 << 10)	/* Card-detect signal active high */
 #define MMC_CAP2_RO_ACTIVE_HIGH	(1 << 11)	/* Write-protect signal active high */
 #define MMC_CAP2_NO_PRESCAN_POWERUP (1 << 14)	/* Don't power up before scan */
@@ -402,6 +419,8 @@ struct mmc_host {
 #define MMC_CAP2_CRYPTO		0
 #endif
 
+	struct sd_uhs2_caps	uhs2_caps;	/* SD UHS-II capabilities */
+
 	int			fixed_drv_type;	/* fixed driver type for non-removable media */
 
 	mmc_pm_flag_t		pm_caps;	/* supported pm features */
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 3/4] mmc: core: Announce successful insertion of an SD UHS-II card
  2021-02-25 17:03 [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards Ulf Hansson
  2021-02-25 17:03 ` [PATCH 1/4] mmc: core: Cleanup printing of speed mode at card insertion Ulf Hansson
  2021-02-25 17:03 ` [PATCH 2/4] mmc: core: Prepare to support SD UHS-II cards Ulf Hansson
@ 2021-02-25 17:03 ` Ulf Hansson
  2021-02-25 17:03 ` [PATCH 4/4] mmc: core: Extend support for mmc regulators with a vqmmc2 Ulf Hansson
  2021-03-31  9:57 ` [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards Ulf Hansson
  4 siblings, 0 replies; 11+ messages in thread
From: Ulf Hansson @ 2021-02-25 17:03 UTC (permalink / raw)
  To: linux-mmc, Ulf Hansson, Adrian Hunter
  Cc: AKASHI Takahiro, Ben Chuang, greg.tu, Renius Chen,
	Masami Hiramatsu, Takao Orito, linux-kernel

To inform the users about SD UHS-II cards, let's extend the print at card
insertion with a "UHS-II" substring. Within this change, it seems
reasonable to convert from using "ultra high speed" into "UHS-I speed", for
the UHS-I type, as it should makes it more clear.

Note that, the new print for UHS-II cards doesn't include the actual
selected speed mode. Instead, this is going to be added from subsequent
change.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
---
 drivers/mmc/core/bus.c  | 4 +++-
 drivers/mmc/core/host.h | 5 +++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c
index f4851ec8290c..887b0b80ac3f 100644
--- a/drivers/mmc/core/bus.c
+++ b/drivers/mmc/core/bus.c
@@ -353,7 +353,9 @@ int mmc_add_card(struct mmc_card *card)
 	if (mmc_card_hs(card))
 		speed_mode = "high speed ";
 	else if (mmc_card_uhs(card))
-		speed_mode = "ultra high speed ";
+		speed_mode = "UHS-I speed ";
+	else if (mmc_card_uhs2(card))
+		speed_mode = "UHS-II speed ";
 	else if	(mmc_card_ddr52(card))
 		speed_mode = "high speed DDR ";
 	else if (mmc_card_hs200(card))
diff --git a/drivers/mmc/core/host.h b/drivers/mmc/core/host.h
index ba407617ed23..76cb024a0868 100644
--- a/drivers/mmc/core/host.h
+++ b/drivers/mmc/core/host.h
@@ -83,5 +83,10 @@ static inline bool mmc_card_sd_express(struct mmc_host *host)
 		host->ios.timing == MMC_TIMING_SD_EXP_1_2V;
 }
 
+static inline bool mmc_card_uhs2(struct mmc_card *card)
+{
+	return card->host->ios.timing == MMC_TIMING_SD_UHS2;
+}
+
 #endif
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 4/4] mmc: core: Extend support for mmc regulators with a vqmmc2
  2021-02-25 17:03 [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards Ulf Hansson
                   ` (2 preceding siblings ...)
  2021-02-25 17:03 ` [PATCH 3/4] mmc: core: Announce successful insertion of an SD UHS-II card Ulf Hansson
@ 2021-02-25 17:03 ` Ulf Hansson
  2021-03-31  9:57 ` [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards Ulf Hansson
  4 siblings, 0 replies; 11+ messages in thread
From: Ulf Hansson @ 2021-02-25 17:03 UTC (permalink / raw)
  To: linux-mmc, Ulf Hansson, Adrian Hunter
  Cc: AKASHI Takahiro, Ben Chuang, greg.tu, Renius Chen,
	Masami Hiramatsu, Takao Orito, linux-kernel

To allow an additional external regulator to be controlled by an mmc host
driver, let's add support for a vqmmc2 regulator to the mmc core.

For an SD UHS-II interface the vqmmc2 regulator may correspond to the so
called vdd2 supply, as described by the SD spec. Initially, only 1.8V is
needed, hence limit the new helper function, mmc_regulator_set_vqmmc2() to
this too.

Note that, to allow for flexibility mmc host drivers need to manage the
enable/disable of the vqmmc2 regulator themselves, while the regulator is
looked up through the common mmc_regulator_get_supply().

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
---
 drivers/mmc/core/regulator.c | 34 ++++++++++++++++++++++++++++++++++
 include/linux/mmc/host.h     | 11 +++++++++++
 2 files changed, 45 insertions(+)

diff --git a/drivers/mmc/core/regulator.c b/drivers/mmc/core/regulator.c
index 609201a467ef..3c189682797c 100644
--- a/drivers/mmc/core/regulator.c
+++ b/drivers/mmc/core/regulator.c
@@ -223,6 +223,33 @@ int mmc_regulator_set_vqmmc(struct mmc_host *mmc, struct mmc_ios *ios)
 }
 EXPORT_SYMBOL_GPL(mmc_regulator_set_vqmmc);
 
+/**
+ * mmc_regulator_set_vqmmc2 - Set vqmmc2 as per the ios->vqmmc2_voltage
+ * @mmc: The mmc host to regulate
+ * @ios: The io bus settings
+ *
+ * Sets a new voltage level for the vqmmc2 regulator, which may correspond to
+ * the vdd2 regulator for an SD UHS-II interface. This function is expected to
+ * be called by mmc host drivers.
+ *
+ * Returns a negative error code on failure, zero if the voltage level was
+ * changed successfully or a positive value if the level didn't need to change.
+ */
+int mmc_regulator_set_vqmmc2(struct mmc_host *mmc, struct mmc_ios *ios)
+{
+	if (IS_ERR(mmc->supply.vqmmc2))
+		return -EINVAL;
+
+	switch (ios->vqmmc2_voltage) {
+	case MMC_VQMMC2_VOLTAGE_180:
+		return mmc_regulator_set_voltage_if_supported(
+			mmc->supply.vqmmc2, 1700000, 1800000, 1950000);
+	default:
+		return -EINVAL;
+	}
+}
+EXPORT_SYMBOL_GPL(mmc_regulator_set_vqmmc2);
+
 #else
 
 static inline int mmc_regulator_get_ocrmask(struct regulator *supply)
@@ -249,6 +276,7 @@ int mmc_regulator_get_supply(struct mmc_host *mmc)
 
 	mmc->supply.vmmc = devm_regulator_get_optional(dev, "vmmc");
 	mmc->supply.vqmmc = devm_regulator_get_optional(dev, "vqmmc");
+	mmc->supply.vqmmc2 = devm_regulator_get_optional(dev, "vqmmc2");
 
 	if (IS_ERR(mmc->supply.vmmc)) {
 		if (PTR_ERR(mmc->supply.vmmc) == -EPROBE_DEFER)
@@ -268,6 +296,12 @@ int mmc_regulator_get_supply(struct mmc_host *mmc)
 		dev_dbg(dev, "No vqmmc regulator found\n");
 	}
 
+	if (IS_ERR(mmc->supply.vqmmc2)) {
+		if (PTR_ERR(mmc->supply.vqmmc2) == -EPROBE_DEFER)
+			return -EPROBE_DEFER;
+		dev_dbg(dev, "No vqmmc2 regulator found\n");
+	}
+
 	return 0;
 }
 EXPORT_SYMBOL_GPL(mmc_regulator_get_supply);
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 0a777caaf7f3..ac9f45e3e203 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -65,6 +65,9 @@ struct mmc_ios {
 #define MMC_TIMING_SD_EXP_1_2V	12
 #define MMC_TIMING_SD_UHS2	13
 
+	unsigned char	vqmmc2_voltage;
+#define MMC_VQMMC2_VOLTAGE_180	0
+
 	unsigned char	signal_voltage;		/* signalling voltage (1.8V or 3.3V) */
 
 #define MMC_SIGNAL_VOLTAGE_330	0
@@ -299,6 +302,7 @@ struct mmc_pwrseq;
 struct mmc_supply {
 	struct regulator *vmmc;		/* Card power supply */
 	struct regulator *vqmmc;	/* Optional Vccq supply */
+	struct regulator *vqmmc2;	/* Optional supply for phy */
 };
 
 struct mmc_ctx {
@@ -579,6 +583,7 @@ int mmc_regulator_set_ocr(struct mmc_host *mmc,
 			struct regulator *supply,
 			unsigned short vdd_bit);
 int mmc_regulator_set_vqmmc(struct mmc_host *mmc, struct mmc_ios *ios);
+int mmc_regulator_set_vqmmc2(struct mmc_host *mmc, struct mmc_ios *ios);
 #else
 static inline int mmc_regulator_set_ocr(struct mmc_host *mmc,
 				 struct regulator *supply,
@@ -592,6 +597,12 @@ static inline int mmc_regulator_set_vqmmc(struct mmc_host *mmc,
 {
 	return -EINVAL;
 }
+
+static inline int mmc_regulator_set_vqmmc2(struct mmc_host *mmc,
+					   struct mmc_ios *ios)
+{
+	return -EINVAL;
+}
 #endif
 
 int mmc_regulator_get_supply(struct mmc_host *mmc);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards
  2021-02-25 17:03 [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards Ulf Hansson
                   ` (3 preceding siblings ...)
  2021-02-25 17:03 ` [PATCH 4/4] mmc: core: Extend support for mmc regulators with a vqmmc2 Ulf Hansson
@ 2021-03-31  9:57 ` Ulf Hansson
  2021-03-31 10:26   ` ReniusChen[陳建宏]
  4 siblings, 1 reply; 11+ messages in thread
From: Ulf Hansson @ 2021-03-31  9:57 UTC (permalink / raw)
  To: Ben Chuang, Renius Chen
  Cc: AKASHI Takahiro, greg.tu, Masami Hiramatsu, Takao Orito,
	Linux Kernel Mailing List, Ulf Hansson, Adrian Hunter, linux-mmc

Hi Ben, Renius,

On Thu, 25 Feb 2021 at 18:04, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>
> A series [1] that has been collaborative worked upon by Takahiro Akashi
> (Linaro) and Ben Chuang (Genesys Logic) is targeting to add SD UHS-II support
> to the mmc subsystem.
>
> Throughout the reviews, we realized that the changes affecting the mmc core to
> support the UHS-II interface/protocol might not be entirely straightforward to
> implement. Especially, I expressed some concerns about the code that manages
> power on/off, initialization and power management of a SD UHS-II card.
>
> Therefore, I have posted this small series to try to help to put some of the
> foundation in the mmc core in place. Hopefully this can provide some guidance
> and an overall structure, of how I think the code could evolve.
>
> More details are available in the commit messages and through comments in the
> code, for each path.
>
> Kind regards
> Uffe

I just wanted to get an update from your side. Did $subject series
help to move things forward?

If there is anything else I can help with, then please ping me.

Kind regards
Uffe

>
> [1]
> https://lkml.org/lkml/2020/11/5/1472
>
>
> Ulf Hansson (4):
>   mmc: core: Cleanup printing of speed mode at card insertion
>   mmc: core: Prepare to support SD UHS-II cards
>   mmc: core: Announce successful insertion of an SD UHS-II card
>   mmc: core: Extend support for mmc regulators with a vqmmc2
>
>  drivers/mmc/core/Makefile    |   2 +-
>  drivers/mmc/core/bus.c       |  38 +++--
>  drivers/mmc/core/core.c      |  17 ++-
>  drivers/mmc/core/core.h      |   1 +
>  drivers/mmc/core/host.h      |   5 +
>  drivers/mmc/core/regulator.c |  34 +++++
>  drivers/mmc/core/sd_uhs2.c   | 289 +++++++++++++++++++++++++++++++++++
>  include/linux/mmc/card.h     |   6 +
>  include/linux/mmc/host.h     |  30 ++++
>  9 files changed, 404 insertions(+), 18 deletions(-)
>  create mode 100644 drivers/mmc/core/sd_uhs2.c
>
> --
> 2.25.1
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* RE: [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards
  2021-03-31  9:57 ` [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards Ulf Hansson
@ 2021-03-31 10:26   ` ReniusChen[陳建宏]
  2021-03-31 10:31     ` Ulf Hansson
  0 siblings, 1 reply; 11+ messages in thread
From: ReniusChen[陳建宏] @ 2021-03-31 10:26 UTC (permalink / raw)
  To: Ulf Hansson
  Cc: AKASHI Takahiro, GregTu[杜啟軒],
	Masami Hiramatsu, Takao Orito, Linux Kernel Mailing List,
	Adrian Hunter, linux-mmc, BenChuang[莊智量],
	Renius Chen

Hi Ulf,


I'm currently trying to take over and refactor the task refer to your series.
And there hasn't been much progress recently because I'm busy with other work.


Regards,

Renius

>-----Original Message-----
>From: Ulf Hansson [mailto:ulf.hansson@linaro.org]
>Sent: Wednesday, March 31, 2021 5:57 PM
>To: BenChuang[莊智量]; Renius Chen
>Cc: AKASHI Takahiro; GregTu[杜啟軒]; Masami Hiramatsu; Takao Orito; Linux
>Kernel Mailing List; Ulf Hansson; Adrian Hunter; linux-mmc
>Subject: Re: [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards
>
>Hi Ben, Renius,
>
>On Thu, 25 Feb 2021 at 18:04, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>>
>> A series [1] that has been collaborative worked upon by Takahiro Akashi
>> (Linaro) and Ben Chuang (Genesys Logic) is targeting to add SD UHS-II support
>> to the mmc subsystem.
>>
>> Throughout the reviews, we realized that the changes affecting the mmc core
>to
>> support the UHS-II interface/protocol might not be entirely straightforward to
>> implement. Especially, I expressed some concerns about the code that
>manages
>> power on/off, initialization and power management of a SD UHS-II card.
>>
>> Therefore, I have posted this small series to try to help to put some of the
>> foundation in the mmc core in place. Hopefully this can provide some
>guidance
>> and an overall structure, of how I think the code could evolve.
>>
>> More details are available in the commit messages and through comments in
>the
>> code, for each path.
>>
>> Kind regards
>> Uffe
>
>I just wanted to get an update from your side. Did $subject series
>help to move things forward?
>
>If there is anything else I can help with, then please ping me.
>
>Kind regards
>Uffe
>
>>
>> [1]
>> https://lkml.org/lkml/2020/11/5/1472
>>
>>
>> Ulf Hansson (4):
>>   mmc: core: Cleanup printing of speed mode at card insertion
>>   mmc: core: Prepare to support SD UHS-II cards
>>   mmc: core: Announce successful insertion of an SD UHS-II card
>>   mmc: core: Extend support for mmc regulators with a vqmmc2
>>
>>  drivers/mmc/core/Makefile    |   2 +-
>>  drivers/mmc/core/bus.c       |  38 +++--
>>  drivers/mmc/core/core.c      |  17 ++-
>>  drivers/mmc/core/core.h      |   1 +
>>  drivers/mmc/core/host.h      |   5 +
>>  drivers/mmc/core/regulator.c |  34 +++++
>>  drivers/mmc/core/sd_uhs2.c   | 289
>+++++++++++++++++++++++++++++++++++
>>  include/linux/mmc/card.h     |   6 +
>>  include/linux/mmc/host.h     |  30 ++++
>>  9 files changed, 404 insertions(+), 18 deletions(-)
>>  create mode 100644 drivers/mmc/core/sd_uhs2.c
>>
>> --
>> 2.25.1
>>
________________________________

Genesys Logic Email Confidentiality Notice:
This mail and any attachments may contain information that is confidential, proprietary, privileged or otherwise protected by law. The mail is intended solely for the named addressee (or a person responsible for delivering it to the addressee). If you are not the intended recipient of this mail, you are not authorized to read, print, copy or disseminate this mail.

If you have received this email in error, please notify us immediately by reply email and immediately delete this message and any attachments from your system. Please be noted that any unauthorized use, dissemination, distribution or copying of this email is strictly prohibited.
________________________________

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards
  2021-03-31 10:26   ` ReniusChen[陳建宏]
@ 2021-03-31 10:31     ` Ulf Hansson
  0 siblings, 0 replies; 11+ messages in thread
From: Ulf Hansson @ 2021-03-31 10:31 UTC (permalink / raw)
  To: ReniusChen[陳建宏]
  Cc: AKASHI Takahiro, GregTu[杜啟軒],
	Masami Hiramatsu, Takao Orito, Linux Kernel Mailing List,
	Adrian Hunter, linux-mmc, BenChuang[莊智量],
	Renius Chen

On Wed, 31 Mar 2021 at 12:26, ReniusChen[陳建宏]
<Renius.Chen@genesyslogic.com.tw> wrote:
>
> Hi Ulf,
>
>
> I'm currently trying to take over and refactor the task refer to your series.
> And there hasn't been much progress recently because I'm busy with other work.

Alright, thanks for sharing the update.

Don't hesitate to ping me if there is anything you need my help on
around the UHS-II support.

[...]

Kind regards
Uffe

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/4] mmc: core: Prepare to support SD UHS-II cards
  2021-02-25 17:03 ` [PATCH 2/4] mmc: core: Prepare to support SD UHS-II cards Ulf Hansson
@ 2021-07-02  8:00   ` Jason Lai
  2021-07-02  8:31   ` Ulf Hansson
  1 sibling, 0 replies; 11+ messages in thread
From: Jason Lai @ 2021-07-02  8:00 UTC (permalink / raw)
  To: linux-mmc, Ulf Hansson; +Cc: Jason Lai, AKASHI Takahiro, Ben Chuang

Hi Ulf,
        You added one bit definition 'MMC_CAP2_SD_UHS2' in struct mmc_host.caps2.
        But there already had a bit definition 'MMC_CAP_UHS2' in struct mmc_host.caps.
                #define MMC_CAP_UHS2    (1 << 26)    /* Host supports UHS2 mode */

        This bit was first appearred in [RFC PATCH V3 01/21] mmc: add UHS-II related definitions in public headers.
        These 2 bits seems to be defined for the same purpose, which one should I use?

kindly regards,
Jason Lai

---
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index a001ad2f5f23..0a777caaf7f3 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -377,6 +393,7 @@ struct mmc_host {
 				 MMC_CAP2_HS200_1_2V_SDR)
 #define MMC_CAP2_SD_EXP		(1 << 7)	/* SD express via PCIe */
 #define MMC_CAP2_SD_EXP_1_2V	(1 << 8)	/* SD express 1.2V */
+#define MMC_CAP2_SD_UHS2	(1 << 9)	/* SD UHS-II support */
 #define MMC_CAP2_CD_ACTIVE_HIGH	(1 << 10)	/* Card-detect signal active high */
 #define MMC_CAP2_RO_ACTIVE_HIGH	(1 << 11)	/* Write-protect signal active high */
 #define MMC_CAP2_NO_PRESCAN_POWERUP (1 << 14)	/* Don't power up before scan */

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/4] mmc: core: Prepare to support SD UHS-II cards
  2021-02-25 17:03 ` [PATCH 2/4] mmc: core: Prepare to support SD UHS-II cards Ulf Hansson
  2021-07-02  8:00   ` Jason Lai
@ 2021-07-02  8:31   ` Ulf Hansson
  1 sibling, 0 replies; 11+ messages in thread
From: Ulf Hansson @ 2021-07-02  8:31 UTC (permalink / raw)
  To: Jason Lai; +Cc: linux-mmc, AKASHI Takahiro, Ben Chuang

On Fri, 2 Jul 2021 at 08:58, Jason Lai <jasonlai.genesyslogic@gmail.com> wrote:
>
> Hi Ulf,
>         You added one bit definition 'MMC_CAP2_SD_UHS2' in struct mmc_host.caps2.
>         But there already had a bit definition 'MMC_CAP_UHS2' in struct mmc_host.caps.
>                 #define MMC_CAP_UHS2    (1 << 26)    /* Host supports UHS2 mode */
>
>         This bit was first appearred in [RFC PATCH V3 01/21] mmc: add UHS-II related definitions in public headers.
>         These 2 bits seems to be defined for the same purpose, which one should I use?

The series that $subject patch is part of isn't based on any other
UHS-II series that has been posted. Its main goal is to put the
foundation in place for the mmc core to support UHS-II, but more
developments are certainly needed on top.

Moreover, Akashi-san posted another version of the series [1] you are
referring to, which should be rebased on top of my series. But that's
not sufficient, as additional changes is needed to make this play, I
suppose you already knew that.

>
> kindly regards,
> Jason Lai

[...]

Kind regards
Uffe

[1]
https://patchwork.kernel.org/project/linux-mmc/cover/20201106022726.19831-1-takahiro.akashi@linaro.org/

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/4] mmc: core: Prepare to support SD UHS-II cards
       [not found]   ` <CAG0XXUH6zVaHGatn6rjMMOzEkkwSdFBseGyGSik8a6cQLJvX2Q@mail.gmail.com>
@ 2021-06-28  2:08     ` Lai Jason
  0 siblings, 0 replies; 11+ messages in thread
From: Lai Jason @ 2021-06-28  2:08 UTC (permalink / raw)
  To: Ulf Hansson, linux-mmc

Hi Ulf,
     In struct mmc_host, there was added a bit definition
'MMC_CAP2_SD_UHS2'(bit 9 of caps2).
     But there was already a definition 'MMC_CAP_UHS2'(bit 26 of caps).
     Do these two bit definitions work for the same purpose?

     By the way, where can I find the 2 source
codes(a/include/linux/mmc/ and b/include/linux/mmc/) which you diff
from.

> > ---
 diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
 index a001ad2f5f23..0a777caaf7f3 100644
 --- a/include/linux/mmc/host.h
 +++ b/include/linux/mmc/host.h

 @@ -377,6 +393,7 @@  struct mmc_host {
   MMC_CAP2_HS200_1_2V_SDR)
  #define MMC_CAP2_SD_EXP (1 << 7) /* SD express via PCIe */
  #define MMC_CAP2_SD_EXP_1_2V (1 << 8) /* SD express 1.2V */
 +#define MMC_CAP2_SD_UHS2 (1 << 9) /* SD UHS-II support */
  #define MMC_CAP2_CD_ACTIVE_HIGH (1 << 10) /* Card-detect signal active high */
  #define MMC_CAP2_RO_ACTIVE_HIGH (1 << 11) /* Write-protect signal
active high */
  #define MMC_CAP2_NO_PRESCAN_POWERUP (1 << 14) /* Don't power up before scan */


 best regards,
 Jason Lai

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-07-02  8:32 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-25 17:03 [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards Ulf Hansson
2021-02-25 17:03 ` [PATCH 1/4] mmc: core: Cleanup printing of speed mode at card insertion Ulf Hansson
2021-02-25 17:03 ` [PATCH 2/4] mmc: core: Prepare to support SD UHS-II cards Ulf Hansson
2021-07-02  8:00   ` Jason Lai
2021-07-02  8:31   ` Ulf Hansson
2021-02-25 17:03 ` [PATCH 3/4] mmc: core: Announce successful insertion of an SD UHS-II card Ulf Hansson
2021-02-25 17:03 ` [PATCH 4/4] mmc: core: Extend support for mmc regulators with a vqmmc2 Ulf Hansson
2021-03-31  9:57 ` [PATCH 0/4] mmc: core: Preparations to support SD UHS-II cards Ulf Hansson
2021-03-31 10:26   ` ReniusChen[陳建宏]
2021-03-31 10:31     ` Ulf Hansson
2021-06-24 16:30 [PATCH] mmc: sdhci: Fix warning message when accessing RPMB in HS400 mode Al Cooper
     [not found] ` <CAG0XXUGrmHY_2koaFTkUH8kozZ8B5Z_eafJMm+92-NP4oSE7yA@mail.gmail.com>
     [not found]   ` <CAG0XXUH6zVaHGatn6rjMMOzEkkwSdFBseGyGSik8a6cQLJvX2Q@mail.gmail.com>
2021-06-28  2:08     ` [PATCH 2/4] mmc: core: Prepare to support SD UHS-II cards Lai Jason

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.