On 2/20/25 07:44, Oleksij Rempel wrote: > Introduce an is_undervoltage parameter to _mmc_suspend() to apply a > short power-off sequence and optionally flush the cache. This refactoring > prepares for undervoltage support in a follow-up patch. > > Signed-off-by: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx> > --- > drivers/mmc/core/mmc.c | 25 ++++++++++++++++--------- > 1 file changed, 16 insertions(+), 9 deletions(-) > > diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c > index 6a23be214543..86b608843232 100644 > --- a/drivers/mmc/core/mmc.c > +++ b/drivers/mmc/core/mmc.c > @@ -2104,20 +2104,27 @@ static int _mmc_flush_cache(struct mmc_host *host) > return err; > } > > -static int _mmc_suspend(struct mmc_host *host, bool is_suspend) > +static int _mmc_suspend(struct mmc_host *host, bool is_suspend, > + bool is_undervoltage) I see, sorry about missing this on 4/6 :/ > { > + unsigned int notify_type; > int err = 0; > - unsigned int notify_type = is_suspend ? EXT_CSD_POWER_OFF_SHORT : > - EXT_CSD_POWER_OFF_LONG; > + > + if (is_undervoltage || is_suspend) > + notify_type = EXT_CSD_POWER_OFF_SHORT; > + else > + notify_type = EXT_CSD_POWER_OFF_LONG; > > mmc_claim_host(host); > > if (mmc_card_suspended(host->card)) > goto out; > > - err = _mmc_flush_cache(host); > - if (err) > - goto out; > + if (is_undervoltage) { > + err = _mmc_flush_cache(host); > + if (err) > + goto out; > + } This is supposed to be !is_undervoltage, isn't it? > > if (mmc_can_poweroff_notify(host->card) && > ((host->caps2 & MMC_CAP2_FULL_PWR_CYCLE) || !is_suspend || > @@ -2144,7 +2151,7 @@ static int mmc_suspend(struct mmc_host *host) > { > int err; > > - err = _mmc_suspend(host, true); > + err = _mmc_suspend(host, true, false); > if (!err) { > pm_runtime_disable(&host->card->dev); > pm_runtime_set_suspended(&host->card->dev); > @@ -2191,7 +2198,7 @@ static int mmc_shutdown(struct mmc_host *host) > err = _mmc_resume(host); > > if (!err) > - err = _mmc_suspend(host, false); > + err = _mmc_suspend(host, false, false); > > return err; > } > @@ -2215,7 +2222,7 @@ static int mmc_runtime_suspend(struct mmc_host *host) > if (!(host->caps & MMC_CAP_AGGRESSIVE_PM)) > return 0; > > - err = _mmc_suspend(host, true); > + err = _mmc_suspend(host, true, false); > if (err) > pr_err("%s: error %d doing aggressive suspend\n", > mmc_hostname(host), err);