diff options
author | Jeremy Compostella <jeremy.compostella@intel.com> | 2023-11-27 15:01:28 -0800 |
---|---|---|
committer | Yu-Ping Wu <yupingso@google.com> | 2023-12-28 01:38:44 +0000 |
commit | 3dcd0d98e47b891d0e62247220e0353d9d9b84cf (patch) | |
tree | dc8fa8e7021ef3b98afec934a487b608ab3ec221 /payloads | |
parent | 00a9bc68feeb068e141c182c281824a0ee038d43 (diff) |
libpayload: Add VBOOT_X86_RSA_ACCELERATION config
Add `VBOOT_X86_RSA_ACCELERATION' Kconfig option to enable SSE2
instruction set implementation of modulus exponentiation which is part
of the RSA signature verification process. This option is enabled on
CHROMEOS.
| modpow() function call | original on rex0 | SSE2 on rex0 |
|------------------------+------------------+--------------|
| depthcharge - step 1 | 0.547 | 0.288 |
| depthcharge - step 2 | 0.152 | 0.081 |
| depthcharge - step 3 | 0.164 | 0.079 |
|------------------------+------------------+--------------|
| Total (ms) | 0.863 | 0.448 |
| modpow() function call | original on brya0 | SSE2 on rex0 |
|------------------------+-------------------+--------------|
| depthcharge - step 1 | 0.693 | 0.248 |
| depthcharge - step 2 | 0.172 | 0.065 |
| depthcharge - step 3 | 0.223 | 0.067 |
|------------------------+-------------------+--------------|
| Total (ms) | 1.088 | 0.38 |
BUG=b:312709384
TEST=modular exponentiation is about twice faster on rex0 and brya0
Change-Id: I801ebd7839261c6bd07fb218e1e36a7108e219bf
Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/79290
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Yu-Ping Wu <yupingso@google.com>
Diffstat (limited to 'payloads')
-rw-r--r-- | payloads/libpayload/vboot/Kconfig | 10 | ||||
-rw-r--r-- | payloads/libpayload/vboot/Makefile.inc | 5 |
2 files changed, 15 insertions, 0 deletions
diff --git a/payloads/libpayload/vboot/Kconfig b/payloads/libpayload/vboot/Kconfig index 25ca35ea19..23d61f4e5e 100644 --- a/payloads/libpayload/vboot/Kconfig +++ b/payloads/libpayload/vboot/Kconfig @@ -31,6 +31,16 @@ config VBOOT_X86_SHA_EXT This option enables SHA256 implementation using x86 SHA processor extension instructions: sha256msg1, sha256msg2, sha256rnds2. +config VBOOT_X86_RSA_ACCELERATION + bool "Use SSE2 instructions for RSA signature verification" + default y if CHROMEOS + default n + depends on ARCH_X86 + help + Use paddq, pmuludq, psrlq, punpckldq and punpcklqdq SSE2 + instructions to accelerate the modulus exponentiation which + is part of the RSA signature verification process. + config VBOOT_SHA_ARMV8_CE bool "SHA256 implementation using ARMv8 Crypto Extension" default y if CHROMEOS diff --git a/payloads/libpayload/vboot/Makefile.inc b/payloads/libpayload/vboot/Makefile.inc index 5677df9e8c..9904fff7f1 100644 --- a/payloads/libpayload/vboot/Makefile.inc +++ b/payloads/libpayload/vboot/Makefile.inc @@ -29,6 +29,10 @@ ifeq ($(CONFIG_LP_ARCH_MOCK)$(VBOOT_FIRMWARE_ARCH-y),) $(error vboot requires architecture to be set in the configuration) endif +ifeq ($(CONFIG_LP_VBOOT_X86_RSA_ACCELERATION),y) +CPPFLAGS_common += -DVB2_X86_RSA_ACCELERATION +endif + $(VBOOT_FW_LIB): $(obj)/libpayload-config.h @printf " MAKE $(subst $(obj)/,,$(@))\n" +$(Q) FIRMWARE_ARCH="$(VBOOT_FIRMWARE_ARCH-y)" \ @@ -37,6 +41,7 @@ $(VBOOT_FW_LIB): $(obj)/libpayload-config.h $(MAKE) -C "$(VBOOT_SOURCE)" \ TPM2_MODE=$(call kconfig-to-binary, $(CONFIG_LP_VBOOT_TPM2_MODE)) \ X86_SHA_EXT=$(call kconfig-to-binary, $(CONFIG_LP_VBOOT_X86_SHA_EXT)) \ + VB2_X86_RSA_ACCELERATION=$(call kconfig-to-binary, $(CONFIG_LP_VBOOT_X86_RSA_ACCELERATION)) \ ARMV8_CRYPTO_EXT=$(call kconfig-to-binary, $(CONFIG_LP_VBOOT_SHA_ARMV8_CE)) \ UNROLL_LOOPS=1 \ BUILD="$(VBOOT_BUILD_DIR)" \ |