boot: zephyr: esp32: zephyr port

Add support for ESP32xx targets to build
as Zephyr application.

Signed-off-by: Marek Matej <marek.matej@espressif.com>
diff --git a/boot/espressif/port/esp_loader.c b/boot/espressif/port/esp_loader.c
index 4978df6..abb9fdc 100644
--- a/boot/espressif/port/esp_loader.c
+++ b/boot/espressif/port/esp_loader.c
@@ -72,7 +72,7 @@
         FIH_PANIC;
     }
 
-    if (!esp_ptr_in_dram((void *)load_header.dram_dest_addr) || !esp_ptr_in_dram((void *)load_header.dram_dest_addr + load_header.dram_size)) {
+    if (!esp_ptr_in_dram((void *)load_header.dram_dest_addr) || !esp_ptr_in_dram((void *)(load_header.dram_dest_addr + load_header.dram_size))) {
         BOOT_LOG_ERR("DRAM region in load header is not valid. Aborting");
         FIH_PANIC;
     }
diff --git a/boot/zephyr/Kconfig b/boot/zephyr/Kconfig
index 1493dc3..c7e2e99 100644
--- a/boot/zephyr/Kconfig
+++ b/boot/zephyr/Kconfig
@@ -628,6 +628,7 @@
 	default y if BOOT_SERIAL_CDC_ACM #usb driver requires MULTITHREADING
 	default y if BOOT_USB_DFU_GPIO || BOOT_USB_DFU_WAIT
 	default n if SOC_FAMILY_NRF
+	default n if SOC_FAMILY_ESP32 && MCUBOOT
 	default y
 
 config LOG_PROCESS_THREAD
diff --git a/boot/zephyr/boards/esp32.conf b/boot/zephyr/boards/esp32.conf
new file mode 100644
index 0000000..1b1e862
--- /dev/null
+++ b/boot/zephyr/boards/esp32.conf
@@ -0,0 +1,17 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+
+CONFIG_MCUBOOT_LOG_LEVEL_OFF=y
+CONFIG_LOG_DEFAULT_LEVEL=0
+CONFIG_DEBUG=n
+
+CONFIG_HEAP_MEM_POOL_SIZE=4096
diff --git a/boot/zephyr/boards/esp32_ethernet_kit.conf b/boot/zephyr/boards/esp32_ethernet_kit.conf
new file mode 100644
index 0000000..70a092a
--- /dev/null
+++ b/boot/zephyr/boards/esp32_ethernet_kit.conf
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+
+CONFIG_MCUBOOT_LOG_LEVEL_OFF=y
+CONFIG_LOG_DEFAULT_LEVEL=0
+CONFIG_DEBUG=n
+
+CONFIG_HEAP_MEM_POOL_SIZE=4096
diff --git a/boot/zephyr/boards/esp32c3_devkitm.conf b/boot/zephyr/boards/esp32c3_devkitm.conf
new file mode 100644
index 0000000..8a90ef8
--- /dev/null
+++ b/boot/zephyr/boards/esp32c3_devkitm.conf
@@ -0,0 +1,19 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+
+CONFIG_MCUBOOT_LOG_LEVEL_OFF=y
+CONFIG_LOG_DEFAULT_LEVEL=0
+CONFIG_DEBUG=n
+
+CONFIG_XIP=n
+CONFIG_HEAP_MEM_POOL_SIZE=4096
diff --git a/boot/zephyr/boards/esp32s2_franzininho.conf b/boot/zephyr/boards/esp32s2_franzininho.conf
new file mode 100644
index 0000000..70a092a
--- /dev/null
+++ b/boot/zephyr/boards/esp32s2_franzininho.conf
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+
+CONFIG_MCUBOOT_LOG_LEVEL_OFF=y
+CONFIG_LOG_DEFAULT_LEVEL=0
+CONFIG_DEBUG=n
+
+CONFIG_HEAP_MEM_POOL_SIZE=4096
diff --git a/boot/zephyr/boards/esp32s2_saola.conf b/boot/zephyr/boards/esp32s2_saola.conf
new file mode 100644
index 0000000..70a092a
--- /dev/null
+++ b/boot/zephyr/boards/esp32s2_saola.conf
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+
+CONFIG_MCUBOOT_LOG_LEVEL_OFF=y
+CONFIG_LOG_DEFAULT_LEVEL=0
+CONFIG_DEBUG=n
+
+CONFIG_HEAP_MEM_POOL_SIZE=4096
diff --git a/boot/zephyr/boards/esp32s3_devkitm.conf b/boot/zephyr/boards/esp32s3_devkitm.conf
new file mode 100644
index 0000000..70a092a
--- /dev/null
+++ b/boot/zephyr/boards/esp32s3_devkitm.conf
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+
+CONFIG_MCUBOOT_LOG_LEVEL_OFF=y
+CONFIG_LOG_DEFAULT_LEVEL=0
+CONFIG_DEBUG=n
+
+CONFIG_HEAP_MEM_POOL_SIZE=4096
diff --git a/boot/zephyr/boards/esp_wrover_kit.conf b/boot/zephyr/boards/esp_wrover_kit.conf
new file mode 100644
index 0000000..70a092a
--- /dev/null
+++ b/boot/zephyr/boards/esp_wrover_kit.conf
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+
+CONFIG_MCUBOOT_LOG_LEVEL_OFF=y
+CONFIG_LOG_DEFAULT_LEVEL=0
+CONFIG_DEBUG=n
+
+CONFIG_HEAP_MEM_POOL_SIZE=4096
diff --git a/boot/zephyr/boards/heltec_wifi_lora32_v2.conf b/boot/zephyr/boards/heltec_wifi_lora32_v2.conf
new file mode 100644
index 0000000..70a092a
--- /dev/null
+++ b/boot/zephyr/boards/heltec_wifi_lora32_v2.conf
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+
+CONFIG_MCUBOOT_LOG_LEVEL_OFF=y
+CONFIG_LOG_DEFAULT_LEVEL=0
+CONFIG_DEBUG=n
+
+CONFIG_HEAP_MEM_POOL_SIZE=4096
diff --git a/boot/zephyr/boards/icev_wireless.conf b/boot/zephyr/boards/icev_wireless.conf
new file mode 100644
index 0000000..792e0e3
--- /dev/null
+++ b/boot/zephyr/boards/icev_wireless.conf
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+
+CONFIG_DEBUG=n
+CONFIG_LOG_DEFAULT_LEVEL=0
+
+CONFIG_XIP=n
+CONFIG_HEAP_MEM_POOL_SIZE=4096
diff --git a/boot/zephyr/boards/m5stickc_plus.conf b/boot/zephyr/boards/m5stickc_plus.conf
new file mode 100644
index 0000000..70a092a
--- /dev/null
+++ b/boot/zephyr/boards/m5stickc_plus.conf
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+
+CONFIG_MCUBOOT_LOG_LEVEL_OFF=y
+CONFIG_LOG_DEFAULT_LEVEL=0
+CONFIG_DEBUG=n
+
+CONFIG_HEAP_MEM_POOL_SIZE=4096
diff --git a/boot/zephyr/boards/odroid_go.conf b/boot/zephyr/boards/odroid_go.conf
new file mode 100644
index 0000000..be139d6
--- /dev/null
+++ b/boot/zephyr/boards/odroid_go.conf
@@ -0,0 +1,20 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+
+CONFIG_MCUBOOT_LOG_LEVEL_OFF=y
+CONFIG_LOG_DEFAULT_LEVEL=0
+CONFIG_DEBUG=n
+
+CONFIG_HEAP_MEM_POOL_SIZE=4096
+
+CONFIG_REGULATOR=n
diff --git a/boot/zephyr/boards/olimex_esp32_evb.conf b/boot/zephyr/boards/olimex_esp32_evb.conf
new file mode 100644
index 0000000..70a092a
--- /dev/null
+++ b/boot/zephyr/boards/olimex_esp32_evb.conf
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+
+CONFIG_MCUBOOT_LOG_LEVEL_OFF=y
+CONFIG_LOG_DEFAULT_LEVEL=0
+CONFIG_DEBUG=n
+
+CONFIG_HEAP_MEM_POOL_SIZE=4096
diff --git a/boot/zephyr/boards/stamp_c3.conf b/boot/zephyr/boards/stamp_c3.conf
new file mode 100644
index 0000000..8a90ef8
--- /dev/null
+++ b/boot/zephyr/boards/stamp_c3.conf
@@ -0,0 +1,19 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+
+CONFIG_MCUBOOT_LOG_LEVEL_OFF=y
+CONFIG_LOG_DEFAULT_LEVEL=0
+CONFIG_DEBUG=n
+
+CONFIG_XIP=n
+CONFIG_HEAP_MEM_POOL_SIZE=4096
diff --git a/boot/zephyr/boards/xiao_esp32c3.conf b/boot/zephyr/boards/xiao_esp32c3.conf
new file mode 100644
index 0000000..8a90ef8
--- /dev/null
+++ b/boot/zephyr/boards/xiao_esp32c3.conf
@@ -0,0 +1,19 @@
+# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
+# SPDX-License-Identifier: Apache-2.0
+
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+CONFIG_BOOT_UPGRADE_ONLY=y
+CONFIG_BOOT_VALIDATE_SLOT0=n
+CONFIG_BOOT_SIGNATURE_TYPE_NONE=y
+CONFIG_BOOT_BANNER=n
+
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+
+CONFIG_MCUBOOT_LOG_LEVEL_OFF=y
+CONFIG_LOG_DEFAULT_LEVEL=0
+CONFIG_DEBUG=n
+
+CONFIG_XIP=n
+CONFIG_HEAP_MEM_POOL_SIZE=4096
diff --git a/boot/zephyr/flash_map_extended.c b/boot/zephyr/flash_map_extended.c
index 7c41f8b..be90a8e 100644
--- a/boot/zephyr/flash_map_extended.c
+++ b/boot/zephyr/flash_map_extended.c
@@ -22,10 +22,18 @@
 #define FLASH_DEVICE_ID SOC_FLASH_0_ID
 #define FLASH_DEVICE_BASE CONFIG_FLASH_BASE_ADDRESS
 #define FLASH_DEVICE_NODE DT_CHOSEN(zephyr_flash_controller)
+
 #elif (defined(CONFIG_XTENSA) && DT_NODE_EXISTS(DT_INST(0, jedec_spi_nor)))
 #define FLASH_DEVICE_ID SPI_FLASH_0_ID
 #define FLASH_DEVICE_BASE 0
 #define FLASH_DEVICE_NODE DT_INST(0, jedec_spi_nor)
+
+#elif defined(CONFIG_SOC_FAMILY_ESP32)
+
+#define FLASH_DEVICE_ID SPI_FLASH_0_ID
+#define FLASH_DEVICE_BASE 0
+#define FLASH_DEVICE_NODE DT_CHOSEN(zephyr_flash_controller)
+
 #else
 #error "FLASH_DEVICE_ID could not be determined"
 #endif
diff --git a/boot/zephyr/include/target.h b/boot/zephyr/include/target.h
index d4a00c9..61dfd93 100644
--- a/boot/zephyr/include/target.h
+++ b/boot/zephyr/include/target.h
@@ -31,7 +31,8 @@
  * Sanity check the target support.
  */
 #if (!defined(CONFIG_XTENSA) && !DT_HAS_CHOSEN(zephyr_flash_controller)) || \
-    (defined(CONFIG_XTENSA) && !DT_NODE_EXISTS(DT_INST(0, jedec_spi_nor))) || \
+    (defined(CONFIG_XTENSA) && !DT_NODE_EXISTS(DT_INST(0, jedec_spi_nor)) && \
+    !defined(CONFIG_SOC_FAMILY_ESP32)) || \
     !defined(FLASH_ALIGN) ||                  \
     !(FIXED_PARTITION_EXISTS(slot0_partition)) || \
     !(FIXED_PARTITION_EXISTS(slot1_partition) || CONFIG_SINGLE_APPLICATION_SLOT) || \
diff --git a/boot/zephyr/main.c b/boot/zephyr/main.c
index 50b9870..5201415 100644
--- a/boot/zephyr/main.c
+++ b/boot/zephyr/main.c
@@ -42,6 +42,30 @@
 #include "bootutil/mcuboot_status.h"
 #include "flash_map_backend/flash_map_backend.h"
 
+/* Check if Espressif target is supported */
+#ifdef CONFIG_SOC_FAMILY_ESP32
+
+#include <bootloader_init.h>
+#include <esp_loader.h>
+
+#define IMAGE_INDEX_0   0
+#define IMAGE_INDEX_1   1
+
+#define PRIMARY_SLOT    0
+#define SECONDARY_SLOT  1
+
+#define IMAGE0_PRIMARY_START_ADDRESS \
+          DT_PROP_BY_IDX(DT_NODE_BY_FIXED_PARTITION_LABEL(image_0), reg, 0)
+#define IMAGE0_PRIMARY_SIZE \
+          DT_PROP_BY_IDX(DT_NODE_BY_FIXED_PARTITION_LABEL(image_0), reg, 1)
+
+#define IMAGE1_PRIMARY_START_ADDRESS \
+          DT_PROP_BY_IDX(DT_NODE_BY_FIXED_PARTITION_LABEL(image_1), reg, 0)
+#define IMAGE1_PRIMARY_SIZE \
+          DT_PROP_BY_IDX(DT_NODE_BY_FIXED_PARTITION_LABEL(image_1), reg, 1)
+
+#endif /* CONFIG_SOC_FAMILY_ESP32 */
+
 #ifdef CONFIG_MCUBOOT_SERIAL
 #include "boot_serial/boot_serial.h"
 #include "serial_adapter/serial_adapter.h"
@@ -267,7 +291,10 @@
     ((void (*)(void))vt->reset)();
 }
 
-#elif defined(CONFIG_XTENSA)
+#elif defined(CONFIG_XTENSA) || defined(CONFIG_RISCV)
+
+#ifndef CONFIG_SOC_FAMILY_ESP32
+
 #define SRAM_BASE_ADDRESS	0xBE030000
 
 static void copy_img_to_SRAM(int slot, unsigned int hdr_offset)
@@ -295,6 +322,7 @@
 done:
     flash_area_close(fap);
 }
+#endif /* !CONFIG_SOC_FAMILY_ESP32 */
 
 /* Entry point (.ResetVector) is at the very beginning of the image.
  * Simply copy the image to a suitable location and jump there.
@@ -306,12 +334,19 @@
     BOOT_LOG_INF("br_image_off = 0x%x\n", rsp->br_image_off);
     BOOT_LOG_INF("ih_hdr_size = 0x%x\n", rsp->br_hdr->ih_hdr_size);
 
+#ifdef CONFIG_SOC_FAMILY_ESP32
+    int slot = (rsp->br_image_off == IMAGE0_PRIMARY_START_ADDRESS) ?
+                PRIMARY_SLOT : SECONDARY_SLOT;
+    /* Load memory segments and start from entry point */
+    start_cpu0_image(IMAGE_INDEX_0, slot, rsp->br_hdr->ih_hdr_size);
+#else
     /* Copy from the flash to HP SRAM */
     copy_img_to_SRAM(0, rsp->br_hdr->ih_hdr_size);
 
     /* Jump to entry point */
     start = (void *)(SRAM_BASE_ADDRESS + rsp->br_hdr->ih_hdr_size);
     ((void (*)(void))start)();
+#endif /* CONFIG_SOC_FAMILY_ESP32 */
 }
 
 #else