Fixups for packaged no_flash and xip_ram binaries (#3012)
* Add tests of improved picotool packaging
* Move section_xip_ram and sections_psram before data in linker scripts
Initialised data must come before uninitialised, so section_xip_ram must come before section_persistent_data
Neither of these place anything in SRAM for default binaries, so this doesn't change the ram_vector_table location
* Update memmap annotations
* Fix debugger start for XIP_RAM binaries
These require a smaller window size, so pass LENGTH(RAM) from the linker script instead of (SRAM_END - SRAM_BASE)
* Add hashing and signing test to check squashing is working for those
* Fix guards around some xip_sram test binaries
* Switch to new section_no_flash_end.incl for calculating ram window start and size, and add to Risc-V
diff --git a/src/rp2040/pico_platform/memmap_blocked_ram.ld b/src/rp2040/pico_platform/memmap_blocked_ram.ld
index 914f35d..e11f414 100644
--- a/src/rp2040/pico_platform/memmap_blocked_ram.ld
+++ b/src/rp2040/pico_platform/memmap_blocked_ram.ld
@@ -31,6 +31,8 @@
* │ └── section_binary_info.incl rp2_common/pico_standard_link
* ├── section_generated_post_text.incl rp2_common/pico_standard_link
* ├── section_extra_post_text.incl rp2_common/pico_standard_link
+ * ├── sections_psram.incl rp2040/pico_platform
+ * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── sections_default_data.incl rp2_common/pico_standard_link
* │ ├── section_ram_vector_table.incl rp2_common/pico_standard_link
* │ ├── section_uninitialized_data.incl rp2_common/pico_standard_link
@@ -44,8 +46,6 @@
* ├── section_generated_post_scratch.incl rp2_common/pico_standard_link
* ├── section_extra_post_scratch.incl rp2_common/pico_standard_link
* ├── sections_stack.incl rp2_common/pico_standard_link
- * ├── sections_psram.incl rp2040/pico_platform
- * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── section_flash_end.incl rp2_common/pico_standard_link
* ├── section_end.incl rp2_common/pico_standard_link
* ├── section_generated_post_end.incl rp2_common/pico_standard_link
diff --git a/src/rp2040/pico_platform/memmap_copy_to_ram.ld b/src/rp2040/pico_platform/memmap_copy_to_ram.ld
index a162d4a..8fd263c 100644
--- a/src/rp2040/pico_platform/memmap_copy_to_ram.ld
+++ b/src/rp2040/pico_platform/memmap_copy_to_ram.ld
@@ -29,6 +29,8 @@
* │ └── section_copy_to_ram_text.incl rp2_common/pico_standard_link
* ├── section_generated_post_text.incl rp2_common/pico_standard_link
* ├── section_extra_post_text.incl rp2_common/pico_standard_link
+ * ├── sections_psram.incl rp2040/pico_platform
+ * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── sections_copy_to_ram_data.incl rp2_common/pico_standard_link
* │ ├── section_copy_to_ram_data.incl rp2_common/pico_standard_link
* │ ├── section_tls.incl rp2_common/pico_standard_link
@@ -40,8 +42,6 @@
* ├── section_generated_post_scratch.incl rp2_common/pico_standard_link
* ├── section_extra_post_scratch.incl rp2_common/pico_standard_link
* ├── sections_stack.incl rp2_common/pico_standard_link
- * ├── sections_psram.incl rp2040/pico_platform
- * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── section_flash_end.incl rp2_common/pico_standard_link
* ├── section_end.incl rp2_common/pico_standard_link
* ├── section_generated_post_end.incl rp2_common/pico_standard_link
diff --git a/src/rp2040/pico_platform/memmap_default.ld b/src/rp2040/pico_platform/memmap_default.ld
index 40fa181..f3cb785 100644
--- a/src/rp2040/pico_platform/memmap_default.ld
+++ b/src/rp2040/pico_platform/memmap_default.ld
@@ -28,6 +28,8 @@
* │ └── section_binary_info.incl rp2_common/pico_standard_link
* ├── section_generated_post_text.incl rp2_common/pico_standard_link
* ├── section_extra_post_text.incl rp2_common/pico_standard_link
+ * ├── sections_psram.incl rp2040/pico_platform
+ * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── sections_default_data.incl rp2_common/pico_standard_link
* │ ├── section_ram_vector_table.incl rp2_common/pico_standard_link
* │ ├── section_uninitialized_data.incl rp2_common/pico_standard_link
@@ -41,8 +43,6 @@
* ├── section_generated_post_scratch.incl rp2_common/pico_standard_link
* ├── section_extra_post_scratch.incl rp2_common/pico_standard_link
* ├── sections_stack.incl rp2_common/pico_standard_link
- * ├── sections_psram.incl rp2040/pico_platform
- * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── section_flash_end.incl rp2_common/pico_standard_link
* ├── section_end.incl rp2_common/pico_standard_link
* ├── section_generated_post_end.incl rp2_common/pico_standard_link
diff --git a/src/rp2040/pico_platform/memmap_no_flash.cmake b/src/rp2040/pico_platform/memmap_no_flash.cmake
index c4756b8..9d57fb2 100644
--- a/src/rp2040/pico_platform/memmap_no_flash.cmake
+++ b/src/rp2040/pico_platform/memmap_no_flash.cmake
@@ -25,6 +25,7 @@
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_generated_post_text.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_heap.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_data.incl)
+ pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_rodata.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_persistent_data.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_tls.incl)
diff --git a/src/rp2040/pico_platform/memmap_no_flash.ld b/src/rp2040/pico_platform/memmap_no_flash.ld
index 56910d2..b0b0213 100644
--- a/src/rp2040/pico_platform/memmap_no_flash.ld
+++ b/src/rp2040/pico_platform/memmap_no_flash.ld
@@ -23,6 +23,8 @@
* │ └── section_binary_info.incl rp2_common/pico_standard_link
* ├── section_generated_post_text.incl rp2_common/pico_standard_link
* ├── section_extra_post_text.incl rp2_common/pico_standard_link
+ * ├── sections_psram.incl rp2040/pico_platform
+ * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── sections_no_flash_data.incl rp2_common/pico_standard_link
* │ ├── section_no_flash_data.incl rp2_common/pico_standard_link
* │ ├── section_uninitialized_data.incl rp2_common/pico_standard_link
@@ -35,9 +37,8 @@
* ├── section_generated_post_scratch.incl rp2_common/pico_standard_link
* ├── section_extra_post_scratch.incl rp2_common/pico_standard_link
* ├── sections_stack.incl rp2_common/pico_standard_link
- * ├── sections_psram.incl rp2040/pico_platform
- * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── section_end.incl rp2_common/pico_standard_link
+ * ├── section_no_flash_end.incl rp2_common/pico_standard_link
* ├── section_generated_post_end.incl rp2_common/pico_standard_link
* ├── section_extra_post_end.incl rp2_common/pico_standard_link
* ├── section_platform_end.incl rp2040/pico_platform
diff --git a/src/rp2350/pico_platform/memmap_copy_to_ram.ld b/src/rp2350/pico_platform/memmap_copy_to_ram.ld
index 3c4d565..a64eddc 100644
--- a/src/rp2350/pico_platform/memmap_copy_to_ram.ld
+++ b/src/rp2350/pico_platform/memmap_copy_to_ram.ld
@@ -29,6 +29,8 @@
* │ └── section_copy_to_ram_text.incl rp2_common/pico_standard_link
* ├── section_generated_post_text.incl rp2_common/pico_standard_link
* ├── section_extra_post_text.incl rp2_common/pico_standard_link
+ * ├── sections_psram.incl rp2_common/pico_standard_link
+ * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── sections_copy_to_ram_data.incl rp2_common/pico_standard_link
* │ ├── section_copy_to_ram_data.incl rp2_common/pico_standard_link
* │ ├── section_tls.incl rp2_common/pico_standard_link
@@ -40,8 +42,6 @@
* ├── section_generated_post_scratch.incl rp2_common/pico_standard_link
* ├── section_extra_post_scratch.incl rp2_common/pico_standard_link
* ├── sections_stack.incl rp2_common/pico_standard_link
- * ├── sections_psram.incl rp2_common/pico_standard_link
- * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── section_flash_end.incl rp2_common/pico_standard_link
* ├── section_end.incl rp2_common/pico_standard_link
* ├── section_generated_post_end.incl rp2_common/pico_standard_link
diff --git a/src/rp2350/pico_platform/memmap_default.ld b/src/rp2350/pico_platform/memmap_default.ld
index 78079eb..8c13090 100644
--- a/src/rp2350/pico_platform/memmap_default.ld
+++ b/src/rp2350/pico_platform/memmap_default.ld
@@ -28,6 +28,8 @@
* │ └── section_binary_info.incl rp2_common/pico_standard_link
* ├── section_generated_post_text.incl rp2_common/pico_standard_link
* ├── section_extra_post_text.incl rp2_common/pico_standard_link
+ * ├── sections_psram.incl rp2_common/pico_standard_link
+ * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── sections_default_data.incl rp2_common/pico_standard_link
* │ ├── section_ram_vector_table.incl rp2_common/pico_standard_link
* │ ├── section_uninitialized_data.incl rp2_common/pico_standard_link
@@ -41,8 +43,6 @@
* ├── section_generated_post_scratch.incl rp2_common/pico_standard_link
* ├── section_extra_post_scratch.incl rp2_common/pico_standard_link
* ├── sections_stack.incl rp2_common/pico_standard_link
- * ├── sections_psram.incl rp2_common/pico_standard_link
- * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── section_flash_end.incl rp2_common/pico_standard_link
* ├── section_end.incl rp2_common/pico_standard_link
* ├── section_generated_post_end.incl rp2_common/pico_standard_link
diff --git a/src/rp2350/pico_platform/memmap_no_flash.cmake b/src/rp2350/pico_platform/memmap_no_flash.cmake
index a1434de..66b6312 100644
--- a/src/rp2350/pico_platform/memmap_no_flash.cmake
+++ b/src/rp2350/pico_platform/memmap_no_flash.cmake
@@ -23,6 +23,7 @@
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_generated_post_text.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_heap.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_data.incl)
+ pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_rodata.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_text.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_persistent_data.incl)
diff --git a/src/rp2350/pico_platform/memmap_no_flash.ld b/src/rp2350/pico_platform/memmap_no_flash.ld
index 27d943b..0d6850a 100644
--- a/src/rp2350/pico_platform/memmap_no_flash.ld
+++ b/src/rp2350/pico_platform/memmap_no_flash.ld
@@ -23,6 +23,8 @@
* │ └── section_binary_info.incl rp2_common/pico_standard_link
* ├── section_generated_post_text.incl rp2_common/pico_standard_link
* ├── section_extra_post_text.incl rp2_common/pico_standard_link
+ * ├── sections_psram.incl rp2_common/pico_standard_link
+ * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── sections_no_flash_data.incl rp2_common/pico_standard_link
* │ ├── section_no_flash_data.incl rp2_common/pico_standard_link
* │ ├── section_uninitialized_data.incl rp2_common/pico_standard_link
@@ -35,9 +37,8 @@
* ├── section_generated_post_scratch.incl rp2_common/pico_standard_link
* ├── section_extra_post_scratch.incl rp2_common/pico_standard_link
* ├── sections_stack.incl rp2_common/pico_standard_link
- * ├── sections_psram.incl rp2_common/pico_standard_link
- * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── section_end.incl rp2_common/pico_standard_link
+ * ├── section_no_flash_end.incl rp2_common/pico_standard_link
* ├── section_generated_post_end.incl rp2_common/pico_standard_link
* ├── section_extra_post_end.incl rp2_common/pico_standard_link
* ├── section_platform_end.incl rp2350/pico_platform
diff --git a/src/rp2350/pico_platform/memmap_xip_ram.cmake b/src/rp2350/pico_platform/memmap_xip_ram.cmake
index c470f11..39185cf 100644
--- a/src/rp2350/pico_platform/memmap_xip_ram.cmake
+++ b/src/rp2350/pico_platform/memmap_xip_ram.cmake
@@ -24,6 +24,7 @@
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_generated_post_text.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_heap.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_data.incl)
+ pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_rodata.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_text.incl)
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_persistent_data.incl)
diff --git a/src/rp2350/pico_platform/memmap_xip_ram.ld b/src/rp2350/pico_platform/memmap_xip_ram.ld
index ba06c4e..c00b379 100644
--- a/src/rp2350/pico_platform/memmap_xip_ram.ld
+++ b/src/rp2350/pico_platform/memmap_xip_ram.ld
@@ -24,6 +24,8 @@
* │ └── section_binary_info.incl rp2_common/pico_standard_link
* ├── section_generated_post_text.incl rp2_common/pico_standard_link
* ├── section_extra_post_text.incl rp2_common/pico_standard_link
+ * ├── sections_psram.incl rp2_common/pico_standard_link
+ * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── sections_no_flash_data.incl rp2_common/pico_standard_link
* │ ├── section_no_flash_data.incl rp2_common/pico_standard_link
* │ ├── section_uninitialized_data.incl rp2_common/pico_standard_link
@@ -36,9 +38,8 @@
* ├── section_generated_post_scratch.incl rp2_common/pico_standard_link
* ├── section_extra_post_scratch.incl rp2_common/pico_standard_link
* ├── sections_stack.incl rp2_common/pico_standard_link
- * ├── sections_psram.incl rp2_common/pico_standard_link
- * ├── section_xip_ram.incl rp2_common/pico_standard_link
* ├── section_end.incl rp2_common/pico_standard_link
+ * ├── section_no_flash_end.incl rp2_common/pico_standard_link
* ├── section_generated_post_end.incl rp2_common/pico_standard_link
* ├── section_extra_post_end.incl rp2_common/pico_standard_link
* ├── section_platform_end.incl rp2350/pico_platform
diff --git a/src/rp2_common/pico_crt0/crt0.S b/src/rp2_common/pico_crt0/crt0.S
index f5bfcd7..ebeb742 100644
--- a/src/rp2_common/pico_crt0/crt0.S
+++ b/src/rp2_common/pico_crt0/crt0.S
@@ -436,10 +436,10 @@
// because RP2040 doesn't have special watchdog boot types
// Launch this no_flash binary using a RAM image boot
ldr r1, =(WATCHDOG_BASE + WATCHDOG_SCRATCH2_OFFSET) // registers start from here
- // scratch 2 = __logical_binary_start
- ldr r2, =__logical_binary_start
- // scratch 3 = size
- ldr r3, =(SRAM_END - SRAM_BASE) // assume maximum size for block loop
+ // scratch 2 = start of RAM window, from section_no_flash_end.incl
+ ldr r2, =__ram_window_start
+ // scratch 3 = size of RAM window, from section_no_flash_end.incl
+ ldr r3, =__ram_window_size
// scratch 4&7 = magic number
ldr r4, =0xb007c0d3
mov r7, r4
diff --git a/src/rp2_common/pico_crt0/crt0_riscv.S b/src/rp2_common/pico_crt0/crt0_riscv.S
index 036fcd7..1f17e7e 100644
--- a/src/rp2_common/pico_crt0/crt0_riscv.S
+++ b/src/rp2_common/pico_crt0/crt0_riscv.S
@@ -305,11 +305,11 @@
#if PICO_NO_FLASH
// Launch this no_flash binary using a RAM image boot
la a1, WATCHDOG_BASE + WATCHDOG_SCRATCH2_OFFSET // offsets start from here, to fit in sw immediate
- // scratch 2 = __logical_binary_start
- la a0, __logical_binary_start
+ // scratch 2 = start of RAM window, from section_no_flash_end.incl
+ la a0, __ram_window_start
sw a0, 0(a1)
- // scratch 3 = size
- li a0, SRAM_END - SRAM_BASE // assume maximum size for block loop
+ // scratch 3 = size of RAM window, from section_no_flash_end.incl
+ la a0, __ram_window_size
sw a0, 4(a1)
// scratch 4&7 = magic number
li a0, 0xb007c0d3
diff --git a/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl b/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl
new file mode 100644
index 0000000..9d040e7
--- /dev/null
+++ b/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl
@@ -0,0 +1,22 @@
+/* Defines the following symbols for use by code:
+ __ram_window_start, __ram_window_size
+*/
+
+SECTIONS
+{
+ /*
+ Provide the ram window start & size for block loop searches
+
+ The window is from __logical_binary_start to ORIGIN(RAM) + LENGTH(RAM),
+ plus scratch X & Y if they are contiguous - this assumes __logical_binary_start
+ is located in RAM, which should always be the case for no_flash binaries
+
+ This is used by the _entry_point in crt0
+ */
+ __ram_window_start = __logical_binary_start;
+ __ram_window_size = (ORIGIN(RAM) + LENGTH(RAM)) - __logical_binary_start;
+ __ram_window_size += (((ORIGIN(RAM) + LENGTH(RAM)) == ORIGIN(SCRATCH_X))
+ ? (LENGTH(SCRATCH_X) + (((ORIGIN(SCRATCH_X) + LENGTH(SCRATCH_X)) == ORIGIN(SCRATCH_Y)) ? LENGTH(SCRATCH_Y) : 0))
+ : 0
+ );
+}
diff --git a/src/rp2_common/pico_standard_link/script_include/sections_copy_to_ram.incl b/src/rp2_common/pico_standard_link/script_include/sections_copy_to_ram.incl
index 52636cc..2717d67 100644
--- a/src/rp2_common/pico_standard_link/script_include/sections_copy_to_ram.incl
+++ b/src/rp2_common/pico_standard_link/script_include/sections_copy_to_ram.incl
@@ -3,6 +3,8 @@
INCLUDE "sections_copy_to_ram_text.incl"
INCLUDE "section_generated_post_text.incl"
INCLUDE "section_extra_post_text.incl"
+INCLUDE "sections_psram.incl"
+INCLUDE "section_xip_ram.incl"
INCLUDE "sections_copy_to_ram_data.incl"
INCLUDE "section_generated_post_data.incl"
INCLUDE "section_extra_post_data.incl"
@@ -11,8 +13,6 @@
INCLUDE "section_generated_post_scratch.incl"
INCLUDE "section_extra_post_scratch.incl"
INCLUDE "sections_stack.incl"
-INCLUDE "sections_psram.incl"
-INCLUDE "section_xip_ram.incl"
INCLUDE "section_flash_end.incl"
INCLUDE "section_end.incl"
INCLUDE "section_generated_post_end.incl"
diff --git a/src/rp2_common/pico_standard_link/script_include/sections_default.incl b/src/rp2_common/pico_standard_link/script_include/sections_default.incl
index f81e48c..ec0862a 100644
--- a/src/rp2_common/pico_standard_link/script_include/sections_default.incl
+++ b/src/rp2_common/pico_standard_link/script_include/sections_default.incl
@@ -3,6 +3,8 @@
INCLUDE "sections_default_text.incl"
INCLUDE "section_generated_post_text.incl"
INCLUDE "section_extra_post_text.incl"
+INCLUDE "sections_psram.incl"
+INCLUDE "section_xip_ram.incl"
INCLUDE "sections_default_data.incl"
INCLUDE "section_generated_post_data.incl"
INCLUDE "section_extra_post_data.incl"
@@ -11,8 +13,6 @@
INCLUDE "section_generated_post_scratch.incl"
INCLUDE "section_extra_post_scratch.incl"
INCLUDE "sections_stack.incl"
-INCLUDE "sections_psram.incl"
-INCLUDE "section_xip_ram.incl"
INCLUDE "section_flash_end.incl"
INCLUDE "section_end.incl"
INCLUDE "section_generated_post_end.incl"
diff --git a/src/rp2_common/pico_standard_link/script_include/sections_no_flash.incl b/src/rp2_common/pico_standard_link/script_include/sections_no_flash.incl
index 2e68aa2..fd84e60 100644
--- a/src/rp2_common/pico_standard_link/script_include/sections_no_flash.incl
+++ b/src/rp2_common/pico_standard_link/script_include/sections_no_flash.incl
@@ -3,6 +3,8 @@
INCLUDE "sections_no_flash_text.incl"
INCLUDE "section_generated_post_text.incl"
INCLUDE "section_extra_post_text.incl"
+INCLUDE "sections_psram.incl"
+INCLUDE "section_xip_ram.incl"
INCLUDE "sections_no_flash_data.incl"
INCLUDE "section_generated_post_data.incl"
INCLUDE "section_extra_post_data.incl"
@@ -11,9 +13,8 @@
INCLUDE "section_generated_post_scratch.incl"
INCLUDE "section_extra_post_scratch.incl"
INCLUDE "sections_stack.incl"
-INCLUDE "sections_psram.incl"
-INCLUDE "section_xip_ram.incl"
INCLUDE "section_end.incl"
+INCLUDE "section_no_flash_end.incl"
INCLUDE "section_generated_post_end.incl"
INCLUDE "section_extra_post_end.incl"
INCLUDE "section_platform_end.incl"
diff --git a/test/pico_low_power_test/CMakeLists.txt b/test/pico_low_power_test/CMakeLists.txt
index 452c64e..726e206 100644
--- a/test/pico_low_power_test/CMakeLists.txt
+++ b/test/pico_low_power_test/CMakeLists.txt
@@ -40,6 +40,24 @@
set_target_properties(low_power_test_timers_encrypted PROPERTIES PICO_TEST_BUDDY_FILE external_sleep_timer.elf)
# create map/bin/hex file etc.
pico_add_extra_outputs(low_power_test_timers_encrypted)
+
+ add_executable(low_power_test_timers_encrypted_xip_sram
+ low_power_test_timers.c
+ )
+ target_link_libraries(low_power_test_timers_encrypted_xip_sram low_power_test_common)
+ pico_set_binary_type(low_power_test_timers_encrypted_xip_sram no_flash)
+ pico_package_uf2_output(low_power_test_timers_encrypted_xip_sram)
+ pico_sign_binary(low_power_test_timers_encrypted_xip_sram ${PICO_SDK_PATH}/tools/example_keys/private.pem)
+ # Encrypted binaries don't clear xip_sram, so NO_CLEAR can be omitted when persistent data is in xip_sram
+ pico_encrypt_binary(low_power_test_timers_encrypted_xip_sram ${PICO_SDK_PATH}/tools/example_keys/privateaes.bin ${PICO_SDK_PATH}/tools/example_keys/ivsalt.bin EMBED)
+ pico_set_persistent_data_loc(low_power_test_timers_encrypted_xip_sram xip_ram)
+ # Also check encrypting with code in xip_sram
+ pico_set_time_critical_placement(low_power_test_timers_encrypted_xip_sram xip_ram)
+ set_target_properties(low_power_test_timers_encrypted_xip_sram PROPERTIES PICO_TEST_TIMEOUT 35)
+ set_target_properties(low_power_test_timers_encrypted_xip_sram PROPERTIES PICO_TEST_FAILURE_STRING "ERROR:")
+ set_target_properties(low_power_test_timers_encrypted_xip_sram PROPERTIES PICO_TEST_BUDDY_FILE external_sleep_timer.elf)
+ # create map/bin/hex file etc.
+ pico_add_extra_outputs(low_power_test_timers_encrypted_xip_sram)
endif()
diff --git a/test/pico_xip_sram_test/CMakeLists.txt b/test/pico_xip_sram_test/CMakeLists.txt
index defdebe..40555af 100644
--- a/test/pico_xip_sram_test/CMakeLists.txt
+++ b/test/pico_xip_sram_test/CMakeLists.txt
@@ -81,20 +81,57 @@
pico_set_time_critical_placement(pico_critical_xip_sram_test_no_flash xip_ram)
pico_add_extra_outputs(pico_critical_xip_sram_test_no_flash)
-if (NOT PICO_RP2040 AND NOT PICO_C_COMPILER_IS_CLANG)
- # XIP SRAM only binary, clang version is too big
- add_executable(pico_xip_sram_test pico_xip_sram_test.c)
- target_link_libraries(pico_xip_sram_test PRIVATE pico_stdlib)
- pico_set_binary_type(pico_xip_sram_test xip_ram)
- pico_minimize_runtime(pico_xip_sram_test INCLUDE PRINTF PRINTF_MINIMAL DEFAULT_ALARM_POOL PANIC FLOAT)
- target_compile_definitions(pico_xip_sram_test PRIVATE PICO_HEAP_SIZE=0x200)
- pico_add_extra_outputs(pico_xip_sram_test)
+if (NOT PICO_RP2040)
+ if (NOT PICO_C_COMPILER_IS_CLANG AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
+ # XIP SRAM only binary, clang and debug versions are too big
+ add_executable(pico_xip_sram_test pico_xip_sram_test.c)
+ target_link_libraries(pico_xip_sram_test PRIVATE pico_stdlib)
+ pico_set_binary_type(pico_xip_sram_test xip_ram)
+ pico_minimize_runtime(pico_xip_sram_test INCLUDE PRINTF PRINTF_MINIMAL DEFAULT_ALARM_POOL PANIC FLOAT)
+ target_compile_definitions(pico_xip_sram_test PRIVATE PICO_HEAP_SIZE=0x200)
+ pico_add_extra_outputs(pico_xip_sram_test)
+ endif()
- # Low power and critical XIP SRAM
- add_executable(pico_critical_xip_sram_test_low_power pico_critical_xip_sram_test.c)
- target_link_libraries(pico_critical_xip_sram_test_low_power PRIVATE pico_stdlib pico_multicore hardware_dma pico_test hardware_riscv_platform_timer pico_low_power)
- pico_set_binary_type(pico_critical_xip_sram_test_low_power copy_to_ram)
- pico_set_time_critical_placement(pico_critical_xip_sram_test_low_power xip_ram)
- pico_set_persistent_data_loc(pico_critical_xip_sram_test_low_power xip_ram)
- pico_add_extra_outputs(pico_critical_xip_sram_test_low_power)
+ if (TARGET pico_low_power)
+ # Low power and critical XIP SRAM
+ add_executable(pico_critical_xip_sram_test_low_power pico_critical_xip_sram_test.c)
+ target_link_libraries(pico_critical_xip_sram_test_low_power PRIVATE pico_stdlib pico_multicore hardware_dma pico_test hardware_riscv_platform_timer pico_low_power)
+ pico_set_binary_type(pico_critical_xip_sram_test_low_power copy_to_ram)
+ pico_set_time_critical_placement(pico_critical_xip_sram_test_low_power xip_ram)
+ pico_set_persistent_data_loc(pico_critical_xip_sram_test_low_power xip_ram)
+ pico_add_extra_outputs(pico_critical_xip_sram_test_low_power)
+ endif()
+
+ # Packaged binary and critical XIP SRAM
+ add_executable(pico_critical_xip_sram_test_packaged pico_critical_xip_sram_test.c)
+ target_link_libraries(pico_critical_xip_sram_test_packaged PRIVATE pico_stdlib pico_multicore hardware_dma pico_test)
+ if (NOT PICO_RP2040)
+ target_link_libraries(pico_critical_xip_sram_test_packaged PRIVATE hardware_riscv_platform_timer)
+ endif()
+ pico_set_binary_type(pico_critical_xip_sram_test_packaged no_flash)
+ pico_set_time_critical_placement(pico_critical_xip_sram_test_packaged xip_ram)
+ pico_package_uf2_output(pico_critical_xip_sram_test_packaged)
+ pico_hash_binary(pico_critical_xip_sram_test_packaged)
+ pico_sign_binary(pico_critical_xip_sram_test_packaged ${PICO_SDK_PATH}/tools/example_keys/private.pem)
+ pico_add_extra_outputs(pico_critical_xip_sram_test_packaged)
+
+ # Use XIP SRAM for time critical functions and scratch X for not in flash functions, in a packaged, hashed & signed binary
+ add_executable(pico_critical_xip_sram_no_flash_scratch_x_test_packaged pico_critical_xip_sram_test.c)
+ target_link_libraries(pico_critical_xip_sram_no_flash_scratch_x_test_packaged PRIVATE pico_stdlib pico_multicore hardware_dma pico_test)
+ target_link_libraries(pico_critical_xip_sram_no_flash_scratch_x_test_packaged PRIVATE hardware_riscv_platform_timer)
+ target_compile_definitions(pico_critical_xip_sram_no_flash_scratch_x_test_packaged PRIVATE
+ TEXT_FUNC_SRAM_BASE=SRAM_SCRATCH_X_BASE
+ TEXT_FUNC_SRAM_END=SRAM_SCRATCH_Y_BASE
+ )
+ target_compile_definitions(pico_critical_xip_sram_no_flash_scratch_x_test_packaged PRIVATE
+ PICO_CORE1_STACK_SIZE=0x200
+ )
+ pico_set_binary_type(pico_critical_xip_sram_no_flash_scratch_x_test_packaged no_flash)
+ pico_set_not_in_flash_placement(pico_critical_xip_sram_no_flash_scratch_x_test_packaged scratch_x)
+ pico_set_time_critical_placement(pico_critical_xip_sram_no_flash_scratch_x_test_packaged xip_ram)
+ pico_enable_stdio_usb(pico_critical_xip_sram_no_flash_scratch_x_test_packaged 1) # test with USB as that invokes flash functions
+ pico_package_uf2_output(pico_critical_xip_sram_no_flash_scratch_x_test_packaged)
+ pico_hash_binary(pico_critical_xip_sram_no_flash_scratch_x_test_packaged)
+ pico_sign_binary(pico_critical_xip_sram_no_flash_scratch_x_test_packaged ${PICO_SDK_PATH}/tools/example_keys/private.pem)
+ pico_add_extra_outputs(pico_critical_xip_sram_no_flash_scratch_x_test_packaged)
endif()
\ No newline at end of file