Commit 1a895f1d authored by Geert Uytterhoeven's avatar Geert Uytterhoeven Committed by Herbert Xu

crypto: ccree - use u32 for SRAM addresses

SRAM addresses are small integer offsets into local SRAM.  Currently
they are stored using a mixture of cc_sram_addr_t (u64), u32, and
dma_addr_t types.

Settle on u32, and remove the cc_sram_addr_t typedefs.
This allows to drop several casts.
Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 37282f8d
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#define MAX_NONCE_SIZE CTR_RFC3686_NONCE_SIZE #define MAX_NONCE_SIZE CTR_RFC3686_NONCE_SIZE
struct cc_aead_handle { struct cc_aead_handle {
cc_sram_addr_t sram_workspace_addr; u32 sram_workspace_addr;
struct list_head aead_list; struct list_head aead_list;
}; };
...@@ -797,7 +797,7 @@ static void cc_proc_authen_desc(struct aead_request *areq, ...@@ -797,7 +797,7 @@ static void cc_proc_authen_desc(struct aead_request *areq,
* assoc. + iv + data -compact in one table * assoc. + iv + data -compact in one table
* if assoclen is ZERO only IV perform * if assoclen is ZERO only IV perform
*/ */
cc_sram_addr_t mlli_addr = areq_ctx->assoc.sram_addr; u32 mlli_addr = areq_ctx->assoc.sram_addr;
u32 mlli_nents = areq_ctx->assoc.mlli_nents; u32 mlli_nents = areq_ctx->assoc.mlli_nents;
if (areq_ctx->is_single_pass) { if (areq_ctx->is_single_pass) {
...@@ -1171,7 +1171,7 @@ static void cc_mlli_to_sram(struct aead_request *req, ...@@ -1171,7 +1171,7 @@ static void cc_mlli_to_sram(struct aead_request *req,
req_ctx->data_buff_type == CC_DMA_BUF_MLLI || req_ctx->data_buff_type == CC_DMA_BUF_MLLI ||
!req_ctx->is_single_pass) && req_ctx->mlli_params.mlli_len) { !req_ctx->is_single_pass) && req_ctx->mlli_params.mlli_len) {
dev_dbg(dev, "Copy-to-sram: mlli_dma=%08x, mlli_size=%u\n", dev_dbg(dev, "Copy-to-sram: mlli_dma=%08x, mlli_size=%u\n",
(unsigned int)ctx->drvdata->mlli_sram_addr, ctx->drvdata->mlli_sram_addr,
req_ctx->mlli_params.mlli_len); req_ctx->mlli_params.mlli_len);
/* Copy MLLI table host-to-sram */ /* Copy MLLI table host-to-sram */
hw_desc_init(&desc[*seq_size]); hw_desc_init(&desc[*seq_size]);
......
...@@ -24,7 +24,7 @@ enum cc_sg_cpy_direct { ...@@ -24,7 +24,7 @@ enum cc_sg_cpy_direct {
}; };
struct cc_mlli { struct cc_mlli {
cc_sram_addr_t sram_addr; u32 sram_addr;
unsigned int mapped_nents; unsigned int mapped_nents;
unsigned int nents; //sg nents unsigned int nents; //sg nents
unsigned int mlli_nents; //mlli nents might be different than the above unsigned int mlli_nents; //mlli nents might be different than the above
......
...@@ -745,7 +745,7 @@ static void cc_setup_mlli_desc(struct crypto_tfm *tfm, ...@@ -745,7 +745,7 @@ static void cc_setup_mlli_desc(struct crypto_tfm *tfm,
dev_dbg(dev, " bypass params addr %pad length 0x%X addr 0x%08X\n", dev_dbg(dev, " bypass params addr %pad length 0x%X addr 0x%08X\n",
&req_ctx->mlli_params.mlli_dma_addr, &req_ctx->mlli_params.mlli_dma_addr,
req_ctx->mlli_params.mlli_len, req_ctx->mlli_params.mlli_len,
(unsigned int)ctx_p->drvdata->mlli_sram_addr); ctx_p->drvdata->mlli_sram_addr);
hw_desc_init(&desc[*seq_size]); hw_desc_init(&desc[*seq_size]);
set_din_type(&desc[*seq_size], DMA_DLLI, set_din_type(&desc[*seq_size], DMA_DLLI,
req_ctx->mlli_params.mlli_dma_addr, req_ctx->mlli_params.mlli_dma_addr,
...@@ -793,16 +793,16 @@ static void cc_setup_flow_desc(struct crypto_tfm *tfm, ...@@ -793,16 +793,16 @@ static void cc_setup_flow_desc(struct crypto_tfm *tfm,
req_ctx->in_mlli_nents, NS_BIT); req_ctx->in_mlli_nents, NS_BIT);
if (req_ctx->out_nents == 0) { if (req_ctx->out_nents == 0) {
dev_dbg(dev, " din/dout params addr 0x%08X addr 0x%08X\n", dev_dbg(dev, " din/dout params addr 0x%08X addr 0x%08X\n",
(unsigned int)ctx_p->drvdata->mlli_sram_addr, ctx_p->drvdata->mlli_sram_addr,
(unsigned int)ctx_p->drvdata->mlli_sram_addr); ctx_p->drvdata->mlli_sram_addr);
set_dout_mlli(&desc[*seq_size], set_dout_mlli(&desc[*seq_size],
ctx_p->drvdata->mlli_sram_addr, ctx_p->drvdata->mlli_sram_addr,
req_ctx->in_mlli_nents, NS_BIT, req_ctx->in_mlli_nents, NS_BIT,
(!last_desc ? 0 : 1)); (!last_desc ? 0 : 1));
} else { } else {
dev_dbg(dev, " din/dout params addr 0x%08X addr 0x%08X\n", dev_dbg(dev, " din/dout params addr 0x%08X addr 0x%08X\n",
(unsigned int)ctx_p->drvdata->mlli_sram_addr, ctx_p->drvdata->mlli_sram_addr,
(unsigned int)ctx_p->drvdata->mlli_sram_addr + ctx_p->drvdata->mlli_sram_addr +
(u32)LLI_ENTRY_BYTE_SIZE * req_ctx->in_nents); (u32)LLI_ENTRY_BYTE_SIZE * req_ctx->in_nents);
set_dout_mlli(&desc[*seq_size], set_dout_mlli(&desc[*seq_size],
(ctx_p->drvdata->mlli_sram_addr + (ctx_p->drvdata->mlli_sram_addr +
......
...@@ -139,7 +139,7 @@ struct cc_drvdata { ...@@ -139,7 +139,7 @@ struct cc_drvdata {
int irq; int irq;
struct completion hw_queue_avail; /* wait for HW queue availability */ struct completion hw_queue_avail; /* wait for HW queue availability */
struct platform_device *plat_dev; struct platform_device *plat_dev;
cc_sram_addr_t mlli_sram_addr; u32 mlli_sram_addr;
void *buff_mgr_handle; void *buff_mgr_handle;
void *cipher_handle; void *cipher_handle;
void *hash_handle; void *hash_handle;
......
...@@ -20,8 +20,8 @@ ...@@ -20,8 +20,8 @@
#define CC_SM3_HASH_LEN_SIZE 8 #define CC_SM3_HASH_LEN_SIZE 8
struct cc_hash_handle { struct cc_hash_handle {
cc_sram_addr_t digest_len_sram_addr; /* const value in SRAM*/ u32 digest_len_sram_addr; /* const value in SRAM*/
cc_sram_addr_t larval_digest_sram_addr; /* const value in SRAM */ u32 larval_digest_sram_addr; /* const value in SRAM */
struct list_head hash_list; struct list_head hash_list;
}; };
...@@ -429,7 +429,7 @@ static int cc_hash_digest(struct ahash_request *req) ...@@ -429,7 +429,7 @@ static int cc_hash_digest(struct ahash_request *req)
bool is_hmac = ctx->is_hmac; bool is_hmac = ctx->is_hmac;
struct cc_crypto_req cc_req = {}; struct cc_crypto_req cc_req = {};
struct cc_hw_desc desc[CC_MAX_HASH_SEQ_LEN]; struct cc_hw_desc desc[CC_MAX_HASH_SEQ_LEN];
cc_sram_addr_t larval_digest_addr; u32 larval_digest_addr;
int idx = 0; int idx = 0;
int rc = 0; int rc = 0;
gfp_t flags = cc_gfp_flags(&req->base); gfp_t flags = cc_gfp_flags(&req->base);
...@@ -734,7 +734,7 @@ static int cc_hash_setkey(struct crypto_ahash *ahash, const u8 *key, ...@@ -734,7 +734,7 @@ static int cc_hash_setkey(struct crypto_ahash *ahash, const u8 *key,
int digestsize = 0; int digestsize = 0;
int i, idx = 0, rc = 0; int i, idx = 0, rc = 0;
struct cc_hw_desc desc[CC_MAX_HASH_SEQ_LEN]; struct cc_hw_desc desc[CC_MAX_HASH_SEQ_LEN];
cc_sram_addr_t larval_addr; u32 larval_addr;
struct device *dev; struct device *dev;
ctx = crypto_ahash_ctx(ahash); ctx = crypto_ahash_ctx(ahash);
...@@ -1868,7 +1868,7 @@ static struct cc_hash_alg *cc_alloc_hash_alg(struct cc_hash_template *template, ...@@ -1868,7 +1868,7 @@ static struct cc_hash_alg *cc_alloc_hash_alg(struct cc_hash_template *template,
int cc_init_hash_sram(struct cc_drvdata *drvdata) int cc_init_hash_sram(struct cc_drvdata *drvdata)
{ {
struct cc_hash_handle *hash_handle = drvdata->hash_handle; struct cc_hash_handle *hash_handle = drvdata->hash_handle;
cc_sram_addr_t sram_buff_ofs = hash_handle->digest_len_sram_addr; u32 sram_buff_ofs = hash_handle->digest_len_sram_addr;
unsigned int larval_seq_len = 0; unsigned int larval_seq_len = 0;
struct cc_hw_desc larval_seq[CC_DIGEST_SIZE_MAX / sizeof(u32)]; struct cc_hw_desc larval_seq[CC_DIGEST_SIZE_MAX / sizeof(u32)];
bool large_sha_supported = (drvdata->hw_rev >= CC_HW_REV_712); bool large_sha_supported = (drvdata->hw_rev >= CC_HW_REV_712);
...@@ -1974,7 +1974,7 @@ int cc_init_hash_sram(struct cc_drvdata *drvdata) ...@@ -1974,7 +1974,7 @@ int cc_init_hash_sram(struct cc_drvdata *drvdata)
int cc_hash_alloc(struct cc_drvdata *drvdata) int cc_hash_alloc(struct cc_drvdata *drvdata)
{ {
struct cc_hash_handle *hash_handle; struct cc_hash_handle *hash_handle;
cc_sram_addr_t sram_buff; u32 sram_buff;
u32 sram_size_to_alloc; u32 sram_size_to_alloc;
struct device *dev = drvdata_to_dev(drvdata); struct device *dev = drvdata_to_dev(drvdata);
int rc = 0; int rc = 0;
...@@ -2266,13 +2266,13 @@ static const void *cc_larval_digest(struct device *dev, u32 mode) ...@@ -2266,13 +2266,13 @@ static const void *cc_larval_digest(struct device *dev, u32 mode)
* *
* \return u32 The address of the initial digest in SRAM * \return u32 The address of the initial digest in SRAM
*/ */
cc_sram_addr_t cc_larval_digest_addr(void *drvdata, u32 mode) u32 cc_larval_digest_addr(void *drvdata, u32 mode)
{ {
struct cc_drvdata *_drvdata = (struct cc_drvdata *)drvdata; struct cc_drvdata *_drvdata = (struct cc_drvdata *)drvdata;
struct cc_hash_handle *hash_handle = _drvdata->hash_handle; struct cc_hash_handle *hash_handle = _drvdata->hash_handle;
struct device *dev = drvdata_to_dev(_drvdata); struct device *dev = drvdata_to_dev(_drvdata);
bool sm3_supported = (_drvdata->hw_rev >= CC_HW_REV_713); bool sm3_supported = (_drvdata->hw_rev >= CC_HW_REV_713);
cc_sram_addr_t addr; u32 addr;
switch (mode) { switch (mode) {
case DRV_HASH_NULL: case DRV_HASH_NULL:
...@@ -2324,12 +2324,11 @@ cc_sram_addr_t cc_larval_digest_addr(void *drvdata, u32 mode) ...@@ -2324,12 +2324,11 @@ cc_sram_addr_t cc_larval_digest_addr(void *drvdata, u32 mode)
return hash_handle->larval_digest_sram_addr; return hash_handle->larval_digest_sram_addr;
} }
cc_sram_addr_t u32 cc_digest_len_addr(void *drvdata, u32 mode)
cc_digest_len_addr(void *drvdata, u32 mode)
{ {
struct cc_drvdata *_drvdata = (struct cc_drvdata *)drvdata; struct cc_drvdata *_drvdata = (struct cc_drvdata *)drvdata;
struct cc_hash_handle *hash_handle = _drvdata->hash_handle; struct cc_hash_handle *hash_handle = _drvdata->hash_handle;
cc_sram_addr_t digest_len_addr = hash_handle->digest_len_sram_addr; u32 digest_len_addr = hash_handle->digest_len_sram_addr;
switch (mode) { switch (mode) {
case DRV_HASH_SHA1: case DRV_HASH_SHA1:
......
...@@ -89,8 +89,7 @@ int cc_hash_free(struct cc_drvdata *drvdata); ...@@ -89,8 +89,7 @@ int cc_hash_free(struct cc_drvdata *drvdata);
* *
* \return u32 returns the address of the initial digest length in SRAM * \return u32 returns the address of the initial digest length in SRAM
*/ */
cc_sram_addr_t u32 cc_digest_len_addr(void *drvdata, u32 mode);
cc_digest_len_addr(void *drvdata, u32 mode);
/*! /*!
* Gets the address of the initial digest in SRAM * Gets the address of the initial digest in SRAM
...@@ -102,6 +101,6 @@ cc_digest_len_addr(void *drvdata, u32 mode); ...@@ -102,6 +101,6 @@ cc_digest_len_addr(void *drvdata, u32 mode);
* *
* \return u32 The address of the initial digest in SRAM * \return u32 The address of the initial digest in SRAM
*/ */
cc_sram_addr_t cc_larval_digest_addr(void *drvdata, u32 mode); u32 cc_larval_digest_addr(void *drvdata, u32 mode);
#endif /*__CC_HASH_H__*/ #endif /*__CC_HASH_H__*/
...@@ -290,10 +290,9 @@ static inline void set_cpp_crypto_key(struct cc_hw_desc *pdesc, u8 slot) ...@@ -290,10 +290,9 @@ static inline void set_cpp_crypto_key(struct cc_hw_desc *pdesc, u8 slot)
* @addr: DIN address * @addr: DIN address
* @size Data size in bytes * @size Data size in bytes
*/ */
static inline void set_din_sram(struct cc_hw_desc *pdesc, dma_addr_t addr, static inline void set_din_sram(struct cc_hw_desc *pdesc, u32 addr, u32 size)
u32 size)
{ {
pdesc->word[0] = (u32)addr; pdesc->word[0] = addr;
pdesc->word[1] |= FIELD_PREP(WORD1_DIN_SIZE, size) | pdesc->word[1] |= FIELD_PREP(WORD1_DIN_SIZE, size) |
FIELD_PREP(WORD1_DIN_DMA_MODE, DMA_SRAM); FIELD_PREP(WORD1_DIN_DMA_MODE, DMA_SRAM);
} }
...@@ -373,9 +372,8 @@ static inline void set_dout_dlli(struct cc_hw_desc *pdesc, dma_addr_t addr, ...@@ -373,9 +372,8 @@ static inline void set_dout_dlli(struct cc_hw_desc *pdesc, dma_addr_t addr,
* @last_ind: The last indication bit * @last_ind: The last indication bit
* @axi_sec: AXI secure bit * @axi_sec: AXI secure bit
*/ */
static inline void set_dout_mlli(struct cc_hw_desc *pdesc, dma_addr_t addr, static inline void set_dout_mlli(struct cc_hw_desc *pdesc, u32 addr, u32 size,
u32 size, enum cc_axi_sec axi_sec, enum cc_axi_sec axi_sec, bool last_ind)
bool last_ind)
{ {
set_dout_type(pdesc, DMA_MLLI, addr, size, axi_sec); set_dout_type(pdesc, DMA_MLLI, addr, size, axi_sec);
pdesc->word[3] |= FIELD_PREP(WORD3_DOUT_LAST_IND, last_ind); pdesc->word[3] |= FIELD_PREP(WORD3_DOUT_LAST_IND, last_ind);
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* @sram_free_offset: the offset to the non-allocated area * @sram_free_offset: the offset to the non-allocated area
*/ */
struct cc_sram_ctx { struct cc_sram_ctx {
cc_sram_addr_t sram_free_offset; u32 sram_free_offset;
}; };
/** /**
...@@ -22,23 +22,20 @@ struct cc_sram_ctx { ...@@ -22,23 +22,20 @@ struct cc_sram_ctx {
int cc_sram_mgr_init(struct cc_drvdata *drvdata) int cc_sram_mgr_init(struct cc_drvdata *drvdata)
{ {
struct cc_sram_ctx *ctx; struct cc_sram_ctx *ctx;
dma_addr_t start = 0; u32 start = 0;
struct device *dev = drvdata_to_dev(drvdata); struct device *dev = drvdata_to_dev(drvdata);
if (drvdata->hw_rev < CC_HW_REV_712) { if (drvdata->hw_rev < CC_HW_REV_712) {
/* Pool starts after ROM bytes */ /* Pool starts after ROM bytes */
start = (dma_addr_t)cc_ioread(drvdata, start = cc_ioread(drvdata, CC_REG(HOST_SEP_SRAM_THRESHOLD));
CC_REG(HOST_SEP_SRAM_THRESHOLD));
if ((start & 0x3) != 0) { if ((start & 0x3) != 0) {
dev_err(dev, "Invalid SRAM offset %pad\n", &start); dev_err(dev, "Invalid SRAM offset 0x%x\n", start);
return -EINVAL; return -EINVAL;
} }
} }
/* Allocate "this" context */ /* Allocate "this" context */
ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
if (!ctx) if (!ctx)
return -ENOMEM; return -ENOMEM;
...@@ -54,11 +51,11 @@ int cc_sram_mgr_init(struct cc_drvdata *drvdata) ...@@ -54,11 +51,11 @@ int cc_sram_mgr_init(struct cc_drvdata *drvdata)
* \param drvdata * \param drvdata
* \param size The requested bytes to allocate * \param size The requested bytes to allocate
*/ */
cc_sram_addr_t cc_sram_alloc(struct cc_drvdata *drvdata, u32 size) u32 cc_sram_alloc(struct cc_drvdata *drvdata, u32 size)
{ {
struct cc_sram_ctx *smgr_ctx = drvdata->sram_mgr_handle; struct cc_sram_ctx *smgr_ctx = drvdata->sram_mgr_handle;
struct device *dev = drvdata_to_dev(drvdata); struct device *dev = drvdata_to_dev(drvdata);
cc_sram_addr_t p; u32 p;
if ((size & 0x3)) { if ((size & 0x3)) {
dev_err(dev, "Requested buffer size (%u) is not multiple of 4", dev_err(dev, "Requested buffer size (%u) is not multiple of 4",
...@@ -66,14 +63,14 @@ cc_sram_addr_t cc_sram_alloc(struct cc_drvdata *drvdata, u32 size) ...@@ -66,14 +63,14 @@ cc_sram_addr_t cc_sram_alloc(struct cc_drvdata *drvdata, u32 size)
return NULL_SRAM_ADDR; return NULL_SRAM_ADDR;
} }
if (size > (CC_CC_SRAM_SIZE - smgr_ctx->sram_free_offset)) { if (size > (CC_CC_SRAM_SIZE - smgr_ctx->sram_free_offset)) {
dev_err(dev, "Not enough space to allocate %u B (at offset %llu)\n", dev_err(dev, "Not enough space to allocate %u B (at offset %u)\n",
size, smgr_ctx->sram_free_offset); size, smgr_ctx->sram_free_offset);
return NULL_SRAM_ADDR; return NULL_SRAM_ADDR;
} }
p = smgr_ctx->sram_free_offset; p = smgr_ctx->sram_free_offset;
smgr_ctx->sram_free_offset += size; smgr_ctx->sram_free_offset += size;
dev_dbg(dev, "Allocated %u B @ %u\n", size, (unsigned int)p); dev_dbg(dev, "Allocated %u B @ %u\n", size, p);
return p; return p;
} }
...@@ -88,9 +85,8 @@ cc_sram_addr_t cc_sram_alloc(struct cc_drvdata *drvdata, u32 size) ...@@ -88,9 +85,8 @@ cc_sram_addr_t cc_sram_alloc(struct cc_drvdata *drvdata, u32 size)
* @seq: A pointer to the given IN/OUT descriptor sequence * @seq: A pointer to the given IN/OUT descriptor sequence
* @seq_len: A pointer to the given IN/OUT sequence length * @seq_len: A pointer to the given IN/OUT sequence length
*/ */
void cc_set_sram_desc(const u32 *src, cc_sram_addr_t dst, void cc_set_sram_desc(const u32 *src, u32 dst, unsigned int nelement,
unsigned int nelement, struct cc_hw_desc *seq, struct cc_hw_desc *seq, unsigned int *seq_len)
unsigned int *seq_len)
{ {
u32 i; u32 i;
unsigned int idx = *seq_len; unsigned int idx = *seq_len;
......
...@@ -10,13 +10,7 @@ ...@@ -10,13 +10,7 @@
struct cc_drvdata; struct cc_drvdata;
/** #define NULL_SRAM_ADDR ((u32)-1)
* Address (offset) within CC internal SRAM
*/
typedef u64 cc_sram_addr_t;
#define NULL_SRAM_ADDR ((cc_sram_addr_t)-1)
/*! /*!
* Initializes SRAM pool. * Initializes SRAM pool.
...@@ -35,7 +29,7 @@ int cc_sram_mgr_init(struct cc_drvdata *drvdata); ...@@ -35,7 +29,7 @@ int cc_sram_mgr_init(struct cc_drvdata *drvdata);
* \param drvdata * \param drvdata
* \param size The requested bytes to allocate * \param size The requested bytes to allocate
*/ */
cc_sram_addr_t cc_sram_alloc(struct cc_drvdata *drvdata, u32 size); u32 cc_sram_alloc(struct cc_drvdata *drvdata, u32 size);
/** /**
* cc_set_sram_desc() - Create const descriptors sequence to * cc_set_sram_desc() - Create const descriptors sequence to
...@@ -48,8 +42,7 @@ cc_sram_addr_t cc_sram_alloc(struct cc_drvdata *drvdata, u32 size); ...@@ -48,8 +42,7 @@ cc_sram_addr_t cc_sram_alloc(struct cc_drvdata *drvdata, u32 size);
* @seq: A pointer to the given IN/OUT descriptor sequence * @seq: A pointer to the given IN/OUT descriptor sequence
* @seq_len: A pointer to the given IN/OUT sequence length * @seq_len: A pointer to the given IN/OUT sequence length
*/ */
void cc_set_sram_desc(const u32 *src, cc_sram_addr_t dst, void cc_set_sram_desc(const u32 *src, u32 dst, unsigned int nelement,
unsigned int nelement, struct cc_hw_desc *seq, struct cc_hw_desc *seq, unsigned int *seq_len);
unsigned int *seq_len);
#endif /*__CC_SRAM_MGR_H__*/ #endif /*__CC_SRAM_MGR_H__*/
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