From 00fa57d80dc4f71594ebc7c14e714885f7064951 Mon Sep 17 00:00:00 2001 From: Lin Jinhan Date: Tue, 24 Nov 2020 10:50:10 +0800 Subject: [PATCH] driver: crypto: mask CRYPTO_SYNC_LOCKSTEP_INT_ST flag This flag maybe abnormal trigger. Change-Id: Id398d1e8636c28b8cc42d950cafa5e2731a41b62 Signed-off-by: Lin Jinhan --- drivers/crypto/rockchip/crypto_v2.c | 7 +++++-- include/rockchip/crypto_v2.h | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/crypto/rockchip/crypto_v2.c b/drivers/crypto/rockchip/crypto_v2.c index 0cf76627bc..aef4de95bd 100644 --- a/drivers/crypto/rockchip/crypto_v2.c +++ b/drivers/crypto/rockchip/crypto_v2.c @@ -233,7 +233,7 @@ static int rk_hash_direct_calc(void *hw_data, const u8 *data, struct rk_hash_ctx *hash_ctx = priv->hw_ctx; struct crypto_lli_desc *lli = &hash_ctx->data_lli; int ret = -EINVAL; - u32 tmp = 0; + u32 tmp = 0, mask = 0; assert(IS_ALIGNED((ulong)data, DATA_ADDR_ALIGIN_SIZE)); assert(is_last || IS_ALIGNED(data_len, DATA_LEN_ALIGIN_SIZE)); @@ -274,8 +274,11 @@ static int rk_hash_direct_calc(void *hw_data, const u8 *data, crypto_write(tmp << CRYPTO_WRITE_MASK_SHIFT | tmp, CRYPTO_DMA_CTL); + /* mask CRYPTO_SYNC_LOCKSTEP_INT_ST flag */ + mask = ~(mask | CRYPTO_SYNC_LOCKSTEP_INT_ST); + /* wait calc ok */ - RK_WHILE_TIME_OUT(!crypto_read(CRYPTO_DMA_INT_ST), + RK_WHILE_TIME_OUT(!(crypto_read(CRYPTO_DMA_INT_ST) & mask), RK_CRYPTO_TIME_OUT, ret); /* clear interrupt status */ diff --git a/include/rockchip/crypto_v2.h b/include/rockchip/crypto_v2.h index f1e18beaa1..e17e6625b9 100644 --- a/include/rockchip/crypto_v2.h +++ b/include/rockchip/crypto_v2.h @@ -81,6 +81,8 @@ enum rk_hash_algo { /* Crypto DMA control registers*/ #define CRYPTO_DMA_INT_EN 0x0008 +#define CRYPTO_NOSYNC_LOCKSTEP_INT_EN _BIT(8) +#define CRYPTO_SYNC_LOCKSTEP_INT_EN _BIT(7) #define CRYPTO_ZERO_ERR_INT_EN _BIT(6) #define CRYPTO_LIST_ERR_INT_EN _BIT(5) #define CRYPTO_SRC_ERR_INT_EN _BIT(4) @@ -90,6 +92,7 @@ enum rk_hash_algo { #define CRYPTO_LIST_DONE_INT_EN _BIT(0) #define CRYPTO_DMA_INT_ST 0x000C +#define CRYPTO_SYNC_LOCKSTEP_INT_ST _BIT(7) #define CRYPTO_ZERO_LEN_INT_ST _BIT(6) #define CRYPTO_LIST_ERR_INT_ST _BIT(5) #define CRYPTO_SRC_ERR_INT_ST _BIT(4)