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)