From 1e1ea7bb5d2c088af1859292388cf8bda13f6311 Mon Sep 17 00:00:00 2001 From: Tiago Medicci Serrano Date: Mon, 22 Jan 2024 14:16:52 -0300 Subject: [PATCH] esp32s2: Improve selection of the bootloader being used on Kconfig - A pre-built IDF bootloader is used by default; - `ESP32S2_PARTITION_TABLE` requires the IDF bootloader to be built from sources. - Native MCUboot also can be used to boot the device. It will be built from sources and depends on !ESP32S2_PARTITION_TABLE. --- arch/xtensa/src/esp32s2/Bootloader.mk | 10 +-- arch/xtensa/src/esp32s2/Kconfig | 68 +++++++++++-------- .../configs/mcuboot_nsh/defconfig | 1 - 3 files changed, 40 insertions(+), 39 deletions(-) diff --git a/arch/xtensa/src/esp32s2/Bootloader.mk b/arch/xtensa/src/esp32s2/Bootloader.mk index 54940e551d..3a75b42721 100644 --- a/arch/xtensa/src/esp32s2/Bootloader.mk +++ b/arch/xtensa/src/esp32s2/Bootloader.mk @@ -187,15 +187,7 @@ else ifeq ($(CONFIG_ESP32S2_BOOTLOADER_DOWNLOAD_PREBUILT),y) BOOTLOADER_VERSION = latest BOOTLOADER_URL = https://github.com/espressif/esp-nuttx-bootloader/releases/download/$(BOOTLOADER_VERSION) -ifeq ($(CONFIG_ESP32S2_APP_FORMAT_MCUBOOT),y) - -bootloader: - $(call DOWNLOAD,$(BOOTLOADER_URL),mcuboot-esp32s2.bin,$(TOPDIR)/mcuboot-esp32s2.bin) - -clean_bootloader: - $(call DELFILE,$(TOPDIR)/mcuboot-esp32s2.bin) - -else ifeq ($(CONFIG_ESP32S2_APP_FORMAT_LEGACY),y) +ifeq ($(CONFIG_ESP32S2_APP_FORMAT_LEGACY),y) bootloader: $(call DOWNLOAD,$(BOOTLOADER_URL),bootloader-esp32s2.bin,$(TOPDIR)/bootloader-esp32s2.bin) diff --git a/arch/xtensa/src/esp32s2/Kconfig b/arch/xtensa/src/esp32s2/Kconfig index 2f37780fda..16e5a62e84 100644 --- a/arch/xtensa/src/esp32s2/Kconfig +++ b/arch/xtensa/src/esp32s2/Kconfig @@ -1220,42 +1220,28 @@ config ESP32S2_HAVE_OTA_PARTITION bool default n -menu "Application Image Configuration" - -choice - prompt "Application Image Format" - default ESP32S2_APP_FORMAT_LEGACY - ---help--- - Depending on the chosen 2nd stage bootloader, the application may - be required to be perform a specific startup routine. Furthermore, - the image binary must be formatted according to the definition from - the 2nd stage bootloader. +menu "Bootloader and Image Configuration" config ESP32S2_APP_FORMAT_LEGACY - bool "Legacy format" + bool + default y if !ESP32S2_APP_FORMAT_MCUBOOT + depends on !ESP32S2_APP_FORMAT_MCUBOOT ---help--- This is the legacy application image format, as supported by the ESP-IDF 2nd stage bootloader. config ESP32S2_APP_FORMAT_MCUBOOT - bool "MCUboot-bootable format" + bool "Enable MCUboot-bootable format" depends on !MCUBOOT_BOOTLOADER select ESP32S2_HAVE_OTA_PARTITION + select ESP32S2_BOOTLOADER_BUILD_FROM_SOURCE ---help--- - The Espressif port of MCUboot supports the loading of unsegmented firmware - images. - -endchoice # Application Image Format - -choice - prompt "Source for bootloader binaries" - default ESP32S2_BOOTLOADER_DOWNLOAD_PREBUILT - ---help--- - Select the action to be taken by the build system for the - "make bootloader" target. + Enables the Espressif port of MCUboot to be used as 2nd stage bootloader. config ESP32S2_BOOTLOADER_DOWNLOAD_PREBUILT - bool "Download prebuilt binaries" + bool + default y if !ESP32S2_BOOTLOADER_BUILD_FROM_SOURCE + depends on !ESP32S2_BOOTLOADER_BUILD_FROM_SOURCE ---help--- The build system will download the prebuilt binaries from https://github.com/espressif/esp-nuttx-bootloader according to the chosen @@ -1269,8 +1255,6 @@ config ESP32S2_BOOTLOADER_BUILD_FROM_SOURCE custom bootloader according to the chosen Application Image Format (ESP32S2_APP_FORMAT_LEGACY or ESP32S2_APP_FORMAT_MCUBOOT) and partition information. -endchoice - choice prompt "Target slot for image flashing" default ESP32S2_ESPTOOL_TARGET_PRIMARY @@ -1306,13 +1290,39 @@ config ESP32S2_APP_MCUBOOT_HEADER_SIZE default 32 depends on ESP32S2_APP_FORMAT_MCUBOOT -config ESP32S2_PARTITION_TABLE_OFFSET - hex "Partition Table offset" +config ESP32S2_PARTITION_TABLE_OFFSET_DEFAULT + hex default 0x8000 depends on ESP32S2_APP_FORMAT_LEGACY +config ESP32S2_CUSTOM_PARTITION_TABLE_OFFSET + bool "Customize partition table offset" + default n + depends on ESP32S2_APP_FORMAT_LEGACY + select ESP32S2_BOOTLOADER_BUILD_FROM_SOURCE + ---help--- + Enable to select the offset of the partition table in the flash. + +if ESP32S2_CUSTOM_PARTITION_TABLE_OFFSET + +config ESP32S2_PARTITION_TABLE_OFFSET + hex "Partition Table offset" + default ESP32S2_PARTITION_TABLE_OFFSET_DEFAULT + depends on ESP32S2_APP_FORMAT_LEGACY + +endif # ESP32S2_CUSTOM_PARTITION_TABLE_OFFSET + +if !ESP32S2_CUSTOM_PARTITION_TABLE_OFFSET + +config ESP32S2_PARTITION_TABLE_OFFSET + hex + default ESP32S2_PARTITION_TABLE_OFFSET_DEFAULT + depends on ESP32S2_APP_FORMAT_LEGACY + +endif # !ESP32S2_CUSTOM_PARTITION_TABLE_OFFSET + source "arch/xtensa/src/esp32s2/Kconfig.security" -endmenu # Application Image Configuration +endmenu # Bootloader and Image Configuration endif # ARCH_CHIP_ESP32S2 diff --git a/boards/xtensa/esp32s2/esp32s2-saola-1/configs/mcuboot_nsh/defconfig b/boards/xtensa/esp32s2/esp32s2-saola-1/configs/mcuboot_nsh/defconfig index 706fccf1b4..ee78ad4e45 100644 --- a/boards/xtensa/esp32s2/esp32s2-saola-1/configs/mcuboot_nsh/defconfig +++ b/boards/xtensa/esp32s2/esp32s2-saola-1/configs/mcuboot_nsh/defconfig @@ -20,7 +20,6 @@ CONFIG_ARCH_XTENSA=y CONFIG_BOARD_LOOPSPERMSEC=16717 CONFIG_BUILTIN=y CONFIG_ESP32S2_APP_FORMAT_MCUBOOT=y -CONFIG_ESP32S2_BOOTLOADER_BUILD_FROM_SOURCE=y CONFIG_ESP32S2_SPIFLASH=y CONFIG_ESP32S2_UART0=y CONFIG_FS_PROCFS=y