From 31bd563fc727318e23a4f5ef6208439a57d605ed Mon Sep 17 00:00:00 2001 From: Lin Jinhan Date: Tue, 11 May 2021 16:09:25 +0800 Subject: [PATCH] crypto: rockchip: mask lock_step error int flag lock_step will accidentally triggered sometimes. Change-Id: I401c662d515cf17e6c89dfb2dfa4b33b6866b8a5 Signed-off-by: Lin Jinhan --- drivers/crypto/rockchip/rk_crypto_v2_ablkcipher.c | 2 ++ drivers/crypto/rockchip/rk_crypto_v2_ahash.c | 2 ++ drivers/crypto/rockchip/rk_crypto_v2_reg.h | 2 ++ 3 files changed, 6 insertions(+) diff --git a/drivers/crypto/rockchip/rk_crypto_v2_ablkcipher.c b/drivers/crypto/rockchip/rk_crypto_v2_ablkcipher.c index 960129c11c90..87b09a539f21 100644 --- a/drivers/crypto/rockchip/rk_crypto_v2_ablkcipher.c +++ b/drivers/crypto/rockchip/rk_crypto_v2_ablkcipher.c @@ -44,6 +44,8 @@ static int rk_crypto_irq_handle(int irq, void *dev_id) interrupt_status = CRYPTO_READ(dev, CRYPTO_DMA_INT_ST); CRYPTO_WRITE(dev, CRYPTO_DMA_INT_ST, interrupt_status); + interrupt_status &= CRYPTO_LOCKSTEP_MASK; + if (interrupt_status != CRYPTO_DST_ITEM_DONE_INT_ST) { dev_err(dev->dev, "DMA desc = %p\n", hw_info->desc); dev_err(dev->dev, "DMA addr_in = %08x\n", diff --git a/drivers/crypto/rockchip/rk_crypto_v2_ahash.c b/drivers/crypto/rockchip/rk_crypto_v2_ahash.c index 5733380c3e4d..71ba22dc8c03 100644 --- a/drivers/crypto/rockchip/rk_crypto_v2_ahash.c +++ b/drivers/crypto/rockchip/rk_crypto_v2_ahash.c @@ -159,6 +159,8 @@ static int rk_crypto_irq_handle(int irq, void *dev_id) interrupt_status = CRYPTO_READ(dev, CRYPTO_DMA_INT_ST); CRYPTO_WRITE(dev, CRYPTO_DMA_INT_ST, interrupt_status); + interrupt_status &= CRYPTO_LOCKSTEP_MASK; + if (interrupt_status != CRYPTO_SRC_ITEM_DONE_INT_ST) { dev_err(dev->dev, "DMA desc = %p\n", hw_info->desc); dev_err(dev->dev, "DMA addr_in = %08x\n", diff --git a/drivers/crypto/rockchip/rk_crypto_v2_reg.h b/drivers/crypto/rockchip/rk_crypto_v2_reg.h index 96b6cd446419..69330dd967bd 100644 --- a/drivers/crypto/rockchip/rk_crypto_v2_reg.h +++ b/drivers/crypto/rockchip/rk_crypto_v2_reg.h @@ -32,6 +32,7 @@ #define CRYPTO_LIST_DONE_INT_EN BIT(0) #define CRYPTO_DMA_INT_ST 0x000C +#define CRYPTO_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) @@ -40,6 +41,7 @@ #define CRYPTO_DST_ITEM_DONE_INT_ST BIT(1) #define CRYPTO_LIST_DONE_INT_ST BIT(0) +#define CRYPTO_LOCKSTEP_MASK (~((u32)CRYPTO_LOCKSTEP_INT_ST)) #define CRYPTO_DMA_CTL 0x0010 #define CRYPTO_DMA_RESTART BIT(1) #define CRYPTO_DMA_START BIT(0)