mirror of https://github.com/torvalds/linux.git
crypto: riscv/sha256 - Add simd block function
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>
This commit is contained in:
parent
adcb9e32e5
commit
491d6024f2
|
|
@ -12,4 +12,5 @@ config CRYPTO_SHA256_RISCV64
|
||||||
depends on 64BIT && RISCV_ISA_V && TOOLCHAIN_HAS_VECTOR_CRYPTO
|
depends on 64BIT && RISCV_ISA_V && TOOLCHAIN_HAS_VECTOR_CRYPTO
|
||||||
default CRYPTO_LIB_SHA256
|
default CRYPTO_LIB_SHA256
|
||||||
select CRYPTO_ARCH_HAVE_LIB_SHA256
|
select CRYPTO_ARCH_HAVE_LIB_SHA256
|
||||||
|
select CRYPTO_ARCH_HAVE_LIB_SHA256_SIMD
|
||||||
select CRYPTO_LIB_SHA256_GENERIC
|
select CRYPTO_LIB_SHA256_GENERIC
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,8 @@
|
||||||
* Author: Jerry Shih <jerry.shih@sifive.com>
|
* Author: Jerry Shih <jerry.shih@sifive.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <asm/simd.h>
|
|
||||||
#include <asm/vector.h>
|
#include <asm/vector.h>
|
||||||
#include <crypto/internal/sha2.h>
|
#include <crypto/internal/sha2.h>
|
||||||
#include <crypto/internal/simd.h>
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.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);
|
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)
|
const u8 *data, size_t nblocks)
|
||||||
{
|
{
|
||||||
if (static_branch_likely(&have_extensions) && crypto_simd_usable()) {
|
if (static_branch_likely(&have_extensions)) {
|
||||||
kernel_vector_begin();
|
kernel_vector_begin();
|
||||||
sha256_transform_zvknha_or_zvknhb_zvkb(state, data, nblocks);
|
sha256_transform_zvknha_or_zvknhb_zvkb(state, data, nblocks);
|
||||||
kernel_vector_end();
|
kernel_vector_end();
|
||||||
|
|
@ -32,6 +30,13 @@ void sha256_blocks_arch(u32 state[SHA256_STATE_WORDS],
|
||||||
sha256_blocks_generic(state, data, nblocks);
|
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);
|
EXPORT_SYMBOL_GPL(sha256_blocks_arch);
|
||||||
|
|
||||||
bool sha256_is_arch_optimized(void)
|
bool sha256_is_arch_optimized(void)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue