# nRF9160 DK NRF9160 board configuration

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

if BOARD_NRF9160DK_NRF9160 || BOARD_NRF9160DK_NRF9160_NS

# 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.

# Workaround for not being able to have commas in macro arguments
DT_CHOSEN_Z_CODE_PARTITION := zephyr,code-partition

config FLASH_LOAD_SIZE
	default $(dt_chosen_reg_size_hex,$(DT_CHOSEN_Z_CODE_PARTITION))
	depends on BOARD_NRF9160DK_NRF9160 && TRUSTED_EXECUTION_SECURE

if BOARD_NRF9160DK_NRF9160_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_NRF9160DK_NRF9160_NS

config BT_HCI_VS
	default y if BT

config BT_WAIT_NOP
	default BT && $(dt_nodelabel_enabled,nrf52840_reset)

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

endif # BOARD_NRF9160DK_NRF9160 || BOARD_NRF9160DK_NRF9160_NS

if BOARD_NRF9160DK_NRF52840

config BT_CTLR
	default BT

config BT_WAIT_NOP
	default BT && $(dt_nodelabel_enabled,reset_input)

endif # BOARD_NRF9160DK_NRF52840
