138041973SJuan Castillo /* 2*354305c3SAntonio Nino Diaz * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. 338041973SJuan Castillo * 482cb2c1aSdp-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 13*354305c3SAntonio Nino Diaz static inline void sp805_write_wdog_load(uintptr_t base, uint32_t value) 1438041973SJuan Castillo { 1538041973SJuan Castillo mmio_write_32(base + SP805_WDOG_LOAD_OFF, value); 1638041973SJuan Castillo } 1738041973SJuan Castillo 18*354305c3SAntonio Nino Diaz static inline void sp805_write_wdog_ctrl(uintptr_t base, uint32_t value) 1938041973SJuan Castillo { 2038041973SJuan Castillo mmio_write_32(base + SP805_WDOG_CTR_OFF, value); 2138041973SJuan Castillo } 2238041973SJuan Castillo 23*354305c3SAntonio Nino Diaz static inline void sp805_write_wdog_lock(uintptr_t base, uint32_t 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 31*354305c3SAntonio Nino Diaz void sp805_start(uintptr_t base, unsigned int 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 */ 36*354305c3SAntonio Nino Diaz sp805_write_wdog_lock(base, 0U); 3738041973SJuan Castillo } 3838041973SJuan Castillo 3938041973SJuan Castillo void sp805_stop(uintptr_t base) 4038041973SJuan Castillo { 4138041973SJuan Castillo sp805_write_wdog_lock(base, WDOG_UNLOCK_KEY); 42*354305c3SAntonio Nino Diaz sp805_write_wdog_ctrl(base, 0U); 4338041973SJuan Castillo } 4438041973SJuan Castillo 45*354305c3SAntonio Nino Diaz void sp805_refresh(uintptr_t base, unsigned int ticks) 4638041973SJuan Castillo { 4738041973SJuan Castillo sp805_write_wdog_lock(base, WDOG_UNLOCK_KEY); 4838041973SJuan Castillo sp805_write_wdog_load(base, ticks); 49*354305c3SAntonio Nino Diaz sp805_write_wdog_lock(base, 0U); 5038041973SJuan Castillo } 51