diff --git a/boot/espressif/CMakeLists.txt b/boot/espressif/CMakeLists.txt
index 05358839c1..3a275032c9 100644
--- a/boot/espressif/CMakeLists.txt
+++ b/boot/espressif/CMakeLists.txt
@@ -7,430 +7,186 @@ cmake_policy(SET CMP0109 NEW)
 
 include(${CMAKE_CURRENT_LIST_DIR}/tools/utils.cmake)
 
-if (NOT DEFINED MCUBOOT_TARGET)
-    message(FATAL_ERROR "MCUBOOT_TARGET not defined. Please pass -DMCUBOOT_TARGET flag.")
-endif()
-
-add_definitions(-DMCUBOOT_TARGET=${MCUBOOT_TARGET})
-add_definitions(-D__ESPRESSIF__=1)
-
-set(EXPECTED_IDF_HAL_VERSION "5.1.4")
+message(STATUS "Building MCUboot -- ESPRESSIF PORT")
 
-if ("${MCUBOOT_TARGET}" STREQUAL "esp32" OR
-    "${MCUBOOT_TARGET}" STREQUAL "esp32s2" OR
-    "${MCUBOOT_TARGET}" STREQUAL "esp32s3")
-    set(MCUBOOT_ARCH "xtensa")
-elseif("${MCUBOOT_TARGET}" STREQUAL "esp32c3" OR
-    "${MCUBOOT_TARGET}" STREQUAL "esp32c6" OR
-    "${MCUBOOT_TARGET}" STREQUAL "esp32c2" OR
-    "${MCUBOOT_TARGET}" STREQUAL "esp32h2")
-    set(MCUBOOT_ARCH "riscv")
+if(NOT DEFINED MCUBOOT_TARGET)
+  message(FATAL_ERROR "MCUBOOT_TARGET not defined. Please pass -DMCUBOOT_TARGET flag.")
 endif()
 
-if (NOT DEFINED CMAKE_TOOLCHAIN_FILE)
-    if (DEFINED TOOLCHAIN_BIN_DIR)
-        message("CMAKE_TOOLCHAIN_FILE not defined, searching for toolchain compiler in TOOLCHAIN_BIN_DIR: ${TOOLCHAIN_BIN_DIR}")
-        set(CMAKE_SYSTEM_NAME Generic)
-
-        file(GLOB C_COMPILER_BIN "${TOOLCHAIN_BIN_DIR}/*${MCUBOOT_ARCH}*elf-gcc")
-        if (NOT C_COMPILER_BIN)
-            message(FATAL_ERROR "No C compiler found. Please ensure that TOOLCHAIN_BIN_DIR directory contains a set of C compiling tools compatible with the target")
-        endif()
-        set(CMAKE_C_COMPILER ${C_COMPILER_BIN})
-        set(CMAKE_ASM_COMPILER ${C_COMPILER_BIN})
-        message("C compiler found: ${CMAKE_C_COMPILER}")
-
-        file(GLOB CXX_COMPILER_BIN "${TOOLCHAIN_BIN_DIR}/*${MCUBOOT_ARCH}*elf-g++")
-        if (NOT CXX_COMPILER_BIN)
-            message(FATAL_ERROR "No C++ compiler found. Please ensure that TOOLCHAIN_BIN_DIR directory contains a set of C++ compiling tools compatible with the target")
-        endif()
-        set(CMAKE_CXX_COMPILER ${CXX_COMPILER_BIN})
-        message("CXX compiler found: ${CMAKE_CXX_COMPILER}")
-    else()
-        # Set toolchain file that expect the same toolchain as IDF sets on PATH
-        set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_LIST_DIR}/tools/toolchain-${MCUBOOT_TARGET}.cmake)
-        message("No user-defined toolchain, setting default toolchain file: ${CMAKE_TOOLCHAIN_FILE}")
-    endif()
-
-    # This flag is needed when redefining a different compiler toolchain at this point
-    # on CMakeLists, the reason is that CMake does a compiler testing prior to building
-    # that may fail due to cross-compilation
-    set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
-else()
-    message("CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}")
-endif()
+set(MCUBOOT_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
+set(ESPRESSIF_PORT_DIR ${MCUBOOT_ROOT_DIR}/boot/espressif)
+set(APP_NAME mcuboot_${MCUBOOT_TARGET})
+set(APP_EXECUTABLE ${APP_NAME}.elf)
+set(EXPECTED_IDF_HAL_VERSION "5.1.4")
 
 project(mcuboot_${MCUBOOT_TARGET})
 
-# Set the minimum revision for each supported chip
-if ("${MCUBOOT_TARGET}" STREQUAL "esp32")
-    set(ESP_MIN_REVISION 3)
-elseif("${MCUBOOT_TARGET}" STREQUAL "esp32s2")
-    set(ESP_MIN_REVISION 0)
-elseif("${MCUBOOT_TARGET}" STREQUAL "esp32s3")
-    set(ESP_MIN_REVISION 0)
-elseif("${MCUBOOT_TARGET}" STREQUAL "esp32c3")
-    set(ESP_MIN_REVISION 3)
-elseif("${MCUBOOT_TARGET}" STREQUAL "esp32c6")
-    set(ESP_MIN_REVISION 0)
-elseif("${MCUBOOT_TARGET}" STREQUAL "esp32c2")
-    set(ESP_MIN_REVISION 0)
-elseif("${MCUBOOT_TARGET}" STREQUAL "esp32h2")
-    set(ESP_MIN_REVISION 0)
-else()
-    message(FATAL_ERROR "Unsupported target ${MCUBOOT_TARGET}")
-endif()
-
-if (NOT DEFINED ESP_HAL_PATH)
-    if (DEFINED ENV{ESP_HAL_PATH})
-        set(ESP_HAL_PATH $ENV{ESP_HAL_PATH})
-    else()
-        message(WARNING "ESP_HAL_PATH not defined, checking if IDF_PATH exists.")
-        if (DEFINED ENV{IDF_PATH})
-            set(ESP_HAL_PATH $ENV{IDF_PATH})
-            message("IDF installation found in the system, using IDF_PATH as ESP_HAL_PATH.")
-        else ()
-            message(FATAL_ERROR "Please set -DESP_HAL_PATH parameter or define ESP_HAL_PATH environment variable.")
-        endif()
-    endif()
-endif()
-message(STATUS "Defined ESP_HAL_PATH: ${ESP_HAL_PATH}")
-
-# Verify from which IDF version the HAL is based on
-set(IDF_VER_HEADER_FILE "${ESP_HAL_PATH}/components/esp_common/include/esp_idf_version.h")
-
-get_version_from_header("ESP_IDF_VERSION_MAJOR" ${IDF_VER_HEADER_FILE} IDF_VERSION_MAJOR)
-get_version_from_header("ESP_IDF_VERSION_MINOR" ${IDF_VER_HEADER_FILE} IDF_VERSION_MINOR)
-get_version_from_header("ESP_IDF_VERSION_PATCH" ${IDF_VER_HEADER_FILE} IDF_VERSION_PATCH)
-
-set(IDF_VERSION "${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}.${IDF_VERSION_PATCH}")
-
-if (NOT IDF_VERSION VERSION_EQUAL ${EXPECTED_IDF_HAL_VERSION})
-    message(FATAL_ERROR
-            "Unsupported HAL version ${IDF_VERSION}, expected ${EXPECTED_IDF_HAL_VERSION}. \
-             Verify if the RTOS repository, where you are trying to build from, is up to date, \
-             or check the installation pointed on ESP_HAL_PATH.")
-else ()
-    message(STATUS "HAL based on ESP-IDF version: ${IDF_VERSION}")
-endif()
-
-execute_process(
-    COMMAND git describe --tags
-    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
-    OUTPUT_VARIABLE MCUBOOT_VER
-    OUTPUT_STRIP_TRAILING_WHITESPACE
-    )
-add_definitions(-DMCUBOOT_VER=\"${MCUBOOT_VER}\")
+add_executable(
+  ${APP_EXECUTABLE}
+  ${ESPRESSIF_PORT_DIR}/main.c
+  )
 
-if (NOT DEFINED MCUBOOT_CONFIG_FILE)
-    set(MCUBOOT_CONFIG_FILE "${CMAKE_CURRENT_LIST_DIR}/port/${MCUBOOT_TARGET}/bootloader.conf")
+# Set MCUboot Espressif Port configuration file
+if(NOT DEFINED MCUBOOT_CONFIG_FILE)
+  set(MCUBOOT_CONFIG_FILE "${ESPRESSIF_PORT_DIR}/port/${MCUBOOT_TARGET}/bootloader.conf")
+  message("MCUBOOT_CONFIG_FILE: ${MCUBOOT_CONFIG_FILE}")
 endif()
 
 string(REPLACE " " ";" MCUBOOT_CONFIG_FILE_LIST "${MCUBOOT_CONFIG_FILE}")
 foreach(CONFIG_FILE ${MCUBOOT_CONFIG_FILE_LIST})
-    if (NOT EXISTS "${CONFIG_FILE}")
-        message(FATAL_ERROR "MCUboot configuration file does not exist at ${CONFIG_FILE}")
-    endif()
-    parse_and_set_config_file(${CONFIG_FILE})
+  if(NOT EXISTS "${CONFIG_FILE}")
+      message(FATAL_ERROR "MCUboot configuration file does not exist at ${CONFIG_FILE}")
+  endif()
+  parse_and_set_config_file(${CONFIG_FILE})
 endforeach()
 
-set(APP_NAME mcuboot_${MCUBOOT_TARGET})
-set(APP_EXECUTABLE ${APP_NAME}.elf)
-
-set(MCUBOOT_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
-set(BOOTUTIL_DIR ${MCUBOOT_ROOT_DIR}/boot/bootutil)
-set(BOOT_SERIAL_DIR ${MCUBOOT_ROOT_DIR}/boot/boot_serial)
-set(ZCBOR_DIR ${MCUBOOT_ROOT_DIR}/boot/zcbor)
-set(ESPRESSIF_PORT_DIR ${CMAKE_CURRENT_LIST_DIR})
+# Fetch and set toolchain
+if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
+  if(DEFINED TOOLCHAIN_BIN_DIR)
+    message("CMAKE_TOOLCHAIN_FILE not defined, searching for toolchain compiler in TOOLCHAIN_BIN_DIR: ${TOOLCHAIN_BIN_DIR}")
+    set(CMAKE_SYSTEM_NAME Generic)
 
-# Find imgtool.
-# Go with an explicitly installed imgtool first, falling
-# back to mcuboot/scripts/imgtool.py.
-find_program(IMGTOOL_COMMAND
-    NAMES imgtool imgtool.py
-    )
-if ("${IMGTOOL_COMMAND}" MATCHES "IMGTOOL_COMMAND-NOTFOUND")
-    set(imgtool_path "${MCUBOOT_ROOT_DIR}/scripts/imgtool.py")
-else()
-    set(imgtool_path "${IMGTOOL_COMMAND}")
-endif()
-
-# Find installed esptool, if not found falls to IDF's
-find_program(ESPTOOL_COMMAND
-    NAMES esptool esptool.py
-    )
-if ("${ESPTOOL_COMMAND}" MATCHES "ESPTOOL_COMMAND-NOTFOUND")
-    if (DEFINED ENV{IDF_PATH})
-        set(esptool_path "${IDF_PATH}/components/esptool_py/esptool/esptool.py")
-    else()
-        message(FATAL_ERROR "esptool.py not found. Please install it using \'pip install esptool\'.")
+    file(GLOB C_COMPILER_BIN "${TOOLCHAIN_BIN_DIR}/*${MCUBOOT_ARCH}*elf-gcc")
+    if(NOT C_COMPILER_BIN)
+      message(FATAL_ERROR "No C compiler found. Please ensure that TOOLCHAIN_BIN_DIR directory contains a set of C compiling tools compatible with the target")
     endif()
-else()
-    set(esptool_path "${ESPTOOL_COMMAND}")
-endif()
+    set(CMAKE_C_COMPILER ${C_COMPILER_BIN})
+    set(CMAKE_ASM_COMPILER ${C_COMPILER_BIN})
+    message("C compiler found: ${CMAKE_C_COMPILER}")
 
-# Flash frequency parameter for esptool.py, for more information, check `esptool.py -h`
-if (NOT DEFINED ESP_FLASH_FREQ)
-    if ("${MCUBOOT_TARGET}" STREQUAL "esp32" OR
-        "${MCUBOOT_TARGET}" STREQUAL "esp32s2" OR
-        "${MCUBOOT_TARGET}" STREQUAL "esp32s3" OR
-        "${MCUBOOT_TARGET}" STREQUAL "esp32c3" OR
-        "${MCUBOOT_TARGET}" STREQUAL "esp32c6")
-        set(ESP_FLASH_FREQ "40m")
-    elseif("${MCUBOOT_TARGET}" STREQUAL "esp32c2")
-        set(ESP_FLASH_FREQ "60m")
-    elseif("${MCUBOOT_TARGET}" STREQUAL "esp32h2")
-        set(ESP_FLASH_FREQ "24m")
+    file(GLOB CXX_COMPILER_BIN "${TOOLCHAIN_BIN_DIR}/*${MCUBOOT_ARCH}*elf-g++")
+    if(NOT CXX_COMPILER_BIN)
+      message(FATAL_ERROR "No C++ compiler found. Please ensure that TOOLCHAIN_BIN_DIR directory contains a set of C++ compiling tools compatible with the target")
     endif()
-endif()
-
-# Flash mode parameter for esptool.py, for more information, check `esptool.py -h`
-if (NOT DEFINED ESP_FLASH_MODE)
-    set(ESP_FLASH_MODE "dio")
-endif()
-
-# Serial baud rate parameter for esptool.py flash use, for more information, check `esptool.py -h`
-if (NOT DEFINED ESP_BAUD_RATE)
-    set(ESP_BAUD_RATE 115200)
-endif()
-
-if (DEFINED CONFIG_ESP_SIGN_RSA)
-    include(${CMAKE_CURRENT_LIST_DIR}/include/crypto_config/rsa.cmake)
-elseif (DEFINED CONFIG_ESP_SIGN_EC256)
-    include(${CMAKE_CURRENT_LIST_DIR}/include/crypto_config/ec256.cmake)
-elseif (DEFINED CONFIG_ESP_SIGN_ED25519)
-    include(${CMAKE_CURRENT_LIST_DIR}/include/crypto_config/ed25519.cmake)
+    set(CMAKE_CXX_COMPILER ${CXX_COMPILER_BIN})
+    message("CXX compiler found: ${CMAKE_CXX_COMPILER}")
+  else()
+    # Set toolchain file that expect the same toolchain as IDF sets on PATH
+    set(CMAKE_TOOLCHAIN_FILE ${ESPRESSIF_PORT_DIR}/tools/toolchain-${MCUBOOT_TARGET}.cmake)
+    message("No user-defined toolchain, setting default toolchain file: ${CMAKE_TOOLCHAIN_FILE}")
+  endif()
+
+  # This flag is needed when redefining a different compiler toolchain at this point
+  # on CMakeLists, the reason is that CMake does a compiler testing prior to building
+  # that may fail due to cross-compilation
+  set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
 else()
-    # No signature verification
-    set(TINYCRYPT_DIR ${MCUBOOT_ROOT_DIR}/ext/tinycrypt/lib)
-    set(CRYPTO_INC
-        ${TINYCRYPT_DIR}/include
-        )
-    set(crypto_srcs
-        ${TINYCRYPT_DIR}/source/sha256.c
-        ${TINYCRYPT_DIR}/source/utils.c
-        )
+  message("CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}")
 endif()
 
-if(DEFINED CONFIG_ESP_SIGN_KEY_FILE)
-    if(IS_ABSOLUTE ${CONFIG_ESP_SIGN_KEY_FILE})
-        set(KEY_FILE ${CONFIG_ESP_SIGN_KEY_FILE})
-    else()
-        set(KEY_FILE ${MCUBOOT_ROOT_DIR}/${CONFIG_ESP_SIGN_KEY_FILE})
-    endif()
-    message("MCUBoot bootloader key file: ${KEY_FILE}")
-
-    set(GENERATED_PUBKEY ${CMAKE_CURRENT_BINARY_DIR}/autogen-pubkey.c)
-        add_custom_command(
-            OUTPUT ${GENERATED_PUBKEY}
-            COMMAND
-            ${imgtool_path}
-            getpub
-            -k
-            ${KEY_FILE}
-            > ${GENERATED_PUBKEY}
-            DEPENDS ${KEY_FILE}
-        )
-    list(APPEND crypto_srcs ${GENERATED_PUBKEY})
-endif()
-
-set(bootutil_srcs
-    ${BOOTUTIL_DIR}/src/boot_record.c
-    ${BOOTUTIL_DIR}/src/bootutil_misc.c
-    ${BOOTUTIL_DIR}/src/bootutil_public.c
-    ${BOOTUTIL_DIR}/src/caps.c
-    ${BOOTUTIL_DIR}/src/encrypted.c
-    ${BOOTUTIL_DIR}/src/fault_injection_hardening.c
-    ${BOOTUTIL_DIR}/src/fault_injection_hardening_delay_rng_mbedtls.c
-    ${BOOTUTIL_DIR}/src/image_ecdsa.c
-    ${BOOTUTIL_DIR}/src/image_ed25519.c
-    ${BOOTUTIL_DIR}/src/image_rsa.c
-    ${BOOTUTIL_DIR}/src/image_validate.c
-    ${BOOTUTIL_DIR}/src/loader.c
-    ${BOOTUTIL_DIR}/src/swap_misc.c
-    ${BOOTUTIL_DIR}/src/swap_move.c
-    ${BOOTUTIL_DIR}/src/swap_scratch.c
-    ${BOOTUTIL_DIR}/src/tlv.c
-    )
-
-if(CONFIG_BOOT_RAM_LOAD)
-    list(APPEND bootutil_srcs
-        ${BOOTUTIL_DIR}/src/ram_load.c
-        )
-endif()
-set(bootutil_paths)
+include(common.cmake)
 
-set(CFLAGS
-    "-Wno-frame-address"
-    "-Wall"
-    "-Wextra"
-    "-W"
-    "-Wdeclaration-after-statement"
-    "-Wwrite-strings"
-    "-Wlogical-op"
-    "-Wshadow"
-    "-ffunction-sections"
-    "-fdata-sections"
-    "-fstrict-volatile-bitfields"
-    "-Werror=all"
-    "-Wno-error=unused-function"
-    "-Wno-error=unused-but-set-variable"
-    "-Wno-error=unused-variable"
-    "-Wno-error=deprecated-declarations"
-    "-Wno-unused-parameter"
-    "-Wno-sign-compare"
-    "-ggdb"
-    "-Os"
-    "-D_GNU_SOURCE"
-    "-std=gnu17"
-    "-Wno-old-style-declaration"
-    "-Wno-implicit-int"
-    "-Wno-declaration-after-statement"
-    )
-
-set(LDFLAGS
-    "-nostdlib"
-    "-Wno-frame-address"
-    "-Wl,--cref"
+list(APPEND LDFLAGS
     "-Wl,--Map=${APP_NAME}.map"
-    "-fno-rtti"
-    "-fno-lto"
-    "-Wl,--gc-sections"
-    "-Wl,--undefined=uxTopUsedPriority"
-    "-lm"
-    "-lgcc"
-    "-lgcov"
-    )
-
-if ("${MCUBOOT_ARCH}" STREQUAL "xtensa")
-    list(APPEND CFLAGS
-        "-mlongcalls"
-        )
-    list(APPEND LDFLAGS
-        "-mlongcalls"
-        )
-endif()
-
-add_subdirectory(hal)
-add_executable(
-    ${APP_EXECUTABLE}
-    ${CMAKE_CURRENT_LIST_DIR}/main.c
     )
 
 target_compile_options(
-    ${APP_EXECUTABLE}
-    PUBLIC
-    ${CFLAGS}
-    )
-
-set(port_srcs
-    ${CMAKE_CURRENT_LIST_DIR}/port/esp_mcuboot.c
-    ${CMAKE_CURRENT_LIST_DIR}/port/esp_loader.c
-    ${CMAKE_CURRENT_LIST_DIR}/os.c
-    )
-
-if(CONFIG_ESP_MCUBOOT_SERIAL)
-    set(MBEDTLS_DIR "${MCUBOOT_ROOT_DIR}/ext/mbedtls")
-
-    list(APPEND bootutil_srcs
-        ${BOOT_SERIAL_DIR}/src/boot_serial.c
-        ${BOOT_SERIAL_DIR}/src/zcbor_bulk.c
-        ${ZCBOR_DIR}/src/zcbor_decode.c
-        ${ZCBOR_DIR}/src/zcbor_encode.c
-        ${ZCBOR_DIR}/src/zcbor_common.c
-        )
-    list(APPEND bootutil_paths
-        ${ZCBOR_DIR}/include
-        )
-    list(APPEND port_srcs
-        ${CMAKE_CURRENT_LIST_DIR}/port/${MCUBOOT_TARGET}/serial_adapter.c
-        ${MBEDTLS_DIR}/library/base64.c
-        )
-    list(APPEND CRYPTO_INC
-        ${MBEDTLS_DIR}/include
-        )
-endif()
+  ${APP_EXECUTABLE}
+  PUBLIC
+  ${CFLAGS}
+  )
 
 target_sources(
-    ${APP_EXECUTABLE}
-    PUBLIC
-    ${bootutil_srcs}
-    ${crypto_srcs}
-    ${port_srcs}
-    )
+  ${APP_EXECUTABLE}
+  PUBLIC
+  ${bootutil_srcs}
+  ${crypto_srcs}
+  ${port_srcs}
+  )
 
 target_include_directories(
-    ${APP_EXECUTABLE}
-    PUBLIC
-    ${BOOTUTIL_DIR}/include
-    ${BOOTUTIL_DIR}/src
-    ${BOOT_SERIAL_DIR}/include
-    ${CRYPTO_INC}
-    ${CMAKE_CURRENT_LIST_DIR}/include
-    ${bootutil_paths}
-    )
+  ${APP_EXECUTABLE}
+  PUBLIC
+  ${inc_directories}
+  )
+
+target_link_libraries(
+  ${APP_EXECUTABLE}
+  PUBLIC
+  -T${ld_output}
+  ${LDFLAGS}
+  )
 
-set(ld_input ${CMAKE_CURRENT_LIST_DIR}/port/${MCUBOOT_TARGET}/ld/bootloader.ld)
-set(ld_output ${CMAKE_CURRENT_BINARY_DIR}/ld/bootloader.ld)
+add_subdirectory(hal)
 
-file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/ld")
+target_link_libraries(
+  ${APP_EXECUTABLE}
+  PUBLIC
+  hal
+  )
 
-get_directory_property(configs COMPILE_DEFINITIONS)
-foreach(c ${configs})
-    list(APPEND conf_defines "-D${c}")
-endforeach()
+# Find installed esptool, if not found falls to IDF's
+find_program(ESPTOOL_COMMAND
+  NAMES esptool esptool.py
+  )
+if("${ESPTOOL_COMMAND}" MATCHES "ESPTOOL_COMMAND-NOTFOUND")
+  if(DEFINED ENV{IDF_PATH})
+    set(esptool_path "${IDF_PATH}/components/esptool_py/esptool/esptool.py")
+  else()
+    message(FATAL_ERROR "esptool.py not found. Please install it using \'pip install esptool\'.")
+  endif()
+else()
+  set(esptool_path "${ESPTOOL_COMMAND}")
+endif()
 
-# Preprocess linker script
-add_custom_command(
-    TARGET ${APP_EXECUTABLE} PRE_LINK
-    COMMAND ${CMAKE_C_COMPILER} -x c -E -P -o ${ld_output} ${conf_defines} ${ld_input}
-    MAIN_DEPENDENCY ${ld_input}
-    COMMENT "Preprocessing bootloader.ld linker script..."
-    )
+# Flash frequency parameter for esptool.py, for more information, check `esptool.py -h`
+if(NOT DEFINED ESP_FLASH_FREQ)
+  if("${MCUBOOT_TARGET}" STREQUAL "esp32" OR
+    "${MCUBOOT_TARGET}" STREQUAL "esp32s2" OR
+    "${MCUBOOT_TARGET}" STREQUAL "esp32s3" OR
+    "${MCUBOOT_TARGET}" STREQUAL "esp32c3" OR
+    "${MCUBOOT_TARGET}" STREQUAL "esp32c6")
+    set(ESP_FLASH_FREQ "40m")
+  elseif("${MCUBOOT_TARGET}" STREQUAL "esp32c2")
+    set(ESP_FLASH_FREQ "60m")
+  elseif("${MCUBOOT_TARGET}" STREQUAL "esp32h2")
+    set(ESP_FLASH_FREQ "24m")
+  endif()
+endif()
 
-target_link_libraries(
-    ${APP_EXECUTABLE}
-    PUBLIC
-    -T${ld_output}
-    ${LDFLAGS}
-    )
+# Flash mode parameter for esptool.py, for more information, check `esptool.py -h`
+if(NOT DEFINED ESP_FLASH_MODE)
+  set(ESP_FLASH_MODE "dio")
+endif()
 
-target_link_libraries(
-    ${APP_EXECUTABLE}
-    PUBLIC
-    hal
-    )
+# Serial baud rate parameter for esptool.py flash use, for more information, check `esptool.py -h`
+if(NOT DEFINED ESP_BAUD_RATE)
+  set(ESP_BAUD_RATE 115200)
+endif()
 
 # This step uses esptool.py for generating the final bootloader binary in
 # Espressif compatible format.
 # Note: Both binary generation and flash steps still have some default arguments
-add_custom_command(TARGET ${APP_EXECUTABLE} POST_BUILD
-    COMMAND
-    ${esptool_path}
-    --chip ${MCUBOOT_TARGET} elf2image --min-rev ${ESP_MIN_REVISION}
-    --flash_mode ${ESP_FLASH_MODE} --flash_freq ${ESP_FLASH_FREQ} --flash_size ${CONFIG_ESP_FLASH_SIZE}
-    -o ${APP_NAME}.bin ${APP_NAME}.elf
-    )
-
-if (DEFINED MCUBOOT_FLASH_PORT)
-    set(FLASH_PORT ${MCUBOOT_FLASH_PORT})
+add_custom_command(
+  TARGET ${APP_EXECUTABLE} POST_BUILD
+  COMMAND
+  ${esptool_path}
+  --chip ${MCUBOOT_TARGET} elf2image --min-rev ${ESP_MIN_REVISION}
+  --flash_mode ${ESP_FLASH_MODE} --flash_freq ${ESP_FLASH_FREQ} --flash_size ${CONFIG_ESP_FLASH_SIZE}
+  -o ${APP_NAME}.bin ${APP_NAME}.elf
+  )
+
+if(DEFINED MCUBOOT_FLASH_PORT)
+  set(FLASH_PORT ${MCUBOOT_FLASH_PORT})
 else()
-    # Defaults to the first USB serial port
-    set(FLASH_PORT "/dev/ttyUSB0")
+  # Defaults to the first USB serial port
+  set(FLASH_PORT "/dev/ttyUSB0")
 endif()
 
-if (NOT EXISTS "${FLASH_PORT}")
-    message(WARNING "Could not open ${FLASH_PORT}, serial port does not exist")
+if(NOT EXISTS "${FLASH_PORT}")
+  message(WARNING "Could not open ${FLASH_PORT}, serial port does not exist")
 endif()
 
+# Target for flashing the bootloader using esptool.py
 add_custom_target(flash DEPENDS ${APP_NAME}.bin)
-add_custom_command(TARGET flash
-    USES_TERMINAL
-    COMMAND
-    ${esptool_path}
-    -p ${FLASH_PORT} -b ${ESP_BAUD_RATE} --before default_reset --after no_reset
-    --chip ${MCUBOOT_TARGET} write_flash
-    --flash_mode ${ESP_FLASH_MODE} --flash_size ${CONFIG_ESP_FLASH_SIZE}
-    --flash_freq ${ESP_FLASH_FREQ} ${CONFIG_ESP_BOOTLOADER_OFFSET}
-    ${APP_NAME}.bin
-    )
+add_custom_command(
+  TARGET flash
+  USES_TERMINAL
+  COMMAND
+  ${esptool_path}
+  -p ${FLASH_PORT} -b ${ESP_BAUD_RATE} --before default_reset --after no_reset
+  --chip ${MCUBOOT_TARGET} write_flash
+  --flash_mode ${ESP_FLASH_MODE} --flash_size ${CONFIG_ESP_FLASH_SIZE}
+  --flash_freq ${ESP_FLASH_FREQ} ${CONFIG_ESP_BOOTLOADER_OFFSET}
+  ${APP_NAME}.bin
+  )
diff --git a/boot/espressif/common.cmake b/boot/espressif/common.cmake
new file mode 100644
index 0000000000..ce20716df0
--- /dev/null
+++ b/boot/espressif/common.cmake
@@ -0,0 +1,273 @@
+# SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
+#
+# SPDX-License-Identifier: Apache-2.0
+
+add_definitions(-DMCUBOOT_TARGET=${MCUBOOT_TARGET})
+add_definitions(-D__ESPRESSIF__=1)
+
+# Set directories
+set(BOOTUTIL_DIR ${MCUBOOT_ROOT_DIR}/boot/bootutil)
+set(BOOT_SERIAL_DIR ${MCUBOOT_ROOT_DIR}/boot/boot_serial)
+set(ZCBOR_DIR ${MCUBOOT_ROOT_DIR}/boot/zcbor)
+
+# Set chip arch
+if("${MCUBOOT_TARGET}" STREQUAL "esp32" OR
+  "${MCUBOOT_TARGET}" STREQUAL "esp32s2" OR
+  "${MCUBOOT_TARGET}" STREQUAL "esp32s3")
+  set(MCUBOOT_ARCH "xtensa")
+elseif("${MCUBOOT_TARGET}" STREQUAL "esp32c3" OR
+  "${MCUBOOT_TARGET}" STREQUAL "esp32c6" OR
+  "${MCUBOOT_TARGET}" STREQUAL "esp32c2" OR
+  "${MCUBOOT_TARGET}" STREQUAL "esp32h2")
+  set(MCUBOOT_ARCH "riscv")
+endif()
+
+# Set the minimum revision for each supported chip
+if("${MCUBOOT_TARGET}" STREQUAL "esp32")
+  set(ESP_MIN_REVISION 3)
+elseif("${MCUBOOT_TARGET}" STREQUAL "esp32s2")
+  set(ESP_MIN_REVISION 0)
+elseif("${MCUBOOT_TARGET}" STREQUAL "esp32s3")
+  set(ESP_MIN_REVISION 0)
+elseif("${MCUBOOT_TARGET}" STREQUAL "esp32c3")
+  set(ESP_MIN_REVISION 3)
+elseif("${MCUBOOT_TARGET}" STREQUAL "esp32c6")
+  set(ESP_MIN_REVISION 0)
+elseif("${MCUBOOT_TARGET}" STREQUAL "esp32c2")
+  set(ESP_MIN_REVISION 0)
+elseif("${MCUBOOT_TARGET}" STREQUAL "esp32h2")
+  set(ESP_MIN_REVISION 0)
+else()
+  message(FATAL_ERROR "Unsupported target ${MCUBOOT_TARGET}")
+endif()
+
+# Get MCUboot revision to be added into bootloader image version
+execute_process(
+  COMMAND git describe --tags
+  WORKING_DIRECTORY ${ESPRESSIF_PORT_DIR}
+  OUTPUT_VARIABLE MCUBOOT_VER
+  OUTPUT_STRIP_TRAILING_WHITESPACE
+  )
+add_definitions(-DMCUBOOT_VER=\"${MCUBOOT_VER}\")
+
+# Set Espressif HAL to use
+if(NOT DEFINED ESP_HAL_PATH)
+  if(DEFINED ENV{ESP_HAL_PATH})
+    set(ESP_HAL_PATH $ENV{ESP_HAL_PATH})
+  else()
+    message(WARNING "ESP_HAL_PATH not defined, checking if IDF_PATH exists.")
+    if(DEFINED ENV{IDF_PATH})
+      set(ESP_HAL_PATH $ENV{IDF_PATH})
+      message("IDF installation found in the system, using IDF_PATH as ESP_HAL_PATH.")
+    else ()
+      message(FATAL_ERROR "Please set -DESP_HAL_PATH parameter or define ESP_HAL_PATH environment variable.")
+    endif()
+  endif()
+endif()
+message(STATUS "Defined ESP_HAL_PATH: ${ESP_HAL_PATH}")
+
+# Verify from which IDF version the HAL is based on
+set(IDF_VER_HEADER_FILE "${ESP_HAL_PATH}/components/esp_common/include/esp_idf_version.h")
+
+get_version_from_header("ESP_IDF_VERSION_MAJOR" ${IDF_VER_HEADER_FILE} IDF_VERSION_MAJOR)
+get_version_from_header("ESP_IDF_VERSION_MINOR" ${IDF_VER_HEADER_FILE} IDF_VERSION_MINOR)
+get_version_from_header("ESP_IDF_VERSION_PATCH" ${IDF_VER_HEADER_FILE} IDF_VERSION_PATCH)
+
+set(IDF_VERSION "${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}.${IDF_VERSION_PATCH}")
+
+if(NOT IDF_VERSION VERSION_EQUAL ${EXPECTED_IDF_HAL_VERSION})
+  message(
+    FATAL_ERROR "
+    Unsupported HAL version ${IDF_VERSION}, expected ${EXPECTED_IDF_HAL_VERSION}. \
+    Verify if the RTOS repository, where you are trying to build from, is up to date, \
+    or check the installation pointed on ESP_HAL_PATH."
+    )
+else ()
+    message(STATUS "HAL based on ESP-IDF version: ${IDF_VERSION}")
+endif()
+
+# Find imgtool.
+# Go with an explicitly installed imgtool first, falling
+# back to mcuboot/scripts/imgtool.py.
+find_program(IMGTOOL_COMMAND
+  NAMES imgtool imgtool.py
+  )
+if("${IMGTOOL_COMMAND}" MATCHES "IMGTOOL_COMMAND-NOTFOUND")
+  set(imgtool_path "${MCUBOOT_ROOT_DIR}/scripts/imgtool.py")
+else()
+  set(imgtool_path "${IMGTOOL_COMMAND}")
+endif()
+
+set(inc_directories
+    ${BOOTUTIL_DIR}/include
+    ${BOOTUTIL_DIR}/src
+    ${ESPRESSIF_PORT_DIR}/include
+    )
+
+set(main_src ${ESPRESSIF_PORT_DIR}/main.c)
+
+set(port_srcs
+    ${ESPRESSIF_PORT_DIR}/port/esp_mcuboot.c
+    ${ESPRESSIF_PORT_DIR}/port/esp_loader.c
+    ${ESPRESSIF_PORT_DIR}/os.c
+    )
+
+set(bootutil_srcs
+    ${BOOTUTIL_DIR}/src/boot_record.c
+    ${BOOTUTIL_DIR}/src/bootutil_misc.c
+    ${BOOTUTIL_DIR}/src/bootutil_public.c
+    ${BOOTUTIL_DIR}/src/caps.c
+    ${BOOTUTIL_DIR}/src/encrypted.c
+    ${BOOTUTIL_DIR}/src/fault_injection_hardening.c
+    ${BOOTUTIL_DIR}/src/fault_injection_hardening_delay_rng_mbedtls.c
+    ${BOOTUTIL_DIR}/src/image_ecdsa.c
+    ${BOOTUTIL_DIR}/src/image_ed25519.c
+    ${BOOTUTIL_DIR}/src/image_rsa.c
+    ${BOOTUTIL_DIR}/src/image_validate.c
+    ${BOOTUTIL_DIR}/src/loader.c
+    ${BOOTUTIL_DIR}/src/swap_misc.c
+    ${BOOTUTIL_DIR}/src/swap_move.c
+    ${BOOTUTIL_DIR}/src/swap_scratch.c
+    ${BOOTUTIL_DIR}/src/swap_offset.c
+    ${BOOTUTIL_DIR}/src/tlv.c
+    )
+
+if(CONFIG_BOOT_RAM_LOAD)
+  list(APPEND bootutil_srcs ${BOOTUTIL_DIR}/src/ram_load.c)
+endif()
+
+if(DEFINED CONFIG_ESP_SIGN_RSA)
+  include(${ESPRESSIF_PORT_DIR}/include/crypto_config/rsa.cmake)
+elseif(DEFINED CONFIG_ESP_SIGN_EC256)
+  include(${ESPRESSIF_PORT_DIR}/include/crypto_config/ec256.cmake)
+elseif(DEFINED CONFIG_ESP_SIGN_ED25519)
+  include(${ESPRESSIF_PORT_DIR}/include/crypto_config/ed25519.cmake)
+else()
+  # No signature verification
+  set(TINYCRYPT_DIR ${MCUBOOT_ROOT_DIR}/ext/tinycrypt/lib)
+  set(CRYPTO_INC
+      ${TINYCRYPT_DIR}/include
+      )
+  set(crypto_srcs
+      ${TINYCRYPT_DIR}/source/sha256.c
+      ${TINYCRYPT_DIR}/source/utils.c
+      )
+endif()
+
+if(DEFINED CONFIG_ESP_SIGN_KEY_FILE)
+  if(IS_ABSOLUTE ${CONFIG_ESP_SIGN_KEY_FILE})
+    set(KEY_FILE ${CONFIG_ESP_SIGN_KEY_FILE})
+  else()
+    set(KEY_FILE ${MCUBOOT_ROOT_DIR}/${CONFIG_ESP_SIGN_KEY_FILE})
+  endif()
+  message("MCUBoot bootloader key file: ${KEY_FILE}")
+
+  set(GENERATED_PUBKEY ${CMAKE_CURRENT_BINARY_DIR}/autogen-pubkey.c)
+      add_custom_command(
+        OUTPUT ${GENERATED_PUBKEY}
+        COMMAND
+        ${imgtool_path}
+        getpub
+        -k
+        ${KEY_FILE}
+        > ${GENERATED_PUBKEY}
+        DEPENDS ${KEY_FILE}
+        )
+  list(APPEND crypto_srcs ${GENERATED_PUBKEY})
+endif()
+
+if(CONFIG_ESP_MCUBOOT_SERIAL)
+  set(MBEDTLS_DIR "${MCUBOOT_ROOT_DIR}/ext/mbedtls")
+
+  list(APPEND bootutil_srcs
+      ${BOOT_SERIAL_DIR}/src/boot_serial.c
+      ${BOOT_SERIAL_DIR}/src/zcbor_bulk.c
+      ${ZCBOR_DIR}/src/zcbor_decode.c
+      ${ZCBOR_DIR}/src/zcbor_encode.c
+      ${ZCBOR_DIR}/src/zcbor_common.c
+      )
+  list(APPEND inc_directories
+      ${BOOT_SERIAL_DIR}/include
+      ${ZCBOR_DIR}/include
+      )
+  list(APPEND port_srcs
+      ${ESPRESSIF_PORT_DIR}/port/${MCUBOOT_TARGET}/serial_adapter.c
+      ${MBEDTLS_DIR}/library/base64.c
+      )
+  list(APPEND CRYPTO_INC
+      ${MBEDTLS_DIR}/include
+      )
+endif()
+
+list(APPEND inc_directories
+    ${CRYPTO_INC}
+    )
+
+set(CFLAGS
+    "-Wno-frame-address"
+    "-Wall"
+    "-Wextra"
+    "-W"
+    "-Wdeclaration-after-statement"
+    "-Wwrite-strings"
+    "-Wlogical-op"
+    "-Wshadow"
+    "-ffunction-sections"
+    "-fdata-sections"
+    "-fstrict-volatile-bitfields"
+    "-Werror=all"
+    "-Wno-error=unused-function"
+    "-Wno-error=unused-but-set-variable"
+    "-Wno-error=unused-variable"
+    "-Wno-error=deprecated-declarations"
+    "-Wno-unused-parameter"
+    "-Wno-sign-compare"
+    "-ggdb"
+    "-Os"
+    "-D_GNU_SOURCE"
+    "-std=gnu17"
+    "-Wno-old-style-declaration"
+    "-Wno-implicit-int"
+    "-Wno-declaration-after-statement"
+    )
+
+set(LDFLAGS
+    "-nostdlib"
+    "-Wno-frame-address"
+    "-Wl,--cref"
+    "-fno-rtti"
+    "-fno-lto"
+    "-Wl,--gc-sections"
+    "-Wl,--undefined=uxTopUsedPriority"
+    "-lm"
+    "-lgcc"
+    "-lgcov"
+    )
+
+if("${MCUBOOT_ARCH}" STREQUAL "xtensa")
+  list(APPEND CFLAGS
+      "-mlongcalls"
+      )
+  list(APPEND LDFLAGS
+      "-mlongcalls"
+      )
+endif()
+
+# Set linker script
+set(ld_input ${ESPRESSIF_PORT_DIR}/port/${MCUBOOT_TARGET}/ld/bootloader.ld)
+set(ld_output ${CMAKE_CURRENT_BINARY_DIR}/ld/bootloader.ld)
+
+file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/ld")
+
+get_directory_property(configs COMPILE_DEFINITIONS)
+foreach(c ${configs})
+  list(APPEND conf_defines "-D${c}")
+endforeach()
+
+# Preprocess linker script
+add_custom_command(
+  TARGET ${APP_EXECUTABLE} PRE_LINK
+  COMMAND ${CMAKE_C_COMPILER} -x c -E -P -o ${ld_output} ${conf_defines} ${ld_input}
+  MAIN_DEPENDENCY ${ld_input}
+  COMMENT "Preprocessing bootloader.ld linker script..."
+  )
diff --git a/boot/espressif/hal/CMakeLists.txt b/boot/espressif/hal/CMakeLists.txt
index d248c26700..795552262f 100644
--- a/boot/espressif/hal/CMakeLists.txt
+++ b/boot/espressif/hal/CMakeLists.txt
@@ -4,6 +4,23 @@
 
 cmake_minimum_required(VERSION 3.13)
 
+if(CONFIG_BUILD_FROM_ZEPHYR)
+    message(STATUS "Building HAL for MCUboot Espressif Port")
+
+    if(${CONFIG_ESP_CONSOLE_UART})
+        add_compile_definitions(CONFIG_ESP_CONSOLE_UART=${CONFIG_ESP_CONSOLE_UART})
+        add_compile_definitions(CONFIG_ESP_CONSOLE_UART_NUM=${CONFIG_ESP_CONSOLE_UART_NUM})
+        if(${CONFIG_ESP_CONSOLE_UART_CUSTOM})
+            add_compile_definitions(CONFIG_ESP_CONSOLE_UART_CUSTOM=${CONFIG_ESP_CONSOLE_UART_CUSTOM})
+            add_compile_definitions(CONFIG_ESP_CONSOLE_UART_TX_GPIO=${CONFIG_ESP_CONSOLE_UART_TX_GPIO})
+            add_compile_definitions(CONFIG_ESP_CONSOLE_UART_RX_GPIO=${CONFIG_ESP_CONSOLE_UART_RX_GPIO})
+        endif()
+    elseif(${CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG})
+        add_compile_definitions(CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=${CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG})
+    endif()
+    add_compile_definitions(CONFIG_MCUBOOT_ESPRESSIF=1)
+endif()
+
 project(hal)
 
 set(esp_hal_dir ${ESP_HAL_PATH})
@@ -156,7 +173,6 @@ set(CFLAGS
 set(LDFLAGS
     "-Wno-frame-address"
     "-Wl,--cref"
-    "-Wl,--Map=${APP_NAME}.map"
     "-fno-rtti"
     "-fno-lto"
     "-Wl,--gc-sections"
@@ -166,6 +182,16 @@ set(LDFLAGS
     "-lgcov"
     )
 
+if(CONFIG_BUILD_FROM_ZEPHYR)
+    list(APPEND include_dirs
+        ${ESPRESSIF_PORT_DIR}/zephyr/include
+        )
+else()
+    list(APPEND LDFLAGS
+        "-Wl,--Map=${APP_NAME}.map"
+        )
+endif()
+
 if("${MCUBOOT_ARCH}" STREQUAL "xtensa")
     list(APPEND CFLAGS
         "-mlongcalls"
diff --git a/boot/espressif/hal/include/esp32c2/sdkconfig.h b/boot/espressif/hal/include/esp32c2/sdkconfig.h
index f71490b2bf..3aff5d8851 100644
--- a/boot/espressif/hal/include/esp32c2/sdkconfig.h
+++ b/boot/espressif/hal/include/esp32c2/sdkconfig.h
@@ -21,7 +21,7 @@
 #define CONFIG_MCUBOOT 1
 #define NDEBUG 1
 #define CONFIG_BOOTLOADER_WDT_TIME_MS 9000
-#define CONFIG_ESP_CONSOLE_UART_BAUDRATE 115200
+#define CONFIG_ESP_CONSOLE_UART_BAUDRATE 74880
 #define CONFIG_BOOTLOADER_OFFSET_IN_FLASH 0x0000
 #define CONFIG_PARTITION_TABLE_OFFSET 0x10000
 #define CONFIG_EFUSE_VIRTUAL_OFFSET 0x250000
diff --git a/boot/espressif/hal/include/mcuboot_config/mcuboot_assert.h b/boot/espressif/hal/include/mcuboot_config/mcuboot_assert.h
index fc5990901f..c587439468 100644
--- a/boot/espressif/hal/include/mcuboot_config/mcuboot_assert.h
+++ b/boot/espressif/hal/include/mcuboot_config/mcuboot_assert.h
@@ -17,3 +17,5 @@ extern void mcuboot_assert_handler(const char *file, int line, const char *func)
             mcuboot_assert_handler(__FILE__, __LINE__, __func__);   \
         }                                                           \
     } while(0)
+
+#define ASSERT(arg) assert(arg)
diff --git a/boot/espressif/zephyr/CMakeLists.txt b/boot/espressif/zephyr/CMakeLists.txt
new file mode 100644
index 0000000000..9e6f7f6efc
--- /dev/null
+++ b/boot/espressif/zephyr/CMakeLists.txt
@@ -0,0 +1,51 @@
+# SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
+#
+# SPDX-License-Identifier: Apache-2.0
+
+cmake_minimum_required(VERSION 3.20.0)
+cmake_policy(SET CMP0109 NEW)
+
+include(${CMAKE_CURRENT_LIST_DIR}/../tools/utils.cmake)
+
+message(STATUS "Building MCUboot for Zephyr OS -- ESPRESSIF PORT")
+
+find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
+
+# Set Zephyr referenced variables
+set(MCUBOOT_ROOT_DIR ${ZEPHYR_MCUBOOT_MODULE_DIR})
+set(ESPRESSIF_PORT_DIR ${MCUBOOT_ROOT_DIR}/boot/espressif)
+set(MCUBOOT_TARGET ${CONFIG_SOC})
+set(ESP_HAL_PATH ${ZEPHYR_HAL_ESPRESSIF_MODULE_DIR})
+set(APP_EXECUTABLE ${ZEPHYR_CURRENT_LIBRARY})
+set(EXPECTED_IDF_HAL_VERSION "5.1.5")
+
+project(NONE)
+
+include(../common.cmake)
+
+zephyr_library_include_directories(
+  ${inc_directories}
+  )
+
+zephyr_library_sources(
+  ${main_src}
+  ${bootutil_srcs}
+  ${crypto_srcs}
+  ${port_srcs}
+  )
+
+zephyr_library_link_libraries(
+  gcc
+  -T${ld_output}
+  ${LDFLAGS}
+  )
+
+if("${MCUBOOT_ARCH}" STREQUAL "xtensa")
+  zephyr_include_directories(
+    ${ESP_HAL_PATH}/components/${MCUBOOT_ARCH}/${MCUBOOT_TARGET}/include
+    ${ESP_HAL_PATH}/components/${MCUBOOT_ARCH}/include
+  )
+endif()
+
+add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../hal ${CMAKE_CURRENT_BINARY_DIR}/hal)
+zephyr_library_link_libraries(hal)
diff --git a/boot/espressif/zephyr/Kconfig b/boot/espressif/zephyr/Kconfig
new file mode 100644
index 0000000000..a8581e7d8b
--- /dev/null
+++ b/boot/espressif/zephyr/Kconfig
@@ -0,0 +1,354 @@
+mainmenu "MCUboot Espressif Port configuration"
+
+config MCUBOOT_ESPRESSIF
+	bool
+	default y
+	help
+	  Hidden option used to indicate that the current image is MCUBoot
+	  Espressif Port
+
+config BUILD_FROM_ZEPHYR
+	bool
+	default y if ZEPHYR_HAL_ESPRESSIF_MODULE
+	help
+	  Hidden option used to indicate that the MCUBoot Espressif Port
+	  is being built from Zephyr
+
+config ESP_USE_MBEDTLS
+	bool
+	# Hidden option
+	help
+	  Use mbedTLS for crypto primitives.
+
+config ESP_USE_TINYCRYPT
+	bool
+	# Hidden option
+	help
+	  Use TinyCrypt for crypto primitives.
+
+menu "MCUBoot settings"
+
+config ESP_SINGLE_APPLICATION_SLOT
+	bool "Single slot bootloader"
+	help
+	  Single image area is used for application which means that
+	  uploading a new application overwrites the one that previously
+	  occupied the area.
+
+choice ESP_SIGN_TYPE
+	prompt "Signature type"
+	default ESP_SIGN_NONE
+
+config ESP_SIGN_NONE
+	bool "No signature; use only hash check"
+
+config ESP_SIGN_RSA
+	bool "RSA signatures"
+	select ESP_USE_MBEDTLS
+
+if ESP_SIGN_RSA
+config ESP_SIGN_RSA_LEN
+	int "RSA signature length"
+	range 2048 3072
+	default 2048
+endif
+
+config ESP_SIGN_EC256
+	bool "Elliptic curve digital signatures with curve P-256"
+	select ESP_USE_TINYCRYPT
+
+config ESP_SIGN_ED25519
+	bool "Edwards curve digital signatures using ed25519"
+	select ESP_USE_TINYCRYPT
+	help
+	  This is ed25519 signature calculated over SHA512 of SHA256 of application
+	  image.
+
+endchoice # ESP_SIGN_TYPE
+
+config ESP_SIGN_KEY_FILE
+	string "PEM key file"
+	depends on !ESP_SIGN_NONE
+	default "root-ec-p256.pem" if ESP_SIGN_EC256
+	default "root-ed25519.pem" if ESP_SIGN_ED25519
+	default "root-rsa-3072.pem" if ESP_SIGN_RSA && ESP_SIGN_RSA_LEN=3072
+	default "root-rsa-2048.pem" if ESP_SIGN_RSA && ESP_SIGN_RSA_LEN=2048
+	default ""
+	help
+	  You can use either absolute or relative path.
+	  In case relative path is used, the build system assumes that it starts
+	  from the directory where the MCUBoot KConfig configuration file is
+	  located. If the key file is not there, the build system uses relative
+	  path that starts from the MCUBoot repository root directory.
+	  The key file will be parsed by imgtools getpub command and a .c source
+	  with the public key information will be written in a format expected by
+	  MCUboot.
+
+if !ESP_SINGLE_APPLICATION_SLOT
+choice ESP_BOOT_IMAGE_UPGRADE_MODE
+	prompt "Image upgrade modes"
+	default ESP_BOOT_SWAP_USING_SCRATCH
+
+config ESP_BOOT_SWAP_USING_SCRATCH
+	bool "Swap mode that run with the scratch partition"
+	help
+	  This is the most conservative swap mode but it can work even on
+	  devices with heterogeneous flash page layout.
+
+config ESP_BOOT_UPGRADE_ONLY
+	bool "Overwrite image updates instead of swapping"
+	help
+	  If y, overwrite the primary slot with the upgrade image instead
+	  of swapping them. This prevents the fallback recovery, but
+	  uses a much simpler code path.
+
+config ESP_BOOT_SWAP_USING_OFFSET
+	bool "Swap using offset mode without scratch partition"
+	help
+	  If y, the swap upgrade is done by each sector X+1 in the secondary slot moved index X in
+	  the primary slot, then the sector at X+1 in the primary is moved to index X in the
+	  secondary.
+	  This allows a swap upgrade without using a scratch partition, but is currently limited
+	  to all sectors in both slots being of the same size. This mode offers faster swap times
+	  with less flash endurance usage than swap using move, firmware updates must be placed at
+	  the second sector in the second slot instead of the first.
+
+config ESP_BOOT_SWAP_USING_MOVE
+	bool "Swap using move mode without scratch partition"
+	help
+	  If y, the swap upgrade is done in two steps, where first every
+	  sector of the primary slot is moved up one sector, then for
+	  each sector X in the secondary slot, it is moved to index X in
+	  the primary slot, then the sector at X+1 in the primary is
+	  moved to index X in the secondary.
+	  This allows a swap upgrade without using a scratch partition,
+	  but is currently limited to all sectors in both slots being of
+	  the same size.
+
+endchoice # ESP_BOOT_IMAGE_UPGRADE_MODE
+
+endif # !ESP_SINGLE_APPLICATION_SLOT
+
+config ESP_IMAGE_NUMBER
+	int "Number of updateable images"
+	default 1
+	range 1 1 if ESP_SINGLE_APPLICATION_SLOT
+	range 1 2 if !ESP_SINGLE_APPLICATION_SLOT
+	help
+		Enables support of multi image update.
+
+config ESP_DOWNGRADE_PREVENTION
+	bool "Downgrade prevention"
+	help
+	  Prevent downgrades by enforcing incrementing version numbers.
+	  When this option is set, any upgrade must have greater major version
+	  or greater minor version with equal major version. This mechanism
+	  only protects against some attacks against version downgrades (for
+	  example, a JTAG could be used to write an older version).
+
+config ESP_DOWNGRADE_PREVENTION_SECURITY_COUNTER
+	bool "Use image security counter instead of version number"
+	depends on ESP_DOWNGRADE_PREVENTION
+	depends on (ESP_BOOT_SWAP_USING_MOVE || ESP_BOOT_SWAP_USING_SCRATCH || ESP_BOOT_SWAP_USING_OFFSET)
+	help
+	  Security counter is used for version eligibility check instead of pure
+	  version.  When this option is set, any upgrade must have greater or
+	  equal security counter value.
+	  Because of the acceptance of equal values it allows for software
+	  downgrades to some extent.
+
+endmenu # MCUboot Settings
+
+menu "Flash map organization settings"
+
+if BUILD_FROM_ZEPHYR
+DT_BOOT_PARTITION_PATH := $(dt_nodelabel_path,boot_partition)
+DT_IMG0_SLOT0_PARTITION_PATH := $(dt_nodelabel_path,slot0_partition)
+DT_IMG0_SLOT1_PARTITION_PATH := $(dt_nodelabel_path,slot1_partition)
+DT_SCRATCH_PARTITION_PATH := $(dt_nodelabel_path,scratch_partition)
+DT_FLASH_SIZE := $(div, $(dt_node_reg_size_int,$(dt_nodelabel_path,flash0)),1048576)
+endif # BUILD_FROM_ZEPHYR
+
+choice ESP_FLASHSIZE
+	prompt "Flash size"
+	default ESP_FLASHSIZE_4MB
+	depends on !BUILD_FROM_ZEPHYR
+	help
+	  SPI flash size, in megabytes
+
+config ESP_FLASHSIZE_1MB
+	bool "1 MB"
+config ESP_FLASHSIZE_2MB
+	bool "2 MB"
+config ESP_FLASHSIZE_4MB
+	bool "4 MB"
+config ESP_FLASHSIZE_8MB
+	bool "8 MB"
+config ESP_FLASHSIZE_16MB
+	bool "16 MB"
+config ESP_FLASHSIZE_32MB
+	bool "32 MB"
+config ESP_FLASHSIZE_64MB
+	bool "64 MB"
+config ESP_FLASHSIZE_128MB
+	bool "128 MB"
+endchoice # ESP_FLASHSIZE
+
+config ESP_FLASH_SIZE
+	string
+	default "$(DT_FLASH_SIZE)MB" if BUILD_FROM_ZEPHYR
+	default "1MB" if ESP_FLASHSIZE_1MB
+	default "2MB" if ESP_FLASHSIZE_2MB
+	default "4MB" if ESP_FLASHSIZE_4MB
+	default "8MB" if ESP_FLASHSIZE_8MB
+	default "16MB" if ESP_FLASHSIZE_16MB
+	default "32MB" if ESP_FLASHSIZE_32MB
+	default "64MB" if ESP_FLASHSIZE_64MB
+	default "128MB" if ESP_FLASHSIZE_128MB
+
+config ESP_BOOTLOADER_OFFSET
+	hex
+	default $(dt_node_reg_addr_hex,$(DT_BOOT_PARTITION_PATH)) if BUILD_FROM_ZEPHYR
+	default 0x1000 if SOC_ESP32 || SOC_ESP32S2
+	default 0x0
+	help
+	  Offset address that 2nd bootloader will be flashed to.
+	  The value is determined by the ROM bootloader.
+
+config ESP_BOOTLOADER_SIZE
+	hex "Bootloader size"
+	default $(dt_node_reg_size_hex,$(DT_BOOT_PARTITION_PATH)) if BUILD_FROM_ZEPHYR
+	default 0xF000
+	help
+	  Bootloader size
+
+config ESP_IMAGE0_PRIMARY_START_ADDRESS
+	hex "Image 0 primary slot offset"
+	default $(dt_node_reg_addr_hex,$(DT_IMG0_SLOT0_PARTITION_PATH)) if BUILD_FROM_ZEPHYR
+	default 0x10000
+	help
+	  Primary slot flash offset for Image 0
+
+config ESP_APPLICATION_SIZE
+	hex "Applicaton image size"
+	default $(dt_node_reg_size_hex,$(DT_IMG0_SLOT0_PARTITION_PATH)) if BUILD_FROM_ZEPHYR
+	default 0x100000
+	help
+	  Application image size
+
+if !ESP_SINGLE_APPLICATION_SLOT
+config ESP_IMAGE0_SECONDARY_START_ADDRESS
+	hex "Image 0 secondary slot offset"
+	default $(dt_node_reg_addr_hex,$(DT_IMG0_SLOT1_PARTITION_PATH)) if BUILD_FROM_ZEPHYR
+	default 0x110000
+	help
+		Secondary slot flash offset for Image 0
+
+if ESP_BOOT_SWAP_USING_SCRATCH
+config ESP_SCRATCH_OFFSET
+	hex "Scratch area offset"
+	default $(dt_node_reg_addr_hex,$(DT_SCRATCH_PARTITION_PATH)) if BUILD_FROM_ZEPHYR
+	default 0x210000
+	help
+		Scratch area offset
+
+config ESP_SCRATCH_SIZE
+	hex "Scratch area size"
+	default $(dt_node_reg_size_hex,$(DT_SCRATCH_PARTITION_PATH)) if BUILD_FROM_ZEPHYR
+	default 0x40000
+	help
+		Scratch area size
+endif # ESP_BOOT_SWAP_USING_SCRATCH
+endif # !ESP_SINGLE_APPLICATION_SLOT
+
+endmenu # Flash map organization settings
+
+menu "Console output settings"
+
+if BUILD_FROM_ZEPHYR
+DT_CHOSEN_Z_CONSOLE := zephyr,console
+endif # BUILD_FROM_ZEPHYR
+
+choice ESP_CONSOLE_CHANNEL
+	prompt "Channel for console output from bootloader"
+	default ESP_CONSOLE_CHANNEL_USB_SERIAL_JTAG if BUILD_FROM_ZEPHYR && \
+													$(dt_nodelabel_enabled,usb_serial) && $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_CONSOLE)) = $(dt_nodelabel_reg_addr_hex,usb_serial)
+	default ESP_CONSOLE_CHANNEL_UART_CUSTOM if BUILD_FROM_ZEPHYR && \
+												$(dt_nodelabel_enabled,uart1) && $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_CONSOLE)) = $(dt_nodelabel_reg_addr_hex,uart1)
+	default ESP_CONSOLE_CHANNEL_UART_DEFAULT
+	help
+	  Select where to send console output
+config ESP_CONSOLE_CHANNEL_UART_DEFAULT
+	bool "Default UART0"
+config ESP_CONSOLE_CHANNEL_USB_SERIAL_JTAG
+	bool "USB Serial/JTAG Controller"
+	depends on SOC_ESP32C3 || SOC_ESP32C6 || SOC_ESP32S3
+config ESP_CONSOLE_CHANNEL_UART_CUSTOM
+	bool "Custom UART"
+endchoice
+
+config ESP_CONSOLE_UART
+	bool
+	default y if ESP_CONSOLE_CHANNEL_UART_DEFAULT || ESP_CONSOLE_CHANNEL_UART_CUSTOM
+
+config ESP_CONSOLE_UART_CUSTOM
+	bool
+	default y if ESP_CONSOLE_CHANNEL_UART_CUSTOM
+
+config ESP_CONSOLE_USB_SERIAL_JTAG
+	bool
+	default y if ESP_CONSOLE_CHANNEL_USB_SERIAL_JTAG
+
+config ESP_CONSOLE_MULTIPLE_UART
+	bool
+	default y if !SOC_ESP32C3 && !SOC_ESP32H2 && !SOC_ESP32C2 && !SOC_ESP32C6
+
+choice ESP_CONSOLE_UART_CUSTOM_NUM
+	prompt "UART port to use for console output (0-1)"
+	depends on ESP_CONSOLE_UART_CUSTOM && ESP_CONSOLE_MULTIPLE_UART
+	default ESP_CONSOLE_UART_CUSTOM_NUM_0 if BUILD_FROM_ZEPHYR && \
+												$(dt_nodelabel_enabled,uart0) && $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_CONSOLE)) = $(dt_nodelabel_reg_addr_hex,uart0)
+	default ESP_CONSOLE_UART_CUSTOM_NUM_1 if BUILD_FROM_ZEPHYR && \
+												$(dt_nodelabel_enabled,uart1) && $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_CONSOLE)) = $(dt_nodelabel_reg_addr_hex,uart1)
+	help
+	  This UART peripheral is used for console output from bootloader.
+
+config ESP_CONSOLE_UART_CUSTOM_NUM_0
+	bool "UART0"
+config ESP_CONSOLE_UART_CUSTOM_NUM_1
+	bool "UART1"
+endchoice
+
+config ESP_CONSOLE_UART_NUM
+	int
+	default 0 if ESP_CONSOLE_CHANNEL_UART_DEFAULT
+	default 0 if !ESP_CONSOLE_MULTIPLE_UART
+	default 0 if ESP_CONSOLE_UART_CUSTOM_NUM_0
+	default 1 if ESP_CONSOLE_UART_CUSTOM_NUM_1
+	depends on ESP_CONSOLE_UART
+
+config ESP_CONSOLE_UART_TX_GPIO
+	int "UART TX GPIO pin"
+	depends on ESP_CONSOLE_UART_CUSTOM
+	range 0 46
+	default 1 if SOC_ESP32
+	default 20 if SOC_ESP32C2
+	default 21 if SOC_ESP32C3
+	default 9 if SOC_ESP32C6
+	default 24 if SOC_ESP32H2
+	default 43
+
+config ESP_CONSOLE_UART_RX_GPIO
+	int "UART RX GPIO pin"
+	depends on ESP_CONSOLE_UART_CUSTOM
+	range 0 46
+	default 3 if SOC_ESP32
+	default 19 if SOC_ESP32C2
+	default 20 if SOC_ESP32C3
+	default 8 if SOC_ESP32C6
+	default 23 if SOC_ESP32H2
+	default 44
+
+endmenu # Console output settings
+
+source "Kconfig.zephyr"
diff --git a/boot/espressif/zephyr/include/stubs.h b/boot/espressif/zephyr/include/stubs.h
new file mode 100644
index 0000000000..1a0e3a1f28
--- /dev/null
+++ b/boot/espressif/zephyr/include/stubs.h
@@ -0,0 +1,7 @@
+/*
+ * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+ /* Empty stub file, needed when building from Zephyr sysbuild */
diff --git a/boot/espressif/zephyr/prj.conf b/boot/espressif/zephyr/prj.conf
new file mode 100644
index 0000000000..48d446fe0e
--- /dev/null
+++ b/boot/espressif/zephyr/prj.conf
@@ -0,0 +1 @@
+# Empty prj.conf, needed when building from Zephyr sysbuild
diff --git a/boot/espressif/zephyr/socs/esp32_procpu.conf b/boot/espressif/zephyr/socs/esp32_procpu.conf
new file mode 100644
index 0000000000..c048a626e1
--- /dev/null
+++ b/boot/espressif/zephyr/socs/esp32_procpu.conf
@@ -0,0 +1,51 @@
+CONFIG_INTC_ESP32=n
+CONFIG_CLOCK_CONTROL=n
+CONFIG_CLOCK_CONTROL_ESP32=n
+CONFIG_SYS_CLOCK_EXISTS=n
+CONFIG_LOG=n
+
+# Drivers and peripherals
+CONFIG_I2C=n
+CONFIG_WATCHDOG=n
+CONFIG_GPIO=n
+CONFIG_GPIO_ESP32=n
+CONFIG_PINCTRL=n
+CONFIG_PINCTRL_ESP32=n
+CONFIG_SPI=n
+CONFIG_SERIAL=n
+CONFIG_FLASH=n
+
+# Power management
+CONFIG_PM=n
+
+# Interrupts
+CONFIG_DYNAMIC_INTERRUPTS=n
+CONFIG_IRQ_OFFLOAD=n
+
+# Memory protection
+CONFIG_THREAD_CUSTOM_DATA=n
+CONFIG_FPU=n
+
+# Boot
+CONFIG_BOOT_BANNER=n
+
+# Console
+CONFIG_CONSOLE=n
+CONFIG_UART_CONSOLE=n
+CONFIG_STDOUT_CONSOLE=n
+CONFIG_PRINTK=n
+CONFIG_EARLY_CONSOLE=n
+CONFIG_UART_ESP32=n
+
+CONFIG_KERNEL_MEM_POOL=n
+CONFIG_NUM_PREEMPT_PRIORITIES=0
+CONFIG_SCHED_DUMB=n
+CONFIG_WAITQ_DUMB=n
+
+CONFIG_GEN_SW_ISR_TABLE=n
+CONFIG_GEN_ISR_TABLES=n
+CONFIG_CHECK_INIT_PRIORITIES=n
+
+CONFIG_LINKER_ORPHAN_SECTION_PLACE=y
+
+CONFIG_XTENSA_ENABLE_BACKTRACE=n
diff --git a/boot/espressif/zephyr/socs/esp32c2.conf b/boot/espressif/zephyr/socs/esp32c2.conf
new file mode 100644
index 0000000000..bfefdc219b
--- /dev/null
+++ b/boot/espressif/zephyr/socs/esp32c2.conf
@@ -0,0 +1,49 @@
+CONFIG_INTC_ESP32=n
+CONFIG_CLOCK_CONTROL=n
+CONFIG_CLOCK_CONTROL_ESP32=n
+CONFIG_SYS_CLOCK_EXISTS=n
+CONFIG_LOG=n
+
+# Drivers and peripherals
+CONFIG_I2C=n
+CONFIG_WATCHDOG=n
+CONFIG_GPIO=n
+CONFIG_GPIO_ESP32=n
+CONFIG_PINCTRL=n
+CONFIG_PINCTRL_ESP32=n
+CONFIG_SPI=n
+CONFIG_SERIAL=n
+CONFIG_FLASH=n
+
+# Power management
+CONFIG_PM=n
+
+# Interrupts
+CONFIG_DYNAMIC_INTERRUPTS=n
+CONFIG_IRQ_OFFLOAD=n
+
+# Memory protection
+CONFIG_THREAD_STACK_INFO=n
+CONFIG_THREAD_CUSTOM_DATA=n
+CONFIG_FPU=n
+
+# Boot
+CONFIG_BOOT_BANNER=n
+
+# Console
+CONFIG_CONSOLE=n
+CONFIG_UART_CONSOLE=n
+CONFIG_STDOUT_CONSOLE=n
+CONFIG_PRINTK=n
+CONFIG_EARLY_CONSOLE=n
+CONFIG_UART_ESP32=n
+
+CONFIG_MULTITHREADING=n
+CONFIG_KERNEL_MEM_POOL=n
+CONFIG_NUM_PREEMPT_PRIORITIES=0
+
+CONFIG_GEN_SW_ISR_TABLE=n
+CONFIG_GEN_ISR_TABLES=n
+CONFIG_CHECK_INIT_PRIORITIES=n
+
+CONFIG_LINKER_ORPHAN_SECTION_PLACE=y
diff --git a/boot/espressif/zephyr/socs/esp32c3.conf b/boot/espressif/zephyr/socs/esp32c3.conf
new file mode 100644
index 0000000000..bfefdc219b
--- /dev/null
+++ b/boot/espressif/zephyr/socs/esp32c3.conf
@@ -0,0 +1,49 @@
+CONFIG_INTC_ESP32=n
+CONFIG_CLOCK_CONTROL=n
+CONFIG_CLOCK_CONTROL_ESP32=n
+CONFIG_SYS_CLOCK_EXISTS=n
+CONFIG_LOG=n
+
+# Drivers and peripherals
+CONFIG_I2C=n
+CONFIG_WATCHDOG=n
+CONFIG_GPIO=n
+CONFIG_GPIO_ESP32=n
+CONFIG_PINCTRL=n
+CONFIG_PINCTRL_ESP32=n
+CONFIG_SPI=n
+CONFIG_SERIAL=n
+CONFIG_FLASH=n
+
+# Power management
+CONFIG_PM=n
+
+# Interrupts
+CONFIG_DYNAMIC_INTERRUPTS=n
+CONFIG_IRQ_OFFLOAD=n
+
+# Memory protection
+CONFIG_THREAD_STACK_INFO=n
+CONFIG_THREAD_CUSTOM_DATA=n
+CONFIG_FPU=n
+
+# Boot
+CONFIG_BOOT_BANNER=n
+
+# Console
+CONFIG_CONSOLE=n
+CONFIG_UART_CONSOLE=n
+CONFIG_STDOUT_CONSOLE=n
+CONFIG_PRINTK=n
+CONFIG_EARLY_CONSOLE=n
+CONFIG_UART_ESP32=n
+
+CONFIG_MULTITHREADING=n
+CONFIG_KERNEL_MEM_POOL=n
+CONFIG_NUM_PREEMPT_PRIORITIES=0
+
+CONFIG_GEN_SW_ISR_TABLE=n
+CONFIG_GEN_ISR_TABLES=n
+CONFIG_CHECK_INIT_PRIORITIES=n
+
+CONFIG_LINKER_ORPHAN_SECTION_PLACE=y
diff --git a/boot/espressif/zephyr/socs/esp32c6_hpcore.conf b/boot/espressif/zephyr/socs/esp32c6_hpcore.conf
new file mode 100644
index 0000000000..bfefdc219b
--- /dev/null
+++ b/boot/espressif/zephyr/socs/esp32c6_hpcore.conf
@@ -0,0 +1,49 @@
+CONFIG_INTC_ESP32=n
+CONFIG_CLOCK_CONTROL=n
+CONFIG_CLOCK_CONTROL_ESP32=n
+CONFIG_SYS_CLOCK_EXISTS=n
+CONFIG_LOG=n
+
+# Drivers and peripherals
+CONFIG_I2C=n
+CONFIG_WATCHDOG=n
+CONFIG_GPIO=n
+CONFIG_GPIO_ESP32=n
+CONFIG_PINCTRL=n
+CONFIG_PINCTRL_ESP32=n
+CONFIG_SPI=n
+CONFIG_SERIAL=n
+CONFIG_FLASH=n
+
+# Power management
+CONFIG_PM=n
+
+# Interrupts
+CONFIG_DYNAMIC_INTERRUPTS=n
+CONFIG_IRQ_OFFLOAD=n
+
+# Memory protection
+CONFIG_THREAD_STACK_INFO=n
+CONFIG_THREAD_CUSTOM_DATA=n
+CONFIG_FPU=n
+
+# Boot
+CONFIG_BOOT_BANNER=n
+
+# Console
+CONFIG_CONSOLE=n
+CONFIG_UART_CONSOLE=n
+CONFIG_STDOUT_CONSOLE=n
+CONFIG_PRINTK=n
+CONFIG_EARLY_CONSOLE=n
+CONFIG_UART_ESP32=n
+
+CONFIG_MULTITHREADING=n
+CONFIG_KERNEL_MEM_POOL=n
+CONFIG_NUM_PREEMPT_PRIORITIES=0
+
+CONFIG_GEN_SW_ISR_TABLE=n
+CONFIG_GEN_ISR_TABLES=n
+CONFIG_CHECK_INIT_PRIORITIES=n
+
+CONFIG_LINKER_ORPHAN_SECTION_PLACE=y
diff --git a/boot/espressif/zephyr/socs/esp32s2.conf b/boot/espressif/zephyr/socs/esp32s2.conf
new file mode 100644
index 0000000000..c048a626e1
--- /dev/null
+++ b/boot/espressif/zephyr/socs/esp32s2.conf
@@ -0,0 +1,51 @@
+CONFIG_INTC_ESP32=n
+CONFIG_CLOCK_CONTROL=n
+CONFIG_CLOCK_CONTROL_ESP32=n
+CONFIG_SYS_CLOCK_EXISTS=n
+CONFIG_LOG=n
+
+# Drivers and peripherals
+CONFIG_I2C=n
+CONFIG_WATCHDOG=n
+CONFIG_GPIO=n
+CONFIG_GPIO_ESP32=n
+CONFIG_PINCTRL=n
+CONFIG_PINCTRL_ESP32=n
+CONFIG_SPI=n
+CONFIG_SERIAL=n
+CONFIG_FLASH=n
+
+# Power management
+CONFIG_PM=n
+
+# Interrupts
+CONFIG_DYNAMIC_INTERRUPTS=n
+CONFIG_IRQ_OFFLOAD=n
+
+# Memory protection
+CONFIG_THREAD_CUSTOM_DATA=n
+CONFIG_FPU=n
+
+# Boot
+CONFIG_BOOT_BANNER=n
+
+# Console
+CONFIG_CONSOLE=n
+CONFIG_UART_CONSOLE=n
+CONFIG_STDOUT_CONSOLE=n
+CONFIG_PRINTK=n
+CONFIG_EARLY_CONSOLE=n
+CONFIG_UART_ESP32=n
+
+CONFIG_KERNEL_MEM_POOL=n
+CONFIG_NUM_PREEMPT_PRIORITIES=0
+CONFIG_SCHED_DUMB=n
+CONFIG_WAITQ_DUMB=n
+
+CONFIG_GEN_SW_ISR_TABLE=n
+CONFIG_GEN_ISR_TABLES=n
+CONFIG_CHECK_INIT_PRIORITIES=n
+
+CONFIG_LINKER_ORPHAN_SECTION_PLACE=y
+
+CONFIG_XTENSA_ENABLE_BACKTRACE=n
diff --git a/boot/espressif/zephyr/socs/esp32s3_procpu.conf b/boot/espressif/zephyr/socs/esp32s3_procpu.conf
new file mode 100644
index 0000000000..c048a626e1
--- /dev/null
+++ b/boot/espressif/zephyr/socs/esp32s3_procpu.conf
@@ -0,0 +1,51 @@
+CONFIG_INTC_ESP32=n
+CONFIG_CLOCK_CONTROL=n
+CONFIG_CLOCK_CONTROL_ESP32=n
+CONFIG_SYS_CLOCK_EXISTS=n
+CONFIG_LOG=n
+
+# Drivers and peripherals
+CONFIG_I2C=n
+CONFIG_WATCHDOG=n
+CONFIG_GPIO=n
+CONFIG_GPIO_ESP32=n
+CONFIG_PINCTRL=n
+CONFIG_PINCTRL_ESP32=n
+CONFIG_SPI=n
+CONFIG_SERIAL=n
+CONFIG_FLASH=n
+
+# Power management
+CONFIG_PM=n
+
+# Interrupts
+CONFIG_DYNAMIC_INTERRUPTS=n
+CONFIG_IRQ_OFFLOAD=n
+
+# Memory protection
+CONFIG_THREAD_CUSTOM_DATA=n
+CONFIG_FPU=n
+
+# Boot
+CONFIG_BOOT_BANNER=n
+
+# Console
+CONFIG_CONSOLE=n
+CONFIG_UART_CONSOLE=n
+CONFIG_STDOUT_CONSOLE=n
+CONFIG_PRINTK=n
+CONFIG_EARLY_CONSOLE=n
+CONFIG_UART_ESP32=n
+
+CONFIG_KERNEL_MEM_POOL=n
+CONFIG_NUM_PREEMPT_PRIORITIES=0
+CONFIG_SCHED_DUMB=n
+CONFIG_WAITQ_DUMB=n
+
+CONFIG_GEN_SW_ISR_TABLE=n
+CONFIG_GEN_ISR_TABLES=n
+CONFIG_CHECK_INIT_PRIORITIES=n
+
+CONFIG_LINKER_ORPHAN_SECTION_PLACE=y
+
+CONFIG_XTENSA_ENABLE_BACKTRACE=n
diff --git a/docs/release-notes.d/espressif-build-espressif-port-from-zephyros-sysbuild.md b/docs/release-notes.d/espressif-build-espressif-port-from-zephyros-sysbuild.md
new file mode 100644
index 0000000000..101a35e2aa
--- /dev/null
+++ b/docs/release-notes.d/espressif-build-espressif-port-from-zephyros-sysbuild.md
@@ -0,0 +1 @@
+- Enable building MCUboot Espressif Port from Zephyr's build system for Espressif chips.