1 /* 2 * Copyright (C) 2018 Marvell International Ltd. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * https://spdx.org/licenses 6 */ 7 8 #include <arch_helpers.h> 9 #include <drivers/delay_timer.h> 10 11 #include <mvebu_def.h> 12 13 #define SYS_COUNTER_FREQ_IN_MHZ (COUNTER_FREQUENCY/1000000) 14 plat_get_timer_value(void)15static uint32_t plat_get_timer_value(void) 16 { 17 /* 18 * Generic delay timer implementation expects the timer to be a down 19 * counter. We apply bitwise NOT operator to the tick values returned 20 * by read_cntpct_el0() to simulate the down counter. 21 */ 22 return (uint32_t)(~read_cntpct_el0()); 23 } 24 25 static const timer_ops_t plat_timer_ops = { 26 .get_timer_value = plat_get_timer_value, 27 .clk_mult = 1, 28 .clk_div = SYS_COUNTER_FREQ_IN_MHZ 29 }; 30 plat_delay_timer_init(void)31void plat_delay_timer_init(void) 32 { 33 timer_init(&plat_timer_ops); 34 } 35