Commit 956ee21a authored by Gary R Hook's avatar Gary R Hook Committed by Herbert Xu

crypto: ccp - Refactoring: symbol cleanup

Form and use of the local storage block in the CCP is
particular to the device version. Much of the code that
accesses the storage block can treat it as a virtual
resource, and will under go some renaming. Device-specific
access to the memory will be moved into device file.
Service functions will be added to the actions
structure.
Signed-off-by: default avatarGary R Hook <gary.hook@amd.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent a43eb985
...@@ -100,10 +100,10 @@ static int ccp_perform_aes(struct ccp_op *op) ...@@ -100,10 +100,10 @@ static int ccp_perform_aes(struct ccp_op *op)
| (op->u.aes.type << REQ1_AES_TYPE_SHIFT) | (op->u.aes.type << REQ1_AES_TYPE_SHIFT)
| (op->u.aes.mode << REQ1_AES_MODE_SHIFT) | (op->u.aes.mode << REQ1_AES_MODE_SHIFT)
| (op->u.aes.action << REQ1_AES_ACTION_SHIFT) | (op->u.aes.action << REQ1_AES_ACTION_SHIFT)
| (op->ksb_key << REQ1_KEY_KSB_SHIFT); | (op->sb_key << REQ1_KEY_KSB_SHIFT);
cr[1] = op->src.u.dma.length - 1; cr[1] = op->src.u.dma.length - 1;
cr[2] = ccp_addr_lo(&op->src.u.dma); cr[2] = ccp_addr_lo(&op->src.u.dma);
cr[3] = (op->ksb_ctx << REQ4_KSB_SHIFT) cr[3] = (op->sb_ctx << REQ4_KSB_SHIFT)
| (CCP_MEMTYPE_SYSTEM << REQ4_MEMTYPE_SHIFT) | (CCP_MEMTYPE_SYSTEM << REQ4_MEMTYPE_SHIFT)
| ccp_addr_hi(&op->src.u.dma); | ccp_addr_hi(&op->src.u.dma);
cr[4] = ccp_addr_lo(&op->dst.u.dma); cr[4] = ccp_addr_lo(&op->dst.u.dma);
...@@ -130,10 +130,10 @@ static int ccp_perform_xts_aes(struct ccp_op *op) ...@@ -130,10 +130,10 @@ static int ccp_perform_xts_aes(struct ccp_op *op)
cr[0] = (CCP_ENGINE_XTS_AES_128 << REQ1_ENGINE_SHIFT) cr[0] = (CCP_ENGINE_XTS_AES_128 << REQ1_ENGINE_SHIFT)
| (op->u.xts.action << REQ1_AES_ACTION_SHIFT) | (op->u.xts.action << REQ1_AES_ACTION_SHIFT)
| (op->u.xts.unit_size << REQ1_XTS_AES_SIZE_SHIFT) | (op->u.xts.unit_size << REQ1_XTS_AES_SIZE_SHIFT)
| (op->ksb_key << REQ1_KEY_KSB_SHIFT); | (op->sb_key << REQ1_KEY_KSB_SHIFT);
cr[1] = op->src.u.dma.length - 1; cr[1] = op->src.u.dma.length - 1;
cr[2] = ccp_addr_lo(&op->src.u.dma); cr[2] = ccp_addr_lo(&op->src.u.dma);
cr[3] = (op->ksb_ctx << REQ4_KSB_SHIFT) cr[3] = (op->sb_ctx << REQ4_KSB_SHIFT)
| (CCP_MEMTYPE_SYSTEM << REQ4_MEMTYPE_SHIFT) | (CCP_MEMTYPE_SYSTEM << REQ4_MEMTYPE_SHIFT)
| ccp_addr_hi(&op->src.u.dma); | ccp_addr_hi(&op->src.u.dma);
cr[4] = ccp_addr_lo(&op->dst.u.dma); cr[4] = ccp_addr_lo(&op->dst.u.dma);
...@@ -159,7 +159,7 @@ static int ccp_perform_sha(struct ccp_op *op) ...@@ -159,7 +159,7 @@ static int ccp_perform_sha(struct ccp_op *op)
| REQ1_INIT; | REQ1_INIT;
cr[1] = op->src.u.dma.length - 1; cr[1] = op->src.u.dma.length - 1;
cr[2] = ccp_addr_lo(&op->src.u.dma); cr[2] = ccp_addr_lo(&op->src.u.dma);
cr[3] = (op->ksb_ctx << REQ4_KSB_SHIFT) cr[3] = (op->sb_ctx << REQ4_KSB_SHIFT)
| (CCP_MEMTYPE_SYSTEM << REQ4_MEMTYPE_SHIFT) | (CCP_MEMTYPE_SYSTEM << REQ4_MEMTYPE_SHIFT)
| ccp_addr_hi(&op->src.u.dma); | ccp_addr_hi(&op->src.u.dma);
...@@ -182,11 +182,11 @@ static int ccp_perform_rsa(struct ccp_op *op) ...@@ -182,11 +182,11 @@ static int ccp_perform_rsa(struct ccp_op *op)
/* Fill out the register contents for REQ1 through REQ6 */ /* Fill out the register contents for REQ1 through REQ6 */
cr[0] = (CCP_ENGINE_RSA << REQ1_ENGINE_SHIFT) cr[0] = (CCP_ENGINE_RSA << REQ1_ENGINE_SHIFT)
| (op->u.rsa.mod_size << REQ1_RSA_MOD_SIZE_SHIFT) | (op->u.rsa.mod_size << REQ1_RSA_MOD_SIZE_SHIFT)
| (op->ksb_key << REQ1_KEY_KSB_SHIFT) | (op->sb_key << REQ1_KEY_KSB_SHIFT)
| REQ1_EOM; | REQ1_EOM;
cr[1] = op->u.rsa.input_len - 1; cr[1] = op->u.rsa.input_len - 1;
cr[2] = ccp_addr_lo(&op->src.u.dma); cr[2] = ccp_addr_lo(&op->src.u.dma);
cr[3] = (op->ksb_ctx << REQ4_KSB_SHIFT) cr[3] = (op->sb_ctx << REQ4_KSB_SHIFT)
| (CCP_MEMTYPE_SYSTEM << REQ4_MEMTYPE_SHIFT) | (CCP_MEMTYPE_SYSTEM << REQ4_MEMTYPE_SHIFT)
| ccp_addr_hi(&op->src.u.dma); | ccp_addr_hi(&op->src.u.dma);
cr[4] = ccp_addr_lo(&op->dst.u.dma); cr[4] = ccp_addr_lo(&op->dst.u.dma);
...@@ -216,10 +216,10 @@ static int ccp_perform_passthru(struct ccp_op *op) ...@@ -216,10 +216,10 @@ static int ccp_perform_passthru(struct ccp_op *op)
| ccp_addr_hi(&op->src.u.dma); | ccp_addr_hi(&op->src.u.dma);
if (op->u.passthru.bit_mod != CCP_PASSTHRU_BITWISE_NOOP) if (op->u.passthru.bit_mod != CCP_PASSTHRU_BITWISE_NOOP)
cr[3] |= (op->ksb_key << REQ4_KSB_SHIFT); cr[3] |= (op->sb_key << REQ4_KSB_SHIFT);
} else { } else {
cr[2] = op->src.u.ksb * CCP_KSB_BYTES; cr[2] = op->src.u.sb * CCP_SB_BYTES;
cr[3] = (CCP_MEMTYPE_KSB << REQ4_MEMTYPE_SHIFT); cr[3] = (CCP_MEMTYPE_SB << REQ4_MEMTYPE_SHIFT);
} }
if (op->dst.type == CCP_MEMTYPE_SYSTEM) { if (op->dst.type == CCP_MEMTYPE_SYSTEM) {
...@@ -227,8 +227,8 @@ static int ccp_perform_passthru(struct ccp_op *op) ...@@ -227,8 +227,8 @@ static int ccp_perform_passthru(struct ccp_op *op)
cr[5] = (CCP_MEMTYPE_SYSTEM << REQ6_MEMTYPE_SHIFT) cr[5] = (CCP_MEMTYPE_SYSTEM << REQ6_MEMTYPE_SHIFT)
| ccp_addr_hi(&op->dst.u.dma); | ccp_addr_hi(&op->dst.u.dma);
} else { } else {
cr[4] = op->dst.u.ksb * CCP_KSB_BYTES; cr[4] = op->dst.u.sb * CCP_SB_BYTES;
cr[5] = (CCP_MEMTYPE_KSB << REQ6_MEMTYPE_SHIFT); cr[5] = (CCP_MEMTYPE_SB << REQ6_MEMTYPE_SHIFT);
} }
if (op->eom) if (op->eom)
...@@ -322,9 +322,9 @@ static int ccp_init(struct ccp_device *ccp) ...@@ -322,9 +322,9 @@ static int ccp_init(struct ccp_device *ccp)
cmd_q->dma_pool = dma_pool; cmd_q->dma_pool = dma_pool;
/* Reserve 2 KSB regions for the queue */ /* Reserve 2 KSB regions for the queue */
cmd_q->ksb_key = KSB_START + ccp->ksb_start++; cmd_q->sb_key = KSB_START + ccp->sb_start++;
cmd_q->ksb_ctx = KSB_START + ccp->ksb_start++; cmd_q->sb_ctx = KSB_START + ccp->sb_start++;
ccp->ksb_count -= 2; ccp->sb_count -= 2;
/* Preset some register values and masks that are queue /* Preset some register values and masks that are queue
* number dependent * number dependent
...@@ -376,7 +376,7 @@ static int ccp_init(struct ccp_device *ccp) ...@@ -376,7 +376,7 @@ static int ccp_init(struct ccp_device *ccp)
} }
/* Initialize the queues used to wait for KSB space and suspend */ /* Initialize the queues used to wait for KSB space and suspend */
init_waitqueue_head(&ccp->ksb_queue); init_waitqueue_head(&ccp->sb_queue);
init_waitqueue_head(&ccp->suspend_queue); init_waitqueue_head(&ccp->suspend_queue);
/* Create a kthread for each queue */ /* Create a kthread for each queue */
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
* Copyright (C) 2013,2016 Advanced Micro Devices, Inc. * Copyright (C) 2013,2016 Advanced Micro Devices, Inc.
* *
* Author: Tom Lendacky <thomas.lendacky@amd.com> * Author: Tom Lendacky <thomas.lendacky@amd.com>
* Author: Gary R Hook <gary.hook@amd.com>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
...@@ -397,9 +398,9 @@ struct ccp_device *ccp_alloc_struct(struct device *dev) ...@@ -397,9 +398,9 @@ struct ccp_device *ccp_alloc_struct(struct device *dev)
spin_lock_init(&ccp->cmd_lock); spin_lock_init(&ccp->cmd_lock);
mutex_init(&ccp->req_mutex); mutex_init(&ccp->req_mutex);
mutex_init(&ccp->ksb_mutex); mutex_init(&ccp->sb_mutex);
ccp->ksb_count = KSB_COUNT; ccp->sb_count = KSB_COUNT;
ccp->ksb_start = 0; ccp->sb_start = 0;
ccp->ord = ccp_increment_unit_ordinal(); ccp->ord = ccp_increment_unit_ordinal();
snprintf(ccp->name, MAX_CCP_NAME_LEN, "ccp-%u", ccp->ord); snprintf(ccp->name, MAX_CCP_NAME_LEN, "ccp-%u", ccp->ord);
......
...@@ -111,8 +111,7 @@ ...@@ -111,8 +111,7 @@
#define KSB_START 77 #define KSB_START 77
#define KSB_END 127 #define KSB_END 127
#define KSB_COUNT (KSB_END - KSB_START + 1) #define KSB_COUNT (KSB_END - KSB_START + 1)
#define CCP_KSB_BITS 256 #define CCP_SB_BITS 256
#define CCP_KSB_BYTES 32
#define CCP_JOBID_MASK 0x0000003f #define CCP_JOBID_MASK 0x0000003f
...@@ -121,19 +120,19 @@ ...@@ -121,19 +120,19 @@
#define CCP_REVERSE_BUF_SIZE 64 #define CCP_REVERSE_BUF_SIZE 64
#define CCP_AES_KEY_KSB_COUNT 1 #define CCP_AES_KEY_SB_COUNT 1
#define CCP_AES_CTX_KSB_COUNT 1 #define CCP_AES_CTX_SB_COUNT 1
#define CCP_XTS_AES_KEY_KSB_COUNT 1 #define CCP_XTS_AES_KEY_SB_COUNT 1
#define CCP_XTS_AES_CTX_KSB_COUNT 1 #define CCP_XTS_AES_CTX_SB_COUNT 1
#define CCP_SHA_KSB_COUNT 1 #define CCP_SHA_SB_COUNT 1
#define CCP_RSA_MAX_WIDTH 4096 #define CCP_RSA_MAX_WIDTH 4096
#define CCP_PASSTHRU_BLOCKSIZE 256 #define CCP_PASSTHRU_BLOCKSIZE 256
#define CCP_PASSTHRU_MASKSIZE 32 #define CCP_PASSTHRU_MASKSIZE 32
#define CCP_PASSTHRU_KSB_COUNT 1 #define CCP_PASSTHRU_SB_COUNT 1
#define CCP_ECC_MODULUS_BYTES 48 /* 384-bits */ #define CCP_ECC_MODULUS_BYTES 48 /* 384-bits */
#define CCP_ECC_MAX_OPERANDS 6 #define CCP_ECC_MAX_OPERANDS 6
...@@ -145,6 +144,8 @@ ...@@ -145,6 +144,8 @@
#define CCP_ECC_RESULT_OFFSET 60 #define CCP_ECC_RESULT_OFFSET 60
#define CCP_ECC_RESULT_SUCCESS 0x0001 #define CCP_ECC_RESULT_SUCCESS 0x0001
#define CCP_SB_BYTES 32
struct ccp_op; struct ccp_op;
/* Structure for computation functions that are device-specific */ /* Structure for computation functions that are device-specific */
...@@ -215,9 +216,9 @@ struct ccp_cmd_queue { ...@@ -215,9 +216,9 @@ struct ccp_cmd_queue {
/* Queue dma pool */ /* Queue dma pool */
struct dma_pool *dma_pool; struct dma_pool *dma_pool;
/* Queue reserved KSB regions */ /* Per-queue reserved storage block(s) */
u32 ksb_key; u32 sb_key;
u32 ksb_ctx; u32 sb_ctx;
/* Queue processing thread */ /* Queue processing thread */
struct task_struct *kthread; struct task_struct *kthread;
...@@ -313,12 +314,12 @@ struct ccp_device { ...@@ -313,12 +314,12 @@ struct ccp_device {
* to avoid allocation contention. This will reserve at most 10 KSB * to avoid allocation contention. This will reserve at most 10 KSB
* entries, leaving 40 KSB entries available for dynamic allocation. * entries, leaving 40 KSB entries available for dynamic allocation.
*/ */
struct mutex ksb_mutex ____cacheline_aligned; struct mutex sb_mutex ____cacheline_aligned;
DECLARE_BITMAP(ksb, KSB_COUNT); DECLARE_BITMAP(sb, KSB_COUNT);
wait_queue_head_t ksb_queue; wait_queue_head_t sb_queue;
unsigned int ksb_avail; unsigned int sb_avail;
unsigned int ksb_count; unsigned int sb_count;
u32 ksb_start; u32 sb_start;
/* Suspend support */ /* Suspend support */
unsigned int suspending; unsigned int suspending;
...@@ -330,7 +331,7 @@ struct ccp_device { ...@@ -330,7 +331,7 @@ struct ccp_device {
enum ccp_memtype { enum ccp_memtype {
CCP_MEMTYPE_SYSTEM = 0, CCP_MEMTYPE_SYSTEM = 0,
CCP_MEMTYPE_KSB, CCP_MEMTYPE_SB,
CCP_MEMTYPE_LOCAL, CCP_MEMTYPE_LOCAL,
CCP_MEMTYPE__LAST, CCP_MEMTYPE__LAST,
}; };
...@@ -374,7 +375,7 @@ struct ccp_mem { ...@@ -374,7 +375,7 @@ struct ccp_mem {
enum ccp_memtype type; enum ccp_memtype type;
union { union {
struct ccp_dma_info dma; struct ccp_dma_info dma;
u32 ksb; u32 sb;
} u; } u;
}; };
...@@ -414,8 +415,8 @@ struct ccp_op { ...@@ -414,8 +415,8 @@ struct ccp_op {
u32 jobid; u32 jobid;
u32 ioc; u32 ioc;
u32 soc; u32 soc;
u32 ksb_key; u32 sb_key;
u32 ksb_ctx; u32 sb_ctx;
u32 init; u32 init;
u32 eom; u32 eom;
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment