Merge pull request #1498 from glneo/cache-early-fixes
[project/bcm63xx/atf.git] / drivers / arm / sp805 / sp805.c
1 /*
2 * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include <mmio.h>
8 #include <sp805.h>
9 #include <stdint.h>
10
11 /* Inline register access functions */
12
13 static inline void sp805_write_wdog_load(uintptr_t base, uint32_t value)
14 {
15 mmio_write_32(base + SP805_WDOG_LOAD_OFF, value);
16 }
17
18 static inline void sp805_write_wdog_ctrl(uintptr_t base, uint32_t value)
19 {
20 mmio_write_32(base + SP805_WDOG_CTR_OFF, value);
21 }
22
23 static inline void sp805_write_wdog_lock(uintptr_t base, uint32_t value)
24 {
25 mmio_write_32(base + SP805_WDOG_LOCK_OFF, value);
26 }
27
28
29 /* Public API implementation */
30
31 void sp805_start(uintptr_t base, unsigned int ticks)
32 {
33 sp805_write_wdog_load(base, ticks);
34 sp805_write_wdog_ctrl(base, SP805_CTR_RESEN | SP805_CTR_INTEN);
35 /* Lock registers access */
36 sp805_write_wdog_lock(base, 0U);
37 }
38
39 void sp805_stop(uintptr_t base)
40 {
41 sp805_write_wdog_lock(base, WDOG_UNLOCK_KEY);
42 sp805_write_wdog_ctrl(base, 0U);
43 }
44
45 void sp805_refresh(uintptr_t base, unsigned int ticks)
46 {
47 sp805_write_wdog_lock(base, WDOG_UNLOCK_KEY);
48 sp805_write_wdog_load(base, ticks);
49 sp805_write_wdog_lock(base, 0U);
50 }