#
#   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
    int
    default 10240

config BOOT_SWAP_SAVE_ENCTLV
    bool
    default n

config BOOT_ENCRYPT_RSA
    bool
    default n

config BOOT_ENCRYPT_EC256
    bool
    default n

config BOOT_ENCRYPT_X25519
    bool
    default n

config BOOT_BOOTSTRAP
    bool
    default n

config PM
    bool
    default n

config FLASH
    bool
    default y

config FPROTECT
    bool
    default y

# nRF7002DK uses SPI NOR external flash
if BOARD_NRF7002DK_NRF5340_CPUAPP

config SPI
    bool
    default y

config SPI_NOR
    bool
    default y

choice SPI_NOR_SFDP
	default SPI_NOR_SFDP_DEVICETREE
endchoice

config SPI_NOR_FLASH_LAYOUT_PAGE_SIZE
    int
    default 4096

config MULTITHREADING
    bool
    default y

config PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
    bool
    default y

endif

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

config NORDIC_QSPI_NOR
    bool
    default y

config NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE
    int
    default 4096

config NORDIC_QSPI_NOR_STACK_WRITE_BUFFER_SIZE
    int
    default 16

endif

config BOOT_MAX_IMG_SECTORS
    int
    default 256

config LOG
    bool
    default n

config CONSOLE_HANDLER
    bool
    default n

config BOOT_BANNER
    bool
    default n

config TIMESLICING
    bool
    default n

config RESET_ON_FATAL_ERROR
    bool
    default n

config MULTITHREADING
    bool
    default n

config TICKLESS_KERNEL
    bool
    default n

config TIMEOUT_64BIT
    bool
    default n

config NRF_ENABLE_ICACHE
    bool
    default n

if SOC_SERIES_NRF53X

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

config UPDATEABLE_IMAGE_NUMBER
    int
    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
    bool
    default y

config FLASH_SIMULATOR_DOUBLE_WRITES
    bool
    default y

config FLASH_SIMULATOR_STATS
    bool
    default n

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

config BOOT_MGMT_CUSTOM_STORAGE_ERASE
    bool
    default y

endif # SOC_SERIES_NRF53X
