# nRF9160 innblue V2.2 board configuration

# Copyright (c) 2020 InnBlue
# SPDX-License-Identifier: Apache-2.0

if BOARD_NRF9160_INNBLUE22 || BOARD_NRF9160_INNBLUE22NS

config BOARD
	default "nrf9160_innblue22"

# 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

if BOARD_NRF9160_INNBLUE22 && TRUSTED_EXECUTION_SECURE

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

endif # BOARD_NRF9160_INNBLUE22 && TRUSTED_EXECUTION_SECURE

if BOARD_NRF9160_INNBLUE22NS

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_NRF9160_INNBLUE22NS

endif # BOARD_NRF9160_INNBLUE22 || BOARD_NRF9160_INNBLUE22NS
