From: Antoine Tenart <atenart@kernel.org>
To: Aleksander Jan Bajkowski <olek2@wp.pl>
Cc: ansuelsmth@gmail.com, maxim.anisimov.ua@gmail.com,
amadeus@jmu.edu.cn, atenart@kernel.org,
herbert@gondor.apana.org.au, davem@davemloft.net,
vschagen@icloud.com, linux-crypto@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] crypto: inside-secure/eip93 - unregister only available algorithm
Date: Mon, 12 Jan 2026 09:56:30 +0100 [thread overview]
Message-ID: <aWS3A7wAv5KNVa1b@kwain> (raw)
In-Reply-To: <20260111132531.2232417-1-olek2@wp.pl>
On Sun, Jan 11, 2026 at 02:20:32PM +0100, Aleksander Jan Bajkowski wrote:
> EIP93 has an options register. This register indicates which crypto
> algorithms are implemented in silicon. Supported algorithms are
> registered on this basis. Unregister algorithms on the same basis.
> Currently, all algorithms are unregistered, even those not supported
> by HW. This results in panic on platforms that don't have all options
> implemented in silicon.
>
> Fixes: 9739f5f93b78 ("crypto: eip93 - Add Inside Secure SafeXcel EIP-93 crypto engine support")
> Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
Acked-by: Antoine Tenart <atenart@kernel.org>
Thanks!
Antoine
> ---
> v2:
> - keep the keysize assignment in eip93_register_algs
> ---
> .../crypto/inside-secure/eip93/eip93-main.c | 92 +++++++++++--------
> 1 file changed, 53 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/crypto/inside-secure/eip93/eip93-main.c b/drivers/crypto/inside-secure/eip93/eip93-main.c
> index 3cdc3308dcac..b7fd9795062d 100644
> --- a/drivers/crypto/inside-secure/eip93/eip93-main.c
> +++ b/drivers/crypto/inside-secure/eip93/eip93-main.c
> @@ -77,11 +77,44 @@ inline void eip93_irq_clear(struct eip93_device *eip93, u32 mask)
> __raw_writel(mask, eip93->base + EIP93_REG_INT_CLR);
> }
>
> -static void eip93_unregister_algs(unsigned int i)
> +static int eip93_algo_is_supported(u32 alg_flags, u32 supported_algo_flags)
> +{
> + if ((IS_DES(alg_flags) || IS_3DES(alg_flags)) &&
> + !(supported_algo_flags & EIP93_PE_OPTION_TDES))
> + return 0;
> +
> + if (IS_AES(alg_flags) &&
> + !(supported_algo_flags & EIP93_PE_OPTION_AES))
> + return 0;
> +
> + if (IS_HASH_MD5(alg_flags) &&
> + !(supported_algo_flags & EIP93_PE_OPTION_MD5))
> + return 0;
> +
> + if (IS_HASH_SHA1(alg_flags) &&
> + !(supported_algo_flags & EIP93_PE_OPTION_SHA_1))
> + return 0;
> +
> + if (IS_HASH_SHA224(alg_flags) &&
> + !(supported_algo_flags & EIP93_PE_OPTION_SHA_224))
> + return 0;
> +
> + if (IS_HASH_SHA256(alg_flags) &&
> + !(supported_algo_flags & EIP93_PE_OPTION_SHA_256))
> + return 0;
> +
> + return 1;
> +}
> +
> +static void eip93_unregister_algs(u32 supported_algo_flags, unsigned int i)
> {
> unsigned int j;
>
> for (j = 0; j < i; j++) {
> + if (!eip93_algo_is_supported(eip93_algs[j]->flags,
> + supported_algo_flags))
> + continue;
> +
> switch (eip93_algs[j]->type) {
> case EIP93_ALG_TYPE_SKCIPHER:
> crypto_unregister_skcipher(&eip93_algs[j]->alg.skcipher);
> @@ -106,49 +139,27 @@ static int eip93_register_algs(struct eip93_device *eip93, u32 supported_algo_fl
>
> eip93_algs[i]->eip93 = eip93;
>
> - if ((IS_DES(alg_flags) || IS_3DES(alg_flags)) &&
> - !(supported_algo_flags & EIP93_PE_OPTION_TDES))
> + if (!eip93_algo_is_supported(alg_flags, supported_algo_flags))
> continue;
>
> - if (IS_AES(alg_flags)) {
> - if (!(supported_algo_flags & EIP93_PE_OPTION_AES))
> - continue;
> + if (IS_AES(alg_flags) && !IS_HMAC(alg_flags)) {
> + if (supported_algo_flags & EIP93_PE_OPTION_AES_KEY128)
> + eip93_algs[i]->alg.skcipher.max_keysize =
> + AES_KEYSIZE_128;
>
> - if (!IS_HMAC(alg_flags)) {
> - if (supported_algo_flags & EIP93_PE_OPTION_AES_KEY128)
> - eip93_algs[i]->alg.skcipher.max_keysize =
> - AES_KEYSIZE_128;
> + if (supported_algo_flags & EIP93_PE_OPTION_AES_KEY192)
> + eip93_algs[i]->alg.skcipher.max_keysize =
> + AES_KEYSIZE_192;
>
> - if (supported_algo_flags & EIP93_PE_OPTION_AES_KEY192)
> - eip93_algs[i]->alg.skcipher.max_keysize =
> - AES_KEYSIZE_192;
> + if (supported_algo_flags & EIP93_PE_OPTION_AES_KEY256)
> + eip93_algs[i]->alg.skcipher.max_keysize =
> + AES_KEYSIZE_256;
>
> - if (supported_algo_flags & EIP93_PE_OPTION_AES_KEY256)
> - eip93_algs[i]->alg.skcipher.max_keysize =
> - AES_KEYSIZE_256;
> -
> - if (IS_RFC3686(alg_flags))
> - eip93_algs[i]->alg.skcipher.max_keysize +=
> - CTR_RFC3686_NONCE_SIZE;
> - }
> + if (IS_RFC3686(alg_flags))
> + eip93_algs[i]->alg.skcipher.max_keysize +=
> + CTR_RFC3686_NONCE_SIZE;
> }
>
> - if (IS_HASH_MD5(alg_flags) &&
> - !(supported_algo_flags & EIP93_PE_OPTION_MD5))
> - continue;
> -
> - if (IS_HASH_SHA1(alg_flags) &&
> - !(supported_algo_flags & EIP93_PE_OPTION_SHA_1))
> - continue;
> -
> - if (IS_HASH_SHA224(alg_flags) &&
> - !(supported_algo_flags & EIP93_PE_OPTION_SHA_224))
> - continue;
> -
> - if (IS_HASH_SHA256(alg_flags) &&
> - !(supported_algo_flags & EIP93_PE_OPTION_SHA_256))
> - continue;
> -
> switch (eip93_algs[i]->type) {
> case EIP93_ALG_TYPE_SKCIPHER:
> ret = crypto_register_skcipher(&eip93_algs[i]->alg.skcipher);
> @@ -167,7 +178,7 @@ static int eip93_register_algs(struct eip93_device *eip93, u32 supported_algo_fl
> return 0;
>
> fail:
> - eip93_unregister_algs(i);
> + eip93_unregister_algs(supported_algo_flags, i);
>
> return ret;
> }
> @@ -469,8 +480,11 @@ static int eip93_crypto_probe(struct platform_device *pdev)
> static void eip93_crypto_remove(struct platform_device *pdev)
> {
> struct eip93_device *eip93 = platform_get_drvdata(pdev);
> + u32 algo_flags;
> +
> + algo_flags = readl(eip93->base + EIP93_REG_PE_OPTION_1);
>
> - eip93_unregister_algs(ARRAY_SIZE(eip93_algs));
> + eip93_unregister_algs(algo_flags, ARRAY_SIZE(eip93_algs));
> eip93_cleanup(eip93);
> }
>
> --
> 2.47.3
>
next prev parent reply other threads:[~2026-01-12 8:56 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-11 13:20 [PATCH] crypto: inside-secure/eip93 - unregister only available algorithm Aleksander Jan Bajkowski
2026-01-12 8:56 ` Antoine Tenart [this message]
2026-01-31 2:48 ` Herbert Xu
-- strict thread matches above, loose matches on Subject: below --
2025-12-30 23:51 Aleksander Jan Bajkowski
2026-01-05 15:01 ` Antoine Tenart
2026-01-10 17:24 ` Aleksander Jan Bajkowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aWS3A7wAv5KNVa1b@kwain \
--to=atenart@kernel.org \
--cc=amadeus@jmu.edu.cn \
--cc=ansuelsmth@gmail.com \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maxim.anisimov.ua@gmail.com \
--cc=olek2@wp.pl \
--cc=vschagen@icloud.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.