# Actinius Icarus board configuration

# Copyright (c) 2019 Actinius
# SPDX-License-Identifier: Apache-2.0

if BOARD_ACTINIUS_ICARUS || BOARD_ACTINIUS_ICARUS_NS

config BOARD
	default "actinius_icarus"

if ADC

config ADC_0
	default y

endif # ADC

if I2C

config I2C_2
	default y

endif # I2C

if PWM

config PWM_0
	default y

endif # PWM

if SPI

config SPI_3
	default y

endif # SPI

# 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_ACTINIUS_ICARUS && TRUSTED_EXECUTION_SECURE

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

endif # BOARD_ACTINIUS_ICARUS && TRUSTED_EXECUTION_SECURE

if BOARD_ACTINIUS_ICARUS_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_ACTINIUS_ICARUS_NS

endif # BOARD_ACTINIUS_ICARUS || BOARD_ACTINIUS_ICARUS_NS
