From: Pavan Nikhilesh Bhagavatula <pbhagavatula@marvell.com>
To: "Juraj Linkeš" <juraj.linkes@pantheon.tech>,
"thomas@monjalon.net" <thomas@monjalon.net>,
"david.marchand@redhat.com" <david.marchand@redhat.com>,
"bruce.richardson@intel.com" <bruce.richardson@intel.com>,
"Honnappa.Nagarahalli@arm.com" <Honnappa.Nagarahalli@arm.com>,
"Ruifeng.Wang@arm.com" <Ruifeng.Wang@arm.com>,
"fengchengwen@huawei.com" <fengchengwen@huawei.com>,
"ferruh.yigit@intel.com" <ferruh.yigit@intel.com>,
"jerinjacobk@gmail.com" <jerinjacobk@gmail.com>,
"Jerin Jacob Kollanukkaran" <jerinj@marvell.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [EXT] [PATCH v3] config/arm: split march cfg into arch and features
Date: Tue, 20 Jul 2021 07:25:14 +0000 [thread overview]
Message-ID: <PH0PR18MB4086CCEE30F3322B1A0D57E2DEE29@PH0PR18MB4086.namprd18.prod.outlook.com> (raw)
In-Reply-To: <1626094936-6054-1-git-send-email-juraj.linkes@pantheon.tech>
>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š <juraj.linkes@pantheon.tech>
Should we add soc_features to allow individual SoCs to configure additional extensions
they support?
As we discussed previously [1] default Neoverse-n2 shouldn’t have crypto extension as
it's an optional feature[2]. SoCs that are based on n2 can define it in soc_features.
[1] http://patches.dpdk.org/project/dpdk/patch/20210505121423.850-1-pbhagavatula@marvell.com/
[2] https://developer.arm.com/ip-products/processors/neoverse/neoverse-n2
>---
>v3: rebase
>---
> config/arm/meson.build | 125
>++++++++++++++++++++++++++++++++---------
> 1 file changed, 100 insertions(+), 25 deletions(-)
>
>diff --git a/config/arm/meson.build b/config/arm/meson.build
>index 14987c634a..f5cd30f4f0 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,66 @@ 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.')
>+ else
>+ 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
> endif
>- endforeach
>+ if part_number_config.has_key('march_features')
>+ feature_unsupported = false
>+ foreach feature: part_number_config['march_features']
>+ if cc.has_argument('+'.join([candidate_march, feature]))
>+ candidate_march = '+'.join([candidate_march, feature])
>+ else
>+ feature_unsupported = true
>+ endif
>+ endforeach
>+ if feature_unsupported
>+ warning('Configuration march features are ' +
>+ '@0@, but the compiler supports only @1@.'
>+ .format(part_number_config['march_features'],
>+ candidate_march))
>+ endif
>+ endif
>+ 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
>--
>2.20.1
next prev parent reply other threads:[~2021-07-20 7:25 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-29 9:39 [dpdk-dev] [PATCH v1] " Juraj Linkeš
2021-06-29 9:39 ` [dpdk-dev] [PATCH v1] config/arm: split march cfg to " Juraj Linkeš
2021-07-06 8:21 ` [dpdk-dev] [PATCH v2] config/arm: split march cfg into " Juraj Linkeš
2021-07-12 13:02 ` [dpdk-dev] [PATCH v3] " Juraj Linkeš
2021-07-14 9:24 ` Ruifeng Wang
2021-07-16 3:42 ` fengchengwen
2021-07-16 12:22 ` Juraj Linkeš
2021-07-20 7:25 ` Pavan Nikhilesh Bhagavatula [this message]
2021-07-20 11:58 ` [dpdk-dev] [EXT] " Juraj Linkeš
2021-07-20 12:33 ` [dpdk-dev] [PATCH v3 1/2] " Juraj Linkeš
2021-07-20 12:33 ` [dpdk-dev] [PATCH v3 2/2] config/arm: make n2 'crypto' an optional feature Juraj Linkeš
2021-08-17 10:56 ` [dpdk-dev] [PATCH v4 1/2] config/arm: split march cfg into arch and features Juraj Linkeš
2021-08-17 10:56 ` [dpdk-dev] [PATCH v4 2/2] config/arm: make n2 'crypto' an optional feature Juraj Linkeš
2021-09-06 8:38 ` Ruifeng Wang
2021-08-17 10:59 ` [dpdk-dev] [PATCH v4 1/2] config/arm: split march cfg into arch and features Juraj Linkeš
2021-09-06 8:26 ` Ruifeng Wang
2021-09-16 16:17 ` Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=PH0PR18MB4086CCEE30F3322B1A0D57E2DEE29@PH0PR18MB4086.namprd18.prod.outlook.com \
--to=pbhagavatula@marvell.com \
--cc=Honnappa.Nagarahalli@arm.com \
--cc=Ruifeng.Wang@arm.com \
--cc=bruce.richardson@intel.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=fengchengwen@huawei.com \
--cc=ferruh.yigit@intel.com \
--cc=jerinj@marvell.com \
--cc=jerinjacobk@gmail.com \
--cc=juraj.linkes@pantheon.tech \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).