138041973SJuan Castillo /* 2354305c3SAntonio 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 <stdint.h> 838041973SJuan Castillo 9*09d40e0eSAntonio Nino Diaz #include <drivers/arm/sp805.h> 10*09d40e0eSAntonio Nino Diaz #include <lib/mmio.h> 11*09d40e0eSAntonio Nino Diaz 1238041973SJuan Castillo /* Inline register access functions */ 1338041973SJuan Castillo 14354305c3SAntonio Nino Diaz static inline void sp805_write_wdog_load(uintptr_t base, uint32_t value) 1538041973SJuan Castillo { 1638041973SJuan Castillo mmio_write_32(base + SP805_WDOG_LOAD_OFF, value); 1738041973SJuan Castillo } 1838041973SJuan Castillo 19354305c3SAntonio Nino Diaz static inline void sp805_write_wdog_ctrl(uintptr_t base, uint32_t value) 2038041973SJuan Castillo { 2138041973SJuan Castillo mmio_write_32(base + SP805_WDOG_CTR_OFF, value); 2238041973SJuan Castillo } 2338041973SJuan Castillo 24354305c3SAntonio Nino Diaz static inline void sp805_write_wdog_lock(uintptr_t base, uint32_t value) 2538041973SJuan Castillo { 2638041973SJuan Castillo mmio_write_32(base + SP805_WDOG_LOCK_OFF, value); 2738041973SJuan Castillo } 2838041973SJuan Castillo 2938041973SJuan Castillo 3038041973SJuan Castillo /* Public API implementation */ 3138041973SJuan Castillo 32354305c3SAntonio Nino Diaz void sp805_start(uintptr_t base, unsigned int ticks) 3338041973SJuan Castillo { 3438041973SJuan Castillo sp805_write_wdog_load(base, ticks); 3538041973SJuan Castillo sp805_write_wdog_ctrl(base, SP805_CTR_RESEN | SP805_CTR_INTEN); 3638041973SJuan Castillo /* Lock registers access */ 37354305c3SAntonio Nino Diaz sp805_write_wdog_lock(base, 0U); 3838041973SJuan Castillo } 3938041973SJuan Castillo 4038041973SJuan Castillo void sp805_stop(uintptr_t base) 4138041973SJuan Castillo { 4238041973SJuan Castillo sp805_write_wdog_lock(base, WDOG_UNLOCK_KEY); 43354305c3SAntonio Nino Diaz sp805_write_wdog_ctrl(base, 0U); 4438041973SJuan Castillo } 4538041973SJuan Castillo 46354305c3SAntonio Nino Diaz void sp805_refresh(uintptr_t base, unsigned int ticks) 4738041973SJuan Castillo { 4838041973SJuan Castillo sp805_write_wdog_lock(base, WDOG_UNLOCK_KEY); 4938041973SJuan Castillo sp805_write_wdog_load(base, ticks); 50354305c3SAntonio Nino Diaz sp805_write_wdog_lock(base, 0U); 5138041973SJuan Castillo } 52