[PATCH v11 0/6] mmc: core: Keep the card powered across suspend when firmware needs it live
From: Kamal Dasu
Date: Fri Oct 30 2026 - 14:16:04 EST
Background: on brcmstb boards with a Kioxia 016G01 eMMC, firmware accesses the
card directly during resume from Suspend-to-DRAM, before the kernel's own
resume path runs, in order to load boot code using hard wired logic that is not
field updatable. The card needs to stay powered and responsive for that access
to succeed, and since it is never power-cycled, it also needs to be reset
before the kernel reuses it after resume.
Ulf's v10 posted patches 3-6 and I'm resending the whole series, as requested.
v10: https://lore.kernel.org/linux-mmc/20261027144051.249211-1-ulf.hansson@xxxxxxxxxxxxxxxx/
Changes in v11:
- Rebased on the mmc tree's next branch.
- Patch 1, 2: Resent by the author to complete the Signed-off-by
chain, with the DT list and maintainers on Cc.
- Patch 3-6: Added my Signed-off-by as the submitter.
- Patch 4: Keep the comment about suspend methods being serialized, by
moving it into mmc_set_host_pm_flags() (Shawn Lin).
- Patch 5: Also split the cache flush out of _mmc_hw_reset() into a new
mmc_hw_reset_recovery(), used for the ->hw_reset() bus op, and renamed the
patch to "Move and split reset functions for eMMC" (Ulf). The flush is
redundant when resetting at system resume, and failed with a timeout,
printing "mmc1: cache flush error -110" on every resume.
- Patch 5: Dropped Shawn's Reviewed-by as the patch changed.
- Patch 6: Claim the host around the card reset in mmc_resume(), as it
sends commands. Without it, WARN_ON(!host->claimed) triggers for every
command sent during the reset.
- Patch 6: Warn while parsing the DT properties when
reset-card-at-resume is set without keep-power-in-suspend (Ulf).
- Patch 6: Dropped Shawn's Reviewed-by as the patch changed.
Tested on a brcmstb board with the Kioxia 016G01 eMMC, using "pml -d"
(S3 suspend/resume):
keep-power-in-suspend reset-card-at-resume Result
--------------------- -------------------- ----------------------------
no no Enters suspend, board resets
at resume
yes no Enters suspend, board resets
at resume
no yes Suspend aborts, -EINVAL
yes yes S3 suspend/resume works
Kamal Dasu (2):
dt-bindings: mmc: Extend keep-power-in-suspend beyond SDIO
dt-bindings: mmc: Add reset-card-at-resume property
Ulf Hansson (4):
mmc: core: Add option to keep an eMMC powered on at system suspend
mmc: core: Split sdio_set_host_pm_flags()
mmc: core: Move and split reset functions for eMMC
mmc: core: Add support for resetting an eMMC at system resume
.../bindings/mmc/mmc-controller-common.yaml | 10 +-
drivers/mmc/core/core.c | 10 ++
drivers/mmc/core/core.h | 1 +
drivers/mmc/core/host.c | 13 +++
drivers/mmc/core/mmc.c | 105 ++++++++++++------
drivers/mmc/core/sdio_io.c | 7 +-
include/linux/mmc/host.h | 1 +
7 files changed, 105 insertions(+), 42 deletions(-)
--
2.34.1