OSDN Git Service

mmc: cmdq_hci: Add Inline Crypto Engine (ICE) support
authorSahitya Tummala <stummala@codeaurora.org>
Wed, 6 May 2015 05:11:16 +0000 (10:41 +0530)
committerSubhash Jadavani <subhashj@codeaurora.org>
Tue, 31 May 2016 22:26:36 +0000 (15:26 -0700)
Add changes to configure ICE for data encryption/decryption
using CMDQ.

Change-Id: I9a10d18d617102916526e994e9f9d22d2aa5446b
Signed-off-by: Sahitya Tummala <stummala@codeaurora.org>
drivers/mmc/host/cmdq_hci.c
drivers/mmc/host/cmdq_hci.h
drivers/mmc/host/sdhci.c

index 8a48d73..00a065c 100644 (file)
@@ -557,6 +557,15 @@ static int cmdq_request(struct mmc_host *mmc, struct mmc_request *mrq)
                return 0;
        }
 
+       if (cq_host->ops->crypto_cfg) {
+               err = cq_host->ops->crypto_cfg(mmc, mrq, tag);
+               if (err) {
+                       pr_err("%s: failed to configure crypto: err %d tag %d\n",
+                                       mmc_hostname(mmc), err, tag);
+                       goto out;
+               }
+       }
+
        task_desc = (__le64 __force *)get_desc(cq_host, tag);
 
        cmdq_prep_task_desc(mrq, &data, 1,
index 6786b38..05c622c 100644 (file)
@@ -199,6 +199,8 @@ struct cmdq_host_ops {
        u32 (*read_l)(struct cmdq_host *host, int reg);
        void (*clear_set_dumpregs)(struct mmc_host *mmc, bool set);
        int (*reset)(struct mmc_host *mmc);
+       int (*crypto_cfg)(struct mmc_host *mmc, struct mmc_request *mrq,
+                               u32 slot);
 };
 
 static inline void cmdq_writel(struct cmdq_host *host, u32 val, int reg)
index d964ced..6292dcd 100644 (file)
@@ -3413,6 +3413,16 @@ static void sdhci_cmdq_clear_set_dumpregs(struct mmc_host *mmc, bool set)
        if (host->ops->clear_set_dumpregs)
                host->ops->clear_set_dumpregs(host, set);
 }
+static int sdhci_cmdq_crypto_cfg(struct mmc_host *mmc,
+               struct mmc_request *mrq, u32 slot)
+{
+       struct sdhci_host *host = mmc_priv(mmc);
+
+       if (!host->is_crypto_en)
+               return 0;
+
+       return sdhci_crypto_cfg(host, mrq, slot);
+}
 #else
 static void sdhci_cmdq_clear_set_irqs(struct mmc_host *mmc, bool clear)
 {
@@ -3444,7 +3454,11 @@ static void sdhci_cmdq_clear_set_dumpregs(struct mmc_host *mmc, bool set)
 {
 
 }
-
+static int sdhci_cmdq_crypto_cfg(struct mmc_host *mmc,
+               struct mmc_request *mrq, u32 slot)
+{
+       return 0;
+}
 #endif
 
 static const struct cmdq_host_ops sdhci_cmdq_ops = {
@@ -3453,6 +3467,7 @@ static const struct cmdq_host_ops sdhci_cmdq_ops = {
        .dump_vendor_regs = sdhci_cmdq_dump_vendor_regs,
        .set_block_size = sdhci_cmdq_set_block_size,
        .clear_set_dumpregs = sdhci_cmdq_clear_set_dumpregs,
+       .crypto_cfg     = sdhci_cmdq_crypto_cfg,
 };
 
 int sdhci_add_host(struct sdhci_host *host)