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

# Enable this option in case if restoring the slot0 partition is expected from slot1 
# partition in case if slot0 is not bootable or damaged
CONFIG_BOOT_BOOTSTRAP=y

# Enable this option in case if SWAP_MOVE logic need to be used
CONFIG_BOOT_SWAP_USING_MOVE=y

# Enable this option in case if SWAP_MOVE using scratch logic need to be used
# Enabling this option expecting the availability of scratch partition in DTS
CONFIG_BOOT_SWAP_USING_SCRATCH=n

# Enable this option in case if the whole slot0 image need to be validated
# With disabled option the only image magic is validated
CONFIG_BOOT_VALIDATE_SLOT0=y

# Maximum number of image sectors supported by the bootloader.
CONFIG_BOOT_MAX_IMG_SECTORS=4096

# Sets log level for modules which don't specify it explicitly.
# When set to 0 it means log will not be activated for those modules.
# Levels are:
#  - 0 OFF, do not write by default
#  - 1 ERROR, default to only write LOG_LEVEL_ERR
#  - 2 WARNING, default to write LOG_LEVEL_WRN
#  - 3 INFO, default to write LOG_LEVEL_INFO
#  - 4 DEBUG, default to write LOG_LEVEL_DBG
CONFIG_LOG_DEFAULT_LEVEL=1
