# Copyright (c) 2021 Telink Semiconductor
# SPDX-License-Identifier: Apache-2.0

if BOARD_TLSR9518ADK80D

config BOARD
	default "tlsr9518adk80d"

config ENTROPY_TELINK_B91_TRNG
	default y if ENTROPY_GENERATOR

config SOC_FLASH_TELINK_B91
	default y if FLASH

config NET_CONFIG_IEEE802154_DEV_NAME
	default "IEEE802154_b91"

if BT

# BLE Controller SDK from hal_telink requires
# Telink's toolchain with FPU support
config FPU
	default y if "$(ZEPHYR_TOOLCHAIN_VARIANT)" != "zephyr"

config BT_HCI_ACL_FLOW_CONTROL
	default n

choice BT_HCI_BUS_TYPE
	default BT_B91
endchoice

endif # BT

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

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

# Buffer for image writter shall be less(multiple of access alignment) or
# equal to flash page. tlsr9518adk80d boards use external P25Q16 IC as
# flesh memory. Flash page size of the IC is 256 bytes. So that, it is
# maximum image writer buffer size for such kind of boards.
config IMG_BLOCK_BUF_SIZE
	default 256 if MCUBOOT_IMG_MANAGER

endif
