1 /* Copyright (c) 2022 Intel Corporation 2 * SPDX-License-Identifier: Apache-2.0 3 */ 4 #include <zephyr/kernel.h> 5 arch_timing_init(void)6void arch_timing_init(void) 7 { 8 } 9 arch_timing_start(void)10void arch_timing_start(void) 11 { 12 } 13 arch_timing_stop(void)14void arch_timing_stop(void) 15 { 16 } 17 arch_timing_freq_get(void)18uint64_t arch_timing_freq_get(void) 19 { 20 return CONFIG_XTENSA_CCOUNT_HZ; 21 } 22 arch_timing_counter_get(void)23timing_t arch_timing_counter_get(void) 24 { 25 uint32_t ccount; 26 27 __asm__ volatile ("rsr %0, CCOUNT" : "=r"(ccount)); 28 29 return ccount; 30 } 31 arch_timing_cycles_get(volatile timing_t * const start,volatile timing_t * const end)32uint64_t arch_timing_cycles_get(volatile timing_t *const start, 33 volatile timing_t *const end) 34 { 35 int64_t dt = (int64_t) (*end - *start); 36 37 if (dt < 0) { 38 dt += 0x100000000ULL; 39 } 40 41 return (uint64_t) dt; 42 } 43 arch_timing_cycles_to_ns(uint64_t cycles)44uint64_t arch_timing_cycles_to_ns(uint64_t cycles) 45 { 46 return cycles * 1000000000ULL / CONFIG_XTENSA_CCOUNT_HZ; 47 } 48 arch_timing_cycles_to_ns_avg(uint64_t cycles,uint32_t count)49uint64_t arch_timing_cycles_to_ns_avg(uint64_t cycles, uint32_t count) 50 { 51 /* Why is this an arch API? This is just math! */ 52 return arch_timing_cycles_to_ns(cycles) / (uint64_t) count; 53 } 54 arch_timing_freq_get_mhz(void)55uint32_t arch_timing_freq_get_mhz(void) 56 { 57 return arch_timing_freq_get() / 1000000ULL; 58 } 59