# Copyright (c) 2025 Espressif Systems (Shanghai) Co., Ltd.
# SPDX-License-Identifier: Apache-2.0

if SOC_FAMILY_ESPRESSIF_ESP32

config ESP32_EFUSE_VIRTUAL
	bool "Simulate eFuse operations in RAM"
	help
	  If "y" - The virtual mode is enabled and all eFuse operations (read and write) are redirected
	  to RAM instead of eFuse registers, all permanent changes (via eFuse) are disabled.

	  If it is "y", then SECURE_FLASH_ENCRYPTION_MODE_RELEASE cannot be used.
	  Because the EFUSE VIRT mode is for testing only.

	  During startup, the eFuses are copied into RAM. This mode is useful for fast tests.

config ESP32_EFUSE_VIRTUAL_KEEP_IN_FLASH
	bool "Keep eFuses in flash"
	depends on ESP32_EFUSE_VIRTUAL
	help
	  In addition to the "Simulate eFuse operations in RAM" option, this option just adds
	  a feature to keep eFuses after reboots in flash memory. To use this mode the partition_table
	  should have the `sys_partition` partition.

	  During startup, the eFuses are copied from flash or,
	  in case if flash is empty, from real eFuse to RAM and then update flash.
	  This mode is useful when need to keep changes after reboot
	  (testing secure_boot and flash_encryption).

config ESP32_EFUSE_VIRTUAL_OFFSET
	hex
	depends on ESP32_EFUSE_VIRTUAL_KEEP_IN_FLASH
	default $(dt_nodelabel_reg_addr_hex,sys_partition) if $(dt_nodelabel_exists,sys_partition)
	default 0x0

config ESP32_EFUSE_VIRTUAL_SIZE
	hex
	depends on ESP32_EFUSE_VIRTUAL_KEEP_IN_FLASH
	default 0x2000 if $(dt_nodelabel_exists,sys_partition)
	default 0x0

config ESP32_EFUSE_MAX_BLK_LEN
	int
	default 192 if SOC_SERIES_ESP32
	default 256

endif # SOC_FAMILY_ESPRESSIF_ESP32
