Re: [PATCH v5 3/4] mmc: sdhci-msm: Use pm ops instead of macro to restore crypto keys

Eric Biggers <[email protected]> Thu, 30 Jul 2026 12:23:36 -0700
Newsgroups org.kernel.vger.linux-mmc,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel
Message-ID <20260730192336.GE3139@sol>
On Thu, Jul 30, 2026 at 07:38:21PM +0530, Neeraj Soni wrote:
> From: Ram Prakash Gupta <[email protected]>
> 
> Inline Crypto Engine (ICE) keys are lost after hibernation entry and this
> needs to be restored when hibernation exits. ICE keys are re-programmed
> during sdhci_msm_ice_init() but it may not cover cases where the
> hibernation image is already restored.
> 
> Unwrap the pm ops and use directly in driver to add the call to restore
> Inline Crypto Engine (ICE) keys. This ensures that ICE is brought into
> same state as before hibernation.
> 
> Signed-off-by: Ram Prakash Gupta <[email protected]>
> Signed-off-by: Neeraj Soni <[email protected]>
> ---
>  drivers/mmc/host/sdhci-msm.c | 19 ++++++++++++++++++-
>  1 file changed, 18 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
> index 7d71dc6f388d..a4998e74a2bd 100644
> --- a/drivers/mmc/host/sdhci-msm.c
> +++ b/drivers/mmc/host/sdhci-msm.c
> @@ -2986,9 +2986,26 @@ static int sdhci_msm_runtime_resume(struct device *dev)
>  	return ret;
>  }
>  
> +static int sdhci_msm_restore(struct device *dev)
> +{
> +	struct sdhci_host *host = dev_get_drvdata(dev);
> +
> +#ifdef CONFIG_MMC_CRYPTO
> +	if (host->mmc->caps2 & MMC_CAP2_CRYPTO)
> +		blk_crypto_reprogram_all_keys(&host->mmc->crypto_profile);
> +#endif
> +
> +	return pm_runtime_force_resume(dev);
> +}

Is it correct to access the ICE registers before
pm_runtime_force_resume() has run?  Aren't clocks and power still off?

Also, prefer IS_ENABLED() to '#ifdef'.  However, this suggests to me
that we actually should just keep MMC_CAP2_CRYPTO defined to 0 when
!IS_ENABLED(CONFIG_MMC_CRYPTO), as that solves this naturally without
any need for #ifdef or IS_ENABLED().

- Eric