Commit 34f39da7 authored by Herbert Xu's avatar Herbert Xu
Browse files

crypto: stm32 - Move polling into do_one_request



There is no need to poll separate for update and final.  We could
merge them into do_one_request.

Also fix the error handling so that we don't poll (and overwrite
the error) when an error has already occurred.

Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Tested-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 6bf6b643
Loading
Loading
Loading
Loading
+12 −17
Original line number Diff line number Diff line
@@ -425,6 +425,8 @@ static int stm32_hash_update_cpu(struct stm32_hash_dev *hdev)
		bufcnt = rctx->bufcnt;
		rctx->bufcnt = 0;
		err = stm32_hash_xmit_cpu(hdev, rctx->buffer, bufcnt, 0);
		if (err)
			return err;
	}

	stm32_hash_append_sg(rctx);
@@ -433,14 +435,6 @@ static int stm32_hash_update_cpu(struct stm32_hash_dev *hdev)
		bufcnt = rctx->bufcnt;
		rctx->bufcnt = 0;
		err = stm32_hash_xmit_cpu(hdev, rctx->buffer, bufcnt, 1);

		/* If we have an IRQ, wait for that, else poll for completion */
		if (hdev->polled) {
			if (stm32_hash_wait_busy(hdev))
				return -ETIMEDOUT;
			hdev->flags |= HASH_FLAGS_OUTPUT_READY;
			err = 0;
		}
	}

	return err;
@@ -784,15 +778,6 @@ static int stm32_hash_final_req(struct stm32_hash_dev *hdev)
	else
		err = stm32_hash_xmit_cpu(hdev, rctx->buffer, buflen, 1);

	/* If we have an IRQ, wait for that, else poll for completion */
	if (hdev->polled) {
		if (stm32_hash_wait_busy(hdev))
			return -ETIMEDOUT;
		hdev->flags |= HASH_FLAGS_OUTPUT_READY;
		/* Caller will call stm32_hash_finish_req() */
		err = 0;
	}

	return err;
}

@@ -964,6 +949,16 @@ static int stm32_hash_one_request(struct crypto_engine *engine, void *areq)
	else if (rctx->op == HASH_OP_FINAL)
		err = stm32_hash_final_req(hdev);

	/* If we have an IRQ, wait for that, else poll for completion */
	if (err == -EINPROGRESS && hdev->polled) {
		if (stm32_hash_wait_busy(hdev))
			err = -ETIMEDOUT;
		else {
			hdev->flags |= HASH_FLAGS_OUTPUT_READY;
			err = 0;
		}
	}

	if (err != -EINPROGRESS)
	/* done task will not finish it, so do it here */
		stm32_hash_finish_req(req, err);