blob: 253975264b79bdba471189a9123c32d4a8918780 [file] [log] [blame]
Konstantin Porotchkinf69ec582018-06-07 18:31:14 +03001/*
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>
Antonio Nino Diaze0f90632018-12-14 00:18:21 +00009#include <drivers/delay_timer.h>
10
Konstantin Porotchkinf69ec582018-06-07 18:31:14 +030011#include <mvebu_def.h>
12
13#define SYS_COUNTER_FREQ_IN_MHZ (COUNTER_FREQUENCY/1000000)
14
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
25static 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
31void plat_delay_timer_init(void)
32{
33 timer_init(&plat_timer_ops);
34}