Skip to content

Commit 70849d7

Browse files
committed
Switch to new section_no_flash_end.incl for calculating ram window start and size, and add to Risc-V
1 parent 0b4f276 commit 70849d7

11 files changed

Lines changed: 37 additions & 11 deletions

File tree

src/rp2040/pico_platform/memmap_no_flash.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ function(pico_add_memmap_link_depends_internal TARGET)
2525
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_generated_post_text.incl)
2626
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_heap.incl)
2727
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_data.incl)
28+
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl)
2829
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_rodata.incl)
2930
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_persistent_data.incl)
3031
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_tls.incl)

src/rp2040/pico_platform/memmap_no_flash.ld

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ INCLUDE "memmap_no_flash.incl"
3838
* ├── section_extra_post_scratch.incl rp2_common/pico_standard_link
3939
* ├── sections_stack.incl rp2_common/pico_standard_link
4040
* ├── section_end.incl rp2_common/pico_standard_link
41+
* ├── section_no_flash_end.incl rp2_common/pico_standard_link
4142
* ├── section_generated_post_end.incl rp2_common/pico_standard_link
4243
* ├── section_extra_post_end.incl rp2_common/pico_standard_link
4344
* ├── section_platform_end.incl rp2040/pico_platform

src/rp2350/pico_platform/memmap_no_flash.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ function(pico_add_memmap_link_depends_internal TARGET)
2323
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_generated_post_text.incl)
2424
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_heap.incl)
2525
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_data.incl)
26+
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl)
2627
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_rodata.incl)
2728
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_text.incl)
2829
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_persistent_data.incl)

src/rp2350/pico_platform/memmap_no_flash.ld

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ INCLUDE "memmap_no_flash.incl"
3838
* ├── section_extra_post_scratch.incl rp2_common/pico_standard_link
3939
* ├── sections_stack.incl rp2_common/pico_standard_link
4040
* ├── section_end.incl rp2_common/pico_standard_link
41+
* ├── section_no_flash_end.incl rp2_common/pico_standard_link
4142
* ├── section_generated_post_end.incl rp2_common/pico_standard_link
4243
* ├── section_extra_post_end.incl rp2_common/pico_standard_link
4344
* ├── section_platform_end.incl rp2350/pico_platform

src/rp2350/pico_platform/memmap_xip_ram.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ function(pico_add_memmap_link_depends_internal TARGET)
2424
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_generated_post_text.incl)
2525
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_heap.incl)
2626
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_data.incl)
27+
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl)
2728
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_rodata.incl)
2829
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_text.incl)
2930
pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_persistent_data.incl)

src/rp2350/pico_platform/memmap_xip_ram.ld

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ INCLUDE "memmap_xip_ram.incl"
3939
* ├── section_extra_post_scratch.incl rp2_common/pico_standard_link
4040
* ├── sections_stack.incl rp2_common/pico_standard_link
4141
* ├── section_end.incl rp2_common/pico_standard_link
42+
* ├── section_no_flash_end.incl rp2_common/pico_standard_link
4243
* ├── section_generated_post_end.incl rp2_common/pico_standard_link
4344
* ├── section_extra_post_end.incl rp2_common/pico_standard_link
4445
* ├── section_platform_end.incl rp2350/pico_platform

src/rp2_common/pico_crt0/crt0.S

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -436,10 +436,10 @@ _entry_point:
436436
// because RP2040 doesn't have special watchdog boot types
437437
// Launch this no_flash binary using a RAM image boot
438438
ldr r1, =(WATCHDOG_BASE + WATCHDOG_SCRATCH2_OFFSET) // registers start from here
439-
// scratch 2 = __logical_binary_start
440-
ldr r2, =__logical_binary_start
441-
// scratch 3 = size
442-
ldr r3, =__ram_window_size // assume maximum size for block loop
439+
// scratch 2 = start of RAM window, from section_no_flash_end.incl
440+
ldr r2, =__ram_window_start
441+
// scratch 3 = size of RAM window, from section_no_flash_end.incl
442+
ldr r3, =__ram_window_size
443443
// scratch 4&7 = magic number
444444
ldr r4, =0xb007c0d3
445445
mov r7, r4

src/rp2_common/pico_crt0/crt0_riscv.S

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -305,11 +305,11 @@ _entry_point:
305305
#if PICO_NO_FLASH
306306
// Launch this no_flash binary using a RAM image boot
307307
la a1, WATCHDOG_BASE + WATCHDOG_SCRATCH2_OFFSET // offsets start from here, to fit in sw immediate
308-
// scratch 2 = __logical_binary_start
309-
la a0, __logical_binary_start
308+
// scratch 2 = start of RAM window, from section_no_flash_end.incl
309+
la a0, __ram_window_start
310310
sw a0, 0(a1)
311-
// scratch 3 = size
312-
li a0, SRAM_END - SRAM_BASE // assume maximum size for block loop
311+
// scratch 3 = size of RAM window, from section_no_flash_end.incl
312+
la a0, __ram_window_size
313313
sw a0, 4(a1)
314314
// scratch 4&7 = magic number
315315
li a0, 0xb007c0d3

src/rp2_common/pico_standard_link/script_include/section_end.incl

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ SECTIONS
1717
__StackBottom = __StackTop - SIZEOF(.stack_dummy);
1818
PROVIDE(__stack = __StackTop);
1919

20-
/* provide the maximum ram window size for crt0 */
21-
__ram_window_size = LENGTH(RAM);
22-
2320
/* picolibc and LLVM */
2421
PROVIDE (__heap_start = __end__);
2522
PROVIDE (__heap_end = __HeapLimit);
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/* Defines the following symbols for use by code:
2+
__ram_window_start, __ram_window_size
3+
*/
4+
5+
SECTIONS
6+
{
7+
/*
8+
Provide the ram window start & size for block loop searches
9+
10+
The window is from __logical_binary_start to ORIGIN(RAM) + LENGTH(RAM),
11+
plus scratch X & Y if they are contiguous - this assumes __logical_binary_start
12+
is located in RAM, which should always be the case for no_flash binaries
13+
14+
This is used by the _entry_point in crt0
15+
*/
16+
__ram_window_start = __logical_binary_start;
17+
__ram_window_size = (ORIGIN(RAM) + LENGTH(RAM)) - __logical_binary_start;
18+
__ram_window_size += (((ORIGIN(RAM) + LENGTH(RAM)) == ORIGIN(SCRATCH_X))
19+
? (LENGTH(SCRATCH_X) + (((ORIGIN(SCRATCH_X) + LENGTH(SCRATCH_X)) == ORIGIN(SCRATCH_Y)) ? LENGTH(SCRATCH_Y) : 0))
20+
: 0
21+
);
22+
}

0 commit comments

Comments
 (0)