# Configuration for the partitions in the  TF-M Module

# Copyright (c) 2021 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

if BUILD_WITH_TFM

config TFM_PARTITION_PROTECTED_STORAGE
	bool "Enable secure partition 'Protected Storage'"
	default y
	help
	  Setting this option will cause '-DTFM_PARTITION_PROTECTED_STORAGE'
	  to be passed to the TF-M build system. Look at 'config_default.cmake'
	  in the trusted-firmware-m repository for details regarding this
	  parameter. Any dependencies between the various TFM_PARTITION_*
	  options are handled by the build system in the trusted-firmware-m
	  repository.

config TFM_PARTITION_INTERNAL_TRUSTED_STORAGE
	bool "Enable secure partition 'Internal Trusted Storage'"
	default y
	help
	  Setting this option will cause '-DTFM_PARTITION_INTERNAL_TRUSTED_STORAGE'
	  to be passed to the TF-M build system. Look at 'config_default.cmake'
	  in the trusted-firmware-m repository for details regarding this
	  parameter. Any dependencies between the various TFM_PARTITION_*
	  options are handled by the build system in the trusted-firmware-m
	  repository.

config TFM_PARTITION_CRYPTO
	bool "Enable secure partition 'Crypto'"
	default y
	help
	  Setting this option will cause '-DTFM_PARTITION_CRYPTO'
	  to be passed to the TF-M build system. Look at 'config_default.cmake'
	  in the trusted-firmware-m repository for details regarding this
	  parameter. Any dependencies between the various TFM_PARTITION_*
	  options are handled by the build system in the trusted-firmware-m
	  repository.

config TFM_PARTITION_INITIAL_ATTESTATION
	bool "Enable secure partition 'Initial Attestation'"
	default y
	help
	  Setting this option will cause '-DTFM_PARTITION_INITIAL_ATTESTATION'
	  to be passed to the TF-M build system. Look at 'config_default.cmake'
	  in the trusted-firmware-m repository for details regarding this
	  parameter. Any dependencies between the various TFM_PARTITION_*
	  options are handled by the build system in the trusted-firmware-m
	  repository.

config TFM_PARTITION_PLATFORM
	bool "Enable secure partition 'Platform'"
	default y
	help
	  Setting this option will cause '-DTFM_PARTITION_PLATFORM'
	  to be passed to the TF-M build system. Look at 'config_default.cmake'
	  in the trusted-firmware-m repository for details regarding this
	  parameter. Any dependencies between the various TFM_PARTITION_*
	  options are handled by the build system in the trusted-firmware-m
	  repository.

config TFM_PARTITION_AUDIT_LOG
	bool "Enable secure partition 'Audit Log'" if !TFM_IPC
	depends on !TFM_IPC
	default y
	help
	  Setting this option will cause '-DTFM_PARTITION_AUDIT_LOG'
	  to be passed to the TF-M build system. Look at 'config_default.cmake'
	  in the trusted-firmware-m repository for details regarding this
	  parameter. Any dependencies between the various TFM_PARTITION_*
	  options are handled by the build system in the trusted-firmware-m
	  repository.
	  Note: the Audit Log service does not implement the IPC model
	  interface so it may not be enabled together with IPC option.

endif # BUILD_WITH_TFM
