# BL5340-DVK board configuration

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

if BOARD_BL5340_DVK_CPUAPP || BOARD_BL5340_DVK_CPUAPP_NS

config BOARD
	default "bl5340_dvk_cpuapp" if BOARD_BL5340_DVK_CPUAPP || BOARD_BL5340_DVK_CPUAPP_NS


config FLASH
	default y

if BOARD_BL5340_DVK_CPUAPP

# Enable QSPI for secondary partition maps

config NORDIC_QSPI_NOR
	default y

endif # BOARD_BL5340_DVK_CPUAPP

# 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_BL5340_DVK_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
# (when building in-tree tests).
config TFM_FLASH_MERGED_BINARY
	bool
	default y if TEST_ARM_CORTEX_M

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_BL5340_DVK_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_BL5340_DVK_CPUAPP && TRUSTED_EXECUTION_SECURE

if BOARD_BL5340_DVK_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_BL5340_DVK_CPUAPP_NS

# Workaround for not being able to have commas in macro arguments
DT_COMPAT_TI_TCA9538 := ti,tca9538

config I2C
default $(dt_compat_on_bus,$(DT_COMPAT_TI_TCA9538),i2c)

endif # BOARD_BL5340_DVK_CPUAPP || BOARD_BL5340_DVK_CPUAPP_NS

config BOARD
	default "bl5340_dvk_cpunet" if BOARD_BL5340_DVK_CPUNET
