From patchwork Fri Aug 14 06:03:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ruifeng Wang X-Patchwork-Id: 75543 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id BB671A04B1; Fri, 14 Aug 2020 08:03:46 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E5FF21C0C5; Fri, 14 Aug 2020 08:03:45 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 8B0181C037 for ; Fri, 14 Aug 2020 08:03:44 +0200 (CEST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id ED95A31B; Thu, 13 Aug 2020 23:03:43 -0700 (PDT) Received: from net-arm-thunderx2-02.shanghai.arm.com (net-arm-thunderx2-02.shanghai.arm.com [10.169.210.119]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 5C8A03F22E; Thu, 13 Aug 2020 23:03:41 -0700 (PDT) From: Ruifeng Wang To: hemant.agrawal@nxp.com, jerinj@marvell.com, viktorin@rehivetech.com Cc: dev@dpdk.org, honnappa.nagarahalli@arm.com, phil.yang@arm.com, nd@arm.com, Ruifeng Wang Date: Fri, 14 Aug 2020 14:03:20 +0800 Message-Id: <20200814060320.86238-1-ruifeng.wang@arm.com> X-Mailer: git-send-email 2.17.1 Subject: [dpdk-dev] [RFC PATCH] config: remap flags used for Arm platforms X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" Flags are used to distinguish different platform architectures. These flags can be used to pick different code paths for different architectures at compile time. For Arm platforms, there are 3 flags in use: RTE_ARCH_ARM, RTE_ARCH_ARMv7 and RTE_ARCH_ARM64. RTE_ARCH_ARM64 is used to flag 64-bit aarch64 platforms, while RTE_ARCH_ARM & RTE_ARCH_ARMv7 are used to flag 32-bit platforms. RTE_ARCH_ARMv7 is for ARMv7 platforms as its name suggested. The issue is that flag name RTE_ARCH_ARM is unclear and could cause confusion. No info about platform word length is included in the name. To make the flag names more clear, a naming scheme is proposed. RTE_ARCH_ARM | +----RTE_ARCH_ARM32 | | | +----RTE_ARCH_ARMv7 | | | +----RTE_ARCH_ARMv8_AARCH32 | +----RTE_ARCH_ARM64 RTE_ARCH_ARM32 will be used for 32-bit Arm platforms. It includes RTE_ARCH_ARMv7 and RTE_ARCH_ARMv8_AARCH32. RTE_ARCH_ARMv7 is for ARMv7 platforms. RTE_ARCH_ARMv8_AARCH32 is for aarch32 state on aarch64 platforms. RTE_ARCH_ARM64 is for 64-bit Arm platforms. RTE_ARCH_ARM will be used for all Arm platforms, including RTE_ARCH_ARM32 and RTE_ARCH_ARM64. To fit into the new naming scheme, current usage of RTE_ARCH_ARM in project code is mapped to RTE_ARCH_ARM32. Suggested-by: Honnappa Nagarahalli Signed-off-by: Ruifeng Wang Reviewed-by: Phil Yang --- app/test/test_cpuflags.c | 2 +- app/test/test_xmmt_ops.h | 2 +- config/arm/meson.build | 2 +- config/defconfig_arm-armv7a-linuxapp-gcc | 2 +- drivers/bus/fslmc/qbman/qbman_sys_decl.h | 2 +- drivers/common/dpaax/compat.h | 2 +- drivers/net/i40e/Makefile | 2 +- drivers/net/ixgbe/Makefile | 2 +- drivers/net/ixgbe/ixgbe_rxtx.h | 4 ++-- drivers/net/virtio/Makefile | 2 +- drivers/net/virtio/virtio_ethdev.c | 2 +- lib/librte_acl/Makefile | 2 +- lib/librte_acl/meson.build | 2 +- lib/librte_acl/rte_acl.c | 4 ++-- lib/librte_eal/arm/include/rte_vect.h | 4 ++-- lib/librte_eal/common/eal_internal_cfg.h | 2 +- lib/librte_lpm/Makefile | 2 +- lib/librte_lpm/rte_lpm.h | 2 +- 18 files changed, 21 insertions(+), 21 deletions(-) diff --git a/app/test/test_cpuflags.c b/app/test/test_cpuflags.c index 06718631f..bf9851393 100644 --- a/app/test/test_cpuflags.c +++ b/app/test/test_cpuflags.c @@ -86,7 +86,7 @@ test_cpuflags(void) CHECK_FOR_FLAG(RTE_CPUFLAG_ICACHE_SNOOP); #endif -#if defined(RTE_ARCH_ARM) +#if defined(RTE_ARCH_ARM32) printf("Check for NEON:\t\t"); CHECK_FOR_FLAG(RTE_CPUFLAG_NEON); #endif diff --git a/app/test/test_xmmt_ops.h b/app/test/test_xmmt_ops.h index 8bcf0b261..13333bf6e 100644 --- a/app/test/test_xmmt_ops.h +++ b/app/test/test_xmmt_ops.h @@ -7,7 +7,7 @@ #include -#if defined(RTE_ARCH_ARM) || defined(RTE_ARCH_ARM64) +#if defined(RTE_ARCH_ARM32) || defined(RTE_ARCH_ARM64) /* vect_* abstraction implementation using NEON */ diff --git a/config/arm/meson.build b/config/arm/meson.build index 8728051d5..62ee2d108 100644 --- a/config/arm/meson.build +++ b/config/arm/meson.build @@ -132,7 +132,7 @@ dpdk_conf.set('RTE_FORCE_INTRINSICS', 1) if not dpdk_conf.get('RTE_ARCH_64') dpdk_conf.set('RTE_CACHE_LINE_SIZE', 64) - dpdk_conf.set('RTE_ARCH_ARM', 1) + dpdk_conf.set('RTE_ARCH_ARM32', 1) dpdk_conf.set('RTE_ARCH_ARMv7', 1) # the minimum architecture supported, armv7-a, needs the following, # mk/machine/armv7a/rte.vars.mk sets it too diff --git a/config/defconfig_arm-armv7a-linuxapp-gcc b/config/defconfig_arm-armv7a-linuxapp-gcc index ac9112086..b1a1f8524 100644 --- a/config/defconfig_arm-armv7a-linuxapp-gcc +++ b/config/defconfig_arm-armv7a-linuxapp-gcc @@ -6,7 +6,7 @@ CONFIG_RTE_MACHINE="armv7a" CONFIG_RTE_ARCH="arm" -CONFIG_RTE_ARCH_ARM=y +CONFIG_RTE_ARCH_ARM32=y CONFIG_RTE_ARCH_ARMv7=y CONFIG_RTE_ARCH_ARM_TUNE="cortex-a9" diff --git a/drivers/bus/fslmc/qbman/qbman_sys_decl.h b/drivers/bus/fslmc/qbman/qbman_sys_decl.h index a29f5b469..e17cbaefe 100644 --- a/drivers/bus/fslmc/qbman/qbman_sys_decl.h +++ b/drivers/bus/fslmc/qbman/qbman_sys_decl.h @@ -32,7 +32,7 @@ static inline void prefetch_for_store(void *p) { asm volatile("prfm pstl1keep, [%0, #0]" : : "r" (p)); } -#elif defined(RTE_ARCH_ARM) +#elif defined(RTE_ARCH_ARM32) #define dcbz(p) memset(p, 0, 64) #define lwsync() { asm volatile("dmb st" : : : "memory"); } #define dcbf(p) RTE_SET_USED(p) diff --git a/drivers/common/dpaax/compat.h b/drivers/common/dpaax/compat.h index 6793cb256..6ac8a7ea3 100644 --- a/drivers/common/dpaax/compat.h +++ b/drivers/common/dpaax/compat.h @@ -163,7 +163,7 @@ static inline void out_be32(volatile void *__p, u32 val) asm volatile("prfm pldl1keep, [%0, #64]" : : "r" (p)); \ } while (0) -#elif defined(RTE_ARCH_ARM) +#elif defined(RTE_ARCH_ARM32) #define dcbz(p) memset((p), 0, 32) #define dcbz_64(p) memset((p), 0, 64) #define dcbf(p) RTE_SET_USED(p) diff --git a/drivers/net/i40e/Makefile b/drivers/net/i40e/Makefile index 43f10941b..314c07dc1 100644 --- a/drivers/net/i40e/Makefile +++ b/drivers/net/i40e/Makefile @@ -69,7 +69,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_I40E_PMD) += i40e_dcb.c SRCS-$(CONFIG_RTE_LIBRTE_I40E_PMD) += i40e_ethdev.c SRCS-$(CONFIG_RTE_LIBRTE_I40E_PMD) += i40e_rxtx.c -ifneq ($(filter y,$(CONFIG_RTE_ARCH_ARM) $(CONFIG_RTE_ARCH_ARM64)),) +ifneq ($(filter y,$(CONFIG_RTE_ARCH_ARM32) $(CONFIG_RTE_ARCH_ARM64)),) SRCS-$(CONFIG_RTE_LIBRTE_I40E_INC_VECTOR) += i40e_rxtx_vec_neon.c else ifeq ($(CONFIG_RTE_ARCH_PPC_64),y) SRCS-$(CONFIG_RTE_LIBRTE_I40E_INC_VECTOR) += i40e_rxtx_vec_altivec.c diff --git a/drivers/net/ixgbe/Makefile b/drivers/net/ixgbe/Makefile index aebf3b286..4c908220b 100644 --- a/drivers/net/ixgbe/Makefile +++ b/drivers/net/ixgbe/Makefile @@ -88,7 +88,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) += ixgbe_ethdev.c SRCS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) += ixgbe_fdir.c SRCS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) += ixgbe_pf.c SRCS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) += ixgbe_flow.c -ifneq ($(filter y,$(CONFIG_RTE_ARCH_ARM) $(CONFIG_RTE_ARCH_ARM64)),) +ifneq ($(filter y,$(CONFIG_RTE_ARCH_ARM32) $(CONFIG_RTE_ARCH_ARM64)),) SRCS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) += ixgbe_rxtx_vec_neon.c else ifeq ($(CONFIG_RTE_ARCH_X86),y) SRCS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) += ixgbe_rxtx_vec_sse.c diff --git a/drivers/net/ixgbe/ixgbe_rxtx.h b/drivers/net/ixgbe/ixgbe_rxtx.h index 7e09291b2..03b57568b 100644 --- a/drivers/net/ixgbe/ixgbe_rxtx.h +++ b/drivers/net/ixgbe/ixgbe_rxtx.h @@ -33,7 +33,7 @@ #define RTE_IXGBE_DESCS_PER_LOOP 4 -#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64) || defined(RTE_ARCH_ARM) +#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64) || defined(RTE_ARCH_ARM32) #define RTE_IXGBE_RXQ_REARM_THRESH 32 #define RTE_IXGBE_MAX_RX_BURST RTE_IXGBE_RXQ_REARM_THRESH #endif @@ -117,7 +117,7 @@ struct ixgbe_rx_queue { uint8_t using_ipsec; /**< indicates that IPsec RX feature is in use */ #endif -#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64) || defined(RTE_ARCH_ARM) +#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64) || defined(RTE_ARCH_ARM32) uint16_t rxrearm_nb; /**< number of remaining to be re-armed */ uint16_t rxrearm_start; /**< the idx we start the re-arming from */ #endif diff --git a/drivers/net/virtio/Makefile b/drivers/net/virtio/Makefile index 102b1deab..24c60f8f1 100644 --- a/drivers/net/virtio/Makefile +++ b/drivers/net/virtio/Makefile @@ -32,7 +32,7 @@ ifeq ($(CONFIG_RTE_ARCH_X86),y) SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio_rxtx_simple_sse.c else ifeq ($(CONFIG_RTE_ARCH_PPC_64),y) SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio_rxtx_simple_altivec.c -else ifneq ($(filter y,$(CONFIG_RTE_ARCH_ARM) $(CONFIG_RTE_ARCH_ARM64)),) +else ifneq ($(filter y,$(CONFIG_RTE_ARCH_ARM32) $(CONFIG_RTE_ARCH_ARM64)),) SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio_rxtx_simple_neon.c endif diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index dc0093bdf..4495968ba 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -2337,7 +2337,7 @@ virtio_dev_configure(struct rte_eth_dev *dev) } if (hw->use_vec_rx) { -#if defined RTE_ARCH_ARM64 || defined RTE_ARCH_ARM +#if defined RTE_ARCH_ARM64 || defined RTE_ARCH_ARM32 if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_NEON)) { PMD_DRV_LOG(INFO, "disabled split ring vectorized path for requirement not met"); diff --git a/lib/librte_acl/Makefile b/lib/librte_acl/Makefile index f4332b044..2721bd086 100644 --- a/lib/librte_acl/Makefile +++ b/lib/librte_acl/Makefile @@ -20,7 +20,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_ACL) += acl_bld.c SRCS-$(CONFIG_RTE_LIBRTE_ACL) += acl_gen.c SRCS-$(CONFIG_RTE_LIBRTE_ACL) += acl_run_scalar.c -ifneq ($(filter y,$(CONFIG_RTE_ARCH_ARM) $(CONFIG_RTE_ARCH_ARM64)),) +ifneq ($(filter y,$(CONFIG_RTE_ARCH_ARM32) $(CONFIG_RTE_ARCH_ARM64)),) SRCS-$(CONFIG_RTE_LIBRTE_ACL) += acl_run_neon.c CFLAGS_acl_run_neon.o += -flax-vector-conversions ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y) diff --git a/lib/librte_acl/meson.build b/lib/librte_acl/meson.build index d1e2c184c..98496de91 100644 --- a/lib/librte_acl/meson.build +++ b/lib/librte_acl/meson.build @@ -27,7 +27,7 @@ if dpdk_conf.has('RTE_ARCH_X86') cflags += '-DCC_AVX2_SUPPORT' endif -elif dpdk_conf.has('RTE_ARCH_ARM') or dpdk_conf.has('RTE_ARCH_ARM64') +elif dpdk_conf.has('RTE_ARCH_ARM32') or dpdk_conf.has('RTE_ARCH_ARM64') cflags += '-flax-vector-conversions' sources += files('acl_run_neon.c') elif dpdk_conf.has('RTE_ARCH_PPC_64') diff --git a/lib/librte_acl/rte_acl.c b/lib/librte_acl/rte_acl.c index 777ec4d34..7d53f23b0 100644 --- a/lib/librte_acl/rte_acl.c +++ b/lib/librte_acl/rte_acl.c @@ -44,7 +44,7 @@ rte_acl_classify_sse(__rte_unused const struct rte_acl_ctx *ctx, } #endif -#ifndef RTE_ARCH_ARM +#ifndef RTE_ARCH_ARM32 #ifndef RTE_ARCH_ARM64 int rte_acl_classify_neon(__rte_unused const struct rte_acl_ctx *ctx, @@ -111,7 +111,7 @@ RTE_INIT(rte_acl_init) #if defined(RTE_ARCH_ARM64) alg = RTE_ACL_CLASSIFY_NEON; -#elif defined(RTE_ARCH_ARM) +#elif defined(RTE_ARCH_ARM32) if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_NEON)) alg = RTE_ACL_CLASSIFY_NEON; #elif defined(RTE_ARCH_PPC_64) diff --git a/lib/librte_eal/arm/include/rte_vect.h b/lib/librte_eal/arm/include/rte_vect.h index 01c51712a..68e1c6781 100644 --- a/lib/librte_eal/arm/include/rte_vect.h +++ b/lib/librte_eal/arm/include/rte_vect.h @@ -28,7 +28,7 @@ typedef union rte_xmm { double pd[XMM_SIZE / sizeof(double)]; } __rte_aligned(16) rte_xmm_t; -#ifdef RTE_ARCH_ARM +#ifdef RTE_ARCH_ARM32 /* NEON intrinsic vqtbl1q_u8() is not supported in ARMv7-A(AArch32) */ static __inline uint8x16_t vqtbl1q_u8(uint8x16_t a, uint8x16_t b) @@ -62,7 +62,7 @@ vaddvq_u16(uint16x8_t a) #endif -#if defined(RTE_ARCH_ARM) || \ +#if defined(RTE_ARCH_ARM32) || \ (defined(RTE_ARCH_ARM64) && RTE_CC_IS_GNU && (GCC_VERSION < 70000)) /* NEON intrinsic vcopyq_laneq_u32() is not supported in ARMv7-A(AArch32) * On AArch64, this intrinsic is supported since GCC version 7. diff --git a/lib/librte_eal/common/eal_internal_cfg.h b/lib/librte_eal/common/eal_internal_cfg.h index 13f93388a..90d2a6d14 100644 --- a/lib/librte_eal/common/eal_internal_cfg.h +++ b/lib/librte_eal/common/eal_internal_cfg.h @@ -15,7 +15,7 @@ #include "eal_thread.h" -#if defined(RTE_ARCH_ARM) || defined(RTE_ARCH_ARM64) +#if defined(RTE_ARCH_ARM32) || defined(RTE_ARCH_ARM64) #define MAX_HUGEPAGE_SIZES 4 /**< support up to 4 page sizes */ #else #define MAX_HUGEPAGE_SIZES 3 /**< support up to 3 page sizes */ diff --git a/lib/librte_lpm/Makefile b/lib/librte_lpm/Makefile index 6f06c5c03..5c24bffe5 100644 --- a/lib/librte_lpm/Makefile +++ b/lib/librte_lpm/Makefile @@ -18,7 +18,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_LPM) := rte_lpm.c rte_lpm6.c # install this header file SYMLINK-$(CONFIG_RTE_LIBRTE_LPM)-include := rte_lpm.h rte_lpm6.h -ifneq ($(filter y,$(CONFIG_RTE_ARCH_ARM) $(CONFIG_RTE_ARCH_ARM64)),) +ifneq ($(filter y,$(CONFIG_RTE_ARCH_ARM32) $(CONFIG_RTE_ARCH_ARM64)),) SYMLINK-$(CONFIG_RTE_LIBRTE_LPM)-include += rte_lpm_neon.h else ifeq ($(CONFIG_RTE_ARCH_X86),y) SYMLINK-$(CONFIG_RTE_LIBRTE_LPM)-include += rte_lpm_sse.h diff --git a/lib/librte_lpm/rte_lpm.h b/lib/librte_lpm/rte_lpm.h index 03da2d37e..b669266c0 100644 --- a/lib/librte_lpm/rte_lpm.h +++ b/lib/librte_lpm/rte_lpm.h @@ -420,7 +420,7 @@ static inline void rte_lpm_lookupx4(const struct rte_lpm *lpm, xmm_t ip, uint32_t hop[4], uint32_t defv); -#if defined(RTE_ARCH_ARM) || defined(RTE_ARCH_ARM64) +#if defined(RTE_ARCH_ARM32) || defined(RTE_ARCH_ARM64) #include "rte_lpm_neon.h" #elif defined(RTE_ARCH_PPC_64) #include "rte_lpm_altivec.h"