## SPDX-License-Identifier: GPL-2.0-only

config STM
	bool "Enable STM"
	default n
	depends on ENABLE_VMX
	depends on SMM_TSEG

	help
	  Enabling the STM will load a simple hypervisor into SMM that will
	  restrict the actions of the SMI handler, which is the part of BIOS
	  that functions in system management mode (SMM).  The kernel can
	  configure the STM to prevent the SMI handler from accessing platform
	  resources.
	  The STM closes a vulnerability in Intel TXT (D-RTM)
	  The SMI handler provides a list of platform resources that it
	  requires access to the STM during STM startup, which the kernel
	  cannot override.
	  An additional capability, called STM-PE, provides a protected
	  execution capability that allows modules to be executed without
	  observation and interference. Examples of usage include kernel
	  introspection and virtualized trusted platform module (vTPM).
	  Requirement: SMM must be enabled and there must be sufficient room
	  within the TSEG to fit the MSEG.

if STM

menu "SMI Transfer Monitor (STM)"

config MSEG_SIZE
	hex "mseg size"
	default 0x100000
	help
	  The MSEG_SIZE of 0x100000 assumes that:
	      IED_REGION_SIZE   = 0x400000
	      SMM_RESERVED_SIZE = 0x200000
	      SMM_TSEG_SIZE     = 0x800000

	  To use STM/PE, a larger MSEG_SIZE is necessary.  This can be
	  done by either increasing SMM_TSEG_SIZE or reducing the
	  IED_REGION_SIZE and/or SMM_RESERVED_SIZE or some combination
	  of the three.
	  NOTE: The authors experience is that these configuration
	  parameters have to be changed at the soc Konfig for them to
	  be applied.
	  Minimum sizes:
	        STM only - 0x100000 - Supports up to 38 processor threads
	                 - 0x200000 - Supports up to 102 processor threads
	        STM/PE   - 0x300000+ depending on the amount of memory needed
	                             for the protected execution virtual
	                             machine (VM/PE)

config STM_STMPE_ENABLED
	bool "STM/PE Enabled"
	default n
	help
	  STM/PE provides for additional virtual machines in SMRAM
	  that provides a protected execution environment for
	  applications such as introspection, which need to be
	  protected from malicious code.  More information can be
	  found on the stmpe branch of
	  https://review.coreboot.org/STM


config BIOS_RESOURCE_LIST_SIZE
	hex "bios resource list size"
	default 0x1000
	help
	  The BIOS resource list defines the resources that the
	  SMI handler needs.  This list is created during the
	  coreboot bootup.  Unless there has been a lot of elements
	  added to this list, this value should not change.

config STM_BINARY_FILE
	string "STM binary file"
	default "3rdparty/stm/Stm/build/StmPkg/Core/stm.bin"
	help
	  Location of the STM binary file.  The default location is
	  where the file will be located when coreboot builds
	  the STM.

config STM_HEAPSIZE
	hex "stm heapsize"
	default 0x46000
	help
	  The STM_HEAPSIZE defines the heap space that is available
	  to the STM.  The default size assumes a MSEG_SIZE of 0x100000.
	  For STM/PE this size should be a minimum of 0x246000.

config STM_TTYS0_BASE
	hex "stm uart"
	default TTYS0_BASE if TTYS0_BASE
	default 0x000
	help
	  Defines the serial port for STM console output.  0x000 indicates
	  no serial port.

config STM_CBMEM_CONSOLE
	bool "STM cbmem console"
	default n
	depends on CONSOLE_CBMEM
	help
	  Places the STM console output into the cbmem.

choice
	prompt "Select STM console output"

config STM_CONSOLE_DEBUG
	bool "Debug output"
	depends on STM_CBMEM_CONSOLE || STM_TTYS0_BASE
	help
	  "Produces all STM console output"

config STM_CONSOLE_RELEASE
	bool "Deactivate console output"
	help
	  "No console output is produced"
endchoice

endmenu #STM

endif