#
# System reset devices
#

menu "System reset device drivers"

config SYSRESET
	bool "Enable support for system reset drivers"
	depends on DM
	help
	  Enable system reset drivers which can be used to reset the CPU or
	  board. Each driver can provide a reset method which will be called
	  to effect a reset. The uclass will try all available drivers when
	  reset_walk() is called.

config SPL_SYSRESET
	bool "Enable support for system reset drivers in SPL mode"
	depends on SYSRESET && SPL_DM
	help
	  Enable system reset drivers which can be used to reset the CPU or
	  board. Each driver can provide a reset method which will be called
	  to effect a reset. The uclass will try all available drivers when
	  reset_walk() is called.

config TPL_SYSRESET
	bool "Enable support for system reset drivers in TPL mode"
	depends on SYSRESET && TPL_DM
	help
	  Enable system reset drivers which can be used to reset the CPU or
	  board. Each driver can provide a reset method which will be called
	  to effect a reset. The uclass will try all available drivers when
	  reset_walk() is called.

config VPL_SYSRESET
	bool "Enable support for system reset drivers in VPL mode"
	depends on SYSRESET && VPL_DM
	default y if TPL_SYSRESET
	help
	  Enable system reset drivers which can be used to reset the CPU or
	  board. Each driver can provide a reset method which will be called
	  to effect a reset. The uclass will try all available drivers when
	  reset_walk() is called.

if SYSRESET

config SYSRESET_CMD_RESET
	bool "sysreset implementation of the reset command"
	default y
	help
	  Enable sysreset implementation of the reset command.

if CMD_POWEROFF

config SYSRESET_CMD_POWEROFF
	bool "sysreset implementation of the poweroff command"
	help
	  This should be selected by the appropriate PMIC driver if
	  the poweroff command is enabled.

endif

config POWEROFF_GPIO
	bool "Enable support for GPIO poweroff driver"
	depends on DM_GPIO
	help
	  Support for system poweroff using a GPIO pin. This can be used
	  for systems having a single GPIO to trigger a system poweroff.

config SYSRESET_GPIO
	bool "Enable support for GPIO reset driver"
	depends on DM_GPIO
	help
	  Reset support via GPIO pin connected reset logic. This is used for
	  example on Microblaze where reset logic can be controlled via GPIO
	  pin which triggers cpu reset.

config SYSRESET_MICROBLAZE
	bool "Enable support for Microblaze soft reset"
	depends on MICROBLAZE
	help
	  This is soft reset on Microblaze which does jump to 0x0 address.

config SYSRESET_OCTEON
	bool "Enable support for Marvell Octeon SoC family"
	depends on ARCH_OCTEON
	help
	  This enables the system reset driver support for Marvell Octeon
	  SoCs.

config SYSRESET_AT91
	bool "Enable support for Microchip/Atmel reset driver"
	depends on ARCH_AT91
	select SYSRESET_SPL_AT91 if SPL && SPL_SYSRESET
	help
	  This enables the system reset driver support for Microchip/Atmel
	  SoCs.

config SYSRESET_SPL_AT91
	bool "Enable support for Microchip/Atmel reset driver in SPL"
	depends on ARCH_AT91
	help
	  This enables the system reset driver support for Microchip/Atmel
	  SoCs in SPL.

config SYSRESET_PSCI
	bool "Enable support for PSCI System Reset"
	depends on ARM_PSCI_FW
	select SPL_ARM_PSCI_FW if SPL
	help
	  Enable PSCI SYSTEM_RESET function call.  To use this, PSCI firmware
	  must be running on your system.

config SYSRESET_SBI
	bool "Enable support for SBI System Reset"
	depends on RISCV_SMODE && SBI_V02
	default y
	select SYSRESET_CMD_POWEROFF if CMD_POWEROFF
	help
	  Enable system reset and poweroff via the SBI system reset extension.
	  The extension was introduced in version 0.3 of the SBI specification.

	  If the SBI implementation provides the extension, is board specific.
	  The RISC-V platform specification mandates the extension for rich
	  operating system platforms.

config SYSRESET_SOCFPGA
	bool "Enable support for Intel SOCFPGA family"
	depends on ARCH_SOCFPGA && (TARGET_SOCFPGA_GEN5 || TARGET_SOCFPGA_ARRIA10)
	help
	  This enables the system reset driver support for Intel SOCFPGA SoCs
	  (Cyclone 5, Arria 5 and Arria 10).

config SYSRESET_SOCFPGA_SOC64
	bool "Enable support for Intel SOCFPGA SoC64 family (Stratix10/Agilex)"
	depends on ARCH_SOCFPGA && TARGET_SOCFPGA_SOC64
	help
	  This enables the system reset driver support for Intel SOCFPGA
	  SoC64 SoCs.

config SYSRESET_TI_SCI
	bool "TI System Control Interface (TI SCI) system reset driver"
	depends on TI_SCI_PROTOCOL
	help
	  This enables the system reset driver support over TI System Control
	  Interface available on some new TI's SoCs.

config SYSRESET_SYSCON
	bool "Enable support for mfd syscon reboot driver"
	select REGMAP
	select SYSCON
	help
	  Reboot support for generic SYSCON mapped register reset.

config SYSRESET_WATCHDOG
	bool "Enable support for watchdog reboot driver"
	select WDT
	help
	  Reboot support for generic watchdog reset.

config SYSRESET_WATCHDOG_AUTO
	bool "Automatically register first watchdog with sysreset"
	depends on SYSRESET_WATCHDOG
	help
	  If enabled, the first watchdog (as selected by the watchdog uclass)
	  will automatically be registered with the watchdog reboot driver.

config SYSRESET_RESETCTL
	bool "Enable support for reset controller reboot driver"
	select DM_RESET
	help
	  Reboot support using generic reset controller.

config SYSRESET_X86
	bool "Enable support for x86 processor reboot driver"
	depends on X86
	help
	  Reboot support for generic x86 processor reset.

config SYSRESET_SPL_X86
	bool "Enable support for x86 processor reboot driver in SPL"
	depends on X86
	help
	  Reboot support for generic x86 processor reset in SPL.

config SYSRESET_TPL_X86
	bool "Enable support for x86 processor reboot driver in TPL"
	depends on X86
	help
	  Reboot support for generic x86 processor reset in TPL.

config SYSRESET_MPC83XX
	bool "Enable support MPC83xx SoC family reboot driver"
	help
	  Reboot support for NXP MPC83xx SoCs.

endif

endmenu
