# nRF5340 DK nRF5340 board configuration

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

if  BOARD_NRF5340DK_NRF5340_CPUAPP || BOARD_NRF5340DK_NRF5340_CPUAPP_NS

config BOARD
	default "nrf5340dk_nrf5340_cpuapp" if BOARD_NRF5340DK_NRF5340_CPUAPP || BOARD_NRF5340DK_NRF5340_CPUAPP_NS

config ENTROPY_BT_HCI
	default y if BT_HCI
	depends on ENTROPY_GENERATOR

# By default, if we build for a Non-Secure version of the board,
# force building with TF-M as the Secure Execution Environment.

config BUILD_WITH_TFM
	default y if BOARD_NRF5340DK_NRF5340_CPUAPP_NS

if BUILD_WITH_TFM

# By default, if we build with TF-M, instruct build system to
# flash the combined TF-M (Secure) & Zephyr (Non Secure) image
config TFM_FLASH_MERGED_BINARY
	bool
	default y

endif # BUILD_WITH_TFM

# Code Partition:
#
# For the secure version of the board the firmware is linked at the beginning
# of the flash, or into the code-partition defined in DT if it is intended to
# be loaded by MCUboot. If the secure firmware is to be combined with a non-
# secure image (TRUSTED_EXECUTION_SECURE=y), the secure FW image shall always
# be restricted to the size of its code partition.
#
# For the non-secure version of the board, the firmware
# must be linked into the code-partition (non-secure) defined in DT, regardless.
# Apply this configuration below by setting the Kconfig symbols used by
# the linker according to the information extracted from DT partitions.

# SRAM Partition:
#
# If the secure firmware is to be combined with a non-secure image
# (TRUSTED_EXECUTION_SECURE=y), the secure FW image SRAM shall always
# be restricted to the secure image SRAM partition (sram-secure-partition).
# Otherwise (if TRUSTED_EXECUTION_SECURE is not set) the whole zephyr,sram
# may be used by the image.
#
# For the non-secure version of the board, the firmware image SRAM is
# always restricted to the allocated non-secure SRAM partition.
#
# Workaround for not being able to have commas in macro arguments
DT_CHOSEN_Z_CODE_PARTITION := zephyr,code-partition
DT_CHOSEN_Z_SRAM_PARTITION := zephyr,sram-secure-partition

if BOARD_NRF5340DK_NRF5340_CPUAPP && TRUSTED_EXECUTION_SECURE

config FLASH_LOAD_SIZE
	default $(dt_chosen_reg_size_hex,$(DT_CHOSEN_Z_CODE_PARTITION))

config SRAM_SIZE
	default $(dt_chosen_reg_size_int,$(DT_CHOSEN_Z_SRAM_PARTITION),0,K)

endif # BOARD_NRF5340DK_NRF5340_CPUAPP && TRUSTED_EXECUTION_SECURE

if BOARD_NRF5340DK_NRF5340_CPUAPP_NS

config FLASH_LOAD_OFFSET
	default $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_CODE_PARTITION))

config FLASH_LOAD_SIZE
	default $(dt_chosen_reg_size_hex,$(DT_CHOSEN_Z_CODE_PARTITION))

endif # BOARD_NRF5340DK_NRF5340_CPUAPP_NS

endif # BOARD_NRF5340DK_NRF5340_CPUAPP || BOARD_NRF5340DK_NRF5340_CPUAPP_NS

config BOARD
	default "nrf5340dk_nrf5340_cpunet" if BOARD_NRF5340DK_NRF5340_CPUNET

config IPM_NRFX
	default IPM

config MBOX_NRFX_IPC
	default MBOX

config RPMSG_SERVICE_DUAL_IPM_SUPPORT
	default RPMSG_SERVICE

if RPMSG_SERVICE_DUAL_IPM_SUPPORT

config IPM_MSG_CH_0_ENABLE
	default y

config IPM_MSG_CH_1_ENABLE
	default y

config RPMSG_SERVICE_IPM_TX_NAME
	default "IPM_0" if RPMSG_SERVICE_MODE_MASTER
	default "IPM_1" if RPMSG_SERVICE_MODE_REMOTE

config RPMSG_SERVICE_IPM_RX_NAME
	default "IPM_1" if RPMSG_SERVICE_MODE_MASTER
	default "IPM_0" if RPMSG_SERVICE_MODE_REMOTE

config IPM_MSG_CH_0_TX
	default RPMSG_SERVICE_MODE_MASTER

config IPM_MSG_CH_0_RX
	default RPMSG_SERVICE_MODE_REMOTE

config IPM_MSG_CH_1_TX
	default RPMSG_SERVICE_MODE_REMOTE

config IPM_MSG_CH_1_RX
	default RPMSG_SERVICE_MODE_MASTER

endif # RPMSG_SERVICE_DUAL_IPM_SUPPORT

if BOARD_NRF5340DK_NRF5340_CPUAPP || BOARD_NRF5340DK_NRF5340_CPUAPP_NS

choice BT_HCI_BUS_TYPE
	default BT_RPMSG if BT
endchoice

config HEAP_MEM_POOL_SIZE
	default 4096 if BT_RPMSG

config BT_HCI_VS
	default y if BT

endif #  BOARD_NRF5340DK_NRF5340_CPUAPP || BOARD_NRF5340DK_NRF5340_CPUAPP_NS

if BOARD_NRF5340DK_NRF5340_CPUNET

# BT_CTLR depends on BT. When BT is enabled we should default to also
# enabling the controller.
config BT_CTLR
	default y if BT

config BT_ECC
	default y if BT

endif # BOARD_NRF5340DK_NRF5340_CPUNET
