crypto: x86/sha - Add build support for Intel SHA Extensions optimized SHA1 and SHA256
This patch provides the configuration and build support to include and build the optimized SHA1 and SHA256 update transforms for the kernel's crypto library. Originally-by: Chandramouli Narayanan <mouli_7982@yahoo.com> Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com> Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
95fca7df0b
commit
e38b6b7fcf
|
@ -165,9 +165,11 @@ asinstr += $(call as-instr,pshufb %xmm0$(comma)%xmm0,-DCONFIG_AS_SSSE3=1)
|
||||||
asinstr += $(call as-instr,crc32l %eax$(comma)%eax,-DCONFIG_AS_CRC32=1)
|
asinstr += $(call as-instr,crc32l %eax$(comma)%eax,-DCONFIG_AS_CRC32=1)
|
||||||
avx_instr := $(call as-instr,vxorps %ymm0$(comma)%ymm1$(comma)%ymm2,-DCONFIG_AS_AVX=1)
|
avx_instr := $(call as-instr,vxorps %ymm0$(comma)%ymm1$(comma)%ymm2,-DCONFIG_AS_AVX=1)
|
||||||
avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1)
|
avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1)
|
||||||
|
sha1_ni_instr :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA1_NI=1)
|
||||||
|
sha256_ni_instr :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA256_NI=1)
|
||||||
|
|
||||||
KBUILD_AFLAGS += $(asinstr) $(avx_instr) $(avx2_instr)
|
KBUILD_AFLAGS += $(asinstr) $(avx_instr) $(avx2_instr) $(sha1_ni_instr) $(sha256_ni_instr)
|
||||||
KBUILD_CFLAGS += $(asinstr) $(avx_instr) $(avx2_instr)
|
KBUILD_CFLAGS += $(asinstr) $(avx_instr) $(avx2_instr) $(sha1_ni_instr) $(sha256_ni_instr)
|
||||||
|
|
||||||
LDFLAGS := -m elf_$(UTS_MACHINE)
|
LDFLAGS := -m elf_$(UTS_MACHINE)
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
avx_supported := $(call as-instr,vpxor %xmm0$(comma)%xmm0$(comma)%xmm0,yes,no)
|
avx_supported := $(call as-instr,vpxor %xmm0$(comma)%xmm0$(comma)%xmm0,yes,no)
|
||||||
avx2_supported := $(call as-instr,vpgatherdd %ymm0$(comma)(%eax$(comma)%ymm1\
|
avx2_supported := $(call as-instr,vpgatherdd %ymm0$(comma)(%eax$(comma)%ymm1\
|
||||||
$(comma)4)$(comma)%ymm2,yes,no)
|
$(comma)4)$(comma)%ymm2,yes,no)
|
||||||
|
sha1_ni_supported :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,yes,no)
|
||||||
|
sha256_ni_supported :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,yes,no)
|
||||||
|
|
||||||
obj-$(CONFIG_CRYPTO_GLUE_HELPER_X86) += glue_helper.o
|
obj-$(CONFIG_CRYPTO_GLUE_HELPER_X86) += glue_helper.o
|
||||||
|
|
||||||
|
@ -91,9 +93,15 @@ ifeq ($(avx2_supported),yes)
|
||||||
sha1-ssse3-y += sha1_avx2_x86_64_asm.o
|
sha1-ssse3-y += sha1_avx2_x86_64_asm.o
|
||||||
poly1305-x86_64-y += poly1305-avx2-x86_64.o
|
poly1305-x86_64-y += poly1305-avx2-x86_64.o
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(sha1_ni_supported),yes)
|
||||||
|
sha1-ssse3-y += sha1_ni_asm.o
|
||||||
|
endif
|
||||||
crc32c-intel-y := crc32c-intel_glue.o
|
crc32c-intel-y := crc32c-intel_glue.o
|
||||||
crc32c-intel-$(CONFIG_64BIT) += crc32c-pcl-intel-asm_64.o
|
crc32c-intel-$(CONFIG_64BIT) += crc32c-pcl-intel-asm_64.o
|
||||||
crc32-pclmul-y := crc32-pclmul_asm.o crc32-pclmul_glue.o
|
crc32-pclmul-y := crc32-pclmul_asm.o crc32-pclmul_glue.o
|
||||||
sha256-ssse3-y := sha256-ssse3-asm.o sha256-avx-asm.o sha256-avx2-asm.o sha256_ssse3_glue.o
|
sha256-ssse3-y := sha256-ssse3-asm.o sha256-avx-asm.o sha256-avx2-asm.o sha256_ssse3_glue.o
|
||||||
|
ifeq ($(sha256_ni_supported),yes)
|
||||||
|
sha256-ssse3-y += sha256_ni_asm.o
|
||||||
|
endif
|
||||||
sha512-ssse3-y := sha512-ssse3-asm.o sha512-avx-asm.o sha512-avx2-asm.o sha512_ssse3_glue.o
|
sha512-ssse3-y := sha512-ssse3-asm.o sha512-avx-asm.o sha512-avx2-asm.o sha512_ssse3_glue.o
|
||||||
crct10dif-pclmul-y := crct10dif-pcl-asm_64.o crct10dif-pclmul_glue.o
|
crct10dif-pclmul-y := crct10dif-pcl-asm_64.o crct10dif-pclmul_glue.o
|
||||||
|
|
|
@ -597,17 +597,18 @@ config CRYPTO_SHA1
|
||||||
SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2).
|
SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2).
|
||||||
|
|
||||||
config CRYPTO_SHA1_SSSE3
|
config CRYPTO_SHA1_SSSE3
|
||||||
tristate "SHA1 digest algorithm (SSSE3/AVX/AVX2)"
|
tristate "SHA1 digest algorithm (SSSE3/AVX/AVX2/SHA-NI)"
|
||||||
depends on X86 && 64BIT
|
depends on X86 && 64BIT
|
||||||
select CRYPTO_SHA1
|
select CRYPTO_SHA1
|
||||||
select CRYPTO_HASH
|
select CRYPTO_HASH
|
||||||
help
|
help
|
||||||
SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2) implemented
|
SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2) implemented
|
||||||
using Supplemental SSE3 (SSSE3) instructions or Advanced Vector
|
using Supplemental SSE3 (SSSE3) instructions or Advanced Vector
|
||||||
Extensions (AVX/AVX2), when available.
|
Extensions (AVX/AVX2) or SHA-NI(SHA Extensions New Instructions),
|
||||||
|
when available.
|
||||||
|
|
||||||
config CRYPTO_SHA256_SSSE3
|
config CRYPTO_SHA256_SSSE3
|
||||||
tristate "SHA256 digest algorithm (SSSE3/AVX/AVX2)"
|
tristate "SHA256 digest algorithm (SSSE3/AVX/AVX2/SHA-NI)"
|
||||||
depends on X86 && 64BIT
|
depends on X86 && 64BIT
|
||||||
select CRYPTO_SHA256
|
select CRYPTO_SHA256
|
||||||
select CRYPTO_HASH
|
select CRYPTO_HASH
|
||||||
|
@ -615,7 +616,8 @@ config CRYPTO_SHA256_SSSE3
|
||||||
SHA-256 secure hash standard (DFIPS 180-2) implemented
|
SHA-256 secure hash standard (DFIPS 180-2) implemented
|
||||||
using Supplemental SSE3 (SSSE3) instructions, or Advanced Vector
|
using Supplemental SSE3 (SSSE3) instructions, or Advanced Vector
|
||||||
Extensions version 1 (AVX1), or Advanced Vector Extensions
|
Extensions version 1 (AVX1), or Advanced Vector Extensions
|
||||||
version 2 (AVX2) instructions, when available.
|
version 2 (AVX2) instructions, or SHA-NI (SHA Extensions New
|
||||||
|
Instructions) when available.
|
||||||
|
|
||||||
config CRYPTO_SHA512_SSSE3
|
config CRYPTO_SHA512_SSSE3
|
||||||
tristate "SHA512 digest algorithm (SSSE3/AVX/AVX2)"
|
tristate "SHA512 digest algorithm (SSSE3/AVX/AVX2)"
|
||||||
|
|
Loading…
Reference in New Issue