1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 263637a48SMasahiro Yamada /* 363637a48SMasahiro Yamada * (C) Copyright 2003 463637a48SMasahiro Yamada * Texas Instruments <www.ti.com> 563637a48SMasahiro Yamada * 663637a48SMasahiro Yamada * (C) Copyright 2002 763637a48SMasahiro Yamada * Sysgo Real-Time Solutions, GmbH <www.elinos.com> 863637a48SMasahiro Yamada * Marius Groeger <mgroeger@sysgo.de> 963637a48SMasahiro Yamada * 1063637a48SMasahiro Yamada * (C) Copyright 2002 1163637a48SMasahiro Yamada * Sysgo Real-Time Solutions, GmbH <www.elinos.com> 1263637a48SMasahiro Yamada * Alex Zuepke <azu@sysgo.de> 1363637a48SMasahiro Yamada * 1463637a48SMasahiro Yamada * (C) Copyright 2002-2004 1563637a48SMasahiro Yamada * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> 1663637a48SMasahiro Yamada * 1763637a48SMasahiro Yamada * (C) Copyright 2004 1863637a48SMasahiro Yamada * Philippe Robin, ARM Ltd. <philippe.robin@arm.com> 1963637a48SMasahiro Yamada */ 2063637a48SMasahiro Yamada 2163637a48SMasahiro Yamada #include <common.h> 2263637a48SMasahiro Yamada 2363637a48SMasahiro Yamada #define TIMER_ENABLE (1 << 7) 2463637a48SMasahiro Yamada #define TIMER_MODE_MSK (1 << 6) 2563637a48SMasahiro Yamada #define TIMER_MODE_FR (0 << 6) 2663637a48SMasahiro Yamada #define TIMER_MODE_PD (1 << 6) 2763637a48SMasahiro Yamada 2863637a48SMasahiro Yamada #define TIMER_INT_EN (1 << 5) 2963637a48SMasahiro Yamada #define TIMER_PRS_MSK (3 << 2) 3063637a48SMasahiro Yamada #define TIMER_PRS_8S (1 << 3) 3163637a48SMasahiro Yamada #define TIMER_SIZE_MSK (1 << 2) 3263637a48SMasahiro Yamada #define TIMER_ONE_SHT (1 << 0) 3363637a48SMasahiro Yamada timer_init(void)3463637a48SMasahiro Yamadaint timer_init (void) 3563637a48SMasahiro Yamada { 3663637a48SMasahiro Yamada ulong tmr_ctrl_val; 3763637a48SMasahiro Yamada 3863637a48SMasahiro Yamada /* 1st disable the Timer */ 3963637a48SMasahiro Yamada tmr_ctrl_val = *(volatile ulong *)(CONFIG_SYS_TIMERBASE + 8); 4063637a48SMasahiro Yamada tmr_ctrl_val &= ~TIMER_ENABLE; 4163637a48SMasahiro Yamada *(volatile ulong *)(CONFIG_SYS_TIMERBASE + 8) = tmr_ctrl_val; 4263637a48SMasahiro Yamada 4363637a48SMasahiro Yamada /* 4463637a48SMasahiro Yamada * The Timer Control Register has one Undefined/Shouldn't Use Bit 4563637a48SMasahiro Yamada * So we should do read/modify/write Operation 4663637a48SMasahiro Yamada */ 4763637a48SMasahiro Yamada 4863637a48SMasahiro Yamada /* 4963637a48SMasahiro Yamada * Timer Mode : Free Running 5063637a48SMasahiro Yamada * Interrupt : Disabled 5163637a48SMasahiro Yamada * Prescale : 8 Stage, Clk/256 5263637a48SMasahiro Yamada * Tmr Siz : 16 Bit Counter 5363637a48SMasahiro Yamada * Tmr in Wrapping Mode 5463637a48SMasahiro Yamada */ 5563637a48SMasahiro Yamada tmr_ctrl_val = *(volatile ulong *)(CONFIG_SYS_TIMERBASE + 8); 5663637a48SMasahiro Yamada tmr_ctrl_val &= ~(TIMER_MODE_MSK | TIMER_INT_EN | TIMER_PRS_MSK | TIMER_SIZE_MSK | TIMER_ONE_SHT ); 5763637a48SMasahiro Yamada tmr_ctrl_val |= (TIMER_ENABLE | TIMER_PRS_8S); 5863637a48SMasahiro Yamada 5963637a48SMasahiro Yamada *(volatile ulong *)(CONFIG_SYS_TIMERBASE + 8) = tmr_ctrl_val; 6063637a48SMasahiro Yamada 6163637a48SMasahiro Yamada return 0; 6263637a48SMasahiro Yamada } 6363637a48SMasahiro Yamada 64