/* * Copyright (C) Marvell International Ltd. and its affiliates * Written-by: Prafulla Wadaskar * * Copyright (C) 2015 Stefan Roese * * SPDX-License-Identifier: GPL-2.0+ */ #include #include #include DECLARE_GLOBAL_DATA_PTR; #define TIMER_LOAD_VAL 0xffffffff static int init_done __attribute__((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; }