1*45a6d231SPaolo Pisati /* 2*45a6d231SPaolo Pisati * Watchdog driver for Broadcom BCM2835 3*45a6d231SPaolo Pisati * 4*45a6d231SPaolo Pisati * Copyright (C) 2017 Paolo Pisati <p.pisati@gmail.com> 5*45a6d231SPaolo Pisati * 6*45a6d231SPaolo Pisati * SPDX-License-Identifier: GPL-2.0 7*45a6d231SPaolo Pisati */ 8*45a6d231SPaolo Pisati 9*45a6d231SPaolo Pisati #include <common.h> 10*45a6d231SPaolo Pisati #include <efi_loader.h> 11*45a6d231SPaolo Pisati #include <asm/io.h> 12*45a6d231SPaolo Pisati #include <asm/arch/wdog.h> 13*45a6d231SPaolo Pisati 14*45a6d231SPaolo Pisati #define SECS_TO_WDOG_TICKS(x) ((x) << 16) 15*45a6d231SPaolo Pisati #define MAX_TIMEOUT 0xf /* ~15s */ 16*45a6d231SPaolo Pisati 17*45a6d231SPaolo Pisati static __efi_runtime_data bool enabled = true; 18*45a6d231SPaolo Pisati 19*45a6d231SPaolo Pisati extern void reset_cpu(ulong ticks); 20*45a6d231SPaolo Pisati hw_watchdog_reset(void)21*45a6d231SPaolo Pisativoid hw_watchdog_reset(void) 22*45a6d231SPaolo Pisati { 23*45a6d231SPaolo Pisati if (enabled) 24*45a6d231SPaolo Pisati reset_cpu(SECS_TO_WDOG_TICKS(MAX_TIMEOUT)); 25*45a6d231SPaolo Pisati } 26*45a6d231SPaolo Pisati hw_watchdog_init(void)27*45a6d231SPaolo Pisativoid hw_watchdog_init(void) 28*45a6d231SPaolo Pisati { 29*45a6d231SPaolo Pisati hw_watchdog_reset(); 30*45a6d231SPaolo Pisati } 31*45a6d231SPaolo Pisati hw_watchdog_disable(void)32*45a6d231SPaolo Pisativoid __efi_runtime hw_watchdog_disable(void) 33*45a6d231SPaolo Pisati { 34*45a6d231SPaolo Pisati enabled = false; 35*45a6d231SPaolo Pisati } 36