blob: 965b6534884c63e662c90d444a4ac91b40ec192b [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
developer550bf5e2016-07-11 16:05:23 +08007#include <platform_def.h>
8
Antonio Nino Diaze0f90632018-12-14 00:18:21 +00009#include <arch_helpers.h>
10#include <drivers/delay_timer.h>
11
developer550bf5e2016-07-11 16:05:23 +080012static 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
22static 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
28void plat_delay_timer_init(void)
29{
30 timer_init(&plat_timer_ops);
31}