#
# 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 SYSRESET_CV1800B
	bool "Enable support for Sophgo cv1800b System Reset"
	help
	  Enable system reset support for Sophgo cv1800b SoC.

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_MAX77663
	bool "Enable support for MAX77663 PMIC System Reset"
	depends on DM_PMIC_MAX77663
	select SYSRESET_CMD_POWEROFF if CMD_POWEROFF
	help
	  Enable system power management functions found in MAX77663 PMIC.

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_PALMAS
	bool "Enable support for PALMAS System Reset"
	depends on PMIC_PALMAS
	select SYSRESET_CMD_POWEROFF if CMD_POWEROFF
	help
	  Enable system power management functions found in PLAMAS PMIC family.

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_TEGRA
	bool "Tegra PMC system reset driver"
	depends on ARCH_TEGRA
	help
	  This enables the system reset ability of PMC used in Tegra 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_TPS65910
	bool "Enable support for TPS65910/TPS65911 PMIC System Reset"
	depends on DM_PMIC_TPS65910
	select SYSRESET_CMD_POWEROFF if CMD_POWEROFF
	help
	  Enable system power management functions found in TPS65910/TPS65911
	  PMICs.

config SYSRESET_TPS80031
	bool "Enable support for TPS80031/TPS80032 PMIC System Reset"
	depends on DM_PMIC_TPS80031
	select SYSRESET_CMD_POWEROFF if CMD_POWEROFF
	help
	  Enable system power management functions found in TPS80031/TPS80032
	  PMICs.

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.

config SYSRESET_RAA215300
	bool "Support sysreset via Renesas RAA215300 PMIC"
	depends on PMIC_RAA215300
	help
	  Add support for the system reboot via the Renesas RAA215300 PMIC.

endif

endmenu
