#
#   Copyright (c) 2022 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.
#

# The purpose of this file is to define new default values of settings used when building mcuboot child image for Matter samples.

config MAIN_STACK_SIZE
    default 10240

config BOOT_ENCRYPT_IMAGE
    default n

config BOOT_BOOTSTRAP
    default n

config PM
    default n

config FLASH
    default y

config FPROTECT
    default y

choice LIBC_IMPLEMENTATION
    default MINIMAL_LIBC
endchoice

# nRF7002DK uses SPI NOR external flash
if BOARD_NRF7002DK_NRF5340_CPUAPP

config SPI
    default y

choice SPI_NOR_SFDP
	default SPI_NOR_SFDP_DEVICETREE
endchoice

config SPI_NOR_FLASH_LAYOUT_PAGE_SIZE
    default 4096

config MULTITHREADING
    default y

config PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
    default y

endif

# All boards beside nRF7002DK use QSPI NOR external flash
if BOARD_NRF5340DK_NRF5340_CPUAPP || BOARD_NRF52840DK_NRF52840

config NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE
    default 4096

config NORDIC_QSPI_NOR_STACK_WRITE_BUFFER_SIZE
    default 16

endif

config BOOT_MAX_IMG_SECTORS
    default 256

config LOG
    default n

config CONSOLE_HANDLER
    default n

config BOOT_BANNER
    default n

config TIMESLICING
    default n

config RESET_ON_FATAL_ERROR
    default n

config MULTITHREADING
    default n

config TICKLESS_KERNEL
    default n

config TIMEOUT_64BIT
    default n

config NRF_ENABLE_ICACHE
    default n

if SOC_SERIES_NRF53X

# The following configurations are required to support simultaneous multi image update
config PCD_APP
    default y

config UPDATEABLE_IMAGE_NUMBER
    default 2

# Multi-image updates do not support image swapping yet.
choice BOOT_IMAGE_UPGRADE_MODE
    default BOOT_UPGRADE_ONLY
endchoice

# The network core cannot access external flash directly. The flash simulator must be used to
# provide a memory region that is used to forward the new firmware to the network core.
config FLASH_SIMULATOR
    default y

config FLASH_SIMULATOR_DOUBLE_WRITES
    default y

config FLASH_SIMULATOR_STATS
    default n

# Enable custom command to erase settings partition.
config ENABLE_MGMT_PERUSER
    default y

config ZCBOR
    default y

config BOOT_MGMT_CUSTOM_STORAGE_ERASE
    default y

endif # SOC_SERIES_NRF53X
