Home | History | Annotate | Download | only in sp805
      1 /*
      2  * Copyright (c) 2015, 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, unsigned long 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, unsigned long 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, unsigned long 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 long 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, 0);
     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, 0);
     43 }
     44 
     45 void sp805_refresh(uintptr_t base, unsigned long ticks)
     46 {
     47 	sp805_write_wdog_lock(base, WDOG_UNLOCK_KEY);
     48 	sp805_write_wdog_load(base, ticks);
     49 	sp805_write_wdog_lock(base, 0);
     50 }
     51