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