1 /*
2  * Copyright (c) 2020 Intel Corporation.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include <zephyr/kernel.h>
8 #include <zephyr/sys_clock.h>
9 #include <zephyr/timing/timing.h>
10 
arch_timing_init(void)11 void arch_timing_init(void)
12 {
13 }
14 
arch_timing_start(void)15 void arch_timing_start(void)
16 {
17 }
18 
arch_timing_stop(void)19 void arch_timing_stop(void)
20 {
21 }
22 
arch_timing_counter_get(void)23 timing_t arch_timing_counter_get(void)
24 {
25 #if CONFIG_TIMER_HAS_64BIT_CYCLE_COUNTER
26 	return k_cycle_get_64();
27 #else
28 	return k_cycle_get_32();
29 #endif
30 }
31 
arch_timing_cycles_get(volatile timing_t * const start,volatile timing_t * const end)32 uint64_t arch_timing_cycles_get(volatile timing_t *const start,
33 				volatile timing_t *const end)
34 {
35 #if CONFIG_TIMER_HAS_64BIT_CYCLE_COUNTER
36 	return (*end - *start);
37 #else
38 	return ((uint32_t)*end - (uint32_t)*start);
39 #endif
40 }
41 
42 
arch_timing_freq_get(void)43 uint64_t arch_timing_freq_get(void)
44 {
45 	return sys_clock_hw_cycles_per_sec();
46 }
47 
arch_timing_cycles_to_ns(uint64_t cycles)48 uint64_t arch_timing_cycles_to_ns(uint64_t cycles)
49 {
50 	return k_cyc_to_ns_floor64(cycles);
51 }
52 
arch_timing_cycles_to_ns_avg(uint64_t cycles,uint32_t count)53 uint64_t arch_timing_cycles_to_ns_avg(uint64_t cycles, uint32_t count)
54 {
55 	return arch_timing_cycles_to_ns(cycles) / count;
56 }
57 
arch_timing_freq_get_mhz(void)58 uint32_t arch_timing_freq_get_mhz(void)
59 {
60 	return (uint32_t)(arch_timing_freq_get() / 1000000U);
61 }
62