# SPDX-License-Identifier: GPL-2.0-only
#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.rst.
#

menu "Qualcomm firmware drivers"

config QCOM_SCM
	select QCOM_TZMEM
	tristate

config QCOM_TZMEM
	tristate
	select GENERIC_ALLOCATOR

choice
	prompt "TrustZone interface memory allocator mode"
	depends on QCOM_TZMEM
	default QCOM_TZMEM_MODE_GENERIC
	help
	  Selects the mode of the memory allocator providing memory buffers of
	  suitable format for sharing with the TrustZone. If in doubt, select
	  'Generic'.

config QCOM_TZMEM_MODE_GENERIC
	bool "Generic"
	help
	  Use the generic allocator mode. The memory is page-aligned, non-cachable
	  and physically contiguous.

config QCOM_TZMEM_MODE_SHMBRIDGE
	bool "SHM Bridge"
	help
	  Use Qualcomm Shared Memory Bridge. The memory has the same alignment as
	  in the 'Generic' allocator but is also explicitly marked as an SHM Bridge
	  buffer.

	  With this selected, all buffers passed to the TrustZone must be allocated
	  using the TZMem allocator or else the TrustZone will refuse to use them.

endchoice

config QCOM_QSEECOM
	bool "Qualcomm QSEECOM interface driver"
	depends on QCOM_SCM=y
	select AUXILIARY_BUS
	help
	  Various Qualcomm SoCs have a Secure Execution Environment (SEE) running
	  in the Trust Zone. This module provides an interface to that via the
	  QSEECOM mechanism, using SCM calls.

	  The QSEECOM interface allows, among other things, access to applications
	  running in the SEE. An example of such an application is 'uefisecapp',
	  which is required to access UEFI variables on certain systems. If
	  selected, the interface will also attempt to detect and register client
	  devices for supported applications.

	  Select Y here to enable the QSEECOM interface driver.

config QCOM_QSEECOM_UEFISECAPP
	bool "Qualcomm SEE UEFI Secure App client driver"
	depends on QCOM_QSEECOM
	depends on EFI
	help
	  Various Qualcomm SoCs do not allow direct access to EFI variables.
	  Instead, these need to be accessed via the UEFI Secure Application
	  (uefisecapp), residing in the Secure Execution Environment (SEE).

	  This module provides a client driver for uefisecapp, installing efivar
	  operations to allow the kernel accessing EFI variables, and via that also
	  provide user-space with access to EFI variables via efivarfs.

	  Select Y here to provide access to EFI variables on the aforementioned
	  platforms.

endmenu
