| /* |
| * Copyright (c) 2017 Synopsys, Inc. |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @file |
| * @brief Time Stamp API for ARCv2 |
| * |
| * Provide 64-bit time stamp API |
| */ |
| |
| #include <kernel.h> |
| #include <toolchain.h> |
| #include <kernel_structs.h> |
| |
| extern volatile u64_t _sys_clock_tick_count; |
| extern int sys_clock_hw_cycles_per_tick; |
| |
| /* |
| * @brief Read 64-bit timestamp value |
| * |
| * This function returns a 64-bit bit time stamp value that is clocked |
| * at the same frequency as the CPU. |
| * |
| * @return 64-bit time stamp value |
| */ |
| u64_t _tsc_read(void) |
| { |
| unsigned int key; |
| u64_t t; |
| u32_t count; |
| |
| key = irq_lock(); |
| t = (u64_t)_sys_clock_tick_count; |
| count = _arc_v2_aux_reg_read(_ARC_V2_TMR0_COUNT); |
| irq_unlock(key); |
| t *= (u64_t)sys_clock_hw_cycles_per_tick; |
| t += (u64_t)count; |
| return t; |
| } |