DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 1/2] build: add option for armv8 crypto extension
@ 2019-05-02  1:58 Yongseok Koh
  2019-05-02  1:58 ` Yongseok Koh
                   ` (4 more replies)
  0 siblings, 5 replies; 47+ messages in thread
From: Yongseok Koh @ 2019-05-02  1:58 UTC (permalink / raw)
  To: jerinj, shahafs, thomas
  Cc: dev, bruce.richardson, pbhagavatula, gavin.hu, Honnappa.Nagarahalli

Per armv8 crypto extension support, make build always enable it by default
as long as compiler supports the feature while meson build only enables it
for 'default' machine of generic armv8 architecture. For example,
specifying '-mcpu=cortex-a72' doesn't enable it but '+crypto' is required
in order to enable the feature.

It is also known that not all the armv8 platforms have the crypto
extension. For example, Mellanox BlueField has a variant which doesn't have
it. If crypto enabled binary runs on such a platform, rte_eal_init() fails.

Therefore, an option to control this feature is necessary. It is still
enabled by default but can be selectively disabled by vendors.

Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
---
 config/arm/meson.build        | 16 +++++++++-------
 config/common_armv8a_linux    |  1 +
 drivers/crypto/armv8/Makefile |  4 ++++
 meson_options.txt             |  2 ++
 mk/machine/armv8a/rte.vars.mk |  4 ++++
 5 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/config/arm/meson.build b/config/arm/meson.build
index 7fa6ed3105..3b53842d08 100644
--- a/config/arm/meson.build
+++ b/config/arm/meson.build
@@ -8,6 +8,8 @@ march_opt = '-march=@0@'.format(machine)
 arm_force_native_march = false
 arm_force_default_march = (machine == 'default')
 
+crypto_flag = get_option('enable_armv8_crypto') ? '+crypto' : ''
+
 flags_common_default = [
 	# Accelarate rte_memcpy. Be sure to run unit test (memcpy_perf_autotest)
 	# to determine the best threshold in code. Refer to notes in source file
@@ -74,14 +76,14 @@ flags_octeontx2_extra = [
 	['RTE_USE_C11_MEM_MODEL', true]]
 
 machine_args_generic = [
-	['default', ['-march=armv8-a+crc+crypto']],
+	['default', ['-march=armv8-a+crc' + crypto_flag]],
 	['native', ['-march=native']],
-	['0xd03', ['-mcpu=cortex-a53']],
-	['0xd04', ['-mcpu=cortex-a35']],
-	['0xd07', ['-mcpu=cortex-a57']],
-	['0xd08', ['-mcpu=cortex-a72']],
-	['0xd09', ['-mcpu=cortex-a73']],
-	['0xd0a', ['-mcpu=cortex-a75']]]
+	['0xd03', ['-mcpu=cortex-a53' + crypto_flag]],
+	['0xd04', ['-mcpu=cortex-a35' + crypto_flag]],
+	['0xd07', ['-mcpu=cortex-a57' + crypto_flag]],
+	['0xd08', ['-mcpu=cortex-a72' + crypto_flag]],
+	['0xd09', ['-mcpu=cortex-a73' + crypto_flag]],
+	['0xd0a', ['-mcpu=cortex-a75' + crypto_flag]]]
 
 machine_args_cavium = [
 	['default', ['-march=armv8-a+crc+crypto','-mcpu=thunderx']],
diff --git a/config/common_armv8a_linux b/config/common_armv8a_linux
index 72091de1c7..0efa3e2eb2 100644
--- a/config/common_armv8a_linux
+++ b/config/common_armv8a_linux
@@ -5,6 +5,7 @@
 #include "common_linux"
 
 CONFIG_RTE_MACHINE="armv8a"
+CONFIG_RTE_ENABLE_ARMV8_CRYPTO=y
 
 CONFIG_RTE_ARCH="arm64"
 CONFIG_RTE_ARCH_ARM64=y
diff --git a/drivers/crypto/armv8/Makefile b/drivers/crypto/armv8/Makefile
index f71f6b14a4..867a5206cf 100644
--- a/drivers/crypto/armv8/Makefile
+++ b/drivers/crypto/armv8/Makefile
@@ -4,6 +4,10 @@
 
 include $(RTE_SDK)/mk/rte.vars.mk
 
+ifneq ($(CONFIG_RTE_ENABLE_ARMV8_CRYPTO),y)
+$(error "Please enable CONFIG_RTE_ENABLE_ARMV8_CRYPTO")
+endif
+
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),config)
 ifeq ($(ARMV8_CRYPTO_LIB_PATH),)
diff --git a/meson_options.txt b/meson_options.txt
index 16d9f92c65..4ca09771de 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -4,6 +4,8 @@ option('allow_invalid_socket_id', type: 'boolean', value: false,
 	description: 'allow out-of-range NUMA socket id\'s for platforms that don\'t report the value correctly')
 option('drivers_install_subdir', type: 'string', value: 'dpdk/pmds-<VERSION>',
 	description: 'Subdirectory of libdir where to install PMDs. Defaults to using a versioned subdirectory.')
+option('enable_armv8_crypto', type: 'boolean', value: true,
+	description: 'enable armv8 crypto extension')
 option('enable_docs', type: 'boolean', value: false,
 	description: 'build documentation')
 option('enable_kmods', type: 'boolean', value: true,
diff --git a/mk/machine/armv8a/rte.vars.mk b/mk/machine/armv8a/rte.vars.mk
index 8252efbb7b..4893d01a2d 100644
--- a/mk/machine/armv8a/rte.vars.mk
+++ b/mk/machine/armv8a/rte.vars.mk
@@ -28,4 +28,8 @@
 # CPU_LDFLAGS =
 # CPU_ASFLAGS =
 
+ifeq ($(CONFIG_RTE_ENABLE_ARMV8_CRYPTO),y)
 MACHINE_CFLAGS += -march=armv8-a+crc+crypto
+else
+MACHINE_CFLAGS += -march=armv8-a+crc
+endif
-- 
2.11.0

^ permalink raw reply	[flat|nested] 47+ messages in thread
* Re: [dpdk-dev] [PATCH v2] build: disable armv8 crypto extension
@ 2019-05-03 16:06 Jerin Jacob Kollanukkaran
  2019-05-03 16:06 ` Jerin Jacob Kollanukkaran
  0 siblings, 1 reply; 47+ messages in thread
From: Jerin Jacob Kollanukkaran @ 2019-05-03 16:06 UTC (permalink / raw)
  To: Yongseok Koh, thomas
  Cc: dev, bruce.richardson, Pavan Nikhilesh Bhagavatula, shahafs,
	gavin.hu, Honnappa.Nagarahalli, stable

> -----Original Message-----
> From: Yongseok Koh <yskoh@mellanox.com>
> Sent: Friday, May 3, 2019 5:58 PM
> To: Jerin Jacob Kollanukkaran <jerinj@marvell.com>; thomas@monjalon.net
> Cc: dev@dpdk.org; bruce.richardson@intel.com; Pavan Nikhilesh Bhagavatula
> <pbhagavatula@marvell.com>; shahafs@mellanox.com; gavin.hu@arm.com;
> Honnappa.Nagarahalli@arm.com; stable@dpdk.org
> Subject: [EXT] [PATCH v2] build: disable armv8 crypto extension
> > Per armv8 crypto extension support, make build always enable it by default as
> long as compiler supports the feature while meson build only enables it for
> 'default' machine of generic armv8 architecture.
> 
> It is known that not all the armv8 platforms have the crypto extension. For
> example, Mellanox BlueField has a variant which doesn't have it. If crypto
> enabled binary runs on such a platform, rte_eal_init() fails.
> 
> '+crypto' flag currently implies only '+aes' and '+sha2' and enabling it will
> generate the crypto instructions only when crypto intrinsics are used.
> For the devices supporting 8.2 crypto or newer, compiler could generate such
> instructions beyond intrinsics or asm code. For example, compiler can generate
> 3-way exclusive OR instructions if sha3 is supported. However, it has to be
> enabled by adding '+sha3' as of today.
> 
> In DPDK, armv8 cryptodev is the only one which requires the crypto support.
> As it even uses external library of Marvell which is compiled out of DPDK with
> crypto support and there's run-time check for required cpuflags, crypto support
> can be disabled in DPDK.
> 
> Cc: stable@dpdk.org
> 
> Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
> ---

Acked-by: Jerin Jacob <jerinj@marvell.com>

^ permalink raw reply	[flat|nested] 47+ messages in thread

end of thread, other threads:[~2019-06-03 23:11 UTC | newest]

Thread overview: 47+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-02  1:58 [dpdk-dev] [PATCH 1/2] build: add option for armv8 crypto extension Yongseok Koh
2019-05-02  1:58 ` Yongseok Koh
2019-05-02  1:58 ` [dpdk-dev] [PATCH 2/2] mk: disable armv8 crypto extension for Mellanox BlueField Yongseok Koh
2019-05-02  1:58   ` Yongseok Koh
2019-05-02  4:12   ` Honnappa Nagarahalli
2019-05-02  4:12     ` Honnappa Nagarahalli
2019-05-02  5:40     ` Yongseok Koh
2019-05-02  5:40       ` Yongseok Koh
2019-05-03  4:01       ` Honnappa Nagarahalli
2019-05-03  4:01         ` Honnappa Nagarahalli
2019-05-02  4:13 ` [dpdk-dev] [PATCH 1/2] build: add option for armv8 crypto extension Honnappa Nagarahalli
2019-05-02  4:13   ` Honnappa Nagarahalli
2019-05-02  5:46   ` Yongseok Koh
2019-05-02  5:46     ` Yongseok Koh
2019-05-02 10:00     ` Jerin Jacob Kollanukkaran
2019-05-02 10:00       ` Jerin Jacob Kollanukkaran
2019-05-03  3:57     ` Honnappa Nagarahalli
2019-05-03  3:57       ` Honnappa Nagarahalli
2019-05-03  9:57       ` Yongseok Koh
2019-05-03  9:57         ` Yongseok Koh
2019-05-03 12:28 ` [dpdk-dev] [PATCH v2] build: disable " Yongseok Koh
2019-05-03 12:28   ` Yongseok Koh
2019-05-03 15:02   ` Honnappa Nagarahalli
2019-05-03 15:02     ` Honnappa Nagarahalli
2019-05-03 16:10     ` Honnappa Nagarahalli
2019-05-03 16:10       ` Honnappa Nagarahalli
2019-05-03 17:50       ` Yongseok Koh
2019-05-03 17:50         ` Yongseok Koh
2019-05-06 21:46         ` [dpdk-dev] [dpdk-stable] " Yongseok Koh
2019-05-06 21:46           ` Yongseok Koh
2019-05-07  7:59           ` Jerin Jacob Kollanukkaran
2019-05-07  7:59             ` Jerin Jacob Kollanukkaran
2019-05-07 11:03             ` Honnappa Nagarahalli
2019-05-07 11:03               ` Honnappa Nagarahalli
2019-05-07 12:02               ` Jerin Jacob Kollanukkaran
2019-05-07 12:02                 ` Jerin Jacob Kollanukkaran
2019-05-03 22:13   ` [dpdk-dev] " Dharmik Thakkar
2019-05-03 22:13     ` Dharmik Thakkar
2019-05-06 21:41     ` Yongseok Koh
2019-05-06 21:41       ` Yongseok Koh
2019-05-07 21:11 ` [dpdk-dev] [PATCH v3] " Yongseok Koh
2019-05-07 21:11   ` Yongseok Koh
2019-05-13 19:26   ` Honnappa Nagarahalli
2019-05-13 19:26     ` Honnappa Nagarahalli
2019-06-03 23:11     ` Thomas Monjalon
2019-05-03 16:06 [dpdk-dev] [PATCH v2] " Jerin Jacob Kollanukkaran
2019-05-03 16:06 ` Jerin Jacob Kollanukkaran

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).