Skip to content

Commit

Permalink
feat(esp32p4): Stub flasher support
Browse files Browse the repository at this point in the history
  • Loading branch information
radimkarnis committed Nov 1, 2023
1 parent da28460 commit d266645
Show file tree
Hide file tree
Showing 12 changed files with 746 additions and 10 deletions.
18 changes: 13 additions & 5 deletions esptool/targets/esp32p4.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class ESP32P4ROM(ESP32ROM):
DROM_MAP_START = 0x40000000
DROM_MAP_END = 0x44000000

BOOTLOADER_FLASH_OFFSET = 0x0
BOOTLOADER_FLASH_OFFSET = 0x2000 # First 2 sectors are reserved for FE purposes

CHIP_DETECT_MAGIC_VALUE = [0x0]

Expand All @@ -31,7 +31,13 @@ class ESP32P4ROM(ESP32ROM):
EFUSE_BLOCK1_ADDR = EFUSE_BASE + 0x044
MAC_EFUSE_REG = EFUSE_BASE + 0x044

SPI_REG_BASE = 0x5008C000
SPI_REG_BASE = 0x5008D000 # SPIMEM1
SPI_USR_OFFS = 0x18
SPI_USR1_OFFS = 0x1C
SPI_USR2_OFFS = 0x20
SPI_MOSI_DLEN_OFFS = 0x24
SPI_MISO_DLEN_OFFS = 0x28
SPI_W0_OFFS = 0x58

EFUSE_RD_REG_BASE = EFUSE_BASE + 0x030 # BLOCK0 read base address

Expand Down Expand Up @@ -160,9 +166,10 @@ def change_baud(self, baud):
ESPLoader.change_baud(self, baud)

def _post_connect(self):
# ESP32-P4 doesn't have stub flasher support yet
self.stub_is_disabled = True
self.IS_STUB = False
pass
# TODO: Disable watchdogs when USB modes are supported in the stub
# if not self.sync_stub_detected: # Don't run if stub is reused
# self.disable_watchdogs()


class ESP32P4StubLoader(ESP32P4ROM):
Expand All @@ -180,6 +187,7 @@ def __init__(self, rom_loader):
self.secure_download_mode = rom_loader.secure_download_mode
self._port = rom_loader._port
self._trace_enabled = rom_loader._trace_enabled
self.cache = rom_loader.cache
self.flush_input() # resets _slip_reader


Expand Down
7 changes: 7 additions & 0 deletions esptool/targets/stub_flasher/stub_flasher_32p4.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"entry": 1341195718,
"text": "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",
"text_start": 1341194240,
"data": "DAD1T+4I8U86CfFPkgnxTzYK8U+iCvFPUArxT7YH8U/yCfFPMgrxT6YJ8U9mB/FP2gnxT2YH8U/ICPFPDAnxTzoJ8U+SCfFP2gjxTyAI8U9QCPFP1gjxT/oM8U86CfFPugvxT64M8U+yBvFP2AzxT7IG8U+yBvFPsgbxT7IG8U+yBvFPsgbxT7IG8U+yBvFPVgvxT7IG8U/WC/FPrgzxTw==",
"data_start": 1341533096
}
8 changes: 7 additions & 1 deletion flasher_stub/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ STUB_ELF_32H2_BETA_2 = $(BUILD_DIR)/$(STUB)_32h2beta2.elf
STUB_ELF_32C2 = $(BUILD_DIR)/$(STUB)_32c2.elf
STUB_ELF_32C6 = $(BUILD_DIR)/$(STUB)_32c6.elf
STUB_ELF_32H2 = $(BUILD_DIR)/$(STUB)_32h2.elf
STUB_ELF_32P4 = $(BUILD_DIR)/$(STUB)_32p4.elf

STUBS_ELF =
ifneq ($(WITHOUT_ESP8266),1)
Expand All @@ -92,7 +93,8 @@ STUBS_ELF += \
$(STUB_ELF_32H2_BETA_2) \
$(STUB_ELF_32C2) \
$(STUB_ELF_32C6) \
$(STUB_ELF_32H2)
$(STUB_ELF_32H2) \
$(STUB_ELF_32P4)
endif

.PHONY: all clean install
Expand Down Expand Up @@ -171,5 +173,9 @@ $(STUB_ELF_32H2): $(SRCS) $(BUILD_DIR) ld/stub_32h2.ld
@echo " CC(32H2) $^ -> $@"
$(Q) $(CROSS_ESPRISCV32)gcc $(CFLAGS_ESPRISCV32) -DESP32H2=1 -Tstub_32h2.ld -Wl,-Map=$(@:.elf=.map) -o $@ $(filter %.c, $^) $(LDLIBS)

$(STUB_ELF_32P4): $(SRCS) $(BUILD_DIR) ld/stub_32p4.ld
@echo " CC(32P4) $^ -> $@"
$(Q) $(CROSS_ESPRISCV32)gcc $(CFLAGS_ESPRISCV32) -DESP32P4=1 -Tstub_32p4.ld -Wl,-Map=$(@:.elf=.map) -o $@ $(filter %.c, $^) $(LDLIBS)

clean:
$(Q) rm -rf $(BUILD_DIR)
2 changes: 1 addition & 1 deletion flasher_stub/compare_stubs.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def diff(path_to_new, path_to_old):

if __name__ == "__main__":
same = True
for chip in [n for n in esptool.CHIP_LIST if n != "esp32p4"]:
for chip in esptool.CHIP_LIST:
print("Comparing {} stub: ".format(chip), end="")

chip = chip.replace("esp", "")
Expand Down
14 changes: 14 additions & 0 deletions flasher_stub/include/soc_support.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,13 @@
#define IS_RISCV 1
#endif // ESP32H2

#ifdef ESP32P4
// TODO: Add support for USB modes when MP is available
// #define WITH_USB_JTAG_SERIAL 1
// #define WITH_USB_OTG 1
#define IS_RISCV 1
#endif // ESP32P4

// Increase CPU freq to speed up read/write operations over USB
// Temporarily disabled on the S3 due to stability issues, will be fixed in the next minor release
#define USE_MAX_CPU_FREQ ((WITH_USB_JTAG_SERIAL || WITH_USB_OTG) && !ESP32S3)
Expand Down Expand Up @@ -154,6 +161,13 @@
#define DR_REG_LP_WDT_BASE 0x600B1C00
#endif

#ifdef ESP32P4
#define UART_BASE_REG 0x500CA000 /* UART0 */
#define SPI_BASE_REG 0x5008D000 /* SPI peripheral 1, used for SPI flash */
#define SPI0_BASE_REG 0x5008C000 /* SPI peripheral 0, inner state machine */
#define GPIO_BASE_REG 0x500E0000
#endif

/**********************************************************
* UART peripheral
*
Expand Down
Loading

0 comments on commit d266645

Please sign in to comment.