# SPDX-License-Identifier: GPL-2.0
config HAVE_ACPI_APEI
	bool

config HAVE_ACPI_APEI_NMI
	bool

config ACPI_APEI
	bool "ACPI Platform Error Interface (APEI)"
	select MISC_FILESYSTEMS
	select PSTORE
	select UEFI_CPER
	depends on HAVE_ACPI_APEI
	help
	  APEI allows to report errors (for example from the chipset)
	  to the operating system. This improves NMI handling
	  especially. In addition it supports error serialization and
	  error injection.

config ACPI_APEI_GHES
	bool "APEI Generic Hardware Error Source"
	depends on ACPI_APEI
	select ACPI_HED
	select IRQ_WORK
	select GENERIC_ALLOCATOR
	help
	  Generic Hardware Error Source provides a way to report
	  platform hardware errors (such as that from chipset). It
	  works in so called "Firmware First" mode, that is, hardware
	  errors are reported to firmware firstly, then reported to
	  Linux by firmware. This way, some non-standard hardware
	  error registers or non-standard hardware link can be checked
	  by firmware to produce more valuable hardware error
	  information for Linux.

config ACPI_APEI_PCIEAER
	bool "APEI PCIe AER logging/recovering support"
	depends on ACPI_APEI && PCIEAER
	help
	  PCIe AER errors may be reported via APEI firmware first mode.
	  Turn on this option to enable the corresponding support.

config ACPI_APEI_SEA
	bool "APEI Synchronous External Abort logging/recovering support"
	depends on ARM64 && ACPI_APEI_GHES
	default y
	help
	  This option should be enabled if the system supports
	  firmware first handling of SEA (Synchronous External Abort).
	  SEA happens with certain faults of data abort or instruction
	  abort synchronous exceptions on ARMv8 systems. If a system
	  supports firmware first handling of SEA, the platform analyzes
	  and handles hardware error notifications from SEA, and it may then
	  form a HW error record for the OS to parse and handle. This
	  option allows the OS to look for such hardware error record, and
	  take appropriate action.

config ACPI_APEI_MEMORY_FAILURE
	bool "APEI memory error recovering support"
	depends on ACPI_APEI && MEMORY_FAILURE
	help
	  Memory errors may be reported via APEI firmware first mode.
	  Turn on this option to enable the memory recovering support.

config ACPI_APEI_EINJ
	tristate "APEI Error INJection (EINJ)"
	depends on ACPI_APEI && DEBUG_FS
	help
	  EINJ provides a hardware error injection mechanism, it is
	  mainly used for debugging and testing the other parts of
	  APEI and some other RAS features.

config ACPI_APEI_ERST_DEBUG
	tristate "APEI Error Record Serialization Table (ERST) Debug Support"
	depends on ACPI_APEI
	help
	  ERST is a way provided by APEI to save and retrieve hardware
	  error information to and from a persistent store. Enable this
	  if you want to debugging and testing the ERST kernel support
	  and firmware implementation.
