On 07/26/16 05:56, Brian Brooks wrote:
Signed-off-by: Brian Brooks <brian.bro...@linaro.org>
---
  platform/linux-generic/arch/powerpc/odp_cpu_arch.c | 26 ++++++++--------------
  1 file changed, 9 insertions(+), 17 deletions(-)

diff --git a/platform/linux-generic/arch/powerpc/odp_cpu_arch.c 
b/platform/linux-generic/arch/powerpc/odp_cpu_arch.c
index 109dd93..346c170 100644
--- a/platform/linux-generic/arch/powerpc/odp_cpu_arch.c
+++ b/platform/linux-generic/arch/powerpc/odp_cpu_arch.c
@@ -14,25 +14,17 @@
  #include <odp/api/system_info.h>
  #include <odp_debug_internal.h>
-#define GIGA 1000000000
-
  uint64_t odp_cpu_cycles(void)
  {
-       struct timespec time;
-       uint64_t sec, ns, hz, cycles;
-       int ret;
-
-       ret = clock_gettime(CLOCK_MONOTONIC_RAW, &time);
-
-       if (ret != 0)
-               ODP_ABORT("clock_gettime failed\n");
-
-       hz  = odp_cpu_hz_max();
-       sec = (uint64_t)time.tv_sec;
-       ns  = (uint64_t)time.tv_nsec;
+#if defined(__powerpc__) || defined(__ppc__)
+       uint64_t tbl, tbu0, tbu1;
- cycles = sec * hz;
-       cycles += (ns * hz) / GIGA;
+       do {
+               __asm__ volatile("mftbu %0" : "=r"(tbu0));
+               __asm__ volatile("mftb  %0" : "=r"(tbl));
+               __asm__ volatile("mftbu %0" : "=r"(tbu1));
+       } while (tbu0 != tbu1);
- return cycles;
+       return (tbu0 << 32) | tbl;
+#endif
return for non ifdef case is missing. Or there has to be #else ODP_STATIC_ASSERT("add ifdef for new case")

Maxim.

  }

Reply via email to