Re: [PATCH v10 0/6] mmc: core: Keep the card powered across suspend when firmware needs it live

From: Kamal Dasu

Date: Tue Oct 27 2026 - 15:54:10 EST


On Tue, Oct 27, 2026 at 10:41 AM Ulf Hansson
<ulf.hansson@xxxxxxxxxxxxxxxx> wrote:
>
> 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.
>
> Changes in v10:
> - To help out with the implementation I offered my help to try to move
> this forward.
> - The DT patches are good to go so I included them from the previous
> versions.
> - Patch 3 to 6 are new, but based on the work done by Kamal Dasu.
> - This is completely untested from my side, please help to test it.
>
> Kind regards
> Ulf Hansson
>
>
> 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 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 | 9 ++
> drivers/mmc/core/core.h | 1 +
> drivers/mmc/core/host.c | 10 ++
> drivers/mmc/core/mmc.c | 95 ++++++++++++-------
> drivers/mmc/core/sdio_io.c | 7 +-
> include/linux/mmc/host.h | 1 +
> 7 files changed, 92 insertions(+), 41 deletions(-)
>
> --
> 2.43.0
>

Hi Ulf,

Test results for this series on a Broadcom STB board with the Kioxia
016G01 eMMC,
which reproduces the problem during S3 suspend/resume with two DT variables:

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

Changes applied to Kernel: v7.3 + 7.4 merge window (linus/master
d135ab453a74) with this
series, plus the one-line fix I'm sending in reply to patch 6/6
(details in my reply to that patch):
mmc_resume() calls _mmc_hw_reset() without claiming the host, which
triggers WARN_ON(!host->claimed) for every command sent during the
reset. Claiming the host around the reset removes the warnings..

The -EINVAL in the third row comes from mmc_host_class_prepare(), since
MMC_PM_KEEP_POWER is not in pm_caps without keep-power-in-suspend.

In the working case I also checked the md5sum of the first 5 MiB of
/dev/mmcblk1 before and after suspend, and it is unchanged.

With the fix applied:
Tested-by: Kamal Dasu <kamal.dasu@xxxxxxxxxxxx>

Regards

Kamal

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature