All of lore.kernel.org
 help / color / mirror / Atom feed
From: Shawn Lin <shawn.lin@linux.dev>
To: Ulf Hansson <ulf.hansson@oss.qualcomm.com>,
	linux-mmc@vger.kernel.org, Ulf Hansson <ulfh@kernel.org>
Cc: shawn.lin@linux.dev, Adrian Hunter <adrian.hunter@intel.com>,
	Kamal Dasu <kamal.dasu@broadcom.com>,
	Florian Fainelli <florian.fainelli@broadcom.com>,
	Wolfram Sang <wsa+renesas@sang-engineering.com>,
	Oleksij Rempel <o.rempel@pengutronix.de>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v10 6/6] mmc: core: Add support for resetting an eMMC at system resume
Date: Tue, 27 Oct 2026 23:20:52 +0800	[thread overview]
Message-ID: <d106e4f5-7702-4bc4-ba69-765e2050a28f@linux.dev> (raw)
In-Reply-To: <20261027144051.249211-7-ulf.hansson@oss.qualcomm.com>

在 2026/10/27 星期二 22:40, Ulf Hansson 写道:
> The DT property reset-card-at-resume specifies that we need to make a reset
> of an eMMC card at system resume, assuming it also has stayed powered on
> during system suspend.
> 
> To implement support for this, let's start by parsing for the new DT
> property and set the new bit MMC_CAP2_RESET_AT_RESUME if it's found. Based
> on the property, we must also set MMC_PM_KEEP_POWER in the pm_flags for the
> host, to keep the eMMC powered on during system suspend.
> 
> Finally, to manage the actual reset during system resume, let's extend
> mmc_resume() to support the needed behaviour.
> 

Reviewed-by: Shawn Lin <shawn.lin@rock-chips.com>

> Signed-off-by: Ulf Hansson <ulf.hansson@oss.qualcomm.com>
> ---
>   drivers/mmc/core/host.c  | 10 ++++++++++
>   drivers/mmc/core/mmc.c   |  5 +++++
>   include/linux/mmc/host.h |  1 +
>   3 files changed, 16 insertions(+)
> 
> diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
> index 8e9e61839198..e3daf4026cba 100644
> --- a/drivers/mmc/core/host.c
> +++ b/drivers/mmc/core/host.c
> @@ -48,6 +48,14 @@ static int mmc_host_class_prepare(struct device *dev)
>   	if (host->bus_ops->pre_suspend)
>   		return host->bus_ops->pre_suspend(host);
>   
> +	/*
> +	 * If it's required to make a reset of the card at system resume, this
> +	 * indirectly also means that we must keep the card powered on during
> +	 * system suspend.
> +	 */
> +	if (host->caps2 & MMC_CAP2_RESET_AT_RESUME)
> +		return mmc_set_host_pm_flags(host, MMC_PM_KEEP_POWER);
> +
>   	return 0;
>   }
>   
> @@ -375,6 +383,8 @@ int mmc_of_parse(struct mmc_host *host)
>   		host->pm_caps |= MMC_PM_KEEP_POWER;
>   	if (device_property_read_bool(dev, "wakeup-source"))
>   		host->pm_caps |= MMC_PM_WAKE_SDIO_IRQ;
> +	if (device_property_read_bool(dev, "reset-card-at-resume"))
> +		host->caps2 |= MMC_CAP2_RESET_AT_RESUME;
>   	if (device_property_read_bool(dev, "mmc-ddr-3_3v"))
>   		host->caps |= MMC_CAP_3_3V_DDR;
>   	if (device_property_read_bool(dev, "mmc-ddr-1_8v"))
> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
> index d4bf0f25bd74..908d5cad304b 100644
> --- a/drivers/mmc/core/mmc.c
> +++ b/drivers/mmc/core/mmc.c
> @@ -2315,6 +2315,11 @@ static int mmc_resume(struct mmc_host *host)
>   	}
>   
>   	pm_runtime_enable(&host->card->dev);
> +
> +	if (mmc_card_keep_power(host) &&
> +	    host->caps2 & MMC_CAP2_RESET_AT_RESUME)
> +		_mmc_hw_reset(host);
> +
>   	host->pm_flags &= ~MMC_PM_KEEP_POWER;
>   	return 0;
>   }
> diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
> index 032c018650e0..552873da7987 100644
> --- a/include/linux/mmc/host.h
> +++ b/include/linux/mmc/host.h
> @@ -430,6 +430,7 @@ struct mmc_host {
>   	u32			caps2;		/* More host capabilities */
>   
>   #define MMC_CAP2_BOOTPART_NOACC	(1 << 0)	/* Boot partition no access */
> +#define MMC_CAP2_RESET_AT_RESUME (1 << 1)	/* Reset the card at system resume */
>   #define MMC_CAP2_FULL_PWR_CYCLE	(1 << 2)	/* Can do full power cycle */
>   #define MMC_CAP2_FULL_PWR_CYCLE_IN_SUSPEND (1 << 3) /* Can do full power cycle in suspend */
>   #define MMC_CAP2_HS200_1_8V_SDR	(1 << 5)        /* can support */


  reply	other threads:[~2026-10-27 15:21 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-27 14:40 [PATCH v10 0/6] mmc: core: Keep the card powered across suspend when firmware needs it live Ulf Hansson
2026-10-27 14:40 ` [PATCH v10 1/6] dt-bindings: mmc: Extend keep-power-in-suspend beyond SDIO Ulf Hansson
2026-10-27 15:01   ` Shawn Lin
2026-10-27 19:46     ` Ulf Hansson
2026-10-28  0:36       ` Shawn Lin
2026-10-28 10:43         ` Ulf Hansson
2026-10-28 12:08           ` Shawn Lin
2026-10-27 15:33   ` Krzysztof Kozlowski
2026-10-27 19:48     ` Ulf Hansson
2026-10-27 20:31       ` Kamal Dasu
2026-10-28 10:36         ` Ulf Hansson
2026-10-28 15:46         ` Ulf Hansson
2026-10-27 14:40 ` [PATCH v10 2/6] dt-bindings: mmc: Add reset-card-at-resume property Ulf Hansson
2026-10-27 15:33   ` Krzysztof Kozlowski
2026-10-27 14:40 ` [PATCH v10 3/6] mmc: core: Add option to keep an eMMC powered on at system suspend Ulf Hansson
2026-10-27 15:19   ` Shawn Lin
2026-10-27 14:40 ` [PATCH v10 4/6] mmc: core: Split sdio_set_host_pm_flags() Ulf Hansson
2026-10-27 15:12   ` Shawn Lin
2026-10-27 19:43     ` Ulf Hansson
2026-10-27 14:40 ` [PATCH v10 5/6] mmc: core: Move reset functions for eMMC Ulf Hansson
2026-10-27 15:19   ` Shawn Lin
2026-10-27 14:40 ` [PATCH v10 6/6] mmc: core: Add support for resetting an eMMC at system resume Ulf Hansson
2026-10-27 15:20   ` Shawn Lin [this message]
2026-10-27 20:00     ` Kamal Dasu
2026-10-27 19:53 ` [PATCH v10 0/6] mmc: core: Keep the card powered across suspend when firmware needs it live Kamal Dasu
2026-10-28  9:35   ` Ulf Hansson

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=d106e4f5-7702-4bc4-ba69-765e2050a28f@linux.dev \
    --to=shawn.lin@linux.dev \
    --cc=adrian.hunter@intel.com \
    --cc=florian.fainelli@broadcom.com \
    --cc=kamal.dasu@broadcom.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=o.rempel@pengutronix.de \
    --cc=ulf.hansson@oss.qualcomm.com \
    --cc=ulfh@kernel.org \
    --cc=wsa+renesas@sang-engineering.com \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.