aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/arch
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@linaro.org>2018-05-24 14:43:38 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2018-05-28 18:07:56 +0300
commitd6e4b3df266ee1c847763ba50fa802d9e9e62b5e (patch)
treec7b6350d9c341229ee31af00f7b418ecb0e3dab5 /platform/linux-generic/arch
parentbdc44eae6bac8aed26170d21cf05fe99ba9d84d6 (diff)
linux-gen: cpu: add cpu cycles init global
Add global init function to check e.g. if CPU cycle counter instruction is available on x86. Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org> Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform/linux-generic/arch')
-rw-r--r--platform/linux-generic/arch/default/odp_cpu_cycles.c6
-rw-r--r--platform/linux-generic/arch/mips64/odp_cpu_cycles.c6
-rw-r--r--platform/linux-generic/arch/x86/cpu_flags.c8
-rw-r--r--platform/linux-generic/arch/x86/cpu_flags.h1
-rw-r--r--platform/linux-generic/arch/x86/odp_cpu_cycles.c14
5 files changed, 35 insertions, 0 deletions
diff --git a/platform/linux-generic/arch/default/odp_cpu_cycles.c b/platform/linux-generic/arch/default/odp_cpu_cycles.c
index 3e3df0879..88e70b2e4 100644
--- a/platform/linux-generic/arch/default/odp_cpu_cycles.c
+++ b/platform/linux-generic/arch/default/odp_cpu_cycles.c
@@ -13,6 +13,7 @@
#include <odp/api/cpu.h>
#include <odp_debug_internal.h>
+#include <odp_init_internal.h>
#define GIGA 1000000000
@@ -46,3 +47,8 @@ uint64_t odp_cpu_cycles_resolution(void)
{
return 1;
}
+
+int _odp_cpu_cycles_init_global(void)
+{
+ return 0;
+}
diff --git a/platform/linux-generic/arch/mips64/odp_cpu_cycles.c b/platform/linux-generic/arch/mips64/odp_cpu_cycles.c
index 26b928788..72a0e5b0c 100644
--- a/platform/linux-generic/arch/mips64/odp_cpu_cycles.c
+++ b/platform/linux-generic/arch/mips64/odp_cpu_cycles.c
@@ -9,6 +9,7 @@
#include <odp/api/cpu.h>
#include <odp/api/hints.h>
#include <odp/api/system_info.h>
+#include <odp_init_internal.h>
uint64_t odp_cpu_cycles(void)
{
@@ -31,3 +32,8 @@ uint64_t odp_cpu_cycles_resolution(void)
{
return 1;
}
+
+int _odp_cpu_cycles_init_global(void)
+{
+ return 0;
+}
diff --git a/platform/linux-generic/arch/x86/cpu_flags.c b/platform/linux-generic/arch/x86/cpu_flags.c
index 0fcaa477e..f5a744fd7 100644
--- a/platform/linux-generic/arch/x86/cpu_flags.c
+++ b/platform/linux-generic/arch/x86/cpu_flags.c
@@ -368,3 +368,11 @@ int cpu_has_global_time(void)
return 0;
}
+
+int cpu_flags_has_rdtsc(void)
+{
+ if (cpu_get_flag_enabled(RTE_CPUFLAG_TSC) > 0)
+ return 1;
+
+ return 0;
+}
diff --git a/platform/linux-generic/arch/x86/cpu_flags.h b/platform/linux-generic/arch/x86/cpu_flags.h
index b0d268888..879c9aadc 100644
--- a/platform/linux-generic/arch/x86/cpu_flags.h
+++ b/platform/linux-generic/arch/x86/cpu_flags.h
@@ -12,6 +12,7 @@ extern "C" {
#endif
void cpu_flags_print_all(void);
+int cpu_flags_has_rdtsc(void);
#ifdef __cplusplus
}
diff --git a/platform/linux-generic/arch/x86/odp_cpu_cycles.c b/platform/linux-generic/arch/x86/odp_cpu_cycles.c
index 12af1c17a..4e50b6da0 100644
--- a/platform/linux-generic/arch/x86/odp_cpu_cycles.c
+++ b/platform/linux-generic/arch/x86/odp_cpu_cycles.c
@@ -6,6 +6,10 @@
#include <odp/api/cpu.h>
+#include "cpu_flags.h"
+#include <odp_init_internal.h>
+#include <odp_debug_internal.h>
+
uint64_t odp_cpu_cycles(void)
{
union {
@@ -32,3 +36,13 @@ uint64_t odp_cpu_cycles_resolution(void)
{
return 1;
}
+
+int _odp_cpu_cycles_init_global(void)
+{
+ if (cpu_flags_has_rdtsc() == 0) {
+ ODP_ERR("RDTSC instruction not supported\n");
+ return -1;
+ }
+
+ return 0;
+}