CR_2015:crypto:starfive: Remove DES/TDES support
authorjiajie.ho <jiajie.ho@starfivetech.com>
Mon, 29 Aug 2022 19:27:05 +0000 (03:27 +0800)
committerjiajie.ho <jiajie.ho@starfivetech.com>
Mon, 29 Aug 2022 19:49:02 +0000 (03:49 +0800)
Removing DES and TDES support from Starfive crypto driver
as these 2 algorithms have been deprecated by NIST.

Signed-off-by: jiajie.ho <jiajie.ho@starfivetech.com>
drivers/crypto/starfive/Kconfig
drivers/crypto/starfive/jh7110/Makefile
drivers/crypto/starfive/jh7110/jh7110-des.c [deleted file]
drivers/crypto/starfive/jh7110/jh7110-regs.h
drivers/crypto/starfive/jh7110/jh7110-sec.c
drivers/crypto/starfive/jh7110/jh7110-str.h

index 24c791b..371e26f 100644 (file)
@@ -1,7 +1,9 @@
-#      select ARM_AMBA
+#
+# Starfive crypto drivers configuration
+#
 
 config CRYPTO_DEV_JH7110_ENCRYPT
-       tristate "Encryption acceleration support on jh7110"
+       tristate "Starfive's Cryptographic Engine driver"
        depends on RISCV
        select CRYPTO_ENGINE
        select CRYPTO_RSA
@@ -10,6 +12,7 @@ config CRYPTO_DEV_JH7110_ENCRYPT
        select AMBA_PL08X
        default m
        help
-         Support for SIFIVE JH7110 cryptographic acceleration instructions on riscv64 CPU.
-         This module supports acceleration for AES and GHASH in hardware. If you
-         choose 'M' here, this module will be called jh7110-crypto.
+         Support for Starfive JH7110 cryptographic acceleration instructions
+         on riscv64 CPU. This hardware crypto module supports acceleration for
+         public key algo, ciphers, AEAD and hash functions.
+         If you choose 'M' here, this module will be called jh7110-crypto.
index 342384c..1d10020 100644 (file)
@@ -1,3 +1,3 @@
 # SPDX-License-Identifier: GPL-2.0
 obj-$(CONFIG_CRYPTO_DEV_JH7110_ENCRYPT) += jh7110-crypto.o
-jh7110-crypto-objs := jh7110-sec.o jh7110-sha.o jh7110-aes.o jh7110-des.o jh7110-pka.o
+jh7110-crypto-objs := jh7110-sec.o jh7110-sha.o jh7110-aes.o jh7110-pka.o
diff --git a/drivers/crypto/starfive/jh7110/jh7110-des.c b/drivers/crypto/starfive/jh7110/jh7110-des.c
deleted file mode 100644 (file)
index a833e11..0000000
+++ /dev/null
@@ -1,762 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Copyright 2021 StarFive, Inc <william.qiu@starfivetech.com>
- *
- * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING
- * CUSTOMERS WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER
- * FOR THEM TO SAVE TIME. AS A RESULT, STARFIVE SHALL NOT BE HELD LIABLE
- * FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY
- * CLAIMS ARISING FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE
- * BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN IN CONNECTION
- * WITH THEIR PRODUCTS.
- */
-
-#include <linux/clk.h>
-#include <linux/err.h>
-#include <linux/errno.h>
-#include <linux/scatterlist.h>
-#include <linux/delay.h>
-#include <linux/interrupt.h>
-#include <linux/iopoll.h>
-#include <linux/module.h>
-#include <linux/of_device.h>
-#include <linux/platform_device.h>
-#include <linux/pm_runtime.h>
-#include <linux/reset.h>
-#include <crypto/hash.h>
-
-#include <linux/dma-direct.h>
-#include <crypto/scatterwalk.h>
-#include <crypto/internal/des.h>
-#include <crypto/internal/hash.h>
-#include <crypto/internal/skcipher.h>
-
-#include "jh7110-pl080.h"
-#include "jh7110-str.h"
-
-#define FLG_DES_MODE_MASK                                      GENMASK(1, 0)
-
-#define FLAGS_DES_ENCRYPT                                      BIT(4)
-
-enum {
-       JH7110_CRYPTO_NOT_ALIGNED = 1,
-       JH7110_CRYPTO_BAD_DATA_LENGTH,
-};
-
-#define JH7110_CRYPTO_DATA_COPIED                      BIT(0)
-#define JH7110_CRYPTO_SG_COPIED                                BIT(1)
-
-#define JH7110_CRYPTO_COPY_MASK                                0x3
-
-#define JH7110_CRYPTO_COPY_DATA                                BIT(0)
-#define JH7110_CRYPTO_FORCE_COPY                       BIT(1)
-#define JH7110_CRYPTO_ZERO_BUF                         BIT(2)
-#define JH7110_CRYPTO_FORCE_SINGLE_ENTRY       BIT(3)
-
-#define FLAGS_IN_DATA_ST_SHIFT                         8
-#define FLAGS_OUT_DATA_ST_SHIFT                                10
-
-
-static inline int jh7110_des_wait_busy(struct jh7110_sec_ctx *ctx)
-{
-       struct jh7110_sec_dev *sdev = ctx->sdev;
-       u32 status;
-
-       return readl_relaxed_poll_timeout(sdev->io_base + JH7110_DES_DAECSR_OFFSET, status,
-                                  !(status & JH7110_DES_BUSY), 10, 100000);
-}
-
-static inline int jh7110_des_wait_done(struct jh7110_sec_dev *sdev)
-{
-       int ret = -1;
-
-       mutex_lock(&sdev->doing);
-
-       if (sdev->done_flags & JH7110_DES_DONE)
-               ret = 0;
-
-       mutex_unlock(&sdev->doing);
-
-       return ret;
-}
-
-static inline int is_des_ecb(struct jh7110_sec_request_ctx *rctx)
-{
-       return (rctx->flags & FLG_DES_MODE_MASK) == JH7110_DES_MODE_ECB;
-}
-
-static inline int is_des_cbc(struct jh7110_sec_request_ctx *rctx)
-{
-       return (rctx->flags & FLG_DES_MODE_MASK) == JH7110_DES_MODE_CBC;
-}
-
-static inline int is_des_ofb(struct jh7110_sec_request_ctx *rctx)
-{
-       return (rctx->flags & FLG_DES_MODE_MASK) == JH7110_DES_MODE_OFB;
-}
-
-static inline int is_des_cfb(struct jh7110_sec_request_ctx *rctx)
-{
-       return (rctx->flags & FLG_DES_MODE_MASK) == JH7110_DES_MODE_CFB;
-}
-
-static inline int get_des_mode(struct jh7110_sec_request_ctx *rctx)
-{
-       return rctx->flags & FLG_DES_MODE_MASK;
-}
-
-static inline int is_des_encrypt(struct jh7110_sec_request_ctx *rctx)
-{
-       return !!(rctx->flags & FLAGS_DES_ENCRYPT);
-}
-
-static inline int is_des_decrypt(struct jh7110_sec_request_ctx *rctx)
-{
-       return !is_des_encrypt(rctx);
-}
-
-static inline void jh7110_des_reset(struct jh7110_sec_ctx *ctx)
-{
-       struct jh7110_sec_request_ctx *rctx = ctx->rctx;
-
-       rctx->csr.des_csr.v = 0;
-       rctx->csr.des_csr.reset = 1;
-       jh7110_sec_write(ctx->sdev, JH7110_DES_DAECSR_OFFSET, rctx->csr.des_csr.v);
-
-}
-
-static int jh7110_des_hw_write_key(struct jh7110_sec_ctx *ctx)
-{
-       struct jh7110_sec_dev *sdev = ctx->sdev;
-       struct jh7110_sec_request_ctx *rctx = ctx->rctx;
-       u64 key64, *k;
-       int loop;
-
-       key64 = ctx->keylen / sizeof(u64);
-
-       switch (key64) {
-       case 1:
-               rctx->csr.des_csr.ks = 0x0;
-               break;
-       case 2:
-               rctx->csr.des_csr.ks = 0x2;
-               break;
-       case 3:
-               rctx->csr.des_csr.ks = 0x3;
-               break;
-       }
-
-       jh7110_sec_write(ctx->sdev, JH7110_DES_DAECSR_OFFSET, rctx->csr.des_csr.v);
-
-       k = (u64 *)ctx->key;
-       for (loop = 0; loop < key64; loop++) {
-               jh7110_sec_writeq(sdev, JH7110_DES_DAEKIN1R_HI_OFFSET + loop * 8, *k);
-               k++;
-       }
-
-       return 0;
-}
-
-
-
-static int jh7110_des_hw_init(struct jh7110_sec_ctx *ctx)
-{
-       struct jh7110_sec_request_ctx *rctx = ctx->rctx;
-       struct jh7110_sec_dev *sdev = ctx->sdev;
-       int ret;
-       u32 hw_mode;
-
-       jh7110_des_reset(ctx);
-
-       hw_mode = get_des_mode(ctx->rctx);
-
-       rctx->csr.des_csr.v = 0;
-       rctx->csr.des_csr.mode = rctx->flags & FLG_DES_MODE_MASK;
-       rctx->csr.des_csr.encryt = !!(rctx->flags & FLAGS_DES_ENCRYPT);
-       rctx->csr.des_csr.ie = 1;
-       rctx->csr.des_csr.bitmode = JH7110_DES_BITMODE_64;
-       rctx->csr.des_csr.en = 1;
-       rctx->csr.des_csr.disturb = 1;
-       rctx->csr.des_csr.vdes_en = 1;
-
-       switch (hw_mode) {
-       case JH7110_DES_MODE_ECB:
-               ret = jh7110_des_hw_write_key(ctx);
-               break;
-       case JH7110_DES_MODE_OFB:
-       case JH7110_DES_MODE_CFB:
-       case JH7110_DES_MODE_CBC:
-               jh7110_sec_writeq(sdev, JH7110_DES_DAEIVINR_HI_OFFSET, *(u64 *)rctx->req.sreq->iv);
-               break;
-       default:
-               break;
-       }
-
-       return ret;
-}
-
-static void jh7110_des_dma_callback(void *param)
-{
-       struct jh7110_sec_dev *sdev = param;
-
-       complete(&sdev->sec_comp_p);
-}
-
-static int jh7110_des_dma_start(struct jh7110_sec_ctx *ctx)
-{
-       struct jh7110_sec_request_ctx *rctx = ctx->rctx;
-       struct jh7110_sec_dev *sdev = ctx->sdev;
-       struct dma_async_tx_descriptor  *in_desc, *out_desc;
-       struct dma_slave_config cfg;
-       int err;
-       int ret;
-
-       rctx->total = (rctx->total & 0x3) ? 1 : 0;
-       sg_init_table(&sdev->in_sg, 1);
-       sg_set_buf(&sdev->in_sg, sdev->des_data, rctx->total);
-       sg_dma_address(&sdev->in_sg) = phys_to_dma(sdev->dev, (unsigned long long)(sdev->des_data));
-       sg_dma_len(&sdev->in_sg) = rctx->total;
-
-       sg_init_table(&sdev->out_sg, 1);
-       sg_set_buf(&sdev->out_sg, sdev->des_data, rctx->total);
-       sg_dma_address(&sdev->out_sg) = phys_to_dma(sdev->dev, (unsigned long long)(sdev->des_data));
-       sg_dma_len(&sdev->out_sg) = rctx->total;
-
-       err = dma_map_sg(sdev->dev, &sdev->in_sg, 1, DMA_TO_DEVICE);
-       if (!err) {
-               dev_err(sdev->dev, "dma_map_sg() error\n");
-               return -EINVAL;
-       }
-
-       err = dma_map_sg(sdev->dev, &sdev->out_sg, 1, DMA_FROM_DEVICE);
-       if (!err) {
-               dev_err(sdev->dev, "dma_map_sg() error\n");
-               return -EINVAL;
-       }
-
-
-       dma_sync_sg_for_device(sdev->dev, &sdev->in_sg, sdev->in_sg_len, DMA_TO_DEVICE);
-
-       cfg.src_addr = sdev->io_phys_base + JH7110_ALG_FIFO_OFFSET;
-       cfg.dst_addr = sdev->io_phys_base + JH7110_ALG_FIFO_OFFSET;
-       cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
-       cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
-       cfg.src_maxburst = 4;
-       cfg.dst_maxburst = 4;
-
-       ret = dmaengine_slave_config(sdev->sec_xm_m, &cfg);
-       if (ret) {
-               dev_err(sdev->dev, "can't configure IN dmaengine slave: %d\n",
-                       ret);
-               return ret;
-       }
-
-       in_desc = dmaengine_prep_slave_sg(sdev->sec_xm_m, &sdev->in_sg,
-                               1, DMA_MEM_TO_DEV,
-                               DMA_PREP_INTERRUPT  |  DMA_CTRL_ACK);
-
-       if (!in_desc) {
-               dev_err(sdev->dev, "IN prep_slave_sg() failed\n");
-               return -EINVAL;
-       }
-
-       in_desc->callback_param = sdev;
-
-       ret = dmaengine_slave_config(sdev->sec_xm_p, &cfg);
-       if (ret) {
-               dev_err(sdev->dev, "can't configure OUT dmaengine slave: %d\n",
-                       ret);
-               return ret;
-       }
-
-       out_desc = dmaengine_prep_slave_sg(sdev->sec_xm_p, &sdev->out_sg,
-                               1, DMA_DEV_TO_MEM,
-                               DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
-       if (!out_desc) {
-               dev_err(sdev->dev, "OUT prep_slave_sg() failed\n");
-               return -EINVAL;
-       }
-
-       out_desc->callback = jh7110_des_dma_callback;
-       out_desc->callback_param = sdev;
-
-       dmaengine_submit(in_desc);
-       dmaengine_submit(out_desc);
-
-       dma_async_issue_pending(sdev->sec_xm_m);
-       dma_async_issue_pending(sdev->sec_xm_p);
-
-       dma_unmap_sg(sdev->dev, &sdev->in_sg, 1, DMA_TO_DEVICE);
-       dma_unmap_sg(sdev->dev, &sdev->out_sg, 1, DMA_FROM_DEVICE);
-
-       return 0;
-}
-
-static int jh7110_des_cpu_start(struct jh7110_sec_ctx *ctx)
-{
-       struct jh7110_sec_dev *sdev = ctx->sdev;
-       struct jh7110_sec_request_ctx *rctx = ctx->rctx;
-       struct sg_mapping_iter mi;
-       void *buffer;
-       int total_len, mlen, bs, offset;
-       u64 value;
-       u8 bvalue;
-
-       total_len = rctx->total;
-
-       sg_miter_start(&mi, rctx->in_sg, rctx->sg_len,
-                      SG_MITER_FROM_SG | SG_MITER_ATOMIC);
-
-       bs = 8;
-       mlen = 0;
-
-       while (total_len) {
-               switch (!(total_len >> 3)) {
-               case 0:
-                       bs = 8;
-                       break;
-               case 1:
-                       bs = 1;
-                       break;
-               }
-               if (!mlen) {
-                       sg_miter_next(&mi);
-                       mlen = mi.length;
-                       if (!mlen) {
-                               pr_err("sg miter failure.\n");
-                               return -EINVAL;
-                       }
-                       buffer = mi.addr;
-               }
-
-               bs = min(bs, mlen);
-
-               switch (bs) {
-               case 8:
-                       jh7110_sec_writeq(sdev, JH7110_DES_DAEDINR_HI_OFFSET,
-                                          *(u64 *)buffer);
-                       break;
-               case 1:
-                       jh7110_sec_writeb(sdev, JH7110_DES_DAEDINR_HI_OFFSET,
-                                          *(u8 *)buffer);
-                       break;
-               }
-               mlen -= bs;
-               total_len -= bs;
-               buffer += bs;
-       }
-
-       sg_miter_stop(&mi);
-
-       if (jh7110_des_wait_busy(ctx)) {
-               dev_err(sdev->dev, "jh7110_hash_wait_busy error\n");
-               return -ETIMEDOUT;
-       }
-
-       if (jh7110_des_wait_done(sdev)) {
-               dev_err(sdev->dev, "jh7110_hash_wait_done error\n");
-               return -ETIMEDOUT;
-       }
-
-       total_len = rctx->total;
-       offset = 0;
-
-       while (total_len) {
-               switch (!(total_len >> 3)) {
-               case 0:
-                       value = jh7110_sec_readq(sdev, JH7110_DES_DAEDINR_HI_OFFSET);
-                       sg_copy_buffer(rctx->out_sg, sg_nents(rctx->out_sg), (void *)&value,
-                                      sizeof(u64), offset, 0);
-                       offset += sizeof(u64);
-                       total_len -= 8;
-                       break;
-               case 1:
-                       bvalue = jh7110_sec_readb(sdev, JH7110_DES_DAEDINR_HI_OFFSET);
-                       sg_copy_buffer(rctx->out_sg, sg_nents(rctx->out_sg), (void *)&bvalue,
-                                      sizeof(u8), offset, 0);
-                       offset += sizeof(u8);
-                       total_len -= 1;
-                       break;
-               }
-       }
-
-       return 0;
-}
-
-static int jh7110_des_crypt_start(struct jh7110_sec_ctx *ctx)
-{
-       struct jh7110_sec_dev *sdev = ctx->sdev;
-       int ret;
-
-       if (sdev->use_dma)
-               ret = jh7110_des_dma_start(ctx);
-       else
-               ret = jh7110_des_cpu_start(ctx);
-
-       return ret;
-}
-
-static int jh7110_des_prepare_req(struct crypto_engine *engine,
-                               void *areq);
-static int jh7110_des_one_req(struct crypto_engine *engine, void *areq);
-
-
-static int jh7110_des_cra_init(struct crypto_skcipher *tfm)
-{
-       struct jh7110_sec_ctx *ctx = crypto_skcipher_ctx(tfm);
-
-       ctx->sdev = jh7110_sec_find_dev(ctx);
-       if (!ctx->sdev)
-               return -ENODEV;
-
-       ctx->sec_init = 0;
-
-       crypto_skcipher_set_reqsize(tfm, sizeof(struct jh7110_sec_request_ctx));
-
-       ctx->enginectx.op.do_one_request = jh7110_des_one_req;
-       ctx->enginectx.op.prepare_request = jh7110_des_prepare_req;
-       ctx->enginectx.op.unprepare_request = NULL;
-
-       return 0;
-}
-
-static void jh7110_des_cra_exit(struct crypto_skcipher *tfm)
-{
-       struct jh7110_sec_ctx *ctx = crypto_skcipher_ctx(tfm);
-
-
-       ctx->enginectx.op.do_one_request = NULL;
-       ctx->enginectx.op.prepare_request = NULL;
-       ctx->enginectx.op.unprepare_request = NULL;
-}
-
-static int jh7110_des_crypt(struct skcipher_request *req, unsigned long mode)
-{
-       struct jh7110_sec_ctx *ctx = crypto_skcipher_ctx(
-                       crypto_skcipher_reqtfm(req));
-       struct jh7110_sec_request_ctx *rctx = skcipher_request_ctx(req);
-       struct jh7110_sec_dev *sdev;
-
-       if (!req->cryptlen)
-               return 0;
-
-       if (!IS_ALIGNED(req->cryptlen, DES_BLOCK_SIZE))
-               return -EINVAL;
-
-       sdev = jh7110_sec_find_dev(ctx);
-       if (!sdev)
-               return -ENODEV;
-
-       rctx->flags = mode;
-
-       return crypto_transfer_skcipher_request_to_engine(sdev->engine, req);
-}
-
-static int jh7110_des_setkey(struct crypto_skcipher *tfm, const u8 *key,
-                             unsigned int keylen)
-{
-       struct jh7110_sec_ctx *ctx = crypto_skcipher_ctx(tfm);
-       int err;
-
-       err = verify_skcipher_des_key(tfm, key);
-       if (err)
-               return err;
-
-       memcpy(ctx->key, key, keylen);
-       ctx->keylen = keylen;
-
-       return 0;
-}
-
-static int jh7110_des3_setkey(struct crypto_skcipher *tfm, const u8 *key,
-                              unsigned int keylen)
-{
-       struct jh7110_sec_ctx *ctx = crypto_skcipher_ctx(tfm);
-       int err;
-
-       err = verify_skcipher_des3_key(tfm, key);
-       if (err)
-               return err;
-
-       memcpy(ctx->key, key, keylen);
-       ctx->keylen = keylen;
-
-       return 0;
-}
-
-static int jh7110_des_ecb_encrypt(struct skcipher_request *req)
-{
-       return jh7110_des_crypt(req, FLAGS_DES_ENCRYPT | JH7110_DES_MODE_ECB);
-}
-
-static int jh7110_des_ecb_decrypt(struct skcipher_request *req)
-{
-       return jh7110_des_crypt(req, JH7110_DES_MODE_ECB);
-}
-
-static int jh7110_des_cbc_encrypt(struct skcipher_request *req)
-{
-       return jh7110_des_crypt(req, FLAGS_DES_ENCRYPT | JH7110_DES_MODE_CBC);
-}
-
-static int jh7110_des_cbc_decrypt(struct skcipher_request *req)
-{
-       return jh7110_des_crypt(req, JH7110_DES_MODE_CBC);
-}
-
-static int jh7110_des_cfb_encrypt(struct skcipher_request *req)
-{
-       return jh7110_des_crypt(req, FLAGS_DES_ENCRYPT | JH7110_DES_MODE_CFB);
-}
-
-static int jh7110_des_cfb_decrypt(struct skcipher_request *req)
-{
-       return jh7110_des_crypt(req, JH7110_DES_MODE_CFB);
-}
-
-static int jh7110_des_ofb_encrypt(struct skcipher_request *req)
-{
-       return jh7110_des_crypt(req, FLAGS_DES_ENCRYPT | JH7110_DES_MODE_OFB);
-}
-
-static int jh7110_des_ofb_decrypt(struct skcipher_request *req)
-{
-       return jh7110_des_crypt(req, JH7110_DES_MODE_OFB);
-}
-
-
-static int jh7110_des_prepare_req(struct crypto_engine *engine,
-                                 void *areq)
-{
-       struct skcipher_request *req = container_of(areq, struct skcipher_request, base);
-       struct jh7110_sec_ctx *ctx = crypto_skcipher_ctx(
-                       crypto_skcipher_reqtfm(req));
-       struct jh7110_sec_dev *sdev = jh7110_sec_find_dev(ctx);
-       struct jh7110_sec_request_ctx *rctx;
-
-       if (!sdev)
-               return -ENODEV;
-
-       rctx = skcipher_request_ctx(req);
-
-       /* assign new request to device */
-       rctx->req.sreq = req;
-       rctx->req_type = JH7110_ABLK_REQ;
-       rctx->total_in = req->cryptlen;
-       rctx->total_out = rctx->total_in;
-       rctx->authsize = 0;
-       rctx->assoclen = 0;
-
-
-       rctx->in_sg = req->src;
-       rctx->out_sg = req->dst;
-
-       rctx->in_sg_len = sg_nents_for_len(rctx->in_sg, rctx->total);
-       if (rctx->in_sg_len < 0)
-               return rctx->in_sg_len;
-
-       rctx->out_sg_len = sg_nents_for_len(rctx->out_sg, rctx->total);
-       if (rctx->out_sg_len < 0)
-               return rctx->out_sg_len;
-
-       rctx = skcipher_request_ctx(req);
-       ctx = crypto_skcipher_ctx(crypto_skcipher_reqtfm(req));
-
-       rctx->ctx = ctx;
-       rctx->sdev = sdev;
-       ctx->sdev = sdev;
-       ctx->rctx = rctx;
-
-       return jh7110_des_hw_init(ctx);
-}
-
-static int jh7110_des_one_req(struct crypto_engine *engine, void *areq)
-{
-       struct skcipher_request *req = container_of(areq,
-                                                     struct skcipher_request,
-                                                     base);
-       struct jh7110_sec_ctx *ctx = crypto_skcipher_ctx(
-                       crypto_skcipher_reqtfm(req));
-       struct jh7110_sec_dev *sdev = ctx->sdev;
-       int ret;
-
-       if (!sdev)
-               return -ENODEV;
-
-       ret = jh7110_des_crypt_start(ctx);
-
-       mutex_unlock(&sdev->lock);
-
-       return ret;
-}
-
-static struct skcipher_alg algs_des_jh7110[] = {
-       {
-               .base.cra_name          = "ecb(des)",
-               .base.cra_driver_name   = "ecb-des-jh7110",
-               .base.cra_priority      = 100,
-               .base.cra_flags         = CRYPTO_ALG_KERN_DRIVER_ONLY |
-                                                               CRYPTO_ALG_ASYNC,
-               .base.cra_blocksize     = DES_BLOCK_SIZE,
-               .base.cra_ctxsize       = sizeof(struct jh7110_sec_ctx),
-               .base.cra_module        = THIS_MODULE,
-
-               .min_keysize            = DES_KEY_SIZE,
-               .max_keysize            = DES_KEY_SIZE,
-               .setkey                 = jh7110_des_setkey,
-               .encrypt                = jh7110_des_ecb_encrypt,
-               .decrypt                = jh7110_des_ecb_decrypt,
-               .init                   = jh7110_des_cra_init,
-               .exit                   = jh7110_des_cra_exit,
-       },
-       {
-               .base.cra_name          = "cbc(des)",
-               .base.cra_driver_name   = "cbc-des-jh7110",
-               .base.cra_priority      = 100,
-               .base.cra_flags         = CRYPTO_ALG_KERN_DRIVER_ONLY |
-                                                               CRYPTO_ALG_ASYNC,
-               .base.cra_blocksize     = DES_BLOCK_SIZE,
-               .base.cra_ctxsize       = sizeof(struct jh7110_sec_ctx),
-               .base.cra_module        = THIS_MODULE,
-
-               .min_keysize            = DES_KEY_SIZE,
-               .max_keysize            = DES_KEY_SIZE,
-               .ivsize                         = DES_BLOCK_SIZE,
-               .setkey                 = jh7110_des_setkey,
-               .encrypt                = jh7110_des_cbc_encrypt,
-               .decrypt                = jh7110_des_cbc_decrypt,
-               .init                   = jh7110_des_cra_init,
-               .exit                   = jh7110_des_cra_exit,
-       },
-       {
-               .base.cra_name          = "cfb(des)",
-               .base.cra_driver_name   = "cfb-des-jh7110",
-               .base.cra_priority      = 100,
-               .base.cra_flags         = CRYPTO_ALG_KERN_DRIVER_ONLY |
-                                                               CRYPTO_ALG_ASYNC,
-               .base.cra_blocksize     = DES_BLOCK_SIZE,
-               .base.cra_ctxsize       = sizeof(struct jh7110_sec_ctx),
-               .base.cra_module        = THIS_MODULE,
-
-               .min_keysize            = DES_KEY_SIZE,
-               .max_keysize            = DES_KEY_SIZE,
-               .ivsize                         = DES_BLOCK_SIZE,
-               .setkey                 = jh7110_des_setkey,
-               .encrypt                = jh7110_des_cfb_encrypt,
-               .decrypt                = jh7110_des_cfb_decrypt,
-               .init                   = jh7110_des_cra_init,
-               .exit                   = jh7110_des_cra_exit,
-       },
-       {
-               .base.cra_name          = "ofb(des)",
-               .base.cra_driver_name   = "ofb-des-jh7110",
-               .base.cra_priority      = 100,
-               .base.cra_flags         = CRYPTO_ALG_KERN_DRIVER_ONLY |
-                                                               CRYPTO_ALG_ASYNC,
-               .base.cra_blocksize     = DES_BLOCK_SIZE,
-               .base.cra_ctxsize       = sizeof(struct jh7110_sec_ctx),
-               .base.cra_module        = THIS_MODULE,
-
-               .min_keysize            = DES_KEY_SIZE,
-               .max_keysize            = DES_KEY_SIZE,
-               .ivsize                         = DES_BLOCK_SIZE,
-               .setkey                 = jh7110_des_setkey,
-               .encrypt                = jh7110_des_ofb_encrypt,
-               .decrypt                = jh7110_des_ofb_decrypt,
-               .init                   = jh7110_des_cra_init,
-               .exit                   = jh7110_des_cra_exit,
-       },
-       {
-               .base.cra_name          = "ecb(des3)",
-               .base.cra_driver_name   = "ecb-des3-jh7110",
-               .base.cra_priority      = 100,
-               .base.cra_flags         = CRYPTO_ALG_KERN_DRIVER_ONLY |
-                                                               CRYPTO_ALG_ASYNC,
-               .base.cra_blocksize     = DES_BLOCK_SIZE,
-               .base.cra_ctxsize       = sizeof(struct jh7110_sec_ctx),
-               .base.cra_module        = THIS_MODULE,
-
-               .min_keysize            = DES3_EDE_KEY_SIZE,
-               .max_keysize            = DES3_EDE_KEY_SIZE,
-               .setkey                 = jh7110_des3_setkey,
-               .encrypt                = jh7110_des_ecb_encrypt,
-               .decrypt                = jh7110_des_ecb_decrypt,
-               .init                   = jh7110_des_cra_init,
-               .exit                   = jh7110_des_cra_exit,
-       },
-       {
-               .base.cra_name          = "cbc(des3)",
-               .base.cra_driver_name   = "cbc-des3-jh7110",
-               .base.cra_priority      = 100,
-               .base.cra_flags         = CRYPTO_ALG_KERN_DRIVER_ONLY |
-                                               CRYPTO_ALG_ASYNC,
-               .base.cra_blocksize     = DES_BLOCK_SIZE,
-               .base.cra_ctxsize       = sizeof(struct jh7110_sec_ctx),
-               .base.cra_module        = THIS_MODULE,
-
-               .min_keysize            = DES3_EDE_KEY_SIZE,
-               .max_keysize            = DES3_EDE_KEY_SIZE,
-               .ivsize                 = DES_BLOCK_SIZE,
-               .setkey                 = jh7110_des3_setkey,
-               .encrypt                = jh7110_des_cbc_encrypt,
-               .decrypt                = jh7110_des_cbc_decrypt,
-               .init                   = jh7110_des_cra_init,
-               .exit                   = jh7110_des_cra_exit,
-       },
-       {
-               .base.cra_name          = "cfb(des3)",
-               .base.cra_driver_name   = "cfb-des3-jh7110",
-               .base.cra_priority      = 100,
-               .base.cra_flags         = CRYPTO_ALG_KERN_DRIVER_ONLY |
-                                               CRYPTO_ALG_ASYNC,
-               .base.cra_blocksize     = DES_BLOCK_SIZE,
-               .base.cra_ctxsize       = sizeof(struct jh7110_sec_ctx),
-               .base.cra_module        = THIS_MODULE,
-
-               .min_keysize            = DES3_EDE_KEY_SIZE,
-               .max_keysize            = DES3_EDE_KEY_SIZE,
-               .ivsize                 = DES_BLOCK_SIZE,
-               .setkey                 = jh7110_des3_setkey,
-               .encrypt                = jh7110_des_cfb_encrypt,
-               .decrypt                = jh7110_des_cfb_decrypt,
-               .init                   = jh7110_des_cra_init,
-               .exit                   = jh7110_des_cra_exit,
-       },
-       {
-               .base.cra_name          = "ofb(des3)",
-               .base.cra_driver_name   = "ofb-des3-jh7110",
-               .base.cra_priority      = 100,
-               .base.cra_flags         = CRYPTO_ALG_KERN_DRIVER_ONLY |
-                                               CRYPTO_ALG_ASYNC,
-               .base.cra_blocksize     = DES_BLOCK_SIZE,
-               .base.cra_ctxsize       = sizeof(struct jh7110_sec_ctx),
-               .base.cra_module        = THIS_MODULE,
-
-               .min_keysize            = DES3_EDE_KEY_SIZE,
-               .max_keysize            = DES3_EDE_KEY_SIZE,
-               .ivsize                 = DES_BLOCK_SIZE,
-               .setkey                 = jh7110_des3_setkey,
-               .encrypt                = jh7110_des_ofb_encrypt,
-               .decrypt                = jh7110_des_ofb_decrypt,
-               .init                   = jh7110_des_cra_init,
-               .exit                   = jh7110_des_cra_exit,
-       },
-};
-
-int jh7110_des_register_algs(void)
-{
-       int ret;
-
-       ret = crypto_register_skciphers(algs_des_jh7110, ARRAY_SIZE(algs_des_jh7110));
-       if (ret) {
-               pr_debug("Could not register algs\n");
-               return ret;
-       }
-       return ret;
-}
-
-void jh7110_des_unregister_algs(void)
-{
-       crypto_unregister_skciphers(algs_des_jh7110, ARRAY_SIZE(algs_des_jh7110));
-}
-
index e513381..f484b04 100644 (file)
@@ -6,7 +6,6 @@
 #define __JH7110_REGS_H__
 
 #include <crypto/aes.h>
-#include <crypto/des.h>
 #include <crypto/sha.h>
 
 #define JH7110_ALG_CR_OFFSET                                   0x0
@@ -17,7 +16,6 @@
 #define JH7110_DMA_OUT_LEN_OFFSET                              0x14
 
 #define JH7110_AES_REGS_OFFSET                                 0x100
-#define JH7110_DES_REGS_OFFSET                                 0x200
 #define JH7110_SHA_REGS_OFFSET                                 0x300
 #define JH7110_CRYPTO_REGS_OFFSET                              0x400
 
@@ -124,52 +122,6 @@ union jh7110_crypto_casr {
        };
 };
 
-#define JH7110_DES_DAEDINR_HI_OFFSET                           (JH7110_DES_REGS_OFFSET + 0x0)
-#define JH7110_DES_DAEDINR_LO_OFFSET                           (JH7110_DES_REGS_OFFSET + 0x4)
-#define JH7110_DES_DAEKIN1R_HI_OFFSET                          (JH7110_DES_REGS_OFFSET + 0x8)
-#define JH7110_DES_DAEKIN1R_LO_OFFSET                          (JH7110_DES_REGS_OFFSET + 0xC)
-#define JH7110_DES_DAEKIN2R_HI_OFFSET                          (JH7110_DES_REGS_OFFSET + 0x10)
-#define JH7110_DES_DAEKIN2R_LO_OFFSET                          (JH7110_DES_REGS_OFFSET + 0x14)
-#define JH7110_DES_DAEKIN3R_HI_OFFSET                          (JH7110_DES_REGS_OFFSET + 0x18)
-#define JH7110_DES_DAEKIN3R_LO_OFFSET                          (JH7110_DES_REGS_OFFSET + 0x1C)
-#define JH7110_DES_DAEIVINR_HI_OFFSET                          (JH7110_DES_REGS_OFFSET + 0x20)
-#define JH7110_DES_DAEIVINR_LO_OFFSET                          (JH7110_DES_REGS_OFFSET + 0x24)
-#define JH7110_DES_DAECSR_OFFSET                               (JH7110_DES_REGS_OFFSET + 0x28)
-#define JH7110_DES_KEY0                                                (JH7110_DES_REGS_OFFSET + 0X2C)
-#define        JH7110_DES_KEY1                                         (JH7110_DES_REGS_OFFSET + 0X30)
-#define JH7110_DES_IV0                                         (JH7110_DES_REGS_OFFSET + 0X34)
-#define JH7110_DES_IV1                                         (JH7110_DES_REGS_OFFSET + 0X38)
-
-union jh7110_des_daecsr {
-       u32 v;
-       struct {
-#define JH7110_DES_BUSY                                                BIT(0)
-               u32 busy                        :1;
-               u32 en                          :1;
-               u32 encryt                      :1;
-               u32 reset                       :1;
-               u32 disturb                     :1;
-#define JH7110_DES_KS_64                                       0x0
-#define JH7110_DES_KS_128                                      0x2
-#define JH7110_DES_KS_192                                      0x3
-               u32 ks                          :2;
-               u32 vdes_en                     :1;
-
-#define JH7110_DES_MODE_ECB                                    0x0
-#define JH7110_DES_MODE_CBC                                    0x1
-#define JH7110_DES_MODE_CFB                                    0x2
-#define JH7110_DES_MODE_OFB                                    0x3
-               u32 mode                        :2;
-               u32 ie                          :1;
-#define JH7110_DES_CSR_DONE                                    BIT(11)
-               u32 done                        :1;
-#define JH7110_DES_BITMODE_1                                   0x0
-#define JH7110_DES_BITMODE_64                                  0x4
-               u32 bitmode                     :3;
-               u32 rsvd_0                      :17;
-       };
-};
-
 #define JH7110_AES_AESDIO0R                                    (JH7110_AES_REGS_OFFSET + 0x0)
 #define JH7110_AES_KEY0                                                (JH7110_AES_REGS_OFFSET + 0x4)
 #define JH7110_AES_KEY1                                                (JH7110_AES_REGS_OFFSET + 0x8)
index 7d11794..afefd27 100755 (executable)
@@ -77,7 +77,6 @@ static irqreturn_t jh7110_cryp_irq(int irq, void *arg)
        struct jh7110_sec_dev *sdev = (struct jh7110_sec_dev *) arg;
        union jh7110_sha_shacsr sha_csr;
        union jh7110_aes_csr   aes_csr;
-       union jh7110_des_daecsr   des_csr;
        union jh7110_crypto_cacr  cry_cacr;
        union jh7110_crypto_casr  cry_casr;
        irqreturn_t ret = IRQ_WAKE_THREAD;
@@ -100,14 +99,6 @@ static irqreturn_t jh7110_cryp_irq(int irq, void *arg)
                }
 
                break;
-       case JH7110_DES_TYPE:
-               des_csr.v = jh7110_sec_read(sdev, JH7110_DES_DAECSR_OFFSET);
-               if (des_csr.done) {
-                       sdev->done_flags |= JH7110_DES_DONE;
-                       jh7110_sec_write(sdev, JH7110_DES_DAECSR_OFFSET, des_csr.v);
-               }
-
-               break;
        case JH7110_PKA_TYPE:
                cry_casr.v = jh7110_sec_read(sdev, JH7110_CRYPTO_CASR_OFFSET);
                if (cry_casr.done)
@@ -188,7 +179,6 @@ static int jh7110_cryp_probe(struct platform_device *pdev)
        mutex_init(&sdev->pl080_doing);
        mutex_init(&sdev->sha_lock);
        mutex_init(&sdev->aes_lock);
-       mutex_init(&sdev->des_lock);
        mutex_init(&sdev->rsa_lock);
 
        res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "secreg");
@@ -271,12 +261,6 @@ static int jh7110_cryp_probe(struct platform_device *pdev)
                goto err_aes_data;
        }
 
-       sdev->des_data = (void *)__get_free_pages(GFP_KERNEL | GFP_DMA32, pages);
-       if (!sdev->des_data) {
-               dev_err(sdev->dev, "Can't allocate des buffer pages when unaligned\n");
-               goto err_des_data;
-       }
-
        sdev->pka_data = (void *)__get_free_pages(GFP_KERNEL | GFP_DMA32, pages);
        if (!sdev->pka_data) {
                dev_err(sdev->dev, "Can't allocate pka buffer pages when unaligned\n");
@@ -305,10 +289,6 @@ static int jh7110_cryp_probe(struct platform_device *pdev)
        if (ret)
                goto err_algs_aes;
 
-       ret = jh7110_des_register_algs();
-       if (ret)
-               goto err_algs_des;
-
        ret = jh7110_pka_register_algs();
        if (ret)
                goto err_algs_pka;
@@ -317,8 +297,6 @@ static int jh7110_cryp_probe(struct platform_device *pdev)
 
        return 0;
  err_algs_pka:
-       jh7110_des_unregister_algs();
- err_algs_des:
        jh7110_aes_unregister_algs();
  err_algs_aes:
        jh7110_hash_unregister_algs();
@@ -329,8 +307,6 @@ static int jh7110_cryp_probe(struct platform_device *pdev)
  err_engine:
        free_pages((unsigned long)sdev->pka_data, pages);
  err_pka_data:
-       free_pages((unsigned long)sdev->des_data, pages);
- err_des_data:
        free_pages((unsigned long)sdev->aes_data, pages);
  err_aes_data:
        free_pages((unsigned long)sdev->sha_data, pages);
@@ -352,7 +328,6 @@ static int jh7110_cryp_remove(struct platform_device *pdev)
                return -ENODEV;
 
        jh7110_pka_unregister_algs();
-       jh7110_des_unregister_algs();
        jh7110_aes_unregister_algs();
        jh7110_hash_unregister_algs();
 
@@ -362,11 +337,9 @@ static int jh7110_cryp_remove(struct platform_device *pdev)
        jh7110_dma_cleanup(sdev);
 
        free_pages((unsigned long)sdev->pka_data, sdev->pages_count);
-       free_pages((unsigned long)sdev->des_data, sdev->pages_count);
        free_pages((unsigned long)sdev->aes_data, sdev->pages_count);
        free_pages((unsigned long)sdev->sha_data, sdev->pages_count);
        sdev->pka_data = NULL;
-       sdev->des_data = NULL;
        sdev->aes_data = NULL;
        sdev->sha_data = NULL;
 
@@ -433,4 +406,4 @@ module_platform_driver(jh7110_cryp_driver);
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Huan Feng <huan.feng@starfivetech.com>");
-MODULE_DESCRIPTION("Starfive JH7110 CRYP DES SHA and AES driver");
+MODULE_DESCRIPTION("Starfive JH7110 CRYP SHA and AES driver");
index 5e7d896..9cc9f77 100644 (file)
@@ -80,7 +80,6 @@ struct jh7110_sec_dev {
        phys_addr_t                             io_phys_base;
        void                                    *sha_data;
        void                                    *aes_data;
-       void                                    *des_data;
        void                                    *pka_data;
        unsigned int                            secirq;
        unsigned int                            irq;
@@ -106,18 +105,15 @@ struct jh7110_sec_dev {
        struct mutex                            pl080_doing;
        struct mutex                            lock; /* protects req / areq */
        struct mutex                            sha_lock;
-       struct mutex                            des_lock;
        struct mutex                            aes_lock;
        struct mutex                            rsa_lock;
 
 #define JH7110_SHA_SHA_DONE                    BIT(2)
 #define JH7110_AES_DONE                                BIT(3)
-#define JH7110_DES_DONE                                BIT(4)
 #define JH7110_PKA_DONE                                BIT(5)
        u32                                     done_flags;
 #define JH7110_SHA_TYPE                                0x1
 #define JH7110_AES_TYPE                                0x2
-#define JH7110_DES_TYPE                                0x3
 #define JH7110_PKA_TYPE                                0x4
        u32                                     cry_type;
 
@@ -145,7 +141,6 @@ struct jh7110_sec_request_ctx {
 
        union {
                union jh7110_crypto_cacr        pka_csr;
-               union jh7110_des_daecsr         des_csr;
                union jh7110_aes_csr            aes_csr;
                union jh7110_sha_shacsr         sha_csr;
        } csr;
@@ -259,9 +254,6 @@ extern void jh7110_hash_unregister_algs(void);
 extern int jh7110_aes_register_algs(void);
 extern void jh7110_aes_unregister_algs(void);
 
-extern int jh7110_des_register_algs(void);
-extern void jh7110_des_unregister_algs(void);
-
 extern int jh7110_pka_register_algs(void);
 extern void jh7110_pka_unregister_algs(void);