Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6c6b97a7 authored by Veerabhadrarao Badiganti's avatar Veerabhadrarao Badiganti
Browse files

mmc: host: sdhci-msm-ice: Support for clearing ice configuration



Adding support for clearing ice configuration.
Once mmc request processing is completed, mmc driver has to
call config_end to ensure key information is cleared by ICE
driver. This call is optional for FDE but required for FBE.

Change-Id: I8c225deda782528a7f220f7d1f81c6240caca1ae
Signed-off-by: default avatarVeerabhadrarao Badiganti <vbadigan@codeaurora.org>
parent f271be43
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -414,6 +414,37 @@ int sdhci_msm_ice_cmdq_cfg(struct sdhci_host *host,
	return 0;
}

int sdhci_msm_ice_cfg_end(struct sdhci_host *host, struct mmc_request *mrq)
{
	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
	struct sdhci_msm_host *msm_host = pltfm_host->priv;
	int err = 0;
	struct request *req;

	if (!host->is_crypto_en)
		return 0;

	if (msm_host->ice.state != SDHCI_MSM_ICE_STATE_ACTIVE) {
		pr_err("%s: ice is in invalid state %d\n",
			mmc_hostname(host->mmc), msm_host->ice.state);
		return -EINVAL;
	}

	req = mrq->req;
	if (req) {
		if (msm_host->ice.vops->config_end) {
			err = msm_host->ice.vops->config_end(req);
			if (err) {
				pr_err("%s: ice config end failed %d\n",
						mmc_hostname(host->mmc), err);
				return err;
			}
		}
	}

	return 0;
}

int sdhci_msm_ice_reset(struct sdhci_host *host)
{
	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+6 −0
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ int sdhci_msm_ice_cfg(struct sdhci_host *host, struct mmc_request *mrq,
			u32 slot);
int sdhci_msm_ice_cmdq_cfg(struct sdhci_host *host,
			struct mmc_request *mrq, u32 slot, u64 *ice_ctx);
int sdhci_msm_ice_cfg_end(struct sdhci_host *host, struct mmc_request *mrq);
int sdhci_msm_ice_reset(struct sdhci_host *host);
int sdhci_msm_ice_resume(struct sdhci_host *host);
int sdhci_msm_ice_suspend(struct sdhci_host *host);
@@ -143,6 +144,11 @@ static inline int sdhci_msm_ice_cmdq_cfg(struct sdhci_host *host,
{
	return 0;
}
static inline int sdhci_msm_ice_cfg_end(struct sdhci_host *host,
			struct mmc_request *mrq)
{
	return 0;
}
inline int sdhci_msm_ice_reset(struct sdhci_host *host)
{
	return 0;
+1 −0
Original line number Diff line number Diff line
@@ -4118,6 +4118,7 @@ static unsigned int sdhci_msm_get_current_limit(struct sdhci_host *host)
static struct sdhci_ops sdhci_msm_ops = {
	.crypto_engine_cfg = sdhci_msm_ice_cfg,
	.crypto_engine_cmdq_cfg = sdhci_msm_ice_cmdq_cfg,
	.crypto_engine_cfg_end = sdhci_msm_ice_cfg_end,
	.crypto_cfg_reset = sdhci_msm_ice_cfg_reset,
	.crypto_engine_reset = sdhci_msm_ice_reset,
	.set_uhs_signaling = sdhci_msm_set_uhs_signaling,