138041973SJuan Castillo /* 238041973SJuan Castillo * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. 338041973SJuan Castillo * 4*82cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 538041973SJuan Castillo */ 638041973SJuan Castillo 738041973SJuan Castillo #include <mmio.h> 838041973SJuan Castillo #include <sp805.h> 938041973SJuan Castillo #include <stdint.h> 1038041973SJuan Castillo 1138041973SJuan Castillo /* Inline register access functions */ 1238041973SJuan Castillo 1338041973SJuan Castillo static inline void sp805_write_wdog_load(uintptr_t base, unsigned long value) 1438041973SJuan Castillo { 1538041973SJuan Castillo mmio_write_32(base + SP805_WDOG_LOAD_OFF, value); 1638041973SJuan Castillo } 1738041973SJuan Castillo 1838041973SJuan Castillo static inline void sp805_write_wdog_ctrl(uintptr_t base, unsigned long value) 1938041973SJuan Castillo { 2038041973SJuan Castillo mmio_write_32(base + SP805_WDOG_CTR_OFF, value); 2138041973SJuan Castillo } 2238041973SJuan Castillo 2338041973SJuan Castillo static inline void sp805_write_wdog_lock(uintptr_t base, unsigned long value) 2438041973SJuan Castillo { 2538041973SJuan Castillo mmio_write_32(base + SP805_WDOG_LOCK_OFF, value); 2638041973SJuan Castillo } 2738041973SJuan Castillo 2838041973SJuan Castillo 2938041973SJuan Castillo /* Public API implementation */ 3038041973SJuan Castillo 3138041973SJuan Castillo void sp805_start(uintptr_t base, unsigned long ticks) 3238041973SJuan Castillo { 3338041973SJuan Castillo sp805_write_wdog_load(base, ticks); 3438041973SJuan Castillo sp805_write_wdog_ctrl(base, SP805_CTR_RESEN | SP805_CTR_INTEN); 3538041973SJuan Castillo /* Lock registers access */ 3638041973SJuan Castillo sp805_write_wdog_lock(base, 0); 3738041973SJuan Castillo } 3838041973SJuan Castillo 3938041973SJuan Castillo void sp805_stop(uintptr_t base) 4038041973SJuan Castillo { 4138041973SJuan Castillo sp805_write_wdog_lock(base, WDOG_UNLOCK_KEY); 4238041973SJuan Castillo sp805_write_wdog_ctrl(base, 0); 4338041973SJuan Castillo } 4438041973SJuan Castillo 4538041973SJuan Castillo void sp805_refresh(uintptr_t base, unsigned long ticks) 4638041973SJuan Castillo { 4738041973SJuan Castillo sp805_write_wdog_lock(base, WDOG_UNLOCK_KEY); 4838041973SJuan Castillo sp805_write_wdog_load(base, ticks); 4938041973SJuan Castillo sp805_write_wdog_lock(base, 0); 5038041973SJuan Castillo } 51