]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
crypto: riscv/sha256 - Add simd block function
authorHerbert Xu <herbert@gondor.apana.org.au>
Fri, 2 May 2025 05:31:05 +0000 (13:31 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 5 May 2025 10:20:45 +0000 (18:20 +0800)
Add CRYPTO_ARCH_HAVE_LIB_SHA256_SIMD and a SIMD block function
so that the caller can decide whether to use SIMD.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
arch/riscv/lib/crypto/Kconfig
arch/riscv/lib/crypto/sha256.c

index c100571feb7e8331a5349f73eeed3bbc826c69d0..47c99ea97ce2c888f424033857ef86f13af01c7f 100644 (file)
@@ -12,4 +12,5 @@ config CRYPTO_SHA256_RISCV64
        depends on 64BIT && RISCV_ISA_V && TOOLCHAIN_HAS_VECTOR_CRYPTO
        default CRYPTO_LIB_SHA256
        select CRYPTO_ARCH_HAVE_LIB_SHA256
+       select CRYPTO_ARCH_HAVE_LIB_SHA256_SIMD
        select CRYPTO_LIB_SHA256_GENERIC
index 4ad3ffb8e0a9878985dd1e163cb04c68d545f596..71808397dff4c54335bdaa14b1a1f8ccb8ce8bb3 100644 (file)
@@ -9,10 +9,8 @@
  * Author: Jerry Shih <jerry.shih@sifive.com>
  */
 
-#include <asm/simd.h>
 #include <asm/vector.h>
 #include <crypto/internal/sha2.h>
-#include <crypto/internal/simd.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 
@@ -21,10 +19,10 @@ asmlinkage void sha256_transform_zvknha_or_zvknhb_zvkb(
 
 static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_extensions);
 
-void sha256_blocks_arch(u32 state[SHA256_STATE_WORDS],
+void sha256_blocks_simd(u32 state[SHA256_STATE_WORDS],
                        const u8 *data, size_t nblocks)
 {
-       if (static_branch_likely(&have_extensions) && crypto_simd_usable()) {
+       if (static_branch_likely(&have_extensions)) {
                kernel_vector_begin();
                sha256_transform_zvknha_or_zvknhb_zvkb(state, data, nblocks);
                kernel_vector_end();
@@ -32,6 +30,13 @@ void sha256_blocks_arch(u32 state[SHA256_STATE_WORDS],
                sha256_blocks_generic(state, data, nblocks);
        }
 }
+EXPORT_SYMBOL_GPL(sha256_blocks_simd);
+
+void sha256_blocks_arch(u32 state[SHA256_STATE_WORDS],
+                       const u8 *data, size_t nblocks)
+{
+       sha256_blocks_generic(state, data, nblocks);
+}
 EXPORT_SYMBOL_GPL(sha256_blocks_arch);
 
 bool sha256_is_arch_optimized(void)