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

Commit 82a1975d authored by Sahitya Tummala's avatar Sahitya Tummala Committed by Veerabhadrarao Badiganti
Browse files

mmc: cmdq: add new crypto_cfg_reset host operation



When encryption/decryption is enabled in CQ mode, the
legacy commands that are sent in HALT state will use
different slot other than slot 0 for crypto configuration
information. The slot that is selected depends on the last
slot that was used when it is in CQ mode.  This is causing
the data of legacy commands to be encrypted/decrypted based
on the wrong slot usage for crypto config details. Hence,
clear the crypto configuration of the slot used in CQ mode
whenever it gets completed.

Change-Id: If573de5025054a10de1dde544aa79022016f65fd
Signed-off-by: default avatarSahitya Tummala <stummala@codeaurora.org>
Signed-off-by: default avatarVeerabhadrarao Badiganti <vbadigan@codeaurora.org>
parent 02b5942e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -787,6 +787,8 @@ static void cmdq_finish_data(struct mmc_host *mmc, unsigned int tag)
			    CMDQ_SEND_STATUS_TRIGGER, CQ_VENDOR_CFG);

	cmdq_runtime_pm_put(cq_host);
	if (cq_host->ops->crypto_cfg_reset)
		cq_host->ops->crypto_cfg_reset(mmc, tag);
	mrq->done(mrq);
}

+1 −0
Original line number Diff line number Diff line
@@ -210,6 +210,7 @@ struct cmdq_host_ops {
	void (*post_cqe_halt)(struct mmc_host *mmc);
	int (*crypto_cfg)(struct mmc_host *mmc, struct mmc_request *mrq,
				u32 slot);
	void (*crypto_cfg_reset)(struct mmc_host *mmc, unsigned int slot);
};

static inline void cmdq_writel(struct cmdq_host *host, u32 val, int reg)
+18 −0
Original line number Diff line number Diff line
@@ -3756,6 +3756,17 @@ static int sdhci_cmdq_crypto_cfg(struct mmc_host *mmc,

	return sdhci_crypto_cfg(host, mrq, slot);
}

static void sdhci_cmdq_crypto_cfg_reset(struct mmc_host *mmc, unsigned int slot)
{
	struct sdhci_host *host = mmc_priv(mmc);

	if (!host->is_crypto_en)
		return;

	if (host->ops->crypto_cfg_reset)
		host->ops->crypto_cfg_reset(host, slot);
}
#else
static void sdhci_cmdq_set_transfer_params(struct mmc_host *mmc)
{
@@ -3801,11 +3812,17 @@ static void sdhci_cmdq_post_cqe_halt(struct mmc_host *mmc)
{

}

static int sdhci_cmdq_crypto_cfg(struct mmc_host *mmc,
		struct mmc_request *mrq, u32 slot)
{
	return 0;
}

static void sdhci_cmdq_crypto_cfg_reset(struct mmc_host *mmc, unsigned int slot)
{

}
#endif

static const struct cmdq_host_ops sdhci_cmdq_ops = {
@@ -3818,6 +3835,7 @@ static const struct cmdq_host_ops sdhci_cmdq_ops = {
	.post_cqe_halt = sdhci_cmdq_post_cqe_halt,
	.set_transfer_params = sdhci_cmdq_set_transfer_params,
	.crypto_cfg	= sdhci_cmdq_crypto_cfg,
	.crypto_cfg_reset	= sdhci_cmdq_crypto_cfg_reset,
};

#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
+1 −0
Original line number Diff line number Diff line
@@ -671,6 +671,7 @@ struct sdhci_ops {
	int	(*crypto_engine_cfg)(struct sdhci_host *host,
				struct mmc_request *mrq, u32 slot);
	int	(*crypto_engine_reset)(struct sdhci_host *host);
	void	(*crypto_cfg_reset)(struct sdhci_host *host, unsigned int slot);
	void	(*set_uhs_signaling)(struct sdhci_host *host, unsigned int uhs);
	void	(*hw_reset)(struct sdhci_host *host);
	void    (*adma_workaround)(struct sdhci_host *host, u32 intmask);