• Serge Semin's avatar
    watchdog: dw_wdt: Add pre-timeouts support · 46a19463
    Serge Semin authored
    DW Watchdog can rise an interrupt in case if IRQ request mode is enabled
    and timer reaches the zero value. In this case the IRQ lane is left
    pending until either the next watchdog kick event (watchdog restart) or
    until the WDT_EOI register is read or the device/system reset. This
    interface can be used to implement the pre-timeout functionality
    optionally provided by the Linux kernel watchdog devices.
    
    IRQ mode provides a two stages timeout interface. It means the IRQ is
    raised when the counter reaches zero, while the system reset occurs only
    after subsequent timeout if the timer restart is not performed. Due to
    this peculiarity the pre-timeout value is actually set to the achieved
    hardware timeout, while the real watchdog timeout is considered to be
    twice as much of it. This applies a significant limitation on the
    pre-timeout values, so current implementation supports either zero value,
    which disables the pre-timeout events, or non-zero values, which imply
    the pre-timeout to be at least half of the current watchdog timeout.
    
    Note that we ask the interrupt controller to detect the rising-edge
    pre-timeout interrupts to prevent the high-level-IRQs flood, since
    if the pre-timeout happens, the IRQ lane will be left pending until
    it's cleared by the timer restart.
    Signed-off-by: default avatarSerge Semin <Sergey.Semin@baikalelectronics.ru>
    Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru>
    Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Rob Herring <robh+dt@kernel.org>
    Cc: linux-mips@vger.kernel.org
    Cc: devicetree@vger.kernel.org
    Link: https://lore.kernel.org/r/20200530073557.22661-7-Sergey.Semin@baikalelectronics.ruSigned-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarWim Van Sebroeck <wim@linux-watchdog.org>
    46a19463
dw_wdt.c 17.1 KB