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