This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 42254ffcbeab9c0cec5d6d450dd6a6476a7de342 Author: Filipe Cavalcanti <filipe.cavalca...@espressif.com> AuthorDate: Mon Jul 14 10:51:45 2025 -0300 arch/risc-v: improve E-Fuse support for ESP32-C3|C6|H2 This commit fixes E-Fuse driver to get proper block and bit offset. Also adds support for virtual and flash E-Fuses. Signed-off-by: Filipe Cavalcanti <filipe.cavalca...@espressif.com> --- arch/risc-v/src/common/espressif/Bootloader.mk | 8 ++++ arch/risc-v/src/common/espressif/Kconfig | 48 ++++++++++++++++++++---- arch/risc-v/src/common/espressif/Make.defs | 5 +++ arch/risc-v/src/common/espressif/esp_efuse.c | 52 +++++++++++++++++++++++++- arch/risc-v/src/common/espressif/esp_efuse.h | 6 +++ arch/risc-v/src/esp32c3/hal_esp32c3.mk | 7 ++++ arch/risc-v/src/esp32c6/hal_esp32c6.mk | 7 ++++ arch/risc-v/src/esp32h2/hal_esp32h2.mk | 8 ++++ tools/espressif/Config.mk | 22 +++++++++++ 9 files changed, 153 insertions(+), 10 deletions(-) diff --git a/arch/risc-v/src/common/espressif/Bootloader.mk b/arch/risc-v/src/common/espressif/Bootloader.mk index 73cfb9207cc..701b2dcd46a 100644 --- a/arch/risc-v/src/common/espressif/Bootloader.mk +++ b/arch/risc-v/src/common/espressif/Bootloader.mk @@ -96,6 +96,14 @@ ifeq ($(CONFIG_ESPRESSIF_BOOTLOADER_MCUBOOT),y) $(if $(CONFIG_ESPRESSIF_USBSERIAL),$(call cfg_val,CONFIG_ESP_CONSOLE_UART_NUM,0)) \ $(call cfg_val,CONFIG_BOOTLOADER_LOG_LEVEL,3) \ } >> $(BOOTLOADER_CONFIG) +ifeq ($(CONFIG_ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH),y) + $(Q) { \ + $(call cfg_en,CONFIG_EFUSE_VIRTUAL) \ + $(call cfg_en,CONFIG_EFUSE_VIRTUAL_KEEP_IN_FLASH) \ + $(call cfg_val,CONFIG_EFUSE_VIRTUAL_OFFSET,$(CONFIG_ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH_OFFSET)) \ + $(call cfg_val,CONFIG_EFUSE_VIRTUAL_SIZE,$(CONFIG_ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH_SIZE)) \ + } >> $(BOOTLOADER_CONFIG) +endif endif ifeq ($(CONFIG_ESPRESSIF_SIMPLE_BOOT),y) diff --git a/arch/risc-v/src/common/espressif/Kconfig b/arch/risc-v/src/common/espressif/Kconfig index 7b4349e102d..d15a9a2ae76 100644 --- a/arch/risc-v/src/common/espressif/Kconfig +++ b/arch/risc-v/src/common/espressif/Kconfig @@ -170,7 +170,7 @@ config ESPRESSIF_BOOTLOADER_MCUBOOT config ESPRESSIF_MCUBOOT_VERSION string "MCUboot version" depends on ESPRESSIF_BOOTLOADER_MCUBOOT - default "20f98e0a975c24864872e0df5701eb1082e9c957" + default "aa4fa2b6e17361dd3ce16a60883059778fd147a9" choice ESPRESSIF_ESPTOOL_TARGET_SLOT prompt "Target slot for image flashing" @@ -217,7 +217,7 @@ comment "Application Image OTA Update support" config ESPRESSIF_OTA_PRIMARY_SLOT_OFFSET hex "Application image primary slot offset" - default 0x10000 + default 0x20000 config ESPRESSIF_OTA_PRIMARY_SLOT_DEVPATH string "Application image primary slot device path" @@ -225,7 +225,7 @@ config ESPRESSIF_OTA_PRIMARY_SLOT_DEVPATH config ESPRESSIF_OTA_SECONDARY_SLOT_OFFSET hex "Application image secondary slot offset" - default 0x110000 + default 0x120000 config ESPRESSIF_OTA_SECONDARY_SLOT_DEVPATH string "Application image secondary slot device path" @@ -237,7 +237,7 @@ config ESPRESSIF_OTA_SLOT_SIZE config ESPRESSIF_OTA_SCRATCH_OFFSET hex "Scratch partition offset" - default 0x210000 + default 0x220000 config ESPRESSIF_OTA_SCRATCH_SIZE hex "Scratch partition size" @@ -499,17 +499,49 @@ config ESPRESSIF_DMA select ARCH_DMA config ESPRESSIF_EFUSE - bool "EFUSE support" + bool "E-Fuse support" default n ---help--- Enable efuse support. config ESPRESSIF_EFUSE_VIRTUAL - bool "Virtual EFUSE support" + bool "Virtual E-Fuses support" depends on ESPRESSIF_EFUSE default n ---help--- - Enable virtual efuse support to simulate eFuse operations in RAM, changes will be reverted each reboot + Enable virtual E-Fuse support to simulate E-Fuse operations in RAM. + Changes will be reverted each reboot unless enabling ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH. + +config ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH + bool "Keep E-Fuses in flash" + depends on ESPRESSIF_EFUSE_VIRTUAL + ---help--- + In addition to the "Virtual E-Fuses support" option, this option just adds + a feature to keep E-Fuses after reboots in flash memory. + + During startup, the E-Fuses are copied from flash or, + in case if flash is empty, from real E-Fuse to RAM and then update flash. + This mode is useful when need to keep changes after reboots (testing secure_boot, + flash_encryption or using MCUBoot + encryption). + +if ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH + +config ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH_OFFSET + hex "E-Fuses offset in flash" + depends on ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH + default 0x10000 if ESPRESSIF_BOOTLOADER_MCUBOOT + default 0x250000 if !ESPRESSIF_BOOTLOADER_MCUBOOT + ---help--- + Offset in flash where the E-Fuses will be stored when using the "E-Fuses size to keep in flash" option. + +config ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH_SIZE + hex "E-Fuses size to keep in flash" + depends on ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH + default 0x2000 + ---help--- + Size of E-Fuse region to keep in flash. + +endif # ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH config ESPRESSIF_HR_TIMER bool @@ -1861,7 +1893,7 @@ config ESPRESSIF_SPI_FLASH_USE_32BIT_ADDRESS config ESPRESSIF_STORAGE_MTD_OFFSET hex "Storage MTD base address in SPI Flash" default 0x180000 if !ESPRESSIF_BOOTLOADER_MCUBOOT - default 0x250000 if ESPRESSIF_BOOTLOADER_MCUBOOT + default 0x260000 if ESPRESSIF_BOOTLOADER_MCUBOOT depends on ESPRESSIF_MTD ---help--- MTD base address in SPI Flash. diff --git a/arch/risc-v/src/common/espressif/Make.defs b/arch/risc-v/src/common/espressif/Make.defs index 7f637b54bec..60b1ed1865d 100644 --- a/arch/risc-v/src/common/espressif/Make.defs +++ b/arch/risc-v/src/common/espressif/Make.defs @@ -179,6 +179,10 @@ ifeq ($(CONFIG_CRYPTO_CRYPTODEV_HARDWARE),y) CHIP_CSRCS += esp_crypto.c endif +ifeq ($(CONFIG_ESPRESSIF_EFUSE),y) + LDFLAGS += -u esp_efuse_startup_include_func +endif + ############################################################################# # Espressif HAL for 3rd Party Platforms ############################################################################# @@ -249,6 +253,7 @@ context:: chip/$(ESP_HAL_3RDPARTY_REPO) distclean:: $(call DELFILE,../include/chip/gpio_sig_map.h) $(call DELFILE,../include/chip/irq.h) + $(call DELFILE,../../../vefuse.bin) $(call DELDIR,chip/$(ESP_HAL_3RDPARTY_REPO)) INCLUDES += ${INCDIR_PREFIX}$(ARCH_SRCDIR)$(DELIM)common$(DELIM)espressif diff --git a/arch/risc-v/src/common/espressif/esp_efuse.c b/arch/risc-v/src/common/espressif/esp_efuse.c index cc9d654fb48..58276b1fbe4 100644 --- a/arch/risc-v/src/common/espressif/esp_efuse.c +++ b/arch/risc-v/src/common/espressif/esp_efuse.c @@ -103,6 +103,13 @@ static struct esp_efuse_lowerhalf_s g_esp_efuse_lowerhalf = * Description: * Read value from EFUSE, writing it into an array. * + * The field[0]->bit_offset received from the upper half represents + * the bit offset taking into consideration that each block is 256 bits. + * This is necessary as we have multiple blocks of 256 bits. + * + * Example: To read data from USER_DATA (EFUSE_BLK3), from bit 16 onwards, + * then bit_offset should be 3*256 + 16. + * Input Parameters: * lower - A pointer the publicly visible representation of * the "lower-half" driver state structure @@ -120,10 +127,27 @@ static int esp_efuse_lowerhalf_read(struct efuse_lowerhalf_s *lower, uint8_t *data, size_t bits_len) { int ret = OK; + uint8_t blk_num = field[0]->bit_offset / ESP_EFUSE_BLK_LEN; + + esp_efuse_desc_t recv = + { + .efuse_block = blk_num, + .bit_start = field[0]->bit_offset - blk_num * ESP_EFUSE_BLK_LEN, + .bit_count = field[0]->bit_count + }; + + const esp_efuse_desc_t *desc[] = + { + &recv, + NULL + }; + + minfo("read from blk_num: %d, bit_start: %d, bit_count: %d\n", + blk_num, recv.bit_start, recv.bit_count); /* Read the requested field */ - ret = esp_efuse_read_field_blob((const esp_efuse_desc_t**)field, + ret = esp_efuse_read_field_blob((const esp_efuse_desc_t**)&desc, data, bits_len); @@ -136,6 +160,13 @@ static int esp_efuse_lowerhalf_read(struct efuse_lowerhalf_s *lower, * Description: * Write array to EFUSE. * + * The field[0]->bit_offset received from the upper half represents + * the bit offset taking into consideration that each block is 256 bits. + * This is necessary as we have multiple blocks of 256 bits. + * + * Example: To write data to USER_DATA (EFUSE_BLK3), from bit 16 onwards, + * then bit_offset should be 3*256 + 16. + * * Input Parameters: * lower - A pointer the publicly visible representation of * the "lower-half" driver state structure @@ -155,10 +186,26 @@ static int esp_efuse_lowerhalf_write(struct efuse_lowerhalf_s *lower, { irqstate_t flags; int ret = OK; + uint8_t blk_num = field[0]->bit_offset / ESP_EFUSE_BLK_LEN; + esp_efuse_desc_t recv = + { + .efuse_block = blk_num, + .bit_start = field[0]->bit_offset - blk_num * ESP_EFUSE_BLK_LEN, + .bit_count = field[0]->bit_count + }; + + const esp_efuse_desc_t *desc[] = + { + &recv, + NULL + }; + + minfo("write to blk_num: %d, bit_start: %d, bit_count: %d\n", + blk_num, recv.bit_start, recv.bit_count); flags = enter_critical_section(); - ret = esp_efuse_write_field_blob((const esp_efuse_desc_t**)field, + ret = esp_efuse_write_field_blob((const esp_efuse_desc_t**)&desc, data, bits_len); @@ -256,6 +303,7 @@ int esp_efuse_initialize(const char *devpath) } #ifdef CONFIG_ESPRESSIF_EFUSE_VIRTUAL + mwarn("Virtual E-Fuses are enabled\n"); esp_efuse_utility_update_virt_blocks(); #endif diff --git a/arch/risc-v/src/common/espressif/esp_efuse.h b/arch/risc-v/src/common/espressif/esp_efuse.h index 396ca31975d..a959cdcce3f 100644 --- a/arch/risc-v/src/common/espressif/esp_efuse.h +++ b/arch/risc-v/src/common/espressif/esp_efuse.h @@ -40,6 +40,12 @@ extern "C" #define EXTERN extern #endif +/**************************************************************************** + * Pre-processor definitions + ****************************************************************************/ + + #define ESP_EFUSE_BLK_LEN 256 + /**************************************************************************** * Public Functions Prototypes ****************************************************************************/ diff --git a/arch/risc-v/src/esp32c3/hal_esp32c3.mk b/arch/risc-v/src/esp32c3/hal_esp32c3.mk index e699815bb1f..aa028ea10d9 100644 --- a/arch/risc-v/src/esp32c3/hal_esp32c3.mk +++ b/arch/risc-v/src/esp32c3/hal_esp32c3.mk @@ -107,6 +107,7 @@ CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)boot CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)src$(DELIM)esp_efuse_api.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)src$(DELIM)esp_efuse_utility.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)src$(DELIM)esp_efuse_fields.c +CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)src$(DELIM)esp_efuse_startup.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)$(CHIP_SERIES)$(DELIM)esp_efuse_fields.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)$(CHIP_SERIES)$(DELIM)esp_efuse_rtc_calib.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)$(CHIP_SERIES)$(DELIM)esp_efuse_table.c @@ -220,4 +221,10 @@ ifeq ($(CONFIG_ESPRESSIF_SIMPLE_BOOT),y) CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)esp_rom$(DELIM)patches$(DELIM)esp_rom_spiflash.c LDFLAGS += --wrap=bootloader_print_banner +else +ifeq ($(CONFIG_ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH),y) + # Special case for bootloader_flash when using efuse virtual mode + CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)bootloader_support$(DELIM)bootloader_flash$(DELIM)src$(DELIM)bootloader_flash.c + CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)bootloader_support$(DELIM)bootloader_flash$(DELIM)src$(DELIM)bootloader_flash_config_${CHIP_SERIES}.c +endif endif diff --git a/arch/risc-v/src/esp32c6/hal_esp32c6.mk b/arch/risc-v/src/esp32c6/hal_esp32c6.mk index dd7f8a2a39b..4bc082ed27a 100644 --- a/arch/risc-v/src/esp32c6/hal_esp32c6.mk +++ b/arch/risc-v/src/esp32c6/hal_esp32c6.mk @@ -112,6 +112,7 @@ CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)boot CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)bootloader_support$(DELIM)src$(DELIM)bootloader_efuse.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)src$(DELIM)esp_efuse_api.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)src$(DELIM)esp_efuse_utility.c +CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)src$(DELIM)esp_efuse_startup.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)$(CHIP_SERIES)$(DELIM)esp_efuse_fields.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)$(CHIP_SERIES)$(DELIM)esp_efuse_rtc_calib.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)$(CHIP_SERIES)$(DELIM)esp_efuse_table.c @@ -242,4 +243,10 @@ ifeq ($(CONFIG_ESPRESSIF_SIMPLE_BOOT),y) CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)src$(DELIM)esp_efuse_fields.c LDFLAGS += --wrap=bootloader_print_banner +else +ifeq ($(CONFIG_ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH),y) + # Special case for bootloader_flash when using efuse virtual mode + CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)bootloader_support$(DELIM)bootloader_flash$(DELIM)src$(DELIM)bootloader_flash.c + CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)bootloader_support$(DELIM)bootloader_flash$(DELIM)src$(DELIM)bootloader_flash_config_${CHIP_SERIES}.c +endif endif diff --git a/arch/risc-v/src/esp32h2/hal_esp32h2.mk b/arch/risc-v/src/esp32h2/hal_esp32h2.mk index c1b80471492..1209e4895ab 100644 --- a/arch/risc-v/src/esp32h2/hal_esp32h2.mk +++ b/arch/risc-v/src/esp32h2/hal_esp32h2.mk @@ -104,10 +104,12 @@ CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)boot CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)bootloader_support$(DELIM)src$(DELIM)bootloader_efuse.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)src$(DELIM)esp_efuse_api.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)src$(DELIM)esp_efuse_utility.c +CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)src$(DELIM)esp_efuse_startup.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)$(CHIP_SERIES)$(DELIM)esp_efuse_fields.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)$(CHIP_SERIES)$(DELIM)esp_efuse_rtc_calib.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)$(CHIP_SERIES)$(DELIM)esp_efuse_table.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)$(CHIP_SERIES)$(DELIM)esp_efuse_utility.c +CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)$(CHIP_SERIES)$(DELIM)esp_efuse_table_v0.0_v1.1.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)src$(DELIM)efuse_controller$(DELIM)keys$(DELIM)with_key_purposes$(DELIM)esp_efuse_api_key.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)esp_common$(DELIM)src$(DELIM)esp_err_to_name.c CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)esp_hw_support$(DELIM)adc_share_hw_ctrl.c @@ -222,4 +224,10 @@ ifeq ($(CONFIG_ESPRESSIF_SIMPLE_BOOT),y) CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)efuse$(DELIM)src$(DELIM)esp_efuse_fields.c LDFLAGS += --wrap=bootloader_print_banner +else +ifeq ($(CONFIG_ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH),y) + # Special case for bootloader_flash when using efuse virtual mode + CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)bootloader_support$(DELIM)bootloader_flash$(DELIM)src$(DELIM)bootloader_flash.c + CHIP_CSRCS += chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)bootloader_support$(DELIM)bootloader_flash$(DELIM)src$(DELIM)bootloader_flash_config_${CHIP_SERIES}.c +endif endif diff --git a/tools/espressif/Config.mk b/tools/espressif/Config.mk index 05db0ea923a..6d8c1799061 100644 --- a/tools/espressif/Config.mk +++ b/tools/espressif/Config.mk @@ -24,6 +24,18 @@ CHIP_SERIES = $(patsubst "%",%,$(CONFIG_ESPRESSIF_CHIP_SERIES)) +# MCUBoot requires a region in flash for the E-Fuse virtual mode. +# To avoid erasing this region, flash a dummy empty file to the +# virtual E-Fuse offset. + +VIRTUAL_EFUSE_BIN := vefuse.bin + +ifeq ($(CONFIG_ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH),y) + EFUSE_FLASH_OFFSET := $(CONFIG_ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH_OFFSET) +else + EFUSE_FLASH_OFFSET := 0x10000 +endif + # These are the macros that will be used in the NuttX make system to compile # and assemble source files and to insert the resulting object files into an # archive. These replace the default definitions at tools/Config.mk @@ -69,7 +81,16 @@ ifdef ESPTOOL_BINDIR endif endif +define MAKE_VIRTUAL_EFUSE_BIN + $(Q)if [ ! -f "$(VIRTUAL_EFUSE_BIN)" ]; then \ + dd if=/dev/zero of=$(VIRTUAL_EFUSE_BIN) count=0 status=none; \ + fi +endef + ifeq ($(CONFIG_ESPRESSIF_BOOTLOADER_MCUBOOT),y) + + ESPTOOL_BINS += $(EFUSE_FLASH_OFFSET) $(VIRTUAL_EFUSE_BIN) + ifeq ($(CONFIG_ESPRESSIF_ESPTOOL_TARGET_PRIMARY),y) VERIFIED := --confirm APP_OFFSET := $(CONFIG_ESPRESSIF_OTA_PRIMARY_SLOT_OFFSET) @@ -146,6 +167,7 @@ endif define POSTBUILD $(call MKIMAGE) + $(if $(CONFIG_ESPRESSIF_BOOTLOADER_MCUBOOT),$(call MAKE_VIRTUAL_EFUSE_BIN)) $(if $(CONFIG_ESPRESSIF_MERGE_BINS),$(call MERGEBIN)) endef