|
|
@@ -5,15 +5,41 @@
|
|
|
*/
|
|
|
/** Simplified memory map for the bootloader.
|
|
|
* Make sure the bootloader can load into main memory without overwriting itself.
|
|
|
- * We put 2nd bootloader in the high address space (before ROM stack/data/bss).
|
|
|
- * See memory usage for ROM bootloader at the end of this file.
|
|
|
+ *
|
|
|
+ * ESP32-H2 ROM static data usage is as follows:
|
|
|
+ * - 0x3fccb900 - 0x3fcdd210: Shared buffers, used in UART/USB/SPI download mode only
|
|
|
+ * - 0x3fcdd210 - 0x3fcdf210: APP CPU stack, can be reclaimed as heap after RTOS startup
|
|
|
+ * - 0x3fcdf210 - 0x3fce0000: ROM .bss and .data (not easily reclaimable)
|
|
|
+ *
|
|
|
+ * The 2nd stage bootloader can take space up to the end of ROM shared
|
|
|
+ * buffers area (0x3fce9704). For alignment purpose we shall use value (0x3fce9700).
|
|
|
*/
|
|
|
|
|
|
+/* The offset between Dbus and Ibus. Used to convert between 0x403xxxxx and 0x3fcxxxxx addresses. */
|
|
|
+iram_dram_offset = 0x700000;
|
|
|
+
|
|
|
+/* We consider 0x3fce9700 to be the last usable address for 2nd stage bootloader stack overhead, dram_seg,
|
|
|
+ * and work out iram_seg and iram_loader_seg addresses from there, backwards.
|
|
|
+ */
|
|
|
+
|
|
|
+/* These lengths can be adjusted, if necessary: */
|
|
|
+bootloader_usable_dram_end = 0x3fcdd120;
|
|
|
+bootloader_stack_overhead = 0x2000; /* For safety margin between bootloader data section and startup stacks */
|
|
|
+bootloader_dram_seg_len = 0x5000;
|
|
|
+bootloader_iram_loader_seg_len = 0x7000;
|
|
|
+bootloader_iram_seg_len = 0x2000;
|
|
|
+
|
|
|
+/* Start of the lower region is determined by region size and the end of the higher region */
|
|
|
+bootloader_dram_seg_end = bootloader_usable_dram_end - bootloader_stack_overhead;
|
|
|
+bootloader_dram_seg_start = bootloader_dram_seg_end - bootloader_dram_seg_len;
|
|
|
+bootloader_iram_loader_seg_start = bootloader_dram_seg_start - bootloader_iram_loader_seg_len + iram_dram_offset;
|
|
|
+bootloader_iram_seg_start = bootloader_iram_loader_seg_start - bootloader_iram_seg_len;
|
|
|
+
|
|
|
MEMORY
|
|
|
{
|
|
|
- iram_seg (RWX) : org = 0x403CE000, len = 0x2000
|
|
|
- iram_loader_seg (RWX) : org = 0x403D0000, len = 0x6000
|
|
|
- dram_seg (RW) : org = 0x3FCD6000, len = 0x4000
|
|
|
+ iram_seg (RWX) : org = bootloader_iram_seg_start, len = bootloader_iram_seg_len
|
|
|
+ iram_loader_seg (RWX) : org = bootloader_iram_loader_seg_start, len = bootloader_iram_loader_seg_len
|
|
|
+ dram_seg (RW) : org = bootloader_dram_seg_start, len = bootloader_dram_seg_len
|
|
|
}
|
|
|
|
|
|
/* Default entry point: */
|