1 /*
2  * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <platform_def.h>
8 
9 #include <arch_helpers.h>
10 #include <drivers/delay_timer.h>
11 
plat_get_timer_value(void)12 static uint32_t plat_get_timer_value(void)
13 {
14 	/*
15 	 * Generic delay timer implementation expects the timer to be a down
16 	 * counter. We apply bitwise NOT operator to the tick values returned
17 	 * by read_cntpct_el0() to simulate the down counter.
18 	 */
19 	return (uint32_t)(~read_cntpct_el0());
20 }
21 
22 static const timer_ops_t plat_timer_ops = {
23 	.get_timer_value	= plat_get_timer_value,
24 	.clk_mult		= 1,
25 	.clk_div		= SYS_COUNTER_FREQ_IN_MHZ,
26 };
27 
plat_delay_timer_init(void)28 void plat_delay_timer_init(void)
29 {
30 	timer_init(&plat_timer_ops);
31 }
32