# Watchdog configuration options

# Copyright (c) 2015 Intel Corporation
# Copyright (c) 2017 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

menuconfig WATCHDOG
	bool "Watchdog Support"
	select HAS_DTS_WDT
	help
	  Include support for watchdogs.

if WATCHDOG

config WDT_DISABLE_AT_BOOT
	bool "Disable at boot"
	help
	  Disable watchdog at Zephyr system startup.

module = WDT
module-str = watchdog
source "subsys/logging/Kconfig.template.log_config"

config HAS_WDT_MULTISTAGE
	bool

config WDT_MULTISTAGE
	bool "Multistage timeouts"
	depends on HAS_WDT_MULTISTAGE
	help
	  Enable multistage operation of watchdog timeouts.

config WDT_COUNTER
	bool "Counter based watchdog"
	def_bool $(dt_nodelabel_enabled,wdt_counter)
	select COUNTER
	help
	  Watchdog emulated with counter device. If counter device supports using
	  zero latency interrupts (ZLI) then expiration callback can be called from
	  that context. This watchdog can be used along hardware watchdog to
	  overcome hardware  watchdog limitations, e.g. Nordic devices reset
	  unconditionally at fixed time after hitting watchdog interrupt, leaving
	  no time to print debug information. Watchdog has limitations since it
	  cannot interrupt same or higher priorities so it cannot fully replace
	  hardware based watchdog.

if WDT_COUNTER

config WDT_COUNTER_CH_COUNT
	int "Maximum number of supported channel"
	default 4
	range 1 255
	help
	  Note that actual channel count will be limited to number of channels
	  supported by the counter device which is used for watchdog.

endif # WDT_COUNTER

source "drivers/watchdog/Kconfig.stm32"

source "drivers/watchdog/Kconfig.cmsdk_apb"

source "drivers/watchdog/Kconfig.sam"

source "drivers/watchdog/Kconfig.esp32"

source "drivers/watchdog/Kconfig.sam0"

source "drivers/watchdog/Kconfig.nrfx"

source "drivers/watchdog/Kconfig.mcux"

source "drivers/watchdog/Kconfig.mcux_imx"

source "drivers/watchdog/Kconfig.xec"

source "drivers/watchdog/Kconfig.gecko"

source "drivers/watchdog/Kconfig.sifive"

source "drivers/watchdog/Kconfig.npcx"

source "drivers/watchdog/Kconfig.cc32xx"

source "drivers/watchdog/Kconfig.it8xxx2"
endif
