Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
[platform/kernel/linux-starfive.git] / drivers / crypto / ccp / ccp-ops.c
index db8de89..866b2e0 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * AMD Cryptographic Coprocessor (CCP) driver
  *
- * Copyright (C) 2013,2018 Advanced Micro Devices, Inc.
+ * Copyright (C) 2013-2019 Advanced Micro Devices, Inc.
  *
  * Author: Tom Lendacky <thomas.lendacky@amd.com>
  * Author: Gary R Hook <gary.hook@amd.com>
@@ -890,8 +890,7 @@ static int ccp_run_aes_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
                return -EINVAL;
 
        if (((aes->mode == CCP_AES_MODE_ECB) ||
-            (aes->mode == CCP_AES_MODE_CBC) ||
-            (aes->mode == CCP_AES_MODE_CFB)) &&
+            (aes->mode == CCP_AES_MODE_CBC)) &&
            (aes->src_len & (AES_BLOCK_SIZE - 1)))
                return -EINVAL;
 
@@ -1264,6 +1263,9 @@ static int ccp_run_des3_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
        int ret;
 
        /* Error checks */
+       if (cmd_q->ccp->vdata->version < CCP_VERSION(5, 0))
+               return -EINVAL;
+
        if (!cmd_q->ccp->vdata->perform->des3)
                return -EINVAL;
 
@@ -1346,8 +1348,6 @@ static int ccp_run_des3_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
         * passthru option to convert from big endian to little endian.
         */
        if (des3->mode != CCP_DES3_MODE_ECB) {
-               u32 load_mode;
-
                op.sb_ctx = cmd_q->sb_ctx;
 
                ret = ccp_init_dm_workarea(&ctx, cmd_q,
@@ -1363,12 +1363,8 @@ static int ccp_run_des3_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
                if (ret)
                        goto e_ctx;
 
-               if (cmd_q->ccp->vdata->version == CCP_VERSION(3, 0))
-                       load_mode = CCP_PASSTHRU_BYTESWAP_NOOP;
-               else
-                       load_mode = CCP_PASSTHRU_BYTESWAP_256BIT;
                ret = ccp_copy_to_sb(cmd_q, &ctx, op.jobid, op.sb_ctx,
-                                    load_mode);
+                                    CCP_PASSTHRU_BYTESWAP_256BIT);
                if (ret) {
                        cmd->engine_error = cmd_q->cmd_error;
                        goto e_ctx;
@@ -1430,10 +1426,6 @@ static int ccp_run_des3_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
                }
 
                /* ...but we only need the last DES3_EDE_BLOCK_SIZE bytes */
-               if (cmd_q->ccp->vdata->version == CCP_VERSION(3, 0))
-                       dm_offset = CCP_SB_BYTES - des3->iv_len;
-               else
-                       dm_offset = 0;
                ccp_get_dm_area(&ctx, dm_offset, des3->iv, 0,
                                DES3_EDE_BLOCK_SIZE);
        }