# 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 "Enable 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
