aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/arch/aarch64
diff options
context:
space:
mode:
authorMalvika Gupta <Malvika.Gupta@arm.com>2021-10-28 12:51:21 -0500
committerMatias Elo <matias.elo@nokia.com>2021-11-08 08:53:23 +0200
commit458620fbf8ffbe9011005fbf3635bc6ac7a333e9 (patch)
tree7c4f5b34b878e5cfe1dd9bd4d6c6e2f25d34ebb9 /platform/linux-generic/arch/aarch64
parentbe8f4864beb7b41758454bfcab607d288ff08d4d (diff)
linux-gen: sysinfo: move compile-time cpu flags to cpu_flags.c
Detection and printing of compile-flags has been moved to a new file, cpu_flags.c in preparation for dumping the CPU hardware flags. Signed-off-by: Malvika Gupta <Malvika.Gupta@arm.com> Reviewed-by: Matias Elo <matias.elo@nokia.com>
Diffstat (limited to 'platform/linux-generic/arch/aarch64')
-rw-r--r--platform/linux-generic/arch/aarch64/cpu_flags.c155
-rw-r--r--platform/linux-generic/arch/aarch64/cpu_flags.h20
-rw-r--r--platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c135
3 files changed, 177 insertions, 133 deletions
diff --git a/platform/linux-generic/arch/aarch64/cpu_flags.c b/platform/linux-generic/arch/aarch64/cpu_flags.c
new file mode 100644
index 000000000..79d579088
--- /dev/null
+++ b/platform/linux-generic/arch/aarch64/cpu_flags.c
@@ -0,0 +1,155 @@
+/* Copyright (c) 2018, Linaro Limited
+ * Copyright (c) 2020-2021, Nokia
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <odp/api/hints.h>
+#include <odp_debug_internal.h>
+#include "cpu_flags.h"
+
+static void _odp_sys_info_print_acle_flags(void)
+{
+ const char *ndef = "n/a";
+
+ /* Avoid compiler warning about unused variable */
+ (void)ndef;
+
+ /* See ARM C Language Extensions documentation for details */
+ ODP_PRINT("ARM FEATURES:\n");
+
+ ODP_PRINT(" __ARM_ARCH ");
+#ifdef __ARM_ARCH
+ ODP_PRINT("%i\n", __ARM_ARCH);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" __ARM_ARCH_ISA_A64 ");
+#ifdef __ARM_ARCH_ISA_A64
+ ODP_PRINT("%i\n", __ARM_ARCH_ISA_A64);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" __ARM_FEATURE_ATOMICS ");
+#ifdef __ARM_FEATURE_ATOMICS
+ ODP_PRINT("%i\n", __ARM_FEATURE_ATOMICS);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" __ARM_FEATURE_CRC32 ");
+#ifdef __ARM_FEATURE_CRC32
+ ODP_PRINT("%i\n", __ARM_FEATURE_CRC32);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" __ARM_FEATURE_CRYPTO ");
+#ifdef __ARM_FEATURE_CRYPTO
+ ODP_PRINT("%i\n", __ARM_FEATURE_CRYPTO);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" __ARM_FEATURE_DOTPROD ");
+#ifdef __ARM_FEATURE_DOTPROD
+ ODP_PRINT("%i\n", __ARM_FEATURE_DOTPROD);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" __ARM_FEATURE_IDIV ");
+#ifdef __ARM_FEATURE_IDIV
+ ODP_PRINT("%i\n", __ARM_FEATURE_IDIV);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" __ARM_FEATURE_QRDMX ");
+#ifdef __ARM_FEATURE_QRDMX
+ ODP_PRINT("%i\n", __ARM_FEATURE_QRDMX);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" __ARM_FEATURE_SHA3 ");
+#ifdef __ARM_FEATURE_SHA3
+ ODP_PRINT("%i\n", __ARM_FEATURE_SHA3);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" __ARM_FEATURE_SHA512 ");
+#ifdef __ARM_FEATURE_SHA512
+ ODP_PRINT("%i\n", __ARM_FEATURE_SHA512);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" __ARM_FEATURE_SM3 ");
+#ifdef __ARM_FEATURE_SM3
+ ODP_PRINT("%i\n", __ARM_FEATURE_SM3);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" __ARM_FEATURE_SM4 ");
+#ifdef __ARM_FEATURE_SM4
+ ODP_PRINT("%i\n", __ARM_FEATURE_SM4);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" __ARM_FEATURE_UNALIGNED ");
+#ifdef __ARM_FEATURE_UNALIGNED
+ ODP_PRINT("%i\n", __ARM_FEATURE_UNALIGNED);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" __ARM_NEON ");
+#ifdef __ARM_NEON
+ ODP_PRINT("%i\n", __ARM_NEON);
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT(" ARM ISA version: ");
+#if defined(__ARM_ARCH)
+ if (__ARM_ARCH < 8) {
+ ODP_PRINT("v%i\n", __ARM_ARCH);
+ } else if (__ARM_ARCH == 8) {
+ /* Actually, this checks for new NEON instructions in
+ * v8.1, but is currently the only way to distinguish
+ * v8.0 and >=v8.1. */
+ #ifdef __ARM_FEATURE_QRDMX
+ ODP_PRINT("v8.1 or higher\n");
+ #else
+ ODP_PRINT("v8.0\n");
+ #endif
+ } else {
+ /* ACLE 2018 defines that from v8.1 onwards the value includes
+ * the minor version number: __ARM_ARCH = X * 100 + Y
+ * E.g. for Armv8.1 __ARM_ARCH = 801 */
+ int major = __ARM_ARCH / 100;
+ int minor = __ARM_ARCH - (major * 100);
+
+ ODP_PRINT("v%i.%i\n", major, minor);
+ }
+#else
+ ODP_PRINT("%s\n", ndef);
+#endif
+
+ ODP_PRINT("\n");
+}
+
+void _odp_cpu_flags_print_all(void)
+{
+ _odp_sys_info_print_acle_flags();
+}
diff --git a/platform/linux-generic/arch/aarch64/cpu_flags.h b/platform/linux-generic/arch/aarch64/cpu_flags.h
new file mode 100644
index 000000000..177b1c44f
--- /dev/null
+++ b/platform/linux-generic/arch/aarch64/cpu_flags.h
@@ -0,0 +1,20 @@
+/* Copyright (c) 2021, ARM Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef ODP_PLAT_CPU_FLAGS_H_
+#define ODP_PLAT_CPU_FLAGS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void _odp_cpu_flags_print_all(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c b/platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c
index ab64d501e..dbb6d43af 100644
--- a/platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c
+++ b/platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c
@@ -13,6 +13,7 @@
#include <odp_global_data.h>
#include <odp_sysinfo_internal.h>
#include <odp_debug_internal.h>
+#include "cpu_flags.h"
#define TMP_STR_LEN 64
@@ -334,139 +335,7 @@ int _odp_cpuinfo_parser(FILE *file, system_info_t *sysinfo)
void _odp_sys_info_print_arch(void)
{
- const char *ndef = "n/a";
-
- /* Avoid compiler warning about unused variable */
- (void)ndef;
-
- /* See ARM C Language Extensions documentation for details */
- ODP_PRINT("ARM FEATURES:\n");
-
- ODP_PRINT(" __ARM_ARCH ");
-#ifdef __ARM_ARCH
- ODP_PRINT("%i\n", __ARM_ARCH);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" __ARM_ARCH_ISA_A64 ");
-#ifdef __ARM_ARCH_ISA_A64
- ODP_PRINT("%i\n", __ARM_ARCH_ISA_A64);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" __ARM_NEON ");
-#ifdef __ARM_NEON
- ODP_PRINT("%i\n", __ARM_NEON);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" __ARM_FEATURE_ATOMICS ");
-#ifdef __ARM_FEATURE_ATOMICS
- ODP_PRINT("%i\n", __ARM_FEATURE_ATOMICS);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" __ARM_FEATURE_UNALIGNED ");
-#ifdef __ARM_FEATURE_UNALIGNED
- ODP_PRINT("%i\n", __ARM_FEATURE_UNALIGNED);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" __ARM_FEATURE_IDIV ");
-#ifdef __ARM_FEATURE_IDIV
- ODP_PRINT("%i\n", __ARM_FEATURE_IDIV);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" __ARM_FEATURE_QRDMX ");
-#ifdef __ARM_FEATURE_QRDMX
- ODP_PRINT("%i\n", __ARM_FEATURE_QRDMX);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" __ARM_FEATURE_DOTPROD ");
-#ifdef __ARM_FEATURE_DOTPROD
- ODP_PRINT("%i\n", __ARM_FEATURE_DOTPROD);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" __ARM_FEATURE_CRYPTO ");
-#ifdef __ARM_FEATURE_CRYPTO
- ODP_PRINT("%i\n", __ARM_FEATURE_CRYPTO);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" __ARM_FEATURE_SHA512 ");
-#ifdef __ARM_FEATURE_SHA512
- ODP_PRINT("%i\n", __ARM_FEATURE_SHA512);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" __ARM_FEATURE_SHA3 ");
-#ifdef __ARM_FEATURE_SHA3
- ODP_PRINT("%i\n", __ARM_FEATURE_SHA3);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" __ARM_FEATURE_SM3 ");
-#ifdef __ARM_FEATURE_SM3
- ODP_PRINT("%i\n", __ARM_FEATURE_SM3);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" __ARM_FEATURE_SM4 ");
-#ifdef __ARM_FEATURE_SM4
- ODP_PRINT("%i\n", __ARM_FEATURE_SM4);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" __ARM_FEATURE_CRC32 ");
-#ifdef __ARM_FEATURE_CRC32
- ODP_PRINT("%i\n", __ARM_FEATURE_CRC32);
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT(" ARM ISA version: ");
-#if defined(__ARM_ARCH)
- if (__ARM_ARCH < 8) {
- ODP_PRINT("v%i\n", __ARM_ARCH);
- } else if (__ARM_ARCH == 8) {
- /* Actually, this checks for new NEON instructions in
- * v8.1, but is currently the only way to distinguish
- * v8.0 and >=v8.1. */
- #ifdef __ARM_FEATURE_QRDMX
- ODP_PRINT("v8.1 or higher\n");
- #else
- ODP_PRINT("v8.0\n");
- #endif
- } else {
- /* ACLE 2018 defines that from v8.1 onwards the value includes
- * the minor version number: __ARM_ARCH = X * 100 + Y
- * E.g. for Armv8.1 __ARM_ARCH = 801 */
- int major = __ARM_ARCH / 100;
- int minor = __ARM_ARCH - (major * 100);
-
- ODP_PRINT("v%i.%i\n", major, minor);
- }
-#else
- ODP_PRINT("%s\n", ndef);
-#endif
-
- ODP_PRINT("\n");
+ _odp_cpu_flags_print_all();
}
uint64_t odp_cpu_arch_hz_current(int id ODP_UNUSED)