From nobody Wed Oct 8 15:58:30 2025 Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 80D9D2F1FC9; Thu, 26 Jun 2025 09:59:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931962; cv=none; b=XYl6dojZlMYksOOYP0xwfUFCNSo58WuCwjolO27mtvRKvqN8sphOrvPEBlD/LpWyu7ZT9c+7plE4+dMSJvLvLy+89O9uXLr10Iv+ziUV8bU2lkNPUtheMu+IbQYI7fz0w91cXawF6Oiwe1n2GU/Z8kYIPoQjHpmQdU8lMCIDo9Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931962; c=relaxed/simple; bh=V+HFJ3mcjgzB1Gr3bIDT3f6dj+Z5XsFbLbUNii2zGtc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mzXTEXK7ytxd/HhvjCGSq0O/jAeJJkJyRGGHex77adYO0ypJa56Plqvn8kHAWCZCcDN0hOxUggx1xKc/LRKlXJJhdxwrfWha7v1OYSvhZI1DPefuicFAkswGJwsmK/xFbox0bIel0B5/gft5zT+75LlZLA4yo6f1lhfQZ2qymaE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=a0h5DQ5T; arc=none smtp.client-ip=209.85.208.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="a0h5DQ5T" Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-60c4521ae2cso1451737a12.0; Thu, 26 Jun 2025 02:59:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750931959; x=1751536759; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XbU44eJvfJDBcTZ+xWKQo+1cPwZ/TlkyCXqSjcDCqLQ=; b=a0h5DQ5TOLNkU15uXdaSIRBXhsFc7OHLWyVganC2PTTSgPiZGMnnGB++tR4VWuPCsF frlBeUj5u2j5NE14iIPURbtg8a1gdmFw8JPtfd0E638pBw4dQO/XGoaoIec7W1JhGerq uQsaP5u4fEzfBr2Pf6bJkRQl7Kr8UPpMnlkP2xlgwb8R9m3A3c57KUPPJjonBm+zU74v qSgGflfp7iDkyWO++3yZyDYXI7MoTm2niaqL/rpnHGjD/RdPEicOApK+cRoFDsCO4vGi H3eTOedPtVncfRLc9zHtn3MTRyCnJM3K8a7f9cWbEOgH46NOquv38zn6cKj1aMOh0qCc jXxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750931959; x=1751536759; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XbU44eJvfJDBcTZ+xWKQo+1cPwZ/TlkyCXqSjcDCqLQ=; b=rBR2I7WE6jhDG0++cakDNUejjLmwEMQRjgLZeNoRol697h6VQPXEH/RsfPSsV57FCh c9NDhhZR+hLDRL+7D6qP/JSSfHe/DRb/6Qc+u1RNskyjEMbOGJ4Acf0HIKU2mi+dNueQ 9N88gG9Ss0m8uSHewVzAStO/cZkh7YGNKhrjIRGf1pFekL28EkbAlgW/ojLXaiR8k+ar 8NtDMxQtsssp3nLTgJuoX3hXRES0DQ559bs2UHypzqFEUVGqnUuoCRAQDMcTOJP9KfXL Uy2RLuNGXUvH0QMWLN4QHPkMyMe3E+psz6Gko2l3X3wOQ6clcifRES1VB2iduxQeU5IS BThA== X-Forwarded-Encrypted: i=1; AJvYcCU0qx0g3G4rpe7CTBmvx1zQ8JFf/ppmBMsGKzei6zgQlD8cWywhsq5iNwFbyK/kIdj5Ogn1rMNwyvP/vRo=@vger.kernel.org, AJvYcCV3m9+oeaBHwzX3H0VXcLc3t+DMdRAwyyP8jsUqZj9VV4zf9p8ylXr4xqRaDH3lJwiUqFEyUn9VntDV9+EY@vger.kernel.org X-Gm-Message-State: AOJu0YzfR+lAd3y/qRHJ2JhqVauzxOMUBhWxn2feTCFhpUX/H/3/5ew/ 72cchK+BR3/VICGt/IziJqIiDwflOEWKiX4NTUY2C7FACNNA/BH4fRpT X-Gm-Gg: ASbGncuvftrvMWAjKqBA4tdi3sE3Ede2qh5NfcEJ1H3HXPgWFtzKxBrLBDs4KwAr/19 IqGuAjs689ddddT+Ng7WcU+jkOsqY4gSd/Vk5SZDzs2npSgpeWgRPwoySf54jlerAZRzamnerOv CziRJiYzOuKxneoY6dJB76Ulup3AFRJ62+bImgBJQ/0Oww0h0LBR8ykecQQW3hY9B4s+7Qbl/HT DZEPoV5oKPra66awf6ycBj6Z4PEGkCwdCs0wYlml1zUwm82tawBmUvqvMfn408e2wIT5z3FGMIt jqrOEN6Nu+AqHDwBhP2GhqFQK7Op78IvdKzoxeaXJEtN9MlP+7hAoMEgnR5NgIBamfw8EKdYHCd 3TSnw0MApg63v1g== X-Google-Smtp-Source: AGHT+IEaMXp6A7i8DWJAL63v7SwwWZbY3qhE9qWDgXfE0g+LUPmTke+IYpv3zr+vGVl6rNn5ZDE3ag== X-Received: by 2002:a17:906:360f:b0:ae0:bc2b:61cc with SMTP id a640c23a62f3a-ae0be84e3e8mr577634666b.14.1750931958448; Thu, 26 Jun 2025 02:59:18 -0700 (PDT) Received: from localhost.localdomain ([2a02:2f0e:c51b:8900:a03f:12cb:72f7:9069]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae06aa5ff34sm1014106166b.40.2025.06.26.02.59.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Jun 2025 02:59:18 -0700 (PDT) From: Ovidiu Panait To: clabbe.montjoie@gmail.com, herbert@gondor.apana.org.au, davem@davemloft.net, linux-crypto@vger.kernel.org Cc: wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Ovidiu Panait Subject: [PATCH v2 01/10] crypto: sun8i-ce - remove channel timeout field Date: Thu, 26 Jun 2025 12:58:04 +0300 Message-ID: <20250626095813.83963-2-ovidiu.panait.oss@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> References: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Using the number of bytes in the request as DMA timeout is really inconsistent, as large requests could possibly set a timeout of hundreds of seconds. Remove the per-channel timeout field and use a single, static DMA timeout of 3 seconds for all requests. Signed-off-by: Ovidiu Panait Reviewed-by: Corentin LABBE Tested-by: Corentin LABBE --- drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c | 1 - drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c | 5 ++--- drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c | 2 -- drivers/crypto/allwinner/sun8i-ce/sun8i-ce-prng.c | 1 - drivers/crypto/allwinner/sun8i-ce/sun8i-ce-trng.c | 1 - drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h | 2 +- 6 files changed, 3 insertions(+), 9 deletions(-) diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c b/drivers/= crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c index 5663df49dd81..113a1100f2ae 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c @@ -276,7 +276,6 @@ static int sun8i_ce_cipher_prepare(struct crypto_engine= *engine, void *async_req goto theend_sgs; } =20 - chan->timeout =3D areq->cryptlen; rctx->nr_sgs =3D ns; rctx->nr_sgd =3D nd; return 0; diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c b/drivers/cr= ypto/allwinner/sun8i-ce/sun8i-ce-core.c index 658f520cee0c..79ec172e5c99 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c @@ -210,11 +210,10 @@ int sun8i_ce_run_task(struct sun8i_ce_dev *ce, int fl= ow, const char *name) mutex_unlock(&ce->mlock); =20 wait_for_completion_interruptible_timeout(&ce->chanlist[flow].complete, - msecs_to_jiffies(ce->chanlist[flow].timeout)); + msecs_to_jiffies(CE_DMA_TIMEOUT_MS)); =20 if (ce->chanlist[flow].status =3D=3D 0) { - dev_err(ce->dev, "DMA timeout for %s (tm=3D%d) on flow %d\n", name, - ce->chanlist[flow].timeout, flow); + dev_err(ce->dev, "DMA timeout for %s on flow %d\n", name, flow); err =3D -EFAULT; } /* No need to lock for this read, the channel is locked so diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c b/drivers/cr= ypto/allwinner/sun8i-ce/sun8i-ce-hash.c index 13bdfb8a2c62..b26f5427c1e0 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c @@ -446,8 +446,6 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, voi= d *breq) else cet->t_dlen =3D cpu_to_le32(areq->nbytes / 4 + j); =20 - chan->timeout =3D areq->nbytes; - err =3D sun8i_ce_run_task(ce, flow, crypto_ahash_alg_name(tfm)); =20 dma_unmap_single(ce->dev, addr_pad, j * 4, DMA_TO_DEVICE); diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-prng.c b/drivers/cr= ypto/allwinner/sun8i-ce/sun8i-ce-prng.c index 762459867b6c..d0a1ac66738b 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-prng.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-prng.c @@ -137,7 +137,6 @@ int sun8i_ce_prng_generate(struct crypto_rng *tfm, cons= t u8 *src, =20 cet->t_dst[0].addr =3D desc_addr_val_le32(ce, dma_dst); cet->t_dst[0].len =3D cpu_to_le32(todo / 4); - ce->chanlist[flow].timeout =3D 2000; =20 err =3D sun8i_ce_run_task(ce, 3, "PRNG"); mutex_unlock(&ce->rnglock); diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-trng.c b/drivers/cr= ypto/allwinner/sun8i-ce/sun8i-ce-trng.c index e1e8bc15202e..244529bf0616 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-trng.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-trng.c @@ -79,7 +79,6 @@ static int sun8i_ce_trng_read(struct hwrng *rng, void *da= ta, size_t max, bool wa =20 cet->t_dst[0].addr =3D desc_addr_val_le32(ce, dma_dst); cet->t_dst[0].len =3D cpu_to_le32(todo / 4); - ce->chanlist[flow].timeout =3D todo; =20 err =3D sun8i_ce_run_task(ce, 3, "TRNG"); mutex_unlock(&ce->rnglock); diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h b/drivers/crypto/= allwinner/sun8i-ce/sun8i-ce.h index 0f9a89067016..f12c32d1843f 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h @@ -106,6 +106,7 @@ #define MAX_SG 8 =20 #define CE_MAX_CLOCKS 4 +#define CE_DMA_TIMEOUT_MS 3000 =20 #define MAXFLOW 4 =20 @@ -196,7 +197,6 @@ struct sun8i_ce_flow { struct completion complete; int status; dma_addr_t t_phy; - int timeout; struct ce_task *tl; void *backup_iv; void *bounce_iv; --=20 2.49.0 From nobody Wed Oct 8 15:58:30 2025 Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B28A32C0327; Thu, 26 Jun 2025 09:59:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931963; cv=none; b=r/Wk0w9AAOJBQRIV4a6MgE5wqQF+VrKLGROH95ZrtbpcQAy2eDLO7dm5/nnQaHfvPslQ+8pfICFezkisj3lciiH7Pc+GrZ0faTOwzbgpy/ZG7xYg7Ej+j0BtvjnYq43CNPxRCxI+aKNUiNvt2m1pXdy5nPNuQucdrY3prykD9P4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931963; c=relaxed/simple; bh=D3Fpyml+Pwh/ot9LUtEAJrW9x78rJDQPnjdfBz8Z7cI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bt94gvEVHFwI/r8A3HKBfaadfNXI16CdBXKeEupif5cZD0D6IG3JUDgvMkuW1xS+2y3lcu5XP4SVL9TuyWZivnfZefGQyir64VwkR85910OgJ2bbgwUuyEfOj6wGRc069Nzr1SxjfyycB1OHNTTLCeCEZcoPAIkPK5B+hPjGYqQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=YViZmS0d; arc=none smtp.client-ip=209.85.218.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YViZmS0d" Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-ae0d4451a3fso127441666b.1; Thu, 26 Jun 2025 02:59:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750931960; x=1751536760; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0HrsFLSEEMdhGLUzZIYXTdJy0VycwWTY4NZmzeB9UZg=; b=YViZmS0dVixc53ysrn0eGJr6Z0D2YxLw20kNmaF1ToDOY6Pl41LZGoUhxp4OdzALmg vtKNVN18/RROUFXnFrIDVReLzTwKOXvINlSoYUsh+O9JVgrEKT+utJcN7EvIWubw75eL bYRljHJXR2SLj7hlZVUzUUHNrx6viHY9QN2HY3wXqTAVD/kwNkSPzPPM3aJVtrlHnAM8 nDEDH62r48WkWA4X6K26xUXGLKBCmkdBE9lJOg4LARYLsIlsR/vQb41ul+lgGd49cckB Vh3jwneerVIjzeqhMf6id8jaswhtmSfI08JYeu+tYlqMdefg2gNWe2w88QxFYbhz7VL0 OTuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750931960; x=1751536760; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0HrsFLSEEMdhGLUzZIYXTdJy0VycwWTY4NZmzeB9UZg=; b=lEIIkHkKk0fdQ7lG8PzKJ223PG92LfMAgLSdQe9wJLu1X7/mcP0Jfu0dcDNyVzp7b+ RITMe/WPzKAIky3KbHv2x6um/EpwH92a78xP5Cxxq/a1oNbGnnIg7FjIWYkSTo2rPmGp fbkglLGEjJFwPM01ysvrBGHJOvqEtgTGsQ2R4QSojM9S61V/mFv7ThlM8khpl+MnDeTW 6hZkc7PVBKY2BgBYQYHbMBeWO8YUVPvrLlmaRLUlxlryRLehw05GvzG7NHKmnLfB+pSG HuK6i9l9bJiMaiKvVVlsG+/yngIcf6z9XgudeyWjSGrUUTAup9XU+xdF6JKOdD0h+sn1 3pRQ== X-Forwarded-Encrypted: i=1; AJvYcCWuWntltxTBrY/u4hUppMpCrV+cdShTD3f2t65X1mL8HCQWxYJUg7/wltoEoyXiToWqpk3xe0oRwgnyk8tu@vger.kernel.org, AJvYcCXDmAUif1+ZearZqzViQTxjfuVbFWBGGzJNBz2Isb/XoP6fJt1gP/WYVyKo77jfHkEKNYSbylN/1tRbCqQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyC4ehNiCYQxBji2f/8z2TpYfSeM8V7Hu+Apx0wxMMr4/xliIQJ fvP2lrQXb+nY54xa7/ZALW92aEUBkqTq2MyI7H6c+qs8/kuOsJrpJAvR X-Gm-Gg: ASbGncvEBr8/Iy7oMd8fxmowaivBficygRihf8kGmBb9bzhLZSKgMvbRlNobFdJFMeP ek8zXj3opSlzBsUnSB5kWpxJN7GinBruGgkck68tuHh57hpx7I6GUCyrGKuC9PgYQVV5SsnTO7H eI7M7YAb/y80n6VRG/GdYZyW2dZxGbMEonfudbgPXQakIbOvlAKEvjFM2YXEbRyF4wVbsIv17Az WHUzLKwd/ZjzYFKOzr8Hf7FAtlrsNWsODQTiR+ZGgc2rR8Pnu1A5u7puhJ86VAZ6km0Z0QS9QJA W6MRb77mwNEcRmnZ4qK4LOEpXYtDmv41dJldjkHIuJi9+8sOws2uRHL4GHpaAFSTGRbr7phxnGQ A93umKPUG8N8dN67Z7X3gD6d/ X-Google-Smtp-Source: AGHT+IGcHkgMnqpZF93lLxs84Oee/gXcIKO2zDueULt6PM5LIPG4njAWAD+IiAyNDCajyksrQT6oWA== X-Received: by 2002:a17:906:6ac1:b0:ae0:9fdf:25e8 with SMTP id a640c23a62f3a-ae0bee52de0mr552743566b.47.1750931959733; Thu, 26 Jun 2025 02:59:19 -0700 (PDT) Received: from localhost.localdomain ([2a02:2f0e:c51b:8900:a03f:12cb:72f7:9069]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae06aa5ff34sm1014106166b.40.2025.06.26.02.59.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Jun 2025 02:59:19 -0700 (PDT) From: Ovidiu Panait To: clabbe.montjoie@gmail.com, herbert@gondor.apana.org.au, davem@davemloft.net, linux-crypto@vger.kernel.org Cc: wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Ovidiu Panait Subject: [PATCH v2 02/10] crypto: sun8i-ce - remove boilerplate in sun8i_ce_hash_digest() Date: Thu, 26 Jun 2025 12:58:05 +0300 Message-ID: <20250626095813.83963-3-ovidiu.panait.oss@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> References: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Retrieve the dev pointer from tfm context to eliminate some boilerplate code in sun8i_ce_hash_digest(). Signed-off-by: Ovidiu Panait Reviewed-by: Corentin LABBE Tested-by: Corentin LABBE --- drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c b/drivers/cr= ypto/allwinner/sun8i-ce/sun8i-ce-hash.c index b26f5427c1e0..61e8d968fdcc 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c @@ -238,19 +238,15 @@ static bool sun8i_ce_hash_need_fallback(struct ahash_= request *areq) int sun8i_ce_hash_digest(struct ahash_request *areq) { struct crypto_ahash *tfm =3D crypto_ahash_reqtfm(areq); - struct ahash_alg *alg =3D __crypto_ahash_alg(tfm->base.__crt_alg); + struct sun8i_ce_hash_tfm_ctx *ctx =3D crypto_ahash_ctx(tfm); struct sun8i_ce_hash_reqctx *rctx =3D ahash_request_ctx(areq); - struct sun8i_ce_alg_template *algt; - struct sun8i_ce_dev *ce; + struct sun8i_ce_dev *ce =3D ctx->ce; struct crypto_engine *engine; int e; =20 if (sun8i_ce_hash_need_fallback(areq)) return sun8i_ce_hash_digest_fb(areq); =20 - algt =3D container_of(alg, struct sun8i_ce_alg_template, alg.hash.base); - ce =3D algt->ce; - e =3D sun8i_ce_get_engine_number(ce); rctx->flow =3D e; engine =3D ce->chanlist[e].engine; --=20 2.49.0 From nobody Wed Oct 8 15:58:30 2025 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 023AE2D0283; Thu, 26 Jun 2025 09:59:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931964; cv=none; b=AFQ34Gq8I14Diz5dcUP82ON34W2Veoli9CLPfqVP+uOa6dlLl/ng/pIEaLPkzYdj45GMcdpaBclrHiNkAdAj0c1fCXhzjif20xIwEdWmTvlbbtQ431Fucx1YMTYinbs4TPjDfsAqq7woKZbkEtY7SKwbxy7amX3b9PvOTZTPHJE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931964; c=relaxed/simple; bh=pRmnLFjBJ2dWkN+uiG3G+4366k2+/zNV3iQ7dsrr+ws=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qSuvAYIrQULa7y+tcMBPJX67J/Qa2DyYtTG9pdoV5oV8F6alZsYwhks9Fhvoc2MRCu2PKASnX0Q4/MGtnQmmws9euIYqoK0+M2+zrCfsRdTnzfJUhLVlGlMIj7kikaI8ocMLdqemV881UnYsOE7hDJzuG2C5OVELNr44SjY1jRc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=YjuDg5OT; arc=none smtp.client-ip=209.85.218.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YjuDg5OT" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-adfb562266cso158408966b.0; Thu, 26 Jun 2025 02:59:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750931961; x=1751536761; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=t10wxuAUiB4KyOt9zeZgZ/9RxJrj16+YdQHln4bOH7s=; b=YjuDg5OTrTkJkPBu/zh2MjVF6acKdFKYJ0g2wqHCtnp5FWhae4tD8qijxi8VoOIfLq r9Rn54UcjJZTu/09VZ+0vrkiHXBefj48rgR+ROGisdehpVKRlaqokGFGXMB4t/jXRj4d g0hMlM08Xdkw84QsubqUUv3MQ4mM8MYysnigizYINotm/cHtiorG7e+PBpKoaiRCfOrC qYk5MZhDVjKGxn7wBoLttasuY5QvulKOBNHcMP96Iu800pY2xCZ4fnVOnUGidrNErxkZ fsmxtYQeWtEjKX0sojWavHw1nSi3ftGBdOf6nb4P0EFcuycGnL1NHDiCAtNk61pl3hH2 7LoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750931961; x=1751536761; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=t10wxuAUiB4KyOt9zeZgZ/9RxJrj16+YdQHln4bOH7s=; b=kfRlV/EM9GhVuflNX4lhwVaMdoPT4KxY+ej/KcYDtkZHtsUf5fzCbmB+d3RA7GEC5A bEVHpNmIDfgI1ZJ8MNG5j7AIQIbo2BrKEvvGpUQyHtg7T8DI7vHVMFV1d6w+LF7ldkgY DV8riTCfEL9ybPcN4Ooi11monemDEuzHi7cQzFgdWrYSOImVQuu3T61V3Ywdkgc606nH EHQBrpWleVrAEKCyhfkI/eL6nbo+Ac0vKbe1agqQQZjW3gA1d7mE/qdjNqwZA3IxQQBd GWG1SfcbthQIJpZboTFDQUNOYKt2OWDyKXwzb5bM8HmiFd+AXWDbv7zoNrORI1KvxtfV iE3A== X-Forwarded-Encrypted: i=1; AJvYcCXUB72UzaS1aqqk9run4G6T03c//65PwSHDStVlsu0JSkPiaq3CpfizgPYdFbI4hvt/NExtnexffBd6vM8=@vger.kernel.org, AJvYcCXcSN/ixh0sHuBLbnOQcU8AiKmEc+2P3wKdW0kmuIFJp9LrnxxOQxZ+FpQjZf5XeY/Gdf/YpMBXs9tPIj9J@vger.kernel.org X-Gm-Message-State: AOJu0YzDR46jEziM46J7GD2A3Y1/nNLiTPUU727eAW261TA3noNUyd5r clHlTSfvN0cloeBwQfI//kxBzsydCIXkREiKjS6rVGnXjguBvaPcotcD X-Gm-Gg: ASbGncutcObgGJJDv06wNWt/iERbw706Did39m6a4MHB1zpYf3Qg9F4Fn/UGibePPMP MQh8mGfeQWQ7kvCQX5M9BSsmv9OlAqSdwGvTshOjYMbxmie8wG1T/WxniDTOBBLhllUOKEuOc/E EnrNrgsGvKgSRZGpChNB8ptVVLaZYP+2wSv6t+rMyacBTTw9i53IcpVWWSTUa+RzmgUqa0riPJ6 1X2QKf7VGZxQfmG9slm0dYDUcKPV6XRSCmFi14NGadfaA5bojbLfT0CkTW6H1CtCyGl0ie0PjOr H+bBlkxClF+7q/D/hv18eIbTOk66BbPp11b3lJRRYOiwqU6Adyp5RPONsADd/GgmMJ9oBOIKEYe qHwom0i37IfVdUQ== X-Google-Smtp-Source: AGHT+IF88aeRCVtH1nDToQx7qH4JEcc3ZSBCfS0kNyW1PJ4UHQE1SJGsErLVbTOdPYpSRcUEg4t7Mg== X-Received: by 2002:a17:907:fd01:b0:ae0:b33d:2a4a with SMTP id a640c23a62f3a-ae0bee50370mr591341566b.35.1750931961147; Thu, 26 Jun 2025 02:59:21 -0700 (PDT) Received: from localhost.localdomain ([2a02:2f0e:c51b:8900:a03f:12cb:72f7:9069]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae06aa5ff34sm1014106166b.40.2025.06.26.02.59.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Jun 2025 02:59:20 -0700 (PDT) From: Ovidiu Panait To: clabbe.montjoie@gmail.com, herbert@gondor.apana.org.au, davem@davemloft.net, linux-crypto@vger.kernel.org Cc: wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Ovidiu Panait Subject: [PATCH v2 03/10] crypto: sun8i-ce - move bounce_iv and backup_iv to request context Date: Thu, 26 Jun 2025 12:58:06 +0300 Message-ID: <20250626095813.83963-4-ovidiu.panait.oss@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> References: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, the iv buffers are allocated once per flow during driver probe. Having a single iv buffer for all requests works with the current setup where requests are processed one by one, but it wouldn't work if multiple requests are chained together and processed in one go. In preparation for introducing request batching, allocate iv buffers per request, rather than per flow. Signed-off-by: Ovidiu Panait --- .../allwinner/sun8i-ce/sun8i-ce-cipher.c | 18 +++++++++--------- .../crypto/allwinner/sun8i-ce/sun8i-ce-core.c | 12 ------------ drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h | 8 ++++---- 3 files changed, 13 insertions(+), 25 deletions(-) diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c b/drivers/= crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c index 113a1100f2ae..9963e5962551 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c @@ -209,11 +209,11 @@ static int sun8i_ce_cipher_prepare(struct crypto_engi= ne *engine, void *async_req if (areq->iv && ivsize > 0) { if (rctx->op_dir & CE_DECRYPTION) { offset =3D areq->cryptlen - ivsize; - scatterwalk_map_and_copy(chan->backup_iv, areq->src, + scatterwalk_map_and_copy(rctx->backup_iv, areq->src, offset, ivsize, 0); } - memcpy(chan->bounce_iv, areq->iv, ivsize); - rctx->addr_iv =3D dma_map_single(ce->dev, chan->bounce_iv, ivsize, + memcpy(rctx->bounce_iv, areq->iv, ivsize); + rctx->addr_iv =3D dma_map_single(ce->dev, rctx->bounce_iv, ivsize, DMA_TO_DEVICE); if (dma_mapping_error(ce->dev, rctx->addr_iv)) { dev_err(ce->dev, "Cannot DMA MAP IV\n"); @@ -299,13 +299,13 @@ static int sun8i_ce_cipher_prepare(struct crypto_engi= ne *engine, void *async_req =20 offset =3D areq->cryptlen - ivsize; if (rctx->op_dir & CE_DECRYPTION) { - memcpy(areq->iv, chan->backup_iv, ivsize); - memzero_explicit(chan->backup_iv, ivsize); + memcpy(areq->iv, rctx->backup_iv, ivsize); + memzero_explicit(rctx->backup_iv, ivsize); } else { scatterwalk_map_and_copy(areq->iv, areq->dst, offset, ivsize, 0); } - memzero_explicit(chan->bounce_iv, ivsize); + memzero_explicit(rctx->bounce_iv, ivsize); } =20 dma_unmap_single(ce->dev, rctx->addr_key, op->keylen, DMA_TO_DEVICE); @@ -348,13 +348,13 @@ static void sun8i_ce_cipher_unprepare(struct crypto_e= ngine *engine, DMA_TO_DEVICE); offset =3D areq->cryptlen - ivsize; if (rctx->op_dir & CE_DECRYPTION) { - memcpy(areq->iv, chan->backup_iv, ivsize); - memzero_explicit(chan->backup_iv, ivsize); + memcpy(areq->iv, rctx->backup_iv, ivsize); + memzero_explicit(rctx->backup_iv, ivsize); } else { scatterwalk_map_and_copy(areq->iv, areq->dst, offset, ivsize, 0); } - memzero_explicit(chan->bounce_iv, ivsize); + memzero_explicit(rctx->bounce_iv, ivsize); } =20 dma_unmap_single(ce->dev, rctx->addr_key, op->keylen, DMA_TO_DEVICE); diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c b/drivers/cr= ypto/allwinner/sun8i-ce/sun8i-ce-core.c index 79ec172e5c99..930a6579d853 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c @@ -757,18 +757,6 @@ static int sun8i_ce_allocate_chanlist(struct sun8i_ce_= dev *ce) err =3D -ENOMEM; goto error_engine; } - ce->chanlist[i].bounce_iv =3D devm_kmalloc(ce->dev, AES_BLOCK_SIZE, - GFP_KERNEL | GFP_DMA); - if (!ce->chanlist[i].bounce_iv) { - err =3D -ENOMEM; - goto error_engine; - } - ce->chanlist[i].backup_iv =3D devm_kmalloc(ce->dev, AES_BLOCK_SIZE, - GFP_KERNEL); - if (!ce->chanlist[i].backup_iv) { - err =3D -ENOMEM; - goto error_engine; - } } return 0; error_engine: diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h b/drivers/crypto/= allwinner/sun8i-ce/sun8i-ce.h index f12c32d1843f..0d46531c475c 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h @@ -188,8 +188,6 @@ struct ce_task { * @status: set to 1 by interrupt if task is done * @t_phy: Physical address of task * @tl: pointer to the current ce_task for this flow - * @backup_iv: buffer which contain the next IV to store - * @bounce_iv: buffer which contain the IV * @stat_req: number of request done by this flow */ struct sun8i_ce_flow { @@ -198,8 +196,6 @@ struct sun8i_ce_flow { int status; dma_addr_t t_phy; struct ce_task *tl; - void *backup_iv; - void *bounce_iv; #ifdef CONFIG_CRYPTO_DEV_SUN8I_CE_DEBUG unsigned long stat_req; #endif @@ -264,6 +260,8 @@ static inline __le32 desc_addr_val_le32(struct sun8i_ce= _dev *dev, * @nr_sgd: The number of destination SG (as given by dma_map_sg()) * @addr_iv: The IV addr returned by dma_map_single, need to unmap later * @addr_key: The key addr returned by dma_map_single, need to unmap later + * @bounce_iv: Current IV buffer + * @backup_iv: Next IV buffer * @fallback_req: request struct for invoking the fallback skcipher TFM */ struct sun8i_cipher_req_ctx { @@ -273,6 +271,8 @@ struct sun8i_cipher_req_ctx { int nr_sgd; dma_addr_t addr_iv; dma_addr_t addr_key; + u8 bounce_iv[AES_BLOCK_SIZE] ____cacheline_aligned; + u8 backup_iv[AES_BLOCK_SIZE] ____cacheline_aligned; struct skcipher_request fallback_req; // keep at the end }; =20 --=20 2.49.0 From nobody Wed Oct 8 15:58:30 2025 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 439C52D3EC6; Thu, 26 Jun 2025 09:59:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931966; cv=none; b=QF34q86liEQMrERIOtba3LjCLzxZLcKhD2cJQsUpaJHq6gfLmgq2EEpWPnm6BQ3woeD1ZJ0zBh80J+39aJfQIE3nnxylB06wFgnN74LJsO5xreaTvcE+xaCzmGHaBo2ghoscCnfWAHoe9r1V0NsLRVBhggXsj5DKDRITxevElys= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931966; c=relaxed/simple; bh=C/gJk2ObWTENdNN8gXRsiciv6hvj3wk+copliiqlW8I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YyO4mtWAYhUzQaPaJ8dB048pDOibf+GftwqfBvbdSSIEp9dvudVMGqpGKeaeXIkyFFwWYTDzgct4fdMTg3TWqFa/+2CMq2CoWgPd9/dDoAq1eZV5dOnw8XkLzHZddaKL7XPAqneGfGYjX61sTUvG1O8ajGfFm6Zw6eMAnOK/RKo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ANrzhO1n; arc=none smtp.client-ip=209.85.208.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ANrzhO1n" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-607434e1821so1154775a12.0; Thu, 26 Jun 2025 02:59:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750931963; x=1751536763; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=n4FE/m8CCQWWX6zEjUZSa1AuebcPVAo/kb1WN2hI258=; b=ANrzhO1nFMBIJReBrYsqIVallkRnnGsnx56fxlMc8HUvC3joXaUy52W7RrG2TPPLhM xxYvxCxf9AX3V+lrUpCaAqDMiqWJL53KbvMgqqOzyKSnW4IgOJ0NiWeZAm1R5R4KA2UJ 3UDCOlemDWfZEoJFFE/co57lXdqB0sN2NOkjs4sjFri7AQyDdxWAo6uO3eWOwK0lUhKP 5pC5z851aTjWazYrWbnohagb6B7sITQDWMp4TqYwoNB+3dtge67Kp5/rkUnRtqwRMBEW Lccup1GgQjM6ZoF7ls1ObcglCICZpn07ADGpdsk+4GLxvwZv9RgxQPqQiW39tuMUYS2w +mNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750931963; x=1751536763; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=n4FE/m8CCQWWX6zEjUZSa1AuebcPVAo/kb1WN2hI258=; b=h5Xo3svJn5iW47BTOMhzEKhWtBxtfaPETjXEPGdiRYi/6SW2t2UJZ1cvEcHIEtgepa v7zoshlcp3kO7vf7T+/W2AvsMfSP+wlNc4LnDgwlvfJbpDkx7lmV4j6Xnr3bsUPcZm3L vVEn52pomcCpDwQpY7u5I9i3xAcnZugsdLjXAdq+kgmjGumA6MAFeBD+n0hYBdVYdf+Z BipzeObnuN+r6tFN9a6fmN+NwqpuV1J4oeoFgLohNo7fdBBKn4wYkTOkRCWfKWF22sgj /Slte3bKejZgWXAj3PREIn6uW8mMzpwKxBEp8YfdTrl4TCmtsg2OBWyesr9+x81PeGxU VS1g== X-Forwarded-Encrypted: i=1; AJvYcCXA0AKRQJGwHd7L4a2V4Mm6BXIV7KdAaGoE1FAqzCtC4xlRYkWZLmVkLVLhGtHgSe6rxurv6PW2yRj6qPU=@vger.kernel.org, AJvYcCXeAKrb3PcBF7yY/+CVMxtqjRX9P3YGKUyigr5JjM1HzCtZi8QuLMKh6PNf8Tm0f4A8j+AdodaBMp023372@vger.kernel.org X-Gm-Message-State: AOJu0YxdE0O0/C5IyIvWUwzc9ZABXqWr1QQM4Nx7gCCebbs+08GH6/6S BXvFtMuTz/UUlKpQKeAzgC+HZzfKNjpWA7IxTDw02cW3opS3Tzw7dSH7 X-Gm-Gg: ASbGncvREtEMb7HRIWPhLvGxc5aRY72V2HSYVesu+9BhbsvVtf682SFFihza5Amy9sj ei/7dOxnWdwElQxKsNUb9/l5tidYbkXSHqjwRaBhUKkUarAe+XjarrT8fMu+jb5r2G+VXv414I5 0i2MVYwrjt9P3gmedQWiiJCzrloPbqzvzuE13zarJGTOsjeJHYUG4IY5xsIqDzYgc23OY9+iw+X /0bZVGqD+Ic5gyJJE6mMIEHctFK7UOo/7hkmTwkof5H+UzGsNZ7rgpn33asaCJaQWKaAHPHrwxB LhOYZxHWQjdKwFzCdiswMZcXeZDQPkJ+cHCk8HGVcTULW+XiZIRbfwIDypEqmViRXhDyzOIOVMw VGChHLcsul5WkMXByVUgD3NJa X-Google-Smtp-Source: AGHT+IFTZlskgagUQmsCBIaQcTzLFQ/L/bhoraExJkrhCa/vRJ39QMtLqAaw8cYJYMf4uvVB6AQrMw== X-Received: by 2002:a17:907:d26:b0:ad8:9e80:6baf with SMTP id a640c23a62f3a-ae0be95d15amr719826166b.13.1750931962452; Thu, 26 Jun 2025 02:59:22 -0700 (PDT) Received: from localhost.localdomain ([2a02:2f0e:c51b:8900:a03f:12cb:72f7:9069]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae06aa5ff34sm1014106166b.40.2025.06.26.02.59.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Jun 2025 02:59:22 -0700 (PDT) From: Ovidiu Panait To: clabbe.montjoie@gmail.com, herbert@gondor.apana.org.au, davem@davemloft.net, linux-crypto@vger.kernel.org Cc: wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Ovidiu Panait Subject: [PATCH v2 04/10] crypto: sun8i-ce - save hash buffers and dma info to request context Date: Thu, 26 Jun 2025 12:58:07 +0300 Message-ID: <20250626095813.83963-5-ovidiu.panait.oss@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> References: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, all hash processing (buffer allocation/deallocation, dma mapping/unmapping) is done inside do_one_request() callback. In order to implement request batching, the hash buffers and dma info associated with each request need to be saved inside request context, for later use (during do_batch_requests() callback). Signed-off-by: Ovidiu Panait --- .../crypto/allwinner/sun8i-ce/sun8i-ce-hash.c | 56 +++++++------------ drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h | 17 ++++++ 2 files changed, 38 insertions(+), 35 deletions(-) diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c b/drivers/cr= ypto/allwinner/sun8i-ce/sun8i-ce-hash.c index 61e8d968fdcc..3ee0c65ef600 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c @@ -328,12 +328,9 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, vo= id *breq) u32 common; u64 byte_count; __le32 *bf; - void *buf, *result; int j, i, todo; u64 bs; int digestsize; - dma_addr_t addr_res, addr_pad; - int ns =3D sg_nents_for_len(areq->src, areq->nbytes); =20 algt =3D container_of(alg, struct sun8i_ce_alg_template, alg.hash.base); ce =3D algt->ce; @@ -345,19 +342,7 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, vo= id *breq) if (digestsize =3D=3D SHA384_DIGEST_SIZE) digestsize =3D SHA512_DIGEST_SIZE; =20 - /* the padding could be up to two block. */ - buf =3D kcalloc(2, bs, GFP_KERNEL | GFP_DMA); - if (!buf) { - err =3D -ENOMEM; - goto err_out; - } - bf =3D (__le32 *)buf; - - result =3D kzalloc(digestsize, GFP_KERNEL | GFP_DMA); - if (!result) { - err =3D -ENOMEM; - goto err_free_buf; - } + bf =3D (__le32 *)rctx->pad; =20 flow =3D rctx->flow; chan =3D &ce->chanlist[flow]; @@ -378,11 +363,12 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, v= oid *breq) cet->t_sym_ctl =3D 0; cet->t_asym_ctl =3D 0; =20 - nr_sgs =3D dma_map_sg(ce->dev, areq->src, ns, DMA_TO_DEVICE); + rctx->nr_sgs =3D sg_nents_for_len(areq->src, areq->nbytes); + nr_sgs =3D dma_map_sg(ce->dev, areq->src, rctx->nr_sgs, DMA_TO_DEVICE); if (nr_sgs <=3D 0 || nr_sgs > MAX_SG) { dev_err(ce->dev, "Invalid sg number %d\n", nr_sgs); err =3D -EINVAL; - goto err_free_result; + goto err_out; } =20 len =3D areq->nbytes; @@ -397,10 +383,13 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, v= oid *breq) err =3D -EINVAL; goto err_unmap_src; } - addr_res =3D dma_map_single(ce->dev, result, digestsize, DMA_FROM_DEVICE); - cet->t_dst[0].addr =3D desc_addr_val_le32(ce, addr_res); - cet->t_dst[0].len =3D cpu_to_le32(digestsize / 4); - if (dma_mapping_error(ce->dev, addr_res)) { + + rctx->result_len =3D digestsize; + rctx->addr_res =3D dma_map_single(ce->dev, rctx->result, rctx->result_len, + DMA_FROM_DEVICE); + cet->t_dst[0].addr =3D desc_addr_val_le32(ce, rctx->addr_res); + cet->t_dst[0].len =3D cpu_to_le32(rctx->result_len / 4); + if (dma_mapping_error(ce->dev, rctx->addr_res)) { dev_err(ce->dev, "DMA map dest\n"); err =3D -EINVAL; goto err_unmap_src; @@ -428,10 +417,12 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, v= oid *breq) goto err_unmap_result; } =20 - addr_pad =3D dma_map_single(ce->dev, buf, j * 4, DMA_TO_DEVICE); - cet->t_src[i].addr =3D desc_addr_val_le32(ce, addr_pad); + rctx->pad_len =3D j * 4; + rctx->addr_pad =3D dma_map_single(ce->dev, rctx->pad, rctx->pad_len, + DMA_TO_DEVICE); + cet->t_src[i].addr =3D desc_addr_val_le32(ce, rctx->addr_pad); cet->t_src[i].len =3D cpu_to_le32(j); - if (dma_mapping_error(ce->dev, addr_pad)) { + if (dma_mapping_error(ce->dev, rctx->addr_pad)) { dev_err(ce->dev, "DMA error on padding SG\n"); err =3D -EINVAL; goto err_unmap_result; @@ -444,21 +435,16 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, v= oid *breq) =20 err =3D sun8i_ce_run_task(ce, flow, crypto_ahash_alg_name(tfm)); =20 - dma_unmap_single(ce->dev, addr_pad, j * 4, DMA_TO_DEVICE); + dma_unmap_single(ce->dev, rctx->addr_pad, rctx->pad_len, DMA_TO_DEVICE); =20 err_unmap_result: - dma_unmap_single(ce->dev, addr_res, digestsize, DMA_FROM_DEVICE); + dma_unmap_single(ce->dev, rctx->addr_res, rctx->result_len, + DMA_FROM_DEVICE); if (!err) - memcpy(areq->result, result, crypto_ahash_digestsize(tfm)); + memcpy(areq->result, rctx->result, crypto_ahash_digestsize(tfm)); =20 err_unmap_src: - dma_unmap_sg(ce->dev, areq->src, ns, DMA_TO_DEVICE); - -err_free_result: - kfree(result); - -err_free_buf: - kfree(buf); + dma_unmap_sg(ce->dev, areq->src, rctx->nr_sgs, DMA_TO_DEVICE); =20 err_out: local_bh_disable(); diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h b/drivers/crypto/= allwinner/sun8i-ce/sun8i-ce.h index 0d46531c475c..90b955787d37 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h @@ -110,6 +110,9 @@ =20 #define MAXFLOW 4 =20 +#define CE_MAX_HASH_DIGEST_SIZE SHA512_DIGEST_SIZE +#define CE_MAX_HASH_BLOCK_SIZE SHA512_BLOCK_SIZE + /* * struct ce_clock - Describe clocks used by sun8i-ce * @name: Name of clock needed by this variant @@ -304,9 +307,23 @@ struct sun8i_ce_hash_tfm_ctx { * struct sun8i_ce_hash_reqctx - context for an ahash request * @fallback_req: pre-allocated fallback request * @flow: the flow to use for this request + * @nr_sgs: number of entries in the source scatterlist + * @result_len: result length in bytes + * @pad_len: padding length in bytes + * @addr_res: DMA address of the result buffer, returned by dma_map_single= () + * @addr_pad: DMA address of the padding buffer, returned by dma_map_singl= e() + * @result: per-request result buffer + * @pad: per-request padding buffer (up to 2 blocks) */ struct sun8i_ce_hash_reqctx { int flow; + int nr_sgs; + size_t result_len; + size_t pad_len; + dma_addr_t addr_res; + dma_addr_t addr_pad; + u8 result[CE_MAX_HASH_DIGEST_SIZE] ____cacheline_aligned; + u8 pad[2 * CE_MAX_HASH_BLOCK_SIZE] ____cacheline_aligned; struct ahash_request fallback_req; // keep at the end }; =20 --=20 2.49.0 From nobody Wed Oct 8 15:58:30 2025 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CF8BA2D3EF4; Thu, 26 Jun 2025 09:59:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931967; cv=none; b=GcYupLZ9IOku28ib+s5ezUHiF4RW0V6G0pOlZ/zRV31nBG8v0dWTsYTCELfHRCxe4P4Y39Q6o8IbLqft9cev+JdASlrwzqtOWAm4v4QD7C1tN59kXOhAgTrCUQD3z5pwsth8bgtzVYwXf+C3ByN8JhxqtRPNv2+KSD6bqChXPdM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931967; c=relaxed/simple; bh=ThK72kzM3/NAb5q4kYO3GzKkml/jXobH2nqcwRen8oE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MHc7YwHmIjiaIIukXL9gUwQyDwJVlyc6QP+h18j5eFWC8bmxPZWmIa1ZEzXvX6xyc3okqocxHBBF1fFpiq/D9YngqvauFJRaof/GGFDlfyBlOZqiLDbQ6l3ecxjzbe3wX1Ivlop2fRxlfgElfP2Knehe/VNIHjWwMBfGsXN9nS0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gSCPY6XS; arc=none smtp.client-ip=209.85.218.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gSCPY6XS" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-ae0dd62f2adso53201966b.2; Thu, 26 Jun 2025 02:59:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750931964; x=1751536764; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rgIbzVPscBuyqUEBsClRFHHr0kmYa9s+xoX+40DNp18=; b=gSCPY6XSedNaGLc2+zHoSPEh3J/xVpzeJRhrB7NK1BlLKX9NLADl8ySSmnHlH0/wth wL1xNI75X8caOXNcWJs78IHBO2aITqwQJ/bHcpeUR3ZXlgjPrRD9WpXia7bj86pZj80L ZoHCUs+oPGADIc4IVpBVu/PicN7iLqgNdwgRuCUUioG0Ef/p7Jr9sV45XZpzN8gGHIf7 HQROjWaw5EMtd6WhnV6e/rZENrqk1ba8nM3cFRLv7/EQA4+rZ4h6VRXSkpg+ADIoIdYS bo/zhUVvrwKhibJB9sGdII45xhQxqeJ2S+gJ2Ohjag5sxB653985ukExY34RMgAme88S gzmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750931964; x=1751536764; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rgIbzVPscBuyqUEBsClRFHHr0kmYa9s+xoX+40DNp18=; b=J0uFksacRaTphPPgH0yxh/qmWalnLF3WuPpDpczoXkBRiPJQJgh+dGCGzQ6QY/rCjx yR4MaCwswa2X0N2BH3DzbAQnaLj7fO0M8bOxFCxOMDOOWO5sukIRW8pKZhQSbMnIkQmi 80B63r3CGpIrnIJW+v+YnBGOXQ7j2g9j+7TmnuBtr3L/pzgVJZeMj1kteK6ghjOgOGJw issqygfZfpJVg94KVOWu5j9UVvg4o9D7rxJXHPfpqLbqjgqY+PFsX7VwI/SS9pplgnJ/ e4NKJMbnIQGh5Dm8v07RZKdaolQ+05x5U5+bXF2i8Mawb8XipKbjrYatEFK0v58o49BD y5Ew== X-Forwarded-Encrypted: i=1; AJvYcCU+rg73dRZ5xBglpuPCW3jeXYSmRodkff2OjCCpOPoIma/w5ouw0MiFny+KhxXAbx8wSFlGCD0GZF5O5kU=@vger.kernel.org, AJvYcCUxTfarRtpicd1ae4t2jROfxZbfqRFMtnO7PmRMje9+vYx719iZl2D0pAYDRBkM0SjbPiX2xZPHHYuW+r9M@vger.kernel.org X-Gm-Message-State: AOJu0YwqJaX79fEEeY/GxpM682CKZ/yCaNkpaXslPKUNtQ7teuc1kQEM z1J4nQfxcBXHtH2wLLwVFWfJp6MLDzcDEN3Uztp7eMsTMX3A+TTMrlkS X-Gm-Gg: ASbGnct1z1awv2mDKf7nhn+37vykWVlhTkd4jzFLaJiOb87tjlh15VRgyIixQboEk/A Yx0QJO0gaCpvIEHMqvTvDqpTaNeVPSH1AoDUzXWOBCqodYUlBvuYdz/C9fEeNxpLVXeGWRgAPH7 M6LsfncoyMHtgAiWXrycDKYc3pzEDQ1QV4PlQzME7rX4mmzFYPUaK+OclK1+a3sJD9XZbIro0lO nFgJyJrsEzzkcYPZ4ZxQ8hywM9OkbFf588eUpeCwxabpgRL3jstImffH8rwY48XztekQVs0I8Q8 zbV3XICH0ui6xecN8sIWIlSmZgTwVyrrEUtp37Wtd0JuXJ8+e/4KgGQ33ZeekZh5IvtEUL4QndS BnH/hLKFoMOnUhg== X-Google-Smtp-Source: AGHT+IHJfX+7ivm4fdZr8aEC60S1v6KlfF4DtnJ6WAAHM60+ZeTeCtoGepFQRb/ZdyWtPXc8/FAGAQ== X-Received: by 2002:a17:907:94c7:b0:ade:bf32:b05a with SMTP id a640c23a62f3a-ae0be53a92cmr665540566b.0.1750931963697; Thu, 26 Jun 2025 02:59:23 -0700 (PDT) Received: from localhost.localdomain ([2a02:2f0e:c51b:8900:a03f:12cb:72f7:9069]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae06aa5ff34sm1014106166b.40.2025.06.26.02.59.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Jun 2025 02:59:23 -0700 (PDT) From: Ovidiu Panait To: clabbe.montjoie@gmail.com, herbert@gondor.apana.org.au, davem@davemloft.net, linux-crypto@vger.kernel.org Cc: wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Ovidiu Panait Subject: [PATCH v2 05/10] crytpo: sun8i-ce - factor out prepare/unprepare code from ahash do_one_request Date: Thu, 26 Jun 2025 12:58:08 +0300 Message-ID: <20250626095813.83963-6-ovidiu.panait.oss@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> References: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The crypto engine workflow for batching requests requires the driver to chain the requests in do_one_request() and then send the batch for processing in do_batch_requests(). Split the monolithic ahash do_one_request() callback into two parts, prepare and unprepare, so they can be used in batch processing. Signed-off-by: Ovidiu Panait --- .../crypto/allwinner/sun8i-ce/sun8i-ce-hash.c | 64 ++++++++++++++----- 1 file changed, 48 insertions(+), 16 deletions(-) diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c b/drivers/cr= ypto/allwinner/sun8i-ce/sun8i-ce-hash.c index 3ee0c65ef600..7811fa17388c 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c @@ -312,18 +312,15 @@ static u64 hash_pad(__le32 *buf, unsigned int bufsize= , u64 padi, u64 byte_count, return j; } =20 -int sun8i_ce_hash_run(struct crypto_engine *engine, void *breq) +static int sun8i_ce_hash_prepare(struct ahash_request *areq, struct ce_tas= k *cet) { - struct ahash_request *areq =3D container_of(breq, struct ahash_request, b= ase); struct crypto_ahash *tfm =3D crypto_ahash_reqtfm(areq); struct ahash_alg *alg =3D __crypto_ahash_alg(tfm->base.__crt_alg); struct sun8i_ce_hash_reqctx *rctx =3D ahash_request_ctx(areq); struct sun8i_ce_alg_template *algt; struct sun8i_ce_dev *ce; - struct sun8i_ce_flow *chan; - struct ce_task *cet; struct scatterlist *sg; - int nr_sgs, flow, err; + int nr_sgs, err; unsigned int len; u32 common; u64 byte_count; @@ -344,18 +341,14 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, v= oid *breq) =20 bf =3D (__le32 *)rctx->pad; =20 - flow =3D rctx->flow; - chan =3D &ce->chanlist[flow]; - if (IS_ENABLED(CONFIG_CRYPTO_DEV_SUN8I_CE_DEBUG)) algt->stat_req++; =20 dev_dbg(ce->dev, "%s %s len=3D%d\n", __func__, crypto_tfm_alg_name(areq->= base.tfm), areq->nbytes); =20 - cet =3D chan->tl; memset(cet, 0, sizeof(struct ce_task)); =20 - cet->t_id =3D cpu_to_le32(flow); + cet->t_id =3D cpu_to_le32(rctx->flow); common =3D ce->variant->alg_hash[algt->ce_algo_id]; common |=3D CE_COMM_INT; cet->t_common_ctl =3D cpu_to_le32(common); @@ -433,22 +426,61 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, v= oid *breq) else cet->t_dlen =3D cpu_to_le32(areq->nbytes / 4 + j); =20 - err =3D sun8i_ce_run_task(ce, flow, crypto_ahash_alg_name(tfm)); - - dma_unmap_single(ce->dev, rctx->addr_pad, rctx->pad_len, DMA_TO_DEVICE); + return 0; =20 err_unmap_result: dma_unmap_single(ce->dev, rctx->addr_res, rctx->result_len, DMA_FROM_DEVICE); - if (!err) - memcpy(areq->result, rctx->result, crypto_ahash_digestsize(tfm)); =20 err_unmap_src: dma_unmap_sg(ce->dev, areq->src, rctx->nr_sgs, DMA_TO_DEVICE); =20 err_out: + return err; +} + +static void sun8i_ce_hash_unprepare(struct ahash_request *areq, + struct ce_task *cet) +{ + struct sun8i_ce_hash_reqctx *rctx =3D ahash_request_ctx(areq); + struct crypto_ahash *tfm =3D crypto_ahash_reqtfm(areq); + struct sun8i_ce_hash_tfm_ctx *ctx =3D crypto_ahash_ctx(tfm); + struct sun8i_ce_dev *ce =3D ctx->ce; + + dma_unmap_single(ce->dev, rctx->addr_pad, rctx->pad_len, DMA_TO_DEVICE); + dma_unmap_single(ce->dev, rctx->addr_res, rctx->result_len, + DMA_FROM_DEVICE); + dma_unmap_sg(ce->dev, areq->src, rctx->nr_sgs, DMA_TO_DEVICE); +} + +int sun8i_ce_hash_run(struct crypto_engine *engine, void *async_req) +{ + struct ahash_request *areq =3D ahash_request_cast(async_req); + struct crypto_ahash *tfm =3D crypto_ahash_reqtfm(areq); + struct sun8i_ce_hash_tfm_ctx *ctx =3D crypto_ahash_ctx(tfm); + struct sun8i_ce_hash_reqctx *rctx =3D ahash_request_ctx(areq); + struct sun8i_ce_dev *ce =3D ctx->ce; + struct sun8i_ce_flow *chan; + struct ce_task *cet; + int err; + + chan =3D &ce->chanlist[rctx->flow]; + cet =3D chan->tl; + + err =3D sun8i_ce_hash_prepare(areq, cet); + if (err) + return err; + + err =3D sun8i_ce_run_task(ce, rctx->flow, crypto_ahash_alg_name(tfm)); + + sun8i_ce_hash_unprepare(areq, cet); + + if (!err) + memcpy(areq->result, rctx->result, + crypto_ahash_digestsize(tfm)); + local_bh_disable(); - crypto_finalize_hash_request(engine, breq, err); + crypto_finalize_hash_request(engine, async_req, err); local_bh_enable(); =20 return 0; --=20 2.49.0 From nobody Wed Oct 8 15:58:30 2025 Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D5A302D876B; Thu, 26 Jun 2025 09:59:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931968; cv=none; b=tMA7Fx4HpazyaQleJ/P1LysPlgvrV3K6V6kNTG+2L2++cfJLXupvKMiDnASBlthUreeVS0jeNGaBy3suQjjTJ6JCwhzcPpBhsoRWHMDh2V284Yu4TvFLNhvxRX2MvyjO3ShjNEcbefQRjvJOuYZjmkrX20H0ONhrtXQGu4CCKTs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931968; c=relaxed/simple; bh=MVmmWlPksmaiBVibi00qDI48RIUv844ifSFHgrjus/c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jFDi6iWOeej488pcUgjPM/r8PdHLdX671pQF8QYtYJwYMm0LJW4yAB0PX4VIp0fzfHu1SbUl2S1BgTpJvjMUebLyz81w9cBx5Quu5SCIuAkpNmf6oqHzCDAz0520H24G5yl+SoXHL3VoOL/SQhH5mtUsW8simW1FYhpk6U1A7jo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=aAvx8EzQ; arc=none smtp.client-ip=209.85.208.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="aAvx8EzQ" Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-60789b450ceso1406769a12.2; Thu, 26 Jun 2025 02:59:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750931965; x=1751536765; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nOCWgCxa5TuHqEzs7P/Xd0Uu+UeKSk+lfEEEEay9BLo=; b=aAvx8EzQx+3Wbw17Wa5Bx7efFdS4LR6GxbYF2Z3yrPsbqiM0FLLA0VMauLc2SGNwE9 SFRUtEXBnhmxy+Cq3sXH92VgK/M37SI0Zkfd6P9xLGIdNO4FY/4/kWjmxsJHgZ89H0cq tXzlsNOuN+5bak54QbU2HALd6DqGSnRYo270n4U50ogc1tdOujHQdJEFfsMlIt43jb1o JV2d8LfoFybl6WzL5/Qeo2yXUlkY8+ipXJdvu3ZguHTNzoulg8iH8f1EDG2OcP38Rua5 oZ6uvXai9d8bpGuecbIgqh09rtFKMbG+2Sg0WwryyNTaAy4Tzq9EiqpG8LR5mIbyrGaJ iFnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750931965; x=1751536765; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nOCWgCxa5TuHqEzs7P/Xd0Uu+UeKSk+lfEEEEay9BLo=; b=lmUoatQq9qEdl9yyw800/I2lTS9Qn9p8v+dQ0sqW+BVJT7P41cuQNb44rr7o4lDteT p1FkJxsRvh5uX0Qeh9pvNeiwNztkaJS7Ky3VJ0vKcWlwTocBoTi4FIpmOFJCIyz2VaQo ToEUC8mQAt/wDg162aqu6qlspTiHtGb1ZV16lHgs9Js2UA52sUG8gdrGdQ8dKvvLCrrM 64onrcOVs9CmxNubTaNGJFgzjfb2nbbOkKn0Odqi5ZBuR0vNrvNHPYF+wFfxYyMFby/L pYOxftXPqrobeCGMWFUZnXXu17+OlyYrdkSDvwv5spKDtCkj1zj01HdIM/yidhG1sD8T 5X0w== X-Forwarded-Encrypted: i=1; AJvYcCUO1r1PH0Y/YM1pPunMM54FPZ7AXnUmTAWx8rPK6MyD5V0GlY6k7/X3DIvOV9DXdjAd+3AMHM73hVPtGu4=@vger.kernel.org, AJvYcCXyuC9qGf5SjkKFlfOc2LG7c34jz/DZRKrz9omYNwxBERiGXOgJppJCIW4+vm6jrgSqkL4nQ7YC0IPvaGlN@vger.kernel.org X-Gm-Message-State: AOJu0Yxvvvw5fRmAnyBzF8oGx8w2vgNOJDnGehi8PvG0OVCEGTEbfp/f hBNNUbbXCKz6/30f3AaP/4wftZuUlKtewGMrymrnxg3sJVcqYfG4Ghjr X-Gm-Gg: ASbGncvy8mBtdRBbkRsP27OCafhmhpFepvJ2Fv3UcPp3ZrQclicbEulNP0yJgb26fes 70tgvjMQELmX796CZmzoPp24r7sSkEW00m+rjK76h3zrvqumSb170B31vYIcgr0iHAlfF5XjPj6 5Rb3+xDI8mAP1+Xgj/bVLRcDQmcUj9Mn0YoO2LBxbCue2os2tzJUsokRiNPYTa71vcWv5sUjyXH /j150dnOA8MTci6xH5Ts3e8NoaH5t2JbfWVxaZ16yTbgYgfBYLYX5HtsMD3+P399rkapfhbLmbX wNHVwKH5utcLS/sSzcPTIYjtApmb9/b0yMDmDgoZ1Kd7Xd7/lTZFZU2F7NCGpYAQHVeb0pvc7ts LB68Z/tijxX+uJA== X-Google-Smtp-Source: AGHT+IFXLtDWsVLMRJFKSM7ZfKEbTxaY7obk208Kuz4qR9WlO3f5+snTWFaRNwrAjl6SXIyIm+JgZw== X-Received: by 2002:a17:906:33d5:b0:ade:cdec:7085 with SMTP id a640c23a62f3a-ae0be893190mr488892666b.26.1750931964994; Thu, 26 Jun 2025 02:59:24 -0700 (PDT) Received: from localhost.localdomain ([2a02:2f0e:c51b:8900:a03f:12cb:72f7:9069]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae06aa5ff34sm1014106166b.40.2025.06.26.02.59.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Jun 2025 02:59:24 -0700 (PDT) From: Ovidiu Panait To: clabbe.montjoie@gmail.com, herbert@gondor.apana.org.au, davem@davemloft.net, linux-crypto@vger.kernel.org Cc: wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Ovidiu Panait Subject: [PATCH v2 06/10] crypto: sun8i-ce - fold sun8i_ce_cipher_run() into sun8i_ce_cipher_do_one() Date: Thu, 26 Jun 2025 12:58:09 +0300 Message-ID: <20250626095813.83963-7-ovidiu.panait.oss@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> References: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fold sun8i_ce_cipher_run() into it's only caller, sun8i_ce_cipher_do_one(), to eliminate a bit of boilerplate. This will also make it a bit more clear that the skcipher do_one_request() callback follows the usual prepare -> run -> unprepare pattern. Signed-off-by: Ovidiu Panait --- .../allwinner/sun8i-ce/sun8i-ce-cipher.c | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c b/drivers/= crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c index 9963e5962551..5fdb6a986b1f 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c @@ -360,31 +360,27 @@ static void sun8i_ce_cipher_unprepare(struct crypto_e= ngine *engine, dma_unmap_single(ce->dev, rctx->addr_key, op->keylen, DMA_TO_DEVICE); } =20 -static void sun8i_ce_cipher_run(struct crypto_engine *engine, void *areq) -{ - struct skcipher_request *breq =3D container_of(areq, struct skcipher_requ= est, base); - struct crypto_skcipher *tfm =3D crypto_skcipher_reqtfm(breq); - struct sun8i_cipher_tfm_ctx *op =3D crypto_skcipher_ctx(tfm); - struct sun8i_ce_dev *ce =3D op->ce; - struct sun8i_cipher_req_ctx *rctx =3D skcipher_request_ctx(breq); - int flow, err; - - flow =3D rctx->flow; - err =3D sun8i_ce_run_task(ce, flow, crypto_tfm_alg_name(breq->base.tfm)); - sun8i_ce_cipher_unprepare(engine, areq); - local_bh_disable(); - crypto_finalize_skcipher_request(engine, breq, err); - local_bh_enable(); -} - int sun8i_ce_cipher_do_one(struct crypto_engine *engine, void *areq) { - int err =3D sun8i_ce_cipher_prepare(engine, areq); + struct sun8i_cipher_req_ctx *rctx =3D skcipher_request_ctx(areq); + struct skcipher_request *req =3D skcipher_request_cast(areq); + struct crypto_skcipher *tfm =3D crypto_skcipher_reqtfm(req); + struct sun8i_cipher_tfm_ctx *ctx =3D crypto_skcipher_ctx(tfm); + struct sun8i_ce_dev *ce =3D ctx->ce; + int err; =20 + err =3D sun8i_ce_cipher_prepare(engine, areq); if (err) return err; =20 - sun8i_ce_cipher_run(engine, areq); + err =3D sun8i_ce_run_task(ce, rctx->flow, + crypto_tfm_alg_name(req->base.tfm)); + sun8i_ce_cipher_unprepare(engine, areq); + + local_bh_disable(); + crypto_finalize_skcipher_request(engine, req, err); + local_bh_enable(); + return 0; } =20 --=20 2.49.0 From nobody Wed Oct 8 15:58:30 2025 Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0C1472D97B2; Thu, 26 Jun 2025 09:59:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931970; cv=none; b=uPMGTSlE4bTiOq2s/MtyUt8KE2kn9cM2ve4pvnZYBeteYIpkyGyPWeROAQjLrnJ4KffLzQ96mHK2cLyXq5kPpSDfIklMR4axPeJlAA5mInKh1StJIYsMC2t7EQQ7r0JEo3zwNRpPL0f+7CHSIR8jAodCq5Zp8f8JK2p70Gmbvrs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931970; c=relaxed/simple; bh=kINjivbB1+ylLn7tV9af00mOK273H9HJI0nMG3aaa1c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oKS0bryux0eawA1yFkeyPn05fbmF5vL4aaqFCx4HvMI+csrJnYDhYsHks3C1Gp0hvSMAZFL0QGFRXfEaHr9cygyvKn4Ooha5UBVMnGnzC6sCF3plHV+BvOYJPjl4E3fwH5qY+G7rbbhOIWL4JzfTWKU/BT5fvGAyQh9yjLXvtxI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nViVaWLN; arc=none smtp.client-ip=209.85.208.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nViVaWLN" Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-60c4521ae2cso1451954a12.0; Thu, 26 Jun 2025 02:59:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750931966; x=1751536766; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SfOFmSReN1wX8YEf6gXPwdHyf/C+wiQacKthqWE/o4Y=; b=nViVaWLNMmpJqwX3aVnuZJEYLSW7l+V+tT7sfO3YhQ8OtrWB1rUSGx567+gXUN1r/n erMaR9OK/yRoKY5vm5vCtCSHaYkyA/U7+XT0pP8RGgWk7KLxO9dIDdDR6cG14Kn3/OiZ KJkFI9A+B+mBwxKFsMLbrYGCw5ylq18pITfBwvUGft6gPDueDlAiqiyjDTrbLzzVnTgD ZnPkWJvb1uPQkSMsUhac/GLqQsOAd0tshlPeISOgtyZaYNsjGQodT6rRB0BVvjfc+pJC gKaukQnYT04c/3/+5461ukfHLr5w5jgqXL/2vGieW0Mpand6sCrMblwdWa6nuwRPW4XF rpcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750931966; x=1751536766; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SfOFmSReN1wX8YEf6gXPwdHyf/C+wiQacKthqWE/o4Y=; b=wdAXIW4RQ7+v/BsxW9dObcwBMMxW8B97E7TKp5sbSN7JVdbGuj0PlZyVitterHNbvx G2TvgvMloj1Px7hI7IcmyB/nYeiF0fuqAg59fNPXvBaItDq5euCb8aW3dAzZ1jDwzWYr lNucTacO25tLsP7B/N+T8ytOyvxNyC5Tz+WovkzsMnZbyEvQMOCeqNS83QP/PQ/OFrWr cGIPNNlEUOtr0Nlxxqb3u7eK6j9EfeNDvpO7q/6dNIQ7duusr9qM8izdBA+uTkcCWi3N rHtWX26KdKgnFOIDpxGaRYwrpeeqMYBNTSTauOhIdEFkFN+PWgLmD/5OI2MPw/trVZ0c 8EfQ== X-Forwarded-Encrypted: i=1; AJvYcCVy9STaw39dtCVLE0faMk7qjWyK2uRIao72T+m6kjza2GF03CxESQJno+EekNva6/6rRyaOVXZNQxcL+C0K@vger.kernel.org, AJvYcCXHkKSWoqPY00DcLDGEl4O/XNUe3jQ3wB5fcbEUp4PnibCO+HQ7Vgv80e+LX9J3/rLzr/P7yVE43Tts7U0=@vger.kernel.org X-Gm-Message-State: AOJu0Yx98U/DhtumJw+yaMfSDc2l+fRHuJ3Iq2pOZeZGRY8qqI97Kjm6 KTvfoft9Jh8+9iYLiGIul6bNqRCpXEl5Ub56p4gKza1d2bTsVLB+GdFb X-Gm-Gg: ASbGncsJlhaIg895Ltr2jBu+q3RFKYH/06RFCTgxtV5/VnU9YCqVJv4ODrZWXRKsXvO 2HQ7DAx+NLr/Qvh49rd1GcPS8BMmC+U7ozaHkFRxg+XIZrZnwnmD/4HIeGZclQxFsTzRhZNSrPb sbeLd50TCA69CuSIllr5FcTf2xwxW1LFvHCHiaGfdtX6Zl6K7JuEPFQ8647Mlv4ZoRBE1fLSnWp aaEwcvb6ez2ns2DmEX7R/0bsf73JqiY9W3xA8bLLt7f4ygmG1SlssTpqIlI9IMT5cPSA6yKZXdE WqVi+J3d6ZEjHU5MAV55P10AZ1/2hk/zXy5lX6HjhFgGm9o/2DagbqlTNGtNRSCdY9TO8TafNgl FZX6xditln+Mt/fK1vau4qdXX X-Google-Smtp-Source: AGHT+IHpLn6aCPnOPWyRWC4lX3V76l2fWHzGHcZP/K3tw1wy0XjyFByxeww30mlPPfNzoaWZ+4XQ7Q== X-Received: by 2002:a17:906:390e:b0:acf:15d:2385 with SMTP id a640c23a62f3a-ae0be84ee1amr611692566b.16.1750931966229; Thu, 26 Jun 2025 02:59:26 -0700 (PDT) Received: from localhost.localdomain ([2a02:2f0e:c51b:8900:a03f:12cb:72f7:9069]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae06aa5ff34sm1014106166b.40.2025.06.26.02.59.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Jun 2025 02:59:25 -0700 (PDT) From: Ovidiu Panait To: clabbe.montjoie@gmail.com, herbert@gondor.apana.org.au, davem@davemloft.net, linux-crypto@vger.kernel.org Cc: wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Ovidiu Panait Subject: [PATCH v2 07/10] crypto: sun8i-ce - pass task descriptor to cipher prepare/unprepare Date: Thu, 26 Jun 2025 12:58:10 +0300 Message-ID: <20250626095813.83963-8-ovidiu.panait.oss@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> References: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rework sun8i_ce_cipher_prepare() and sun8i_ce_cipher_unprepare() to take a task descriptor pointer as a parameter. Move common flow setup code to sun8i_ce_cipher_do_one() and also remove the crypto_engine parameter, as it was not used anyway. Signed-off-by: Ovidiu Panait --- .../allwinner/sun8i-ce/sun8i-ce-cipher.c | 37 +++++++------------ 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c b/drivers/= crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c index 5fdb6a986b1f..d206b4fb5084 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c @@ -131,21 +131,19 @@ static int sun8i_ce_cipher_fallback(struct skcipher_r= equest *areq) return err; } =20 -static int sun8i_ce_cipher_prepare(struct crypto_engine *engine, void *asy= nc_req) +static int sun8i_ce_cipher_prepare(struct skcipher_request *areq, + struct ce_task *cet) { - struct skcipher_request *areq =3D container_of(async_req, struct skcipher= _request, base); struct crypto_skcipher *tfm =3D crypto_skcipher_reqtfm(areq); struct sun8i_cipher_tfm_ctx *op =3D crypto_skcipher_ctx(tfm); struct sun8i_ce_dev *ce =3D op->ce; struct sun8i_cipher_req_ctx *rctx =3D skcipher_request_ctx(areq); struct skcipher_alg *alg =3D crypto_skcipher_alg(tfm); struct sun8i_ce_alg_template *algt; - struct sun8i_ce_flow *chan; - struct ce_task *cet; struct scatterlist *sg; unsigned int todo, len, offset, ivsize; u32 common, sym; - int flow, i; + int i; int nr_sgs =3D 0; int nr_sgd =3D 0; int err =3D 0; @@ -163,14 +161,9 @@ static int sun8i_ce_cipher_prepare(struct crypto_engin= e *engine, void *async_req if (IS_ENABLED(CONFIG_CRYPTO_DEV_SUN8I_CE_DEBUG)) algt->stat_req++; =20 - flow =3D rctx->flow; - - chan =3D &ce->chanlist[flow]; - - cet =3D chan->tl; memset(cet, 0, sizeof(struct ce_task)); =20 - cet->t_id =3D cpu_to_le32(flow); + cet->t_id =3D cpu_to_le32(rctx->flow); common =3D ce->variant->alg_cipher[algt->ce_algo_id]; common |=3D rctx->op_dir | CE_COMM_INT; cet->t_common_ctl =3D cpu_to_le32(common); @@ -314,24 +307,17 @@ static int sun8i_ce_cipher_prepare(struct crypto_engi= ne *engine, void *async_req return err; } =20 -static void sun8i_ce_cipher_unprepare(struct crypto_engine *engine, - void *async_req) +static void sun8i_ce_cipher_unprepare(struct skcipher_request *areq, + struct ce_task *cet) { - struct skcipher_request *areq =3D container_of(async_req, struct skcipher= _request, base); struct crypto_skcipher *tfm =3D crypto_skcipher_reqtfm(areq); struct sun8i_cipher_tfm_ctx *op =3D crypto_skcipher_ctx(tfm); struct sun8i_ce_dev *ce =3D op->ce; struct sun8i_cipher_req_ctx *rctx =3D skcipher_request_ctx(areq); - struct sun8i_ce_flow *chan; - struct ce_task *cet; unsigned int ivsize, offset; int nr_sgs =3D rctx->nr_sgs; int nr_sgd =3D rctx->nr_sgd; - int flow; =20 - flow =3D rctx->flow; - chan =3D &ce->chanlist[flow]; - cet =3D chan->tl; ivsize =3D crypto_skcipher_ivsize(tfm); =20 if (areq->src =3D=3D areq->dst) { @@ -362,20 +348,25 @@ static void sun8i_ce_cipher_unprepare(struct crypto_e= ngine *engine, =20 int sun8i_ce_cipher_do_one(struct crypto_engine *engine, void *areq) { - struct sun8i_cipher_req_ctx *rctx =3D skcipher_request_ctx(areq); struct skcipher_request *req =3D skcipher_request_cast(areq); + struct sun8i_cipher_req_ctx *rctx =3D skcipher_request_ctx(req); struct crypto_skcipher *tfm =3D crypto_skcipher_reqtfm(req); struct sun8i_cipher_tfm_ctx *ctx =3D crypto_skcipher_ctx(tfm); struct sun8i_ce_dev *ce =3D ctx->ce; + struct sun8i_ce_flow *chan; + struct ce_task *cet; int err; =20 - err =3D sun8i_ce_cipher_prepare(engine, areq); + chan =3D &ce->chanlist[rctx->flow]; + cet =3D chan->tl; + + err =3D sun8i_ce_cipher_prepare(req, cet); if (err) return err; =20 err =3D sun8i_ce_run_task(ce, rctx->flow, crypto_tfm_alg_name(req->base.tfm)); - sun8i_ce_cipher_unprepare(engine, areq); + sun8i_ce_cipher_unprepare(req, cet); =20 local_bh_disable(); crypto_finalize_skcipher_request(engine, req, err); --=20 2.49.0 From nobody Wed Oct 8 15:58:30 2025 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E12E2D97B7; Thu, 26 Jun 2025 09:59:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931971; cv=none; b=h7YkCQAEAGbmEXNFmMldu91FUBzdIVaMtLPuv2BbPdOtaOQUFld8f44pHhMJsgcMAbQmOBJFSYSQZcDRMcLH2yZb0krN82O/pJDoC8Jn+a4aWQCEwVZmiELn24BiClKnm8hnFBzkyv0aRC40F2HS20R9/eA4XmDHfdg4ej8A2Ak= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931971; c=relaxed/simple; bh=SV17SgqAFM/CwgJKb43KYYELjIo00ELjwm2XuaeiHoY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kT2dur1UI8gOgDPTW/hEzKlTaa32DYQRzk0XpfOX6MHK5stzpDp8a9VKKYvr+U9hFrHggqQjqrf2pVV71oO2dZJjJ4ySFTQgY1FzyE17Pa8PsA2ftK9zrhUpPc1L9JtqpRRnc1nFR5HmMS0kFGewoq6kQoQlUqBcKVIassBAqLk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NgGvP6es; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NgGvP6es" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-ae0dad3a179so61646866b.1; Thu, 26 Jun 2025 02:59:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750931968; x=1751536768; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TntJfTNuRfw8H9ywL1n4IQi1UH/CB2DPSoGeEkzsKwc=; b=NgGvP6es0MrtG3PlAavJecoud+OG6WQHeu0p5PuMihAA7NdULdNpWi9slEd6lIw6vx 8pPSOnLoW0hgetYR8s60oeZaJblcYC6HIqAQM9rbsYaw/0CZw1rW3SzKnCWF4wBhhfuB 0nMthKOnO7jV3vTQTrGO2EFrJezwdnrVDZ1mK32JCk7OahzqAauQnNerMlvsyyJ5RxvV NojAJR2I6QvH5sWPyoaLrrxeEFbqKgS7Q0GhSQ3WfTOF/A05KTz31fdZFv+pp0GAhwU1 2Ivqz25bXHBlgyfzl5awyWxS7vVSwC8qHgYu+hJpUy15xugZLX1XumAUl+AhJs/XrWIW QtrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750931968; x=1751536768; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TntJfTNuRfw8H9ywL1n4IQi1UH/CB2DPSoGeEkzsKwc=; b=ObAhCuRRpsN7GN3rDtaPKBKrJ010xV4ZPiw2iYxjIO/+AaXVYPA7fCtRhnHwQdbvMZ zehFWlEFKVfBzFFDUjUZKol1YEru+nClIJdk1X8KATs0MqJtFhxoeRfrMvCSf3nZBZro M7sE94auJwvnjqmw7ypPBjgmOD2MgxUt8H5yRLPWWNd4FE0ZmnzVoLr8hO7wH2PZHY4c 2Nw60FGSoBoLXgYkebidB3pE96NHhquYakFrI1+3OKqK0C4osdNrlnTEIoAQBhWl4vX+ PUIvSjO52dORKIslVwP5I4/5Jn7AgnNmsySUhUuljzwloopjmROLsFV/8gUROujiU2pA c6gw== X-Forwarded-Encrypted: i=1; AJvYcCW7FqJlUCWKiAYNZIiWRHcdtB1Rl9EOuyGYWkAnhAoLrfcQsxMpIBGrPPNtb6dF289QGBvOEEM7PjdGdrbW@vger.kernel.org, AJvYcCXpCiqiMbns8wxpSWVDOL38P52mSqdXRqoanjIyY4nk5u61OyRs6QszRBKDMaS0v8+/1io714tzwew3YPU=@vger.kernel.org X-Gm-Message-State: AOJu0YztfmPHRPMQ0boBtwMIHwizj6t6mnagmZhW4EcGmovuNINjwMUl 9OQ1XFIMQ2rdxVBu/R9k54LGEZ9SIMyO01xaUzmXvGzenubC8Ma4tVnP X-Gm-Gg: ASbGncsWnHuqgIK/vh8115D5FSEG9q1U8r1VZhPJN/Ip+x7KR2BgjUt+P4HQsb+b5Mx t/vGJZaZ6RdGzgviiJm4jPq0MSaW/hDdonfJgsCb3C2V+RhWhc1L60wSFd+CLzDWRV1KZw/POQ7 fQ1eBoEH24YF86Vs0bAOprhUwLJIN1Ixes2yfi1KRtlXpVqro0gCYJhaG2NZ41257WS4JQpsWW4 RM9iAdn8iekSfXNwanS9RjwR6Khyw/1SCxFziRN6IvgjiHGMGLnK2GCC7Rzt0+T8Fly91xLm1Bt wpjZ07618+ZddLcA/NGyDtVS9xP0kwdJ1wiuOBSuSPVyth9ztIBKO00nYfE26OdaD7IYsTeAsy1 F8Lptt6EUJUaYJA== X-Google-Smtp-Source: AGHT+IFyb5bPq7coEij2ylBbwkujWU2PveIvkYkjw2FajzUHkMcuMAgQb7EBUOsbFoZBWzMPaDgZYA== X-Received: by 2002:a17:906:7308:b0:ade:9fb:b07d with SMTP id a640c23a62f3a-ae0be7fe523mr687847466b.4.1750931967528; Thu, 26 Jun 2025 02:59:27 -0700 (PDT) Received: from localhost.localdomain ([2a02:2f0e:c51b:8900:a03f:12cb:72f7:9069]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae06aa5ff34sm1014106166b.40.2025.06.26.02.59.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Jun 2025 02:59:27 -0700 (PDT) From: Ovidiu Panait To: clabbe.montjoie@gmail.com, herbert@gondor.apana.org.au, davem@davemloft.net, linux-crypto@vger.kernel.org Cc: wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Ovidiu Panait Subject: [PATCH v2 08/10] crypto: sun8i-ce - factor out public versions of finalize request Date: Thu, 26 Jun 2025 12:58:11 +0300 Message-ID: <20250626095813.83963-9-ovidiu.panait.oss@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> References: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Factor out hash and cipher finalize routines so that they can be used in the next commits during do_batch_requests() callback. Signed-off-by: Ovidiu Panait --- .../allwinner/sun8i-ce/sun8i-ce-cipher.c | 23 ++++++++++--- .../crypto/allwinner/sun8i-ce/sun8i-ce-hash.c | 33 ++++++++++++++----- drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h | 26 +++++++++++++++ 3 files changed, 69 insertions(+), 13 deletions(-) diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c b/drivers/= crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c index d206b4fb5084..22b1fe72aa71 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c @@ -346,6 +346,24 @@ static void sun8i_ce_cipher_unprepare(struct skcipher_= request *areq, dma_unmap_single(ce->dev, rctx->addr_key, op->keylen, DMA_TO_DEVICE); } =20 +void sun8i_ce_cipher_finalize_req(struct crypto_async_request *async_req, + struct ce_task *cet, int err) +{ + struct skcipher_request *req =3D skcipher_request_cast(async_req); + struct sun8i_cipher_req_ctx *rctx =3D skcipher_request_ctx(req); + struct crypto_skcipher *tfm =3D crypto_skcipher_reqtfm(req); + struct sun8i_cipher_tfm_ctx *ctx =3D crypto_skcipher_ctx(tfm); + struct sun8i_ce_flow *chan; + + chan =3D &ctx->ce->chanlist[rctx->flow]; + + sun8i_ce_cipher_unprepare(req, cet); + + local_bh_disable(); + crypto_finalize_skcipher_request(chan->engine, req, err); + local_bh_enable(); +} + int sun8i_ce_cipher_do_one(struct crypto_engine *engine, void *areq) { struct skcipher_request *req =3D skcipher_request_cast(areq); @@ -366,11 +384,8 @@ int sun8i_ce_cipher_do_one(struct crypto_engine *engin= e, void *areq) =20 err =3D sun8i_ce_run_task(ce, rctx->flow, crypto_tfm_alg_name(req->base.tfm)); - sun8i_ce_cipher_unprepare(req, cet); =20 - local_bh_disable(); - crypto_finalize_skcipher_request(engine, req, err); - local_bh_enable(); + sun8i_ce_cipher_finalize_req(areq, cet, err); =20 return 0; } diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c b/drivers/cr= ypto/allwinner/sun8i-ce/sun8i-ce-hash.c index 7811fa17388c..5d8ac1394c0c 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c @@ -453,6 +453,29 @@ static void sun8i_ce_hash_unprepare(struct ahash_reque= st *areq, dma_unmap_sg(ce->dev, areq->src, rctx->nr_sgs, DMA_TO_DEVICE); } =20 +void sun8i_ce_hash_finalize_req(struct crypto_async_request *async_req, + struct ce_task *cet, + int err) +{ + struct ahash_request *areq =3D ahash_request_cast(async_req); + struct sun8i_ce_hash_reqctx *rctx =3D ahash_request_ctx(areq); + struct crypto_ahash *tfm =3D crypto_ahash_reqtfm(areq); + struct sun8i_ce_hash_tfm_ctx *ctx =3D crypto_ahash_ctx(tfm); + struct sun8i_ce_flow *chan; + + chan =3D &ctx->ce->chanlist[rctx->flow]; + + sun8i_ce_hash_unprepare(areq, cet); + + if (!err) + memcpy(areq->result, rctx->result, + crypto_ahash_digestsize(tfm)); + + local_bh_disable(); + crypto_finalize_hash_request(chan->engine, areq, err); + local_bh_enable(); +} + int sun8i_ce_hash_run(struct crypto_engine *engine, void *async_req) { struct ahash_request *areq =3D ahash_request_cast(async_req); @@ -473,15 +496,7 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, vo= id *async_req) =20 err =3D sun8i_ce_run_task(ce, rctx->flow, crypto_ahash_alg_name(tfm)); =20 - sun8i_ce_hash_unprepare(areq, cet); - - if (!err) - memcpy(areq->result, rctx->result, - crypto_ahash_digestsize(tfm)); - - local_bh_disable(); - crypto_finalize_hash_request(engine, async_req, err); - local_bh_enable(); + sun8i_ce_hash_finalize_req(async_req, cet, err); =20 return 0; } diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h b/drivers/crypto/= allwinner/sun8i-ce/sun8i-ce.h index 90b955787d37..1022fd590256 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h @@ -383,6 +383,19 @@ int sun8i_ce_cipher_do_one(struct crypto_engine *engin= e, void *areq); int sun8i_ce_skdecrypt(struct skcipher_request *areq); int sun8i_ce_skencrypt(struct skcipher_request *areq); =20 +/** + * sun8i_ce_cipher_finalize_req - finalize cipher request + * @async_req: request to be finalized + * @cet: task descriptor associated with @async_req + * @err: error code indicating if request was executed successfully + * + * This function does the final cleanups for request @async_req and + * finalizes the request. + */ +void sun8i_ce_cipher_finalize_req(struct crypto_async_request *async_req, + struct ce_task *cet, + int err); + int sun8i_ce_get_engine_number(struct sun8i_ce_dev *ce); =20 int sun8i_ce_run_task(struct sun8i_ce_dev *ce, int flow, const char *name); @@ -398,6 +411,19 @@ int sun8i_ce_hash_finup(struct ahash_request *areq); int sun8i_ce_hash_digest(struct ahash_request *areq); int sun8i_ce_hash_run(struct crypto_engine *engine, void *breq); =20 +/** + * sun8i_ce_hash_finalize_req - finalize hash request + * @async_req: request to be finalized + * @cet: task descriptor associated with @async_req + * @err: error code indicating if request was executed successfully + * + * This function does the final cleanups for request @async_req and + * finalizes the request. + */ +void sun8i_ce_hash_finalize_req(struct crypto_async_request *async_req, + struct ce_task *cet, + int err); + int sun8i_ce_prng_generate(struct crypto_rng *tfm, const u8 *src, unsigned int slen, u8 *dst, unsigned int dlen); int sun8i_ce_prng_seed(struct crypto_rng *tfm, const u8 *seed, unsigned in= t slen); --=20 2.49.0 From nobody Wed Oct 8 15:58:30 2025 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9EA932DA745; Thu, 26 Jun 2025 09:59:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931972; cv=none; b=HJPGOaU2nK2gYeoP96jpyMtgZAu0i0qVnWfPLcHe67/YvOgzky2UJlGai5ktdinskV2Fa/Vl8uoEvZAqiGf/ntl1Li/2PYz3B3Hc/cTlQ6r1h9xKMLhpNuFmlmFnZnmfuffNxHpfPkiFjuSxA4dTBm4pqCpVTv4yS0gBfVILAms= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931972; c=relaxed/simple; bh=dsS+p6UvQk8Xwg+WgyOGAas3d5MTBbJN2FAK8gI6CFU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RRpgfo9AVBQZuhldoDKNbHA7ugCMdA/Fm/N6cO3AhCCQe40/MREUH0UbjpatBPg8L5l3chx6xgj/6xQbYIzY91YANDr7N5wpP/fdDDK58KkwazQDyFHwFUY/QI0GJifR9P41UcCHv1don6M51POeZH3NwhL3ottn6npINlK1ybQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=g91ne9IL; arc=none smtp.client-ip=209.85.218.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="g91ne9IL" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-ade58ef47c0so179361266b.1; Thu, 26 Jun 2025 02:59:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750931969; x=1751536769; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=579Q1QhHC2sKl8ad1uJdu4XVU+r2uSj185NnGxhlUu0=; b=g91ne9ILpAvaZpcyYNfZuNZejRBA1uLPPz10V9MT4RQ4uV30Dg/JNfRp/gRv0Eyx26 IKZKxOZMbhTJATtiAjhKhsMCEQH7/R9o0gHtRQPTPT1eQi4uqmVrv+y0bH/lN/vki3qB jGAtsXSMoDOssapuMwrsHzJfVsbiEcyRe1yH7bxteor7jjYlVi9VpFxK4xKD113TOFVD KyH/MjAGjeG9p+5NNGduDJplYPiKbDzmNZsPRvxPIKtDp/VS6RfFGNXceLqKbwNbjamy xB+OtOjVphnugpXR6nUZv1WMOjgcXGTntrsx8yJYxr7uEts6XMPTR32to/s+XZezRPqV AAGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750931969; x=1751536769; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=579Q1QhHC2sKl8ad1uJdu4XVU+r2uSj185NnGxhlUu0=; b=q5HGZ05ZkkHdM1/wG/maFnJhzIc3kvkrxJdgJ0Pcr4IvKiTPSsXiN1tgPHhhj/yJKe kpjzHYGfAc81P95Jv9EwET2eGb3MZhWWT1c5EILu+SZYbNREVLaSPDB5e7FDf1+wOX4t 2WVAO81/4hp2U/LCw5H2D6UPkbaL2RxeZw0Y2HljfXk7JhWBCHXOAfFDkGVE6pCnExSo I9m0z3Dn7ABkQEsG+1gzY74AN2L3Rn6belsLFoQmBQR7TTMtVwTf8AaavG7C7utDaQfU x9P1WswcCAUYRghAU3NgzxgY4QYVSGgE6R5E3gla0hZma+kKpsvTM/8WBeA1JHklEnEv BB3g== X-Forwarded-Encrypted: i=1; AJvYcCVRortVGi9kM8V1+xAk61jEmB5GkVGefMu6WLmbjtcE+DLY2WKlwnXOC2xXk39fZTpYh4Aq0lxEhu+SzAA=@vger.kernel.org, AJvYcCXUyN4iFBr2Imd7TnTakISM0RmPONqm0UWxvVa/i6W6CZMVNvL84qk5X8acW8lu3SQAEnuzt2iAbfY+RcsQ@vger.kernel.org X-Gm-Message-State: AOJu0YwMXl34DM+NP0QPCu6XFu49ijWHm/NIkIa6IoqluLG1vFjCBk+w jU1H/M1qwN6kyM8F77UG5Jv6gEchpgEVJLU/ItB1MCu2LEJncrscr0/xhPywsg== X-Gm-Gg: ASbGncs43xFH1kq5yAjbxjltZGcp4d12966TlM3ezHHhzIkLiuKU+eINYujLWDwfmE5 O9PLN+VO40/7Xf+/9hH6wmxDGnBMt5KGWctL/+uV+wEeHm0v8L+WAVNqL8z53JpMz6TM+x+lDRs tByrsmmOCc3HRpsweANhXtRuvzpPIxSAPwGC/UVOiHp7a81/IsfAcAQBKrRmooJhfymklJk2qSs qIuAnjj0evOJVHdHuMtf3shNs/RekNtbE70e2tm3JEggOaQtGPeWEOEBHkFkR8wFfQkt+Bri+oO 0EE2dBH0eUZqi+563upAKCSeVO7mCWVCiR5g/7+TaypksUc8SUlazfV2QQE/34d2rg0R3zDe0aF nOCaFzhsc4A3aGg== X-Google-Smtp-Source: AGHT+IGVv+Hw7jSjoixa1/E7zQmSwh1p6WVQXmOD2Loe5VSlhlnuizOR3ugGTm+11YiJ3z+bTMozvg== X-Received: by 2002:a17:906:d553:b0:ae0:c4e3:e2e8 with SMTP id a640c23a62f3a-ae0d26f80f4mr322465866b.28.1750931968753; Thu, 26 Jun 2025 02:59:28 -0700 (PDT) Received: from localhost.localdomain ([2a02:2f0e:c51b:8900:a03f:12cb:72f7:9069]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae06aa5ff34sm1014106166b.40.2025.06.26.02.59.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Jun 2025 02:59:28 -0700 (PDT) From: Ovidiu Panait To: clabbe.montjoie@gmail.com, herbert@gondor.apana.org.au, davem@davemloft.net, linux-crypto@vger.kernel.org Cc: wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Ovidiu Panait Subject: [PATCH v2 09/10] crypto: sun8i-ce - add a new function for dumping task descriptors Date: Thu, 26 Jun 2025 12:58:12 +0300 Message-ID: <20250626095813.83963-10-ovidiu.panait.oss@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> References: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In order to remove code duplication, factor out task descriptor dumping to a new function sun8i_ce_dump_task_descriptors(). Signed-off-by: Ovidiu Panait --- .../crypto/allwinner/sun8i-ce/sun8i-ce-core.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c b/drivers/cr= ypto/allwinner/sun8i-ce/sun8i-ce-core.c index 930a6579d853..b6cfc6758a5a 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c @@ -169,6 +169,12 @@ static const struct ce_variant ce_r40_variant =3D { .trng =3D CE_ID_NOTSUPP, }; =20 +static void sun8i_ce_dump_task_descriptors(struct sun8i_ce_flow *chan) +{ + print_hex_dump(KERN_INFO, "TASK: ", DUMP_PREFIX_NONE, 16, 4, + chan->tl, sizeof(struct ce_task), false); +} + /* * sun8i_ce_get_engine_number() get the next channel slot * This is a simple round-robin way of getting the next channel @@ -183,7 +189,6 @@ int sun8i_ce_run_task(struct sun8i_ce_dev *ce, int flow= , const char *name) { u32 v; int err =3D 0; - struct ce_task *cet =3D ce->chanlist[flow].tl; =20 #ifdef CONFIG_CRYPTO_DEV_SUN8I_CE_DEBUG ce->chanlist[flow].stat_req++; @@ -225,9 +230,8 @@ int sun8i_ce_run_task(struct sun8i_ce_dev *ce, int flow= , const char *name) /* Sadly, the error bit is not per flow */ if (v) { dev_err(ce->dev, "CE ERROR: %x for flow %x\n", v, flow); + sun8i_ce_dump_task_descriptors(&ce->chanlist[flow]); err =3D -EFAULT; - print_hex_dump(KERN_INFO, "TASK: ", DUMP_PREFIX_NONE, 16, 4, - cet, sizeof(struct ce_task), false); } if (v & CE_ERR_ALGO_NOTSUP) dev_err(ce->dev, "CE ERROR: algorithm not supported\n"); @@ -244,9 +248,8 @@ int sun8i_ce_run_task(struct sun8i_ce_dev *ce, int flow= , const char *name) v &=3D 0xF; if (v) { dev_err(ce->dev, "CE ERROR: %x for flow %x\n", v, flow); + sun8i_ce_dump_task_descriptors(&ce->chanlist[flow]); err =3D -EFAULT; - print_hex_dump(KERN_INFO, "TASK: ", DUMP_PREFIX_NONE, 16, 4, - cet, sizeof(struct ce_task), false); } if (v & CE_ERR_ALGO_NOTSUP) dev_err(ce->dev, "CE ERROR: algorithm not supported\n"); @@ -260,9 +263,8 @@ int sun8i_ce_run_task(struct sun8i_ce_dev *ce, int flow= , const char *name) v &=3D 0xFF; if (v) { dev_err(ce->dev, "CE ERROR: %x for flow %x\n", v, flow); + sun8i_ce_dump_task_descriptors(&ce->chanlist[flow]); err =3D -EFAULT; - print_hex_dump(KERN_INFO, "TASK: ", DUMP_PREFIX_NONE, 16, 4, - cet, sizeof(struct ce_task), false); } if (v & CE_ERR_ALGO_NOTSUP) dev_err(ce->dev, "CE ERROR: algorithm not supported\n"); --=20 2.49.0 From nobody Wed Oct 8 15:58:30 2025 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2277E2DBF7A; Thu, 26 Jun 2025 09:59:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931974; cv=none; b=jAv78l+x2sFLaCWFH10Jzr17Y4Gu9xrpTi6wN/U3IuWKVX8/Tu61LEFvhnoRs/fUAYc72clNX8WpOCddK1U26CkwKvLcAsOxsrzaeGA0e6DfetJUh0gXrPnrommoYcSCoDG4smzvBVM4kTuHwPJ/jptvHMgJ8RHpsqYSgsezeQQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750931974; c=relaxed/simple; bh=tbTFzNCpLJSVFhQmpoJbNfx1TQTTaya8gz6bH1S/uso=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=A44t7ZKNngothEnis590+i6zqEuc7DzZsS1Dcr7c/A/96bO8EIa0rgm0Aqs6jiXSkw7j5Ql1ngwIK/FGyIZjNhdkWYgAHeiQp2kORL9qDuf8ISJi34Erfdj0Tdna5dK/6S0Jh3eo/nsozM+9LKYh/+yB04FBlyJNGCSzppB8uJI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=BiJ8NkfD; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BiJ8NkfD" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-ae0c571f137so188714966b.0; Thu, 26 Jun 2025 02:59:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750931970; x=1751536770; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=P/fE/0yl8M/v8XV3CKxXJaDNwhg5S07FYLicaloeOKU=; b=BiJ8NkfDTaIKInSD9VJH6Be/5NU2EdVmBE91vwvoM8sqoGvj1MHzbo8g0JGo/UCojc RGnfsXcQW476iE1aAnwY9q0yPTV1nR2YpFV3WAbAzHRSyeK5Xio83sAILx3aUMAujAiA OoNHDK+7bgsrzqrYbib5KrGwSNYVTBBEhUe+V8yj9zajOnRKApDOr3GUGpC/YVNCyRma eZsKziIvPl6HNhBdYCcQ/0MyedK6OU1j+XeZUt+eujc6ywePI7SURCrT8JCOd5LixBmC OcU7suI69QPtkLz2qreZ7oXvKcYhRqo56adujSewIpS7FcelIDh4mAIO7YK8nmwPqNgu GSnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750931970; x=1751536770; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=P/fE/0yl8M/v8XV3CKxXJaDNwhg5S07FYLicaloeOKU=; b=nuAUEjg+XDHAeZqo4vykLi4NKcPwEr3SM1TNQ8t3i5KN9fEWaR7LohDiSlLnwkIoIg FS48GLhNtfoQrXmzAiomPrb5szWLCq849Gt15RGTOZRi29kQ/ucL8H21tsJ66388r+vA RP7sxO9uEniT7woi2gH2+wvAgWdizOaTXgoxDKJRyHoX2x8Ji9hP5Jn3tbFVyHBxi85E //M5+m1CkeH7TGZcizn++YxUy0jbq9BljpU+go8cBtSJdf3/WIfYjDBDWG7Mi6qQh1i9 1iIE1La+LC9OlLj6kh64P0yepKFA0qqxMPk0QzQ8CfS/5tIyU4Fthu+fwW+dt0KmpRKv 8EjQ== X-Forwarded-Encrypted: i=1; AJvYcCU7LnvUJDTj5+iPaxldYMw4uEcS943mQZwoOhKC6HngemvTLw2hMneo+eG2LX4wY8TSEDS0YGatvn8tyw7H@vger.kernel.org, AJvYcCXqQzpIE77PFP5wuioHIT0+dZeonF1IbxT+ETWW3BgTS9Hi71cP5tTpRqHqyThEO2UXCBPZX8QfzTYXAoc=@vger.kernel.org X-Gm-Message-State: AOJu0YwlWsNdFCHq6VUgCcZGHX/JNOcCyVpbWMe0iZwSTdv4TMd5CWUI rJ7i8LfMnKcOcZ+CqIdWdKgHl72d2ZhSX8GYA9BizrJa7hbZJyiYXoTD X-Gm-Gg: ASbGncvDdNCeiPKgCyZDXMtjnqn04ET7SYnub2+R+c9l9o3O5G78rq4/CTsPNFGt91J hspy8UKDzFRB0q7ALhwnv2jcH356HtKuO+uKftF5Lj1fbL6WULTeWa3Q10qscc+EAfSfWa6meSg WZ0I/8YBsdwx4xztlTbLSxAQhegq22GbhNNRSSqP10dSgiSO+wJFwQo4cMuwCkcQLoIn7CBuSVz +h3M3Cr39G94epVFJMHJhcQhN0d8tfEins3U4WZXVrKbLQLLhtts9xQvgtPA3pZf2TzztNUhlNg q3ArUdW6uxLtqYb+d+VPDm3MnpbbMn1ww5UfWxUVAlAFgWAQRjsriXSSb0WWgwNLyjj6u8bOC90 3pdnj/JUAYMIZBw== X-Google-Smtp-Source: AGHT+IEPjb/8uofV4csnmULxi9nDFlRA8uvr4c7ZG+YY8cHUXk7++SxrX5pnt1HPos1h1UHIsCu5pg== X-Received: by 2002:a17:907:9615:b0:ad5:3055:784d with SMTP id a640c23a62f3a-ae0d0ccbe63mr317427366b.34.1750931970075; Thu, 26 Jun 2025 02:59:30 -0700 (PDT) Received: from localhost.localdomain ([2a02:2f0e:c51b:8900:a03f:12cb:72f7:9069]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae06aa5ff34sm1014106166b.40.2025.06.26.02.59.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Jun 2025 02:59:29 -0700 (PDT) From: Ovidiu Panait To: clabbe.montjoie@gmail.com, herbert@gondor.apana.org.au, davem@davemloft.net, linux-crypto@vger.kernel.org Cc: wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Ovidiu Panait Subject: [PATCH v2 10/10] crypto: sun8i-ce - implement request batching Date: Thu, 26 Jun 2025 12:58:13 +0300 Message-ID: <20250626095813.83963-11-ovidiu.panait.oss@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> References: <20250626095813.83963-1-ovidiu.panait.oss@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Allwinner crypto engine can process multiple requests at a time, if they are chained together using the task descriptor's 'next' field. Having multiple requests processed in one go can reduce the number of interrupts generated and also improve throughput. This commit introduces batching support in the sun8i-ce driver by enabling the retry mechanism in the crypto_engine and implementing the do_batch_requests() callback. Only requests of the same type (hash, skcipher, etc) are batched together, as the hardware doesn't seem to support processing multiple types of requests in the same batch. The existing do_one_request() handlers are adjusted to only fill a per-flow queue and set up the dma mappings. Once the queue is full or a different kind of request is received, -ENOSPC is returned to signal the crypto engine that the batch is ready to be processed. Next, do_batch_requests() chains the requests, sets the interrupt flag, sends the batch to hardware for processing and performs the cleanup. With request batching, the tcrypt multibuffer benchmark shows an increase in throughput of ~85% for 16 byte AES blocks (when testing with 8 data streams on the OrangePi Zero2 board). Signed-off-by: Ovidiu Panait --- .../allwinner/sun8i-ce/sun8i-ce-cipher.c | 15 +-- .../crypto/allwinner/sun8i-ce/sun8i-ce-core.c | 123 ++++++++++++++++-- .../crypto/allwinner/sun8i-ce/sun8i-ce-hash.c | 13 +- drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h | 31 +++++ 4 files changed, 155 insertions(+), 27 deletions(-) diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c b/drivers/= crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c index 22b1fe72aa71..5a3fd5848fd1 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c @@ -165,7 +165,7 @@ static int sun8i_ce_cipher_prepare(struct skcipher_requ= est *areq, =20 cet->t_id =3D cpu_to_le32(rctx->flow); common =3D ce->variant->alg_cipher[algt->ce_algo_id]; - common |=3D rctx->op_dir | CE_COMM_INT; + common |=3D rctx->op_dir; cet->t_common_ctl =3D cpu_to_le32(common); /* CTS and recent CE (H6) need length in bytes, in word otherwise */ if (ce->variant->cipher_t_dlen_in_bytes) @@ -376,16 +376,15 @@ int sun8i_ce_cipher_do_one(struct crypto_engine *engi= ne, void *areq) int err; =20 chan =3D &ce->chanlist[rctx->flow]; - cet =3D chan->tl; + cet =3D sun8i_ce_enqueue_one(chan, areq); + if (IS_ERR(cet)) + return PTR_ERR(cet); =20 err =3D sun8i_ce_cipher_prepare(req, cet); - if (err) + if (err) { + sun8i_ce_dequeue_one(chan); return err; - - err =3D sun8i_ce_run_task(ce, rctx->flow, - crypto_tfm_alg_name(req->base.tfm)); - - sun8i_ce_cipher_finalize_req(areq, cet, err); + } =20 return 0; } diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c b/drivers/cr= ypto/allwinner/sun8i-ce/sun8i-ce-core.c index b6cfc6758a5a..a2addc9f64d9 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c @@ -10,7 +10,7 @@ * You could find a link for the datasheet in Documentation/arch/arm/sunxi= .rst */ =20 -#include +#include #include #include #include @@ -171,8 +171,14 @@ static const struct ce_variant ce_r40_variant =3D { =20 static void sun8i_ce_dump_task_descriptors(struct sun8i_ce_flow *chan) { - print_hex_dump(KERN_INFO, "TASK: ", DUMP_PREFIX_NONE, 16, 4, - chan->tl, sizeof(struct ce_task), false); + for (int i =3D 0; i < chan->reqs_no; ++i) { + struct ce_task *cet =3D &chan->tl[i]; + char task[CE_MAX_TASK_DESCR_DUMP_MSG_SIZE]; + + snprintf(task, sizeof(task), "TASK %d:", i); + print_hex_dump(KERN_INFO, task, DUMP_PREFIX_NONE, 16, 4, + cet, sizeof(struct ce_task), false); + } } =20 /* @@ -190,10 +196,6 @@ int sun8i_ce_run_task(struct sun8i_ce_dev *ce, int flo= w, const char *name) u32 v; int err =3D 0; =20 -#ifdef CONFIG_CRYPTO_DEV_SUN8I_CE_DEBUG - ce->chanlist[flow].stat_req++; -#endif - mutex_lock(&ce->mlock); =20 v =3D readl(ce->base + CE_ICR); @@ -710,12 +712,107 @@ static int sun8i_ce_debugfs_show(struct seq_file *se= q, void *v) =20 DEFINE_SHOW_ATTRIBUTE(sun8i_ce_debugfs); =20 +static int sun8i_ce_get_flow_from_engine(struct sun8i_ce_dev *ce, + struct crypto_engine *engine) +{ + for (int i =3D 0; i < MAXFLOW; ++i) + if (ce->chanlist[i].engine =3D=3D engine) + return i; + + return -ENODEV; +} + +static int sun8i_ce_do_batch(struct crypto_engine *engine) +{ + struct sun8i_ce_dev *ce; + struct sun8i_ce_flow *chan; + int err, flow; + + ce =3D dev_get_drvdata(engine->dev); + flow =3D sun8i_ce_get_flow_from_engine(ce, engine); + if (flow < 0) + return flow; + + chan =3D &ce->chanlist[flow]; + + if (!chan->reqs_no) + return 0; + +#ifdef CONFIG_CRYPTO_DEV_SUN8I_CE_DEBUG + ce->chanlist[flow].stat_req +=3D chan->reqs_no; +#endif + + for (int i =3D 0; i < chan->reqs_no - 1; ++i) { + struct ce_task *task =3D &chan->tl[i]; + dma_addr_t next =3D chan->t_phy + (i + 1) * sizeof(struct ce_task); + + task->next =3D desc_addr_val_le32(ce, next); + } + chan->tl[chan->reqs_no - 1].next =3D 0; + chan->tl[chan->reqs_no - 1].t_common_ctl |=3D cpu_to_le32(CE_COMM_INT); + + err =3D sun8i_ce_run_task(ce, flow, "BATCH"); + + for (int i =3D 0; i < chan->reqs_no; ++i) { + struct crypto_async_request *areq =3D chan->reqs[i]; + u32 req_type =3D crypto_tfm_alg_type(areq->tfm); + + if (req_type =3D=3D CRYPTO_ALG_TYPE_SKCIPHER) + sun8i_ce_cipher_finalize_req(areq, &chan->tl[i], err); + + if (IS_ENABLED(CONFIG_CRYPTO_DEV_SUN8I_CE_HASH) && + (req_type =3D=3D CRYPTO_ALG_TYPE_AHASH)) + sun8i_ce_hash_finalize_req(areq, &chan->tl[i], err); + + chan->reqs[i] =3D NULL; + } + + chan->reqs_no =3D 0; + + return err; +} + +struct ce_task *sun8i_ce_enqueue_one(struct sun8i_ce_flow *chan, + struct crypto_async_request *areq) +{ + struct ce_task *cet; + struct crypto_async_request *prev; + u32 alg_type, prev_alg_type; + + if (chan->reqs_no =3D=3D CE_MAX_REQS_PER_BATCH) + return ERR_PTR(-ENOSPC); + + if (chan->reqs_no) { + prev =3D chan->reqs[chan->reqs_no - 1]; + prev_alg_type =3D crypto_tfm_alg_type(prev->tfm); + alg_type =3D crypto_tfm_alg_type(areq->tfm); + + if (alg_type !=3D prev_alg_type) + return ERR_PTR(-ENOSPC); + } + + cet =3D chan->tl + chan->reqs_no; + chan->reqs[chan->reqs_no] =3D areq; + chan->reqs_no++; + + return cet; +} + +void sun8i_ce_dequeue_one(struct sun8i_ce_flow *chan) +{ + if (chan->reqs_no) { + chan->reqs_no--; + chan->reqs[chan->reqs_no] =3D NULL; + } +} + static void sun8i_ce_free_chanlist(struct sun8i_ce_dev *ce, int i) { while (i >=3D 0) { crypto_engine_exit(ce->chanlist[i].engine); if (ce->chanlist[i].tl) - dma_free_coherent(ce->dev, sizeof(struct ce_task), + dma_free_coherent(ce->dev, + CE_DMA_TASK_DESCR_ALLOC_SIZE, ce->chanlist[i].tl, ce->chanlist[i].t_phy); i--; @@ -737,7 +834,9 @@ static int sun8i_ce_allocate_chanlist(struct sun8i_ce_d= ev *ce) for (i =3D 0; i < MAXFLOW; i++) { init_completion(&ce->chanlist[i].complete); =20 - ce->chanlist[i].engine =3D crypto_engine_alloc_init(ce->dev, true); + ce->chanlist[i].engine =3D crypto_engine_alloc_init_and_set( + ce->dev, true, sun8i_ce_do_batch, true, + CE_MAX_REQS_PER_BATCH); if (!ce->chanlist[i].engine) { dev_err(ce->dev, "Cannot allocate engine\n"); i--; @@ -750,9 +849,9 @@ static int sun8i_ce_allocate_chanlist(struct sun8i_ce_d= ev *ce) goto error_engine; } ce->chanlist[i].tl =3D dma_alloc_coherent(ce->dev, - sizeof(struct ce_task), - &ce->chanlist[i].t_phy, - GFP_KERNEL); + CE_DMA_TASK_DESCR_ALLOC_SIZE, + &ce->chanlist[i].t_phy, + GFP_KERNEL); if (!ce->chanlist[i].tl) { dev_err(ce->dev, "Cannot get DMA memory for task %d\n", i); diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c b/drivers/cr= ypto/allwinner/sun8i-ce/sun8i-ce-hash.c index 5d8ac1394c0c..73cfcdb2b951 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c @@ -350,7 +350,6 @@ static int sun8i_ce_hash_prepare(struct ahash_request *= areq, struct ce_task *cet =20 cet->t_id =3D cpu_to_le32(rctx->flow); common =3D ce->variant->alg_hash[algt->ce_algo_id]; - common |=3D CE_COMM_INT; cet->t_common_ctl =3D cpu_to_le32(common); =20 cet->t_sym_ctl =3D 0; @@ -488,15 +487,15 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, v= oid *async_req) int err; =20 chan =3D &ce->chanlist[rctx->flow]; - cet =3D chan->tl; + cet =3D sun8i_ce_enqueue_one(chan, async_req); + if (IS_ERR(cet)) + return PTR_ERR(cet); =20 err =3D sun8i_ce_hash_prepare(areq, cet); - if (err) + if (err) { + sun8i_ce_dequeue_one(chan); return err; - - err =3D sun8i_ce_run_task(ce, rctx->flow, crypto_ahash_alg_name(tfm)); - - sun8i_ce_hash_finalize_req(async_req, cet, err); + } =20 return 0; } diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h b/drivers/crypto/= allwinner/sun8i-ce/sun8i-ce.h index 1022fd590256..53f31fff1a71 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h @@ -104,6 +104,10 @@ #define CE_DIE_ID_MASK 0x07 =20 #define MAX_SG 8 +#define CE_MAX_REQS_PER_BATCH 10 +#define CE_MAX_TASK_DESCR_DUMP_MSG_SIZE 18 +#define CE_DMA_TASK_DESCR_ALLOC_SIZE \ + (CE_MAX_REQS_PER_BATCH * sizeof(struct ce_task)) =20 #define CE_MAX_CLOCKS 4 #define CE_DMA_TIMEOUT_MS 3000 @@ -191,6 +195,8 @@ struct ce_task { * @status: set to 1 by interrupt if task is done * @t_phy: Physical address of task * @tl: pointer to the current ce_task for this flow + * @reqs: array of requests to be processed in batch + * @reqs_no: current number of requests in @reqs * @stat_req: number of request done by this flow */ struct sun8i_ce_flow { @@ -199,6 +205,8 @@ struct sun8i_ce_flow { int status; dma_addr_t t_phy; struct ce_task *tl; + struct crypto_async_request *reqs[CE_MAX_REQS_PER_BATCH]; + int reqs_no; #ifdef CONFIG_CRYPTO_DEV_SUN8I_CE_DEBUG unsigned long stat_req; #endif @@ -373,6 +381,29 @@ struct sun8i_ce_alg_template { char fbname[CRYPTO_MAX_ALG_NAME]; }; =20 +/** + * sun8i_ce_enqueue_one - add a request to the per-flow batch queue + * @chan: engine flow to enqueue the request + * @areq: request to be added to the batch queue + * + * This function adds request @areq to the batch queue in @chan. Should be + * called during do_one_request() crypto engine handler. + * + * @return - on success, task descriptor associated with the request + * - on failure, ERR_PTR(-ENOSPC) if the queue was full or if the + * request type is different from the requests already queued up + */ +struct ce_task *sun8i_ce_enqueue_one(struct sun8i_ce_flow *chan, + struct crypto_async_request *areq); + +/** + * sun8i_ce_dequeue_one - remove head request from the per-flow batch queue + * @chan: engine flow to remove the request from + * + * This function removes the head request from the batch queue in @chan. + */ +void sun8i_ce_dequeue_one(struct sun8i_ce_flow *chan); + int sun8i_ce_aes_setkey(struct crypto_skcipher *tfm, const u8 *key, unsigned int keylen); int sun8i_ce_des3_setkey(struct crypto_skcipher *tfm, const u8 *key, --=20 2.49.0