#define HASH_FLAGS_SHA1                        BIT(19)
 #define HASH_FLAGS_SHA224              BIT(20)
 #define HASH_FLAGS_SHA256              BIT(21)
+#define HASH_FLAGS_EMPTY               BIT(22)
 #define HASH_FLAGS_HMAC                        BIT(23)
 
 #define HASH_OP_UPDATE                 1
                                reg |= HASH_CR_LKEY;
                }
 
-               /*
-                * On the Ux500 we need to set a special flag to indicate that
-                * the message is zero length.
-                */
-               if (hdev->pdata->ux500 && bufcnt == 0)
-                       reg |= HASH_CR_UX500_EMPTYMSG;
-
                if (!hdev->polled)
                        stm32_hash_write(hdev, HASH_IMR, HASH_DCIE);
 
 static int stm32_hash_xmit_cpu(struct stm32_hash_dev *hdev,
                               const u8 *buf, size_t length, int final)
 {
+       struct stm32_hash_request_ctx *rctx = ahash_request_ctx(hdev->req);
+       struct stm32_hash_state *state = &rctx->state;
        unsigned int count, len32;
        const u32 *buffer = (const u32 *)buf;
        u32 reg;
 
-       if (final)
+       if (final) {
                hdev->flags |= HASH_FLAGS_FINAL;
 
+               /* Do not process empty messages if hw is buggy. */
+               if (!(hdev->flags & HASH_FLAGS_INIT) && !length &&
+                   hdev->pdata->broken_emptymsg) {
+                       state->flags |= HASH_FLAGS_EMPTY;
+                       return 0;
+               }
+       }
+
        len32 = DIV_ROUND_UP(length, sizeof(u32));
 
        dev_dbg(hdev->dev, "%s: length: %zd, final: %x len32 %i\n",
        __be32 *hash = (void *)rctx->digest;
        unsigned int i, hashsize;
 
-       if (hdev->pdata->broken_emptymsg && !req->nbytes)
+       if (hdev->pdata->broken_emptymsg && (state->flags & HASH_FLAGS_EMPTY))
                return stm32_hash_emptymsg_fallback(req);
 
        switch (state->flags & HASH_FLAGS_ALGO_MASK) {