All of lore.kernel.org
 help / color / mirror / Atom feed
From: Corentin Labbe <clabbe@baylibre.com>
To: heiko@sntech.de, ardb@kernel.org, davem@davemloft.net,
	herbert@gondor.apana.org.au, krzysztof.kozlowski+dt@linaro.org,
	mturquette@baylibre.com, robh+dt@kernel.org, sboyd@kernel.org
Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
	linux-clk@vger.kernel.org, linux-crypto@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org,
	Corentin Labbe <clabbe@baylibre.com>,
	John Keeping <john@metanate.com>
Subject: [PATCH v10 07/33] crypto: rockchip: add fallback for ahash
Date: Tue, 27 Sep 2022 07:54:45 +0000	[thread overview]
Message-ID: <20220927075511.3147847-8-clabbe@baylibre.com> (raw)
In-Reply-To: <20220927075511.3147847-1-clabbe@baylibre.com>

Adds a fallback for all case hardware cannot handle.

Fixes: ce0183cb6464b ("crypto: rockchip - switch to skcipher API")
Reviewed-by: John Keeping <john@metanate.com>
Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
---
 drivers/crypto/rockchip/rk3288_crypto_ahash.c | 38 +++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c
index 49017d1fb510..16009bb0bf16 100644
--- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c
+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c
@@ -16,6 +16,40 @@
  * so we put the fixed hash out when met zero message.
  */
 
+static bool rk_ahash_need_fallback(struct ahash_request *req)
+{
+	struct scatterlist *sg;
+
+	sg = req->src;
+	while (sg) {
+		if (!IS_ALIGNED(sg->offset, sizeof(u32))) {
+			return true;
+		}
+		if (sg->length % 4) {
+			return true;
+		}
+		sg = sg_next(sg);
+	}
+	return false;
+}
+
+static int rk_ahash_digest_fb(struct ahash_request *areq)
+{
+	struct rk_ahash_rctx *rctx = ahash_request_ctx(areq);
+	struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq);
+	struct rk_ahash_ctx *tfmctx = crypto_ahash_ctx(tfm);
+
+	ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm);
+	rctx->fallback_req.base.flags = areq->base.flags &
+					CRYPTO_TFM_REQ_MAY_SLEEP;
+
+	rctx->fallback_req.nbytes = areq->nbytes;
+	rctx->fallback_req.src = areq->src;
+	rctx->fallback_req.result = areq->result;
+
+	return crypto_ahash_digest(&rctx->fallback_req);
+}
+
 static int zero_message_process(struct ahash_request *req)
 {
 	struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
@@ -167,6 +201,9 @@ static int rk_ahash_digest(struct ahash_request *req)
 	struct rk_ahash_ctx *tctx = crypto_tfm_ctx(req->base.tfm);
 	struct rk_crypto_info *dev = tctx->dev;
 
+	if (rk_ahash_need_fallback(req))
+		return rk_ahash_digest_fb(req);
+
 	if (!req->nbytes)
 		return zero_message_process(req);
 	else
@@ -309,6 +346,7 @@ static void rk_cra_hash_exit(struct crypto_tfm *tfm)
 	struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm);
 
 	free_page((unsigned long)tctx->dev->addr_vir);
+	crypto_free_ahash(tctx->fallback_tfm);
 }
 
 struct rk_crypto_tmp rk_ahash_sha1 = {
-- 
2.35.1


WARNING: multiple messages have this Message-ID (diff)
From: Corentin Labbe <clabbe@baylibre.com>
To: heiko@sntech.de, ardb@kernel.org, davem@davemloft.net,
	herbert@gondor.apana.org.au, krzysztof.kozlowski+dt@linaro.org,
	mturquette@baylibre.com, robh+dt@kernel.org, sboyd@kernel.org
Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
	linux-clk@vger.kernel.org, linux-crypto@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org,
	Corentin Labbe <clabbe@baylibre.com>,
	John Keeping <john@metanate.com>
Subject: [PATCH v10 07/33] crypto: rockchip: add fallback for ahash
Date: Tue, 27 Sep 2022 07:54:45 +0000	[thread overview]
Message-ID: <20220927075511.3147847-8-clabbe@baylibre.com> (raw)
In-Reply-To: <20220927075511.3147847-1-clabbe@baylibre.com>

Adds a fallback for all case hardware cannot handle.

Fixes: ce0183cb6464b ("crypto: rockchip - switch to skcipher API")
Reviewed-by: John Keeping <john@metanate.com>
Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
---
 drivers/crypto/rockchip/rk3288_crypto_ahash.c | 38 +++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c
index 49017d1fb510..16009bb0bf16 100644
--- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c
+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c
@@ -16,6 +16,40 @@
  * so we put the fixed hash out when met zero message.
  */
 
+static bool rk_ahash_need_fallback(struct ahash_request *req)
+{
+	struct scatterlist *sg;
+
+	sg = req->src;
+	while (sg) {
+		if (!IS_ALIGNED(sg->offset, sizeof(u32))) {
+			return true;
+		}
+		if (sg->length % 4) {
+			return true;
+		}
+		sg = sg_next(sg);
+	}
+	return false;
+}
+
+static int rk_ahash_digest_fb(struct ahash_request *areq)
+{
+	struct rk_ahash_rctx *rctx = ahash_request_ctx(areq);
+	struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq);
+	struct rk_ahash_ctx *tfmctx = crypto_ahash_ctx(tfm);
+
+	ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm);
+	rctx->fallback_req.base.flags = areq->base.flags &
+					CRYPTO_TFM_REQ_MAY_SLEEP;
+
+	rctx->fallback_req.nbytes = areq->nbytes;
+	rctx->fallback_req.src = areq->src;
+	rctx->fallback_req.result = areq->result;
+
+	return crypto_ahash_digest(&rctx->fallback_req);
+}
+
 static int zero_message_process(struct ahash_request *req)
 {
 	struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
@@ -167,6 +201,9 @@ static int rk_ahash_digest(struct ahash_request *req)
 	struct rk_ahash_ctx *tctx = crypto_tfm_ctx(req->base.tfm);
 	struct rk_crypto_info *dev = tctx->dev;
 
+	if (rk_ahash_need_fallback(req))
+		return rk_ahash_digest_fb(req);
+
 	if (!req->nbytes)
 		return zero_message_process(req);
 	else
@@ -309,6 +346,7 @@ static void rk_cra_hash_exit(struct crypto_tfm *tfm)
 	struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm);
 
 	free_page((unsigned long)tctx->dev->addr_vir);
+	crypto_free_ahash(tctx->fallback_tfm);
 }
 
 struct rk_crypto_tmp rk_ahash_sha1 = {
-- 
2.35.1


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

WARNING: multiple messages have this Message-ID (diff)
From: Corentin Labbe <clabbe@baylibre.com>
To: heiko@sntech.de, ardb@kernel.org, davem@davemloft.net,
	herbert@gondor.apana.org.au, krzysztof.kozlowski+dt@linaro.org,
	mturquette@baylibre.com, robh+dt@kernel.org, sboyd@kernel.org
Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
	linux-clk@vger.kernel.org, linux-crypto@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org,
	Corentin Labbe <clabbe@baylibre.com>,
	John Keeping <john@metanate.com>
Subject: [PATCH v10 07/33] crypto: rockchip: add fallback for ahash
Date: Tue, 27 Sep 2022 07:54:45 +0000	[thread overview]
Message-ID: <20220927075511.3147847-8-clabbe@baylibre.com> (raw)
In-Reply-To: <20220927075511.3147847-1-clabbe@baylibre.com>

Adds a fallback for all case hardware cannot handle.

Fixes: ce0183cb6464b ("crypto: rockchip - switch to skcipher API")
Reviewed-by: John Keeping <john@metanate.com>
Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
---
 drivers/crypto/rockchip/rk3288_crypto_ahash.c | 38 +++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c
index 49017d1fb510..16009bb0bf16 100644
--- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c
+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c
@@ -16,6 +16,40 @@
  * so we put the fixed hash out when met zero message.
  */
 
+static bool rk_ahash_need_fallback(struct ahash_request *req)
+{
+	struct scatterlist *sg;
+
+	sg = req->src;
+	while (sg) {
+		if (!IS_ALIGNED(sg->offset, sizeof(u32))) {
+			return true;
+		}
+		if (sg->length % 4) {
+			return true;
+		}
+		sg = sg_next(sg);
+	}
+	return false;
+}
+
+static int rk_ahash_digest_fb(struct ahash_request *areq)
+{
+	struct rk_ahash_rctx *rctx = ahash_request_ctx(areq);
+	struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq);
+	struct rk_ahash_ctx *tfmctx = crypto_ahash_ctx(tfm);
+
+	ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm);
+	rctx->fallback_req.base.flags = areq->base.flags &
+					CRYPTO_TFM_REQ_MAY_SLEEP;
+
+	rctx->fallback_req.nbytes = areq->nbytes;
+	rctx->fallback_req.src = areq->src;
+	rctx->fallback_req.result = areq->result;
+
+	return crypto_ahash_digest(&rctx->fallback_req);
+}
+
 static int zero_message_process(struct ahash_request *req)
 {
 	struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
@@ -167,6 +201,9 @@ static int rk_ahash_digest(struct ahash_request *req)
 	struct rk_ahash_ctx *tctx = crypto_tfm_ctx(req->base.tfm);
 	struct rk_crypto_info *dev = tctx->dev;
 
+	if (rk_ahash_need_fallback(req))
+		return rk_ahash_digest_fb(req);
+
 	if (!req->nbytes)
 		return zero_message_process(req);
 	else
@@ -309,6 +346,7 @@ static void rk_cra_hash_exit(struct crypto_tfm *tfm)
 	struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm);
 
 	free_page((unsigned long)tctx->dev->addr_vir);
+	crypto_free_ahash(tctx->fallback_tfm);
 }
 
 struct rk_crypto_tmp rk_ahash_sha1 = {
-- 
2.35.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2022-09-27  7:56 UTC|newest]

Thread overview: 138+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-27  7:54 [PATCH v10 00/33] crypto: rockchip: permit to pass self-tests Corentin Labbe
2022-09-27  7:54 ` Corentin Labbe
2022-09-27  7:54 ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 01/33] crypto: rockchip: use dev_err for error message about interrupt Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 02/33] crypto: rockchip: do not use uninitialized variable Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 03/33] crypto: rockchip: do not do custom power management Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 04/33] crypto: rockchip: fix privete/private typo Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 05/33] crypto: rockchip: do not store mode globally Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 06/33] crypto: rockchip: add fallback for cipher Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` Corentin Labbe [this message]
2022-09-27  7:54   ` [PATCH v10 07/33] crypto: rockchip: add fallback for ahash Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 08/33] crypto: rockchip: better handle cipher key Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 09/33] crypto: rockchip: remove non-aligned handling Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 10/33] crypto: rockchip: rework by using crypto_engine Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 11/33] crypto: rockchip: rewrite type Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 12/33] crypto: rockchip: add debugfs Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 13/33] crypto: rockchip: introduce PM Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 14/33] crypto: rockchip: handle reset also in PM Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 15/33] crypto: rockchip: use clk_bulk to simplify clock management Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 16/33] crypto: rockchip: add myself as maintainer Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 17/33] crypto: rockchip: use read_poll_timeout Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 18/33] crypto: rockchip: fix style issue Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 19/33] crypto: rockchip: add support for rk3328 Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 20/33] crypto: rockchip: rename ablk functions to cipher Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54 ` [PATCH v10 21/33] crypto: rockchip: rework rk_handle_req function Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:54   ` Corentin Labbe
2022-09-27  7:55 ` [PATCH v10 22/33] crypto: rockchip: use a rk_crypto_info variable instead of lot of indirection Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55 ` [PATCH v10 23/33] crypto: rockchip: use the rk_crypto_info given as parameter Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55 ` [PATCH v10 24/33] dt-bindings: crypto: convert rockchip-crypto to YAML Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55 ` [PATCH v10 25/33] dt-bindings: crypto: rockchip: add new compatible Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-29 22:14   ` Rob Herring
2022-09-29 22:14     ` Rob Herring
2022-09-29 22:14     ` Rob Herring
2022-09-27  7:55 ` [PATCH v10 26/33] clk: rk3399: use proper crypto0 name Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-28 18:58   ` Stephen Boyd
2022-09-28 18:58     ` Stephen Boyd
2022-09-28 18:58     ` Stephen Boyd
2022-09-27  7:55 ` [PATCH v10 27/33] arm64: dts: rockchip: add rk3328 crypto node Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55 ` [PATCH v10 28/33] arm64: dts: rockchip: rk3399: add " Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-12-11 15:51   ` Rob Herring
2022-12-11 15:51     ` Rob Herring
2022-12-11 15:51     ` Rob Herring
2022-12-12 12:44     ` Corentin LABBE
2022-12-12 12:44       ` Corentin LABBE
2022-12-12 12:44       ` Corentin LABBE
2022-09-27  7:55 ` [PATCH v10 29/33] crypto: rockchip: store crypto_info in request context Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55 ` [PATCH v10 30/33] crypto: rockchip: Check for clocks numbers and their frequencies Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55 ` [PATCH v10 31/33] crypto: rockchip: rk_ahash_reg_init use crypto_info from parameter Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55 ` [PATCH v10 32/33] crypto: rockchip: permit to have more than one reset Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55 ` [PATCH v10 33/33] crypto: rockchip: Add support for RK3399 Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-09-27  7:55   ` Corentin Labbe
2022-10-21 13:20 ` [PATCH v10 00/33] crypto: rockchip: permit to pass self-tests Corentin LABBE
2022-10-21 13:20   ` Corentin LABBE
2022-10-21 13:20   ` Corentin LABBE
2022-10-21 17:09   ` Heiko Stübner
2022-10-21 17:09     ` Heiko Stübner
2022-10-21 17:09     ` Heiko Stübner
2022-10-26  7:41     ` Corentin LABBE
2022-10-26  7:41       ` Corentin LABBE
2022-10-26  7:41       ` Corentin LABBE
2022-10-26 10:05       ` Herbert Xu
2022-10-26 10:05         ` Herbert Xu
2022-10-26 10:05         ` Herbert Xu
2022-10-26 10:25         ` Heiko Stübner
2022-10-26 10:25           ` Heiko Stübner
2022-10-26 10:25           ` Heiko Stübner
2022-10-28  2:06           ` Krzysztof Kozlowski
2022-10-28  2:06             ` Krzysztof Kozlowski
2022-10-28  2:06             ` Krzysztof Kozlowski
2022-10-28  5:01 ` Herbert Xu
2022-10-28  5:01   ` Herbert Xu
2022-10-28  5:01   ` Herbert Xu
2022-10-29  8:12 ` (subset) " Heiko Stuebner
2022-10-29  8:12   ` Heiko Stuebner
2022-10-29  8:12   ` Heiko Stuebner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220927075511.3147847-8-clabbe@baylibre.com \
    --to=clabbe@baylibre.com \
    --cc=ardb@kernel.org \
    --cc=davem@davemloft.net \
    --cc=devicetree@vger.kernel.org \
    --cc=heiko@sntech.de \
    --cc=herbert@gondor.apana.org.au \
    --cc=john@metanate.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=mturquette@baylibre.com \
    --cc=robh+dt@kernel.org \
    --cc=sboyd@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.