From patchwork Tue Aug 17 10:56:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Juraj_Linke=C5=A1?= X-Patchwork-Id: 96983 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3EE81A0548; Tue, 17 Aug 2021 12:56:56 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B770C40DF5; Tue, 17 Aug 2021 12:56:55 +0200 (CEST) Received: from lb.pantheon.sk (lb.pantheon.sk [46.229.239.20]) by mails.dpdk.org (Postfix) with ESMTP id F218A4014E for ; Tue, 17 Aug 2021 12:56:53 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by lb.pantheon.sk (Postfix) with ESMTP id 9391B10A720; Tue, 17 Aug 2021 12:56:52 +0200 (CEST) X-Virus-Scanned: amavisd-new at siecit.sk Received: from lb.pantheon.sk ([127.0.0.1]) by localhost (lb.pantheon.sk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id xVoi3zeJCjib; Tue, 17 Aug 2021 12:56:51 +0200 (CEST) Received: from service-node1.lab.pantheon.local (unknown [46.229.239.141]) by lb.pantheon.sk (Postfix) with ESMTP id 7EEB810A71D; Tue, 17 Aug 2021 12:56:50 +0200 (CEST) From: =?utf-8?q?Juraj_Linke=C5=A1?= To: thomas@monjalon.net, david.marchand@redhat.com, bruce.richardson@intel.com, Honnappa.Nagarahalli@arm.com, Ruifeng.Wang@arm.com, fengchengwen@huawei.com, ferruh.yigit@intel.com, jerinjacobk@gmail.com, jerinj@marvell.com, pbhagavatula@marvell.com Cc: dev@dpdk.org, =?utf-8?q?Juraj_Linke=C5=A1?= Date: Tue, 17 Aug 2021 12:56:49 +0200 Message-Id: <1629197810-26453-1-git-send-email-juraj.linkes@pantheon.tech> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1626784385-24941-1-git-send-email-juraj.linkes@pantheon.tech> References: <1626784385-24941-1-git-send-email-juraj.linkes@pantheon.tech> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 1/2] config/arm: split march cfg into arch and features X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Older compilers may not support all arch versions and all features that the target SoC supports, in which case it's better to figure out the highest arch version and features that the compiler supports. Implement a way to achieve this: 1. Find the highest arch version that the compiler supports, keeping in mind the SoC arch version we're building. For example, if the SoC arch version is arm8.2-a, but the compiler only supports arm8.1-a, use arm8.1-a. On the other hand, if the compiler supports arm8.3-a (or higher), use armv8.2-a. 2. With the architecture version locked, iterate over SoC features and use all that are supported. In all cases, emit a warning if there's something unsupported by the compiler. Signed-off-by: Juraj Linkeš Acked-by: Ruifeng Wang --- v4: rebase --- config/arm/meson.build | 124 ++++++++++++++++++++++++++++++++--------- 1 file changed, 99 insertions(+), 25 deletions(-) diff --git a/config/arm/meson.build b/config/arm/meson.build index 14987c634a..c11efa1583 100644 --- a/config/arm/meson.build +++ b/config/arm/meson.build @@ -38,7 +38,9 @@ implementer_generic = { ], 'part_number_config': { 'generic': { - 'machine_args': ['-march=armv8-a+crc', '-moutline-atomics'] + 'march': 'armv8-a', + 'march_features': ['crc'], + 'compiler_options': ['-moutline-atomics'] }, 'generic_aarch32': { 'machine_args': ['-march=armv8-a', '-mfpu=neon'], @@ -53,15 +55,17 @@ implementer_generic = { } part_number_config_arm = { - '0xd03': {'machine_args': ['-mcpu=cortex-a53']}, - '0xd04': {'machine_args': ['-mcpu=cortex-a35']}, - '0xd07': {'machine_args': ['-mcpu=cortex-a57']}, - '0xd08': {'machine_args': ['-mcpu=cortex-a72']}, - '0xd09': {'machine_args': ['-mcpu=cortex-a73']}, - '0xd0a': {'machine_args': ['-mcpu=cortex-a75']}, - '0xd0b': {'machine_args': ['-mcpu=cortex-a76']}, + '0xd03': {'compiler_options': ['-mcpu=cortex-a53']}, + '0xd04': {'compiler_options': ['-mcpu=cortex-a35']}, + '0xd07': {'compiler_options': ['-mcpu=cortex-a57']}, + '0xd08': {'compiler_options': ['-mcpu=cortex-a72']}, + '0xd09': {'compiler_options': ['-mcpu=cortex-a73']}, + '0xd0a': {'compiler_options': ['-mcpu=cortex-a75']}, + '0xd0b': {'compiler_options': ['-mcpu=cortex-a76']}, '0xd0c': { - 'machine_args': ['-march=armv8.2-a+crypto', '-mcpu=neoverse-n1'], + 'march': 'armv8.2-a', + 'march_features': ['crypto'], + 'compiler_options': ['-mcpu=neoverse-n1'], 'flags': [ ['RTE_MACHINE', '"neoverse-n1"'], ['RTE_ARM_FEATURE_ATOMICS', true], @@ -71,7 +75,8 @@ part_number_config_arm = { ] }, '0xd49': { - 'machine_args': ['-march=armv8.5-a+crypto+sve2'], + 'march': 'armv8.5-a', + 'march_features': ['crypto', 'sve2'], 'flags': [ ['RTE_MACHINE', '"neoverse-n2"'], ['RTE_ARM_FEATURE_ATOMICS', true], @@ -105,19 +110,21 @@ implementer_cavium = { ], 'part_number_config': { '0xa1': { - 'machine_args': ['-mcpu=thunderxt88'], + 'compiler_options': ['-mcpu=thunderxt88'], 'flags': flags_part_number_thunderx }, '0xa2': { - 'machine_args': ['-mcpu=thunderxt81'], + 'compiler_options': ['-mcpu=thunderxt81'], 'flags': flags_part_number_thunderx }, '0xa3': { - 'machine_args': ['-mcpu=thunderxt83'], + 'compiler_options': ['-mcpu=thunderxt83'], 'flags': flags_part_number_thunderx }, '0xaf': { - 'machine_args': ['-march=armv8.1-a+crc+crypto', '-mcpu=thunderx2t99'], + 'march': 'armv8.1-a', + 'march_features': ['crc', 'crypto'], + 'compiler_options': ['-mcpu=thunderx2t99'], 'flags': [ ['RTE_MACHINE', '"thunderx2"'], ['RTE_ARM_FEATURE_ATOMICS', true], @@ -127,7 +134,9 @@ implementer_cavium = { ] }, '0xb2': { - 'machine_args': ['-march=armv8.2-a+crc+crypto+lse', '-mcpu=octeontx2'], + 'march': 'armv8.2-a', + 'march_features': ['crc', 'crypto', 'lse'], + 'compiler_options': ['-mcpu=octeontx2'], 'flags': [ ['RTE_MACHINE', '"octeontx2"'], ['RTE_ARM_FEATURE_ATOMICS', true], @@ -148,7 +157,11 @@ implementer_ampere = { ['RTE_MAX_NUMA_NODES', 1] ], 'part_number_config': { - '0x0': {'machine_args': ['-march=armv8-a+crc+crypto', '-mtune=emag']} + '0x0': { + 'march': 'armv8-a', + 'march_features': ['crc', 'crypto'], + 'compiler_options': ['-mtune=emag'] + } } } @@ -160,7 +173,9 @@ implementer_hisilicon = { ], 'part_number_config': { '0xd01': { - 'machine_args': ['-march=armv8.2-a+crypto', '-mtune=tsv110'], + 'march': 'armv8.2-a', + 'march_features': ['crypto'], + 'compiler_options': ['-mtune=tsv110'], 'flags': [ ['RTE_MACHINE', '"Kunpeng 920"'], ['RTE_ARM_FEATURE_ATOMICS', true], @@ -169,7 +184,8 @@ implementer_hisilicon = { ] }, '0xd02': { - 'machine_args': ['-march=armv8.2-a+crypto+sve'], + 'march': 'armv8.2-a', + 'march_features': ['crypto', 'sve'], 'flags': [ ['RTE_MACHINE', '"Kunpeng 930"'], ['RTE_ARM_FEATURE_ATOMICS', true], @@ -190,8 +206,14 @@ implementer_qualcomm = { ['RTE_MAX_NUMA_NODES', 1] ], 'part_number_config': { - '0x800': {'machine_args': ['-march=armv8-a+crc']}, - '0xc00': {'machine_args': ['-march=armv8-a+crc']}, + '0x800': { + 'march': 'armv8-a', + 'march_features': ['crc'] + }, + '0xc00': { + 'march': 'armv8-a', + 'march_features': ['crc'] + } } } @@ -500,13 +522,65 @@ if update_flags # add/overwrite flags in the proper order dpdk_flags = flags_common + implementer_config['flags'] + part_number_config.get('flags', []) + soc_flags - # apply supported machine args machine_args = [] # Clear previous machine args - foreach flag: part_number_config['machine_args'] - if cc.has_argument(flag) - machine_args += flag + + # probe supported marchs and their features + candidate_march = '' + if part_number_config.has_key('march') + supported_marchs = ['armv8.6-a', 'armv8.5-a', 'armv8.4-a', 'armv8.3-a', + 'armv8.2-a', 'armv8.1-a', 'armv8-a'] + check_compiler_support = false + foreach supported_march: supported_marchs + if supported_march == part_number_config['march'] + # start checking from this version downwards + check_compiler_support = true + endif + if (check_compiler_support and + cc.has_argument('-march=' + supported_march)) + candidate_march = supported_march + # highest supported march version found + break + endif + endforeach + if candidate_march == '' + error('No suitable armv8 march version found.') endif - endforeach + if candidate_march != part_number_config['march'] + warning('Configuration march version is ' + + '@0@, but the compiler supports only @1@.' + .format(part_number_config['march'], candidate_march)) + endif + candidate_march = '-march=' + candidate_march + + march_features = [] + if part_number_config.has_key('march_features') + march_features += part_number_config['march_features'] + endif + if soc_config.has_key('extra_march_features') + march_features += soc_config['extra_march_features'] + endif + foreach feature: march_features + if cc.has_argument('+'.join([candidate_march, feature])) + candidate_march = '+'.join([candidate_march, feature]) + else + warning('The compiler does not support feature @0@' + .format(feature)) + endif + endforeach + machine_args += candidate_march + endif + + # apply supported compiler options + if part_number_config.has_key('compiler_options') + foreach flag: part_number_config['compiler_options'] + if cc.has_argument(flag) + machine_args += flag + else + warning('Configuration compiler option ' + + '@0@ isn\'t supported.'.format(flag)) + endif + endforeach + endif # apply flags foreach flag: dpdk_flags From patchwork Tue Aug 17 10:56:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Juraj_Linke=C5=A1?= X-Patchwork-Id: 96984 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 243D3A0548; Tue, 17 Aug 2021 12:57:02 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B5DB0411A2; Tue, 17 Aug 2021 12:56:58 +0200 (CEST) Received: from lb.pantheon.sk (lb.pantheon.sk [46.229.239.20]) by mails.dpdk.org (Postfix) with ESMTP id 021C5411A1 for ; Tue, 17 Aug 2021 12:56:57 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by lb.pantheon.sk (Postfix) with ESMTP id 14BE510A71D; Tue, 17 Aug 2021 12:56:56 +0200 (CEST) X-Virus-Scanned: amavisd-new at siecit.sk Received: from lb.pantheon.sk ([127.0.0.1]) by localhost (lb.pantheon.sk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id whMdRDXcmuge; Tue, 17 Aug 2021 12:56:51 +0200 (CEST) Received: from service-node1.lab.pantheon.local (unknown [46.229.239.141]) by lb.pantheon.sk (Postfix) with ESMTP id 55BC910A71F; Tue, 17 Aug 2021 12:56:51 +0200 (CEST) From: =?utf-8?q?Juraj_Linke=C5=A1?= To: thomas@monjalon.net, david.marchand@redhat.com, bruce.richardson@intel.com, Honnappa.Nagarahalli@arm.com, Ruifeng.Wang@arm.com, fengchengwen@huawei.com, ferruh.yigit@intel.com, jerinjacobk@gmail.com, jerinj@marvell.com, pbhagavatula@marvell.com Cc: dev@dpdk.org, =?utf-8?q?Juraj_Linke=C5=A1?= Date: Tue, 17 Aug 2021 12:56:50 +0200 Message-Id: <1629197810-26453-2-git-send-email-juraj.linkes@pantheon.tech> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1629197810-26453-1-git-send-email-juraj.linkes@pantheon.tech> References: <1626784385-24941-1-git-send-email-juraj.linkes@pantheon.tech> <1629197810-26453-1-git-send-email-juraj.linkes@pantheon.tech> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 2/2] config/arm: make n2 'crypto' an optional feature X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Not all Neoverse-N2 cpus must support the crypto feature/extension which makes it an optional feature. Only enable the feature for SoCs which support it. Signed-off-by: Juraj Linkeš Acked-by: Ruifeng Wang --- v4: rebase --- config/arm/meson.build | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/arm/meson.build b/config/arm/meson.build index c11efa1583..c9bcd089df 100644 --- a/config/arm/meson.build +++ b/config/arm/meson.build @@ -76,7 +76,7 @@ part_number_config_arm = { }, '0xd49': { 'march': 'armv8.5-a', - 'march_features': ['crypto', 'sve2'], + 'march_features': ['sve2'], 'flags': [ ['RTE_MACHINE', '"neoverse-n2"'], ['RTE_ARM_FEATURE_ATOMICS', true], @@ -278,6 +278,7 @@ soc_cn10k = { ['RTE_MAX_NUMA_NODES', 1] ], 'part_number': '0xd49', + 'extra_march_features': ['crypto'], 'numa': false }