2013-05-13 14:53:10

by Andrei Varvara

[permalink] [raw]
Subject: [PATCH 1/8] crypto: caam - fix SEQ IN PTR command when RTO or PRE bit is set

SEQ IN PTR command does not require pointer if RTO or PRE bit is set
Updated desc_constr.h accordingly.

Signed-off-by: Andrei Varvara <[email protected]>
Reviewed-by: Phillips Kim-R1AAHA <[email protected]>
Reviewed-by: Fleming Andrew-AFLEMING <[email protected]>
---
drivers/crypto/caam/desc.h | 4 ++--
drivers/crypto/caam/desc_constr.h | 8 ++++++--
2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/crypto/caam/desc.h b/drivers/crypto/caam/desc.h
index f7f833b..89fa3d0 100644
--- a/drivers/crypto/caam/desc.h
+++ b/drivers/crypto/caam/desc.h
@@ -1290,18 +1290,18 @@ struct sec4_sg_entry {
* SEQ_OUT_PTR Command Constructs
*/

/* Sequence pointer is a scatter-gather table */
#define SQOUT_SGF 0x01000000

/* Appends to a previous pointer */
-#define SQOUT_PRE 0x00800000
+#define SQOUT_PRE SQIN_PRE

/* Restore sequence with pointer/length */
-#define SQOUT_RTO 0x00200000
+#define SQOUT_RTO SQIN_RTO

/* Use extended length following pointer */
#define SQOUT_EXT 0x00400000

#define SQOUT_LEN_SHIFT 0
#define SQOUT_LEN_MASK (0xffff << SQOUT_LEN_SHIFT)

diff --git a/drivers/crypto/caam/desc_constr.h b/drivers/crypto/caam/desc_constr.h
index c85c1f0..19501b5 100644
--- a/drivers/crypto/caam/desc_constr.h
+++ b/drivers/crypto/caam/desc_constr.h
@@ -118,15 +118,16 @@ static inline void append_cmd_ptr(u32 *desc, dma_addr_t ptr, int len,
}

/* Write length after pointer, rather than inside command */
static inline void append_cmd_ptr_extlen(u32 *desc, dma_addr_t ptr,
unsigned int len, u32 command)
{
append_cmd(desc, command);
- append_ptr(desc, ptr);
+ if (!(command & (SQIN_RTO | SQIN_PRE)))
+ append_ptr(desc, ptr);
append_cmd(desc, len);
}

static inline void append_cmd_data(u32 *desc, void *data, int len,
u32 command)
{
append_cmd(desc, command | IMMEDIATE | len);
@@ -182,15 +183,18 @@ APPEND_CMD_PTR(fifo_store, FIFO_STORE)

#define APPEND_SEQ_PTR_INTLEN(cmd, op) \
static inline void append_seq_##cmd##_ptr_intlen(u32 *desc, dma_addr_t ptr, \
unsigned int len, \
u32 options) \
{ \
PRINT_POS; \
- append_cmd_ptr(desc, ptr, len, CMD_SEQ_##op##_PTR | options); \
+ if (options & (SQIN_RTO | SQIN_PRE)) \
+ append_cmd(desc, CMD_SEQ_##op##_PTR | len | options); \
+ else \
+ append_cmd_ptr(desc, ptr, len, CMD_SEQ_##op##_PTR | options); \
}
APPEND_SEQ_PTR_INTLEN(in, IN)
APPEND_SEQ_PTR_INTLEN(out, OUT)

#define APPEND_CMD_PTR_TO_IMM(cmd, op) \
static inline void append_##cmd##_as_imm(u32 *desc, void *data, \
unsigned int len, u32 options) \
--
1.7.3.4


2013-05-28 09:51:01

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH 1/8] crypto: caam - fix SEQ IN PTR command when RTO or PRE bit is set

On Mon, May 13, 2013 at 02:37:57PM +0000, Andrei Varvara wrote:
> SEQ IN PTR command does not require pointer if RTO or PRE bit is set
> Updated desc_constr.h accordingly.
>
> Signed-off-by: Andrei Varvara <[email protected]>
> Reviewed-by: Phillips Kim-R1AAHA <[email protected]>
> Reviewed-by: Fleming Andrew-AFLEMING <[email protected]>

All applied to cryptodev. Thanks!
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt