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

Neeraj Soni <[email protected]> Fri, 31 Jul 2026 15:23:00 +0530
Newsgroups org.kernel.vger.linux-mmc,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel
Message-ID <[email protected]>

On 7/31/2026 12:53 AM, Eric Biggers wrote:
> 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?
>
Ack. Will fix it in v6.
 
> 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().
>
Ack. I will revert the change made around MMC_CAP2_CRYPTO here:
https://lore.kernel.org/linux-mmc/[email protected]/.
and clean this as well in v6.
 
> - Eric
> 
Regards
Neeraj