aboutsummaryrefslogtreecommitdiffstats
path: root/roms/u-boot/arch/arm/mach-mvebu/timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'roms/u-boot/arch/arm/mach-mvebu/timer.c')
-rw-r--r--roms/u-boot/arch/arm/mach-mvebu/timer.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/roms/u-boot/arch/arm/mach-mvebu/timer.c b/roms/u-boot/arch/arm/mach-mvebu/timer.c
new file mode 100644
index 000000000..557a37877
--- /dev/null
+++ b/roms/u-boot/arch/arm/mach-mvebu/timer.c
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) Marvell International Ltd. and its affiliates
+ * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * Copyright (C) 2015 Stefan Roese <sr@denx.de>
+ */
+
+#include <common.h>
+#include <init.h>
+#include <asm/io.h>
+#include <asm/arch/soc.h>
+#include <linux/bitops.h>
+
+#define TIMER_LOAD_VAL 0xffffffff
+
+static int init_done __section(".data") = 0;
+
+/*
+ * Timer initialization
+ */
+int timer_init(void)
+{
+ /* Only init the timer once */
+ if (init_done)
+ return 0;
+ init_done = 1;
+
+ /* load value into timer */
+ writel(TIMER_LOAD_VAL, MVEBU_TIMER_BASE + 0x10);
+ writel(TIMER_LOAD_VAL, MVEBU_TIMER_BASE + 0x14);
+
+#if defined(CONFIG_ARCH_MVEBU)
+ /* On Armada XP / 38x ..., the 25MHz clock source needs to be enabled */
+ setbits_le32(MVEBU_TIMER_BASE + 0x00, BIT(11));
+#endif
+ /* enable timer in auto reload mode */
+ setbits_le32(MVEBU_TIMER_BASE + 0x00, 0x3);
+
+ return 0;
+}