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;
 
         * 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,
                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;
                }
 
                /* ...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);
        }