1/* 2 * Copyright 2014, General Dynamics C4 Systems 3 * 4 * SPDX-License-Identifier: GPL-2.0-only 5 */ 6 7/* @AUTHOR(akroh@ertos.nicta.com.au) */ 8 9#include <plat/machine/hardware.h> 10 11#define DGT_TIMER_PPTR (TIMER_PPTR + 0x024) 12 13struct timer { 14 uint32_t mtch; /* +0x024 */ 15 uint32_t cnt; /* +0x028 */ 16 uint32_t en; /* +0x02C */ 17 uint32_t clr; /* +0x030 */ 18 uint32_t clk_ctl; /* +0x034 */ 19}; 20typedef volatile struct timer timer_t; 21timer_t *dgt_tmr = (timer_t *) DGT_TIMER_PPTR; 22 23#define DGTTMR_EN_CLR_ON_MTCH_EN (1U << 1) 24#define DGTTMR_EN_EN (1U << 0) 25#define DGTTMR_CLK_CTRL(x) ((x) << 0) 26#define DGTTMR_CLK_CTRL_DIV1 DGTTMR_CLK_CTRL(0x0) 27#define DGTTMR_CLK_CTRL_DIV2 DGTTMR_CLK_CTRL(0x1) 28#define DGTTMR_CLK_CTRL_DIV3 DGTTMR_CLK_CTRL(0x2) 29#define DGTTMR_CLK_CTRL_DIV4 DGTTMR_CLK_CTRL(0x3) 30#define DGTTMR_CLK_CTRL_MASK DGTTMR_CLK_CTRL(0x3) 31 32#define PRESCALER DGTTMR_CLK_CTRL_DIV1 33#define PRESCALE_VAL 1 34 35#define TIMER_MATCH_VAL (TIMER_RELOAD / PRESCALE_VAL) 36 37BOOT_CODE void initTimer(void) 38{ 39 /* Stop the timer */ 40 dgt_tmr->en = 0; 41 dgt_tmr->clr = 0xC0FFEE; 42 /* Configure the timer */ 43 dgt_tmr->mtch = TIMER_MATCH_VAL; 44 /* Start the timer */ 45 dgt_tmr->en = DGTTMR_EN_CLR_ON_MTCH_EN | DGTTMR_EN_EN; 46} 47