#
#    Copyright (c) 2024 Project CHIP Authors
#
#    Licensed under the Apache License, Version 2.0 (the "License");
#    you may not use this file except in compliance with the License.
#    You may obtain a copy of the License at
#
#        http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#

#### Radio core selection
config NRF_DEFAULT_IPC_RADIO
	default y

# Enable IEEE802.15.4 serialization to network core
config NETCORE_IPC_RADIO_IEEE802154
	default y if (SOC_SERIES_NRF53) && !WIFI_NRF700X

# Enable Bluetooth serialization to network core
config NETCORE_IPC_RADIO_BT_HCI_IPC
	default y if SOC_SERIES_NRF53

config MATTER_OTA
	default n if BOARD_NRF52840DONGLE_NRF52840

#### Bootloader
choice BOOTLOADER
	default BOOTLOADER_MCUBOOT if !BOARD_NRF52840DONGLE_NRF52840
endchoice

if BOOTLOADER_MCUBOOT

#### DFU multi-image support
config DFU_MULTI_IMAGE_PACKAGE_BUILD
	default y

config DFU_MULTI_IMAGE_PACKAGE_APP
	default y

config PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY
	default y

#### DFU network core configuration
if SOC_SERIES_NRF53

config MCUBOOT_UPDATEABLE_IMAGES
	default 2

choice MCUBOOT_MODE
	default MCUBOOT_MODE_OVERWRITE_ONLY
endchoice

choice BOOT_SIGNATURE_TYPE
	default BOOT_SIGNATURE_TYPE_RSA
endchoice

config SECURE_BOOT_NETCORE
	default y

config NETCORE_APP_UPDATE
	default y

config DFU_MULTI_IMAGE_PACKAGE_NET
	default y

endif # SOC_SERIES_NRF53

if BOARD_NRF54L15DK

config PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
	default y

endif # BOARD_NRF54L15DK

endif # BOOTLOADER_MCUBOOT

#### Enable generating factory data
config MATTER_FACTORY_DATA_GENERATE
	default y if !BOARD_NRF52840DONGLE_NRF52840

source "${ZEPHYR_BASE}/share/sysbuild/Kconfig"
