Commit 1e3b2e80 authored by Thomas Bourgoin's avatar Thomas Bourgoin Committed by Herbert Xu
Browse files

crypto: stm32 - remove flag HASH_FLAGS_DMA_READY



Remove flag HASH_FLAGS_DMA_READY as it can put the driver in a deadlock
state.
If the DMA automatically set the DCAL bit, the interrupt indicating the
end of a computation can be raised before the DMA complete sequence.

Signed-off-by: default avatarThomas Bourgoin <thomas.bourgoin@foss.st.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent a4adfbc2
Loading
Loading
Loading
Loading
+8 −13
Original line number Diff line number Diff line
@@ -84,12 +84,11 @@
#define HASH_FLAGS_INIT			BIT(0)
#define HASH_FLAGS_OUTPUT_READY		BIT(1)
#define HASH_FLAGS_CPU			BIT(2)
#define HASH_FLAGS_DMA_READY		BIT(3)
#define HASH_FLAGS_DMA_ACTIVE		BIT(4)
#define HASH_FLAGS_HMAC_INIT		BIT(5)
#define HASH_FLAGS_HMAC_FINAL		BIT(6)
#define HASH_FLAGS_HMAC_KEY		BIT(7)
#define HASH_FLAGS_SHA3_MODE		BIT(8)
#define HASH_FLAGS_DMA_ACTIVE		BIT(3)
#define HASH_FLAGS_HMAC_INIT		BIT(4)
#define HASH_FLAGS_HMAC_FINAL		BIT(5)
#define HASH_FLAGS_HMAC_KEY		BIT(6)
#define HASH_FLAGS_SHA3_MODE		BIT(7)
#define HASH_FLAGS_FINAL		BIT(15)
#define HASH_FLAGS_FINUP		BIT(16)
#define HASH_FLAGS_ALGO_MASK		GENMASK(20, 17)
@@ -585,8 +584,6 @@ static void stm32_hash_dma_callback(void *param)
	struct stm32_hash_dev *hdev = param;

	complete(&hdev->dma_completion);

	hdev->flags |= HASH_FLAGS_DMA_READY;
}

static int stm32_hash_hmac_dma_send(struct stm32_hash_dev *hdev)
@@ -1241,12 +1238,10 @@ static irqreturn_t stm32_hash_irq_thread(int irq, void *dev_id)
			hdev->flags &= ~HASH_FLAGS_OUTPUT_READY;
			goto finish;
		}
	} else if (HASH_FLAGS_DMA_READY & hdev->flags) {
		if (HASH_FLAGS_DMA_ACTIVE & hdev->flags) {
	} else if (HASH_FLAGS_DMA_ACTIVE & hdev->flags) {
		hdev->flags &= ~HASH_FLAGS_DMA_ACTIVE;
			goto finish;
	}
	}

	return IRQ_HANDLED;