diff --git a/boards/xtensa/esp32s2/common/scripts/.gitignore b/boards/xtensa/esp32s2/common/scripts/.gitignore new file mode 100644 index 00000000000..0fa3d8108a5 --- /dev/null +++ b/boards/xtensa/esp32s2/common/scripts/.gitignore @@ -0,0 +1 @@ +/*.ld.tmp diff --git a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_mcuboot.ld b/boards/xtensa/esp32s2/common/scripts/esp32s2_mcuboot.ld similarity index 99% rename from boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_mcuboot.ld rename to boards/xtensa/esp32s2/common/scripts/esp32s2_mcuboot.ld index a459692c362..2abdcfaf51a 100644 --- a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_mcuboot.ld +++ b/boards/xtensa/esp32s2/common/scripts/esp32s2_mcuboot.ld @@ -1,5 +1,5 @@ /**************************************************************************** - * boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_mcuboot.ld + * boards/xtensa/esp32s2/common/scripts/esp32s2_mcuboot.ld * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with diff --git a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2.template.ld b/boards/xtensa/esp32s2/common/scripts/esp32s2_memory.ld similarity index 91% rename from boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2.template.ld rename to boards/xtensa/esp32s2/common/scripts/esp32s2_memory.ld index b08bf716347..9c30cba1ffe 100644 --- a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2.template.ld +++ b/boards/xtensa/esp32s2/common/scripts/esp32s2_memory.ld @@ -1,17 +1,13 @@ /**************************************************************************** - * boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2.template.ld - * ESP32S2 Linker Script Memory Layout + * boards/xtensa/esp32s2/common/scripts/esp32s2_memory.ld + * ESP32-S2 Linker Script Memory Layout * * This file describes the memory layout (memory blocks) as virtual * memory addresses. * - * esp32s2.common.ld contains output sections to link compiler output + * esp32s2_sections.ld contains output sections to link compiler output * into these memory blocks. * - * NOTE: That this is not the actual linker script but rather a "template" - * for the elf32_out.ld script. This template script is passed through - * the C preprocessor to include selected configuration options. - * ****************************************************************************/ #include @@ -135,3 +131,10 @@ MEMORY rtc_data_seg(RW) : org = 0x3ff9e000, len = 0x2000 } +#if CONFIG_ESP32S2_RUN_IRAM + REGION_ALIAS("default_rodata_seg", dram0_0_seg); + REGION_ALIAS("default_code_seg", iram0_0_seg); +#else + REGION_ALIAS("default_rodata_seg", drom0_0_seg); + REGION_ALIAS("default_code_seg", irom0_0_seg); +#endif /* CONFIG_ESP32S2_RUN_IRAM */ diff --git a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_peripherals.ld b/boards/xtensa/esp32s2/common/scripts/esp32s2_peripherals.ld similarity index 94% rename from boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_peripherals.ld rename to boards/xtensa/esp32s2/common/scripts/esp32s2_peripherals.ld index 62f5f970cb3..7af47ffe1e8 100644 --- a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_peripherals.ld +++ b/boards/xtensa/esp32s2/common/scripts/esp32s2_peripherals.ld @@ -1,5 +1,5 @@ /**************************************************************************** - * boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_peripherals.ld + * boards/xtensa/esp32s2/common/scripts/esp32s2_peripherals.ld ****************************************************************************/ PROVIDE ( UART0 = 0x3f400000 ); diff --git a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_rom.ld b/boards/xtensa/esp32s2/common/scripts/esp32s2_rom.ld similarity index 99% rename from boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_rom.ld rename to boards/xtensa/esp32s2/common/scripts/esp32s2_rom.ld index 25db27c30b1..098093bbd2c 100644 --- a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_rom.ld +++ b/boards/xtensa/esp32s2/common/scripts/esp32s2_rom.ld @@ -1,3 +1,7 @@ +/**************************************************************************** + * boards/xtensa/esp32s2/common/scripts/esp32s2_rom.ld + ****************************************************************************/ + /** * ESP32-S2 ROM address table (except symbols from libgcc and libc) * Generated for ROM with MD5sum: 0a2c7ec5109c17884606d23b47045796 diff --git a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_flash.ld b/boards/xtensa/esp32s2/common/scripts/esp32s2_sections.ld similarity index 96% rename from boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_flash.ld rename to boards/xtensa/esp32s2/common/scripts/esp32s2_sections.ld index fa4823e32e1..d466cddee9d 100644 --- a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_flash.ld +++ b/boards/xtensa/esp32s2/common/scripts/esp32s2_sections.ld @@ -1,5 +1,5 @@ /**************************************************************************** - * boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_flash.ld + * boards/xtensa/esp32s2/common/scripts/esp32s2_sections.ld ****************************************************************************/ /* Default entry point: */ @@ -47,7 +47,7 @@ SECTIONS *(.entry.text) *(.init.literal) *(.init) - } > iram0_0_seg + } >iram0_0_seg .iram0.text : { @@ -59,12 +59,12 @@ SECTIONS . = ALIGN(4) + 16; _iram_text = ABSOLUTE(.); - } > iram0_0_seg + } >iram0_0_seg .dram0_reserved_for_iram (NOLOAD): { . = ORIGIN(dram0_0_seg) + _iram_text - _iram_start; - } > dram0_0_seg + } >dram0_0_seg /* Shared RAM */ @@ -178,7 +178,7 @@ SECTIONS *(.gnu.linkonce.lit4.*) _lit4_end = ABSOLUTE(.); . = ALIGN(4); - } >drom0_0_seg + } >default_rodata_seg .flash.text : { @@ -198,7 +198,7 @@ SECTIONS . += 16; _etext = .; - } >irom0_0_seg + } >default_code_seg .rtc.text : { @@ -210,5 +210,5 @@ SECTIONS { *(.rtc.data) *(.rtc.rodata) - } > rtc_slow_seg + } >rtc_slow_seg } diff --git a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/.gitignore b/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/.gitignore deleted file mode 100644 index f93f56cccd7..00000000000 --- a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/esp32s2_out.ld diff --git a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/Make.defs b/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/Make.defs index 0a8e833ead2..7056fb64f5d 100644 --- a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/Make.defs +++ b/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/Make.defs @@ -23,20 +23,31 @@ include $(TOPDIR)/tools/Config.mk include $(TOPDIR)/tools/esp32s2/Config.mk include $(TOPDIR)/arch/xtensa/src/lx7/Toolchain.defs -ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_out.ld +# Pick the linker scripts from the board level if they exist, if not +# pick the common linker scripts. -ifeq ($(CONFIG_ESP32S2_APP_FORMAT_MCUBOOT),y) - ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_mcuboot.ld +ARCHSCRIPT += $(BOARD_COMMON_DIR)$(DELIM)scripts$(DELIM)esp32s2_rom.ld +ARCHSCRIPT += $(BOARD_COMMON_DIR)$(DELIM)scripts$(DELIM)esp32s2_peripherals.ld + +ifneq ($(wildcard $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_memory.ld),) + ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_memory.ld else - ifeq ($(CONFIG_ESP32S2_RUN_IRAM),y) - ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_iram.ld - else - ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_flash.ld - endif + ARCHSCRIPT += $(BOARD_COMMON_DIR)$(DELIM)scripts$(DELIM)esp32s2_memory.ld endif -ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_rom.ld -ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_peripherals.ld +ifeq ($(CONFIG_ESP32S2_APP_FORMAT_MCUBOOT),y) + ifneq ($(wildcard $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_mcuboot.ld),) + ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_mcuboot.ld + else + ARCHSCRIPT += $(BOARD_COMMON_DIR)$(DELIM)scripts$(DELIM)esp32s2_mcuboot.ld + endif +else + ifneq ($(wildcard $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_sections.ld),) + ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_sections.ld + else + ARCHSCRIPT += $(BOARD_COMMON_DIR)$(DELIM)scripts$(DELIM)esp32s2_sections.ld + endif +endif ARCHPICFLAGS = -fpic diff --git a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_iram.ld b/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_iram.ld deleted file mode 100644 index 52b211d65c9..00000000000 --- a/boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_iram.ld +++ /dev/null @@ -1,184 +0,0 @@ -/**************************************************************************** - * boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2s2_iram.ld - ****************************************************************************/ - -/* Default entry point: */ - -ENTRY(__start); - -SECTIONS -{ - /* Send .iram0 code to iram */ - - .iram0.vectors : - { - /* Vectors go to IRAM */ - - _init_start = ABSOLUTE(.); - - /* Vectors according to builds/RF-2015.2-win32/esp108_v1_2_s5_512int_2/config.html */ - - . = 0x0; - KEEP (*(.window_vectors.text)); - . = 0x180; - KEEP (*(.xtensa_level2_vector.text)); - . = 0x1c0; - KEEP (*(.xtensa_level3_vector.text)); - . = 0x200; - KEEP (*(.xtensa_level4_vector.text)); - . = 0x240; - KEEP (*(.xtensa_level5_vector.text)); - . = 0x280; - KEEP (*(.debug_exception_vector.text)); - . = 0x2c0; - KEEP (*(.nmi_vector.text)); - . = 0x300; - KEEP (*(.kernel_exception_vector.text)); - . = 0x340; - KEEP (*(.user_exception_vector.text)); - . = 0x3c0; - KEEP (*(.double_exception_vector.text)); - . = 0x400; - *(.*_vector.literal) - - . = ALIGN (16); - *(.entry.text) - *(.init.literal) - *(.init) - _init_end = ABSOLUTE(.); - } > iram0_0_seg - - .iram0.text : - { - /* Code marked as running out of IRAM */ - - *(.iram1 .iram1.*) - - _stext = .; - *(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*) - *(.irom0.text) /* catch stray ICACHE_RODATA_ATTR */ - *(.fini.literal) - *(.fini) - *(.gnu.version) - - /* align + add 16B for CPU dummy speculative instr. fetch */ - - . = ALIGN(4) + 16; - _etext = .; - } > iram0_0_seg - - /* Shared RAM */ - - .dram0.bss (NOLOAD) : - { - /* .bss initialized on power-up */ - - . = ALIGN (8); - _sbss = ABSOLUTE(.); - *(.dynsbss) - *(.sbss) - *(.sbss.*) - *(.gnu.linkonce.sb.*) - *(.scommon) - *(.sbss2) - *(.sbss2.*) - *(.gnu.linkonce.sb2.*) - *(.dynbss) - KEEP (*(.bss)) - *(.bss.*) - *(.share.mem) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(8); - _ebss = ABSOLUTE(.); - - /* Uninitialized .bss */ - - . = ALIGN(4); - *(.noinit) - . = ALIGN(4); - } >dram0_0_seg - - .dram0.data : - { - /* .data initialized on power-up in ROMed configurations. */ - - _sdata = ABSOLUTE(.); - KEEP (*(.data)) - KEEP (*(.data.*)) - KEEP (*(.gnu.linkonce.d.*)) - KEEP (*(.data1)) - KEEP (*(.sdata)) - KEEP (*(.sdata.*)) - KEEP (*(.gnu.linkonce.s.*)) - KEEP (*(.sdata2)) - KEEP (*(.sdata2.*)) - KEEP (*(.gnu.linkonce.s2.*)) - KEEP (*(.jcr)) - *(.dram1 .dram1.*) - . = ALIGN(4); - _edata = ABSOLUTE(.); - - _srodata = ABSOLUTE(.); - *(.rodata) - *(.rodata.*) - *(.irom1.text) /* catch stray ICACHE_RODATA_ATTR */ - *(.gnu.linkonce.r.*) - *(.rodata1) - __XT_EXCEPTION_TABLE_ = ABSOLUTE(.); - *(.xt_except_table) - *(.gcc_except_table) - *(.gnu.linkonce.e.*) - *(.gnu.version_r) - *(.eh_frame) - - . = (. + 3) & ~ 3; - - /* C++ constructor and destructor tables, properly ordered: */ - - _sinit = ABSOLUTE(.); - KEEP (*crtbegin.o(.ctors)) - KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - _einit = ABSOLUTE(.); - KEEP (*crtbegin.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - - /* C++ exception handlers table: */ - - __XT_EXCEPTION_DESCS_ = ABSOLUTE(.); - *(.xt_except_desc) - *(.gnu.linkonce.h.*) - __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.); - *(.xt_except_desc_end) - *(.dynamic) - *(.gnu.version_d) - _erodata = ABSOLUTE(.); - /* Literals are also RO data. */ - _lit4_start = ABSOLUTE(.); - *(*.lit4) - *(.lit4.*) - *(.gnu.linkonce.lit4.*) - _lit4_end = ABSOLUTE(.); - . = ALIGN(4); - - /* Heap starts at the end of .data */ - - _sheap = ABSOLUTE(.); - } >dram0_0_seg - - .rtc.text : - { - . = ALIGN(4); - *(.rtc.literal .rtc.text) - } >rtc_iram_seg - - .rtc.data : - { - *(.rtc.data) - *(.rtc.rodata) - } > rtc_slow_seg -} diff --git a/boards/xtensa/esp32s2/esp32s2-saola-1/src/Make.defs b/boards/xtensa/esp32s2/esp32s2-saola-1/src/Make.defs index d6a841d9227..3a6291b8b7a 100644 --- a/boards/xtensa/esp32s2/esp32s2-saola-1/src/Make.defs +++ b/boards/xtensa/esp32s2/esp32s2-saola-1/src/Make.defs @@ -20,10 +20,6 @@ include $(TOPDIR)/Make.defs -SCRIPTDIR = $(BOARD_DIR)$(DELIM)scripts - -CONFIGFILE = $(TOPDIR)$(DELIM)include$(DELIM)nuttx$(DELIM)config.h - CSRCS = esp32s2_boot.c esp32s2_bringup.c ifeq ($(CONFIG_BOARDCTL),y) @@ -53,19 +49,6 @@ ifeq ($(CONFIG_ESP32S2_SPI),y) CSRCS += esp32s2_board_spi.c endif -SCRIPTIN = $(SCRIPTDIR)$(DELIM)esp32s2.template.ld -SCRIPTOUT = $(SCRIPTDIR)$(DELIM)esp32s2_out.ld - -.PHONY = context distclean - -$(SCRIPTOUT): $(SCRIPTIN) $(CONFIGFILE) - $(Q) $(CC) -isystem $(TOPDIR)/include -C -P -x c -E $(SCRIPTIN) -o $@ - -context:: $(SCRIPTOUT) - -distclean:: - $(call DELFILE, $(SCRIPTOUT)) - DEPPATH += --dep-path board VPATH += :board CFLAGS += $(shell $(INCDIR) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)board)