#
#   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.
# Maximum signed image size: 512 * 4096 = 2M Bytes
CONFIG_BOOT_MAX_IMG_SECTORS=512

# 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=3
