[no changelog]tychovrahe/coresplit/merged
parent
4df485aa03
commit
14a89de6da
@ -1,108 +0,0 @@
|
||||
/* Trezor v2 bootloader linker script */
|
||||
|
||||
ENTRY(reset_handler)
|
||||
|
||||
MEMORY {
|
||||
FLASH (rx) : ORIGIN = 0x0C010000, LENGTH = 128K
|
||||
SRAM1 (wal) : ORIGIN = 0x30000000, LENGTH = 192K - 0x100
|
||||
BOOT_ARGS (wal) : ORIGIN = 0x3002FF00, LENGTH = 0x100
|
||||
SRAM2 (wal) : ORIGIN = 0x30030000, LENGTH = 64K
|
||||
SRAM3 (wal) : ORIGIN = 0x30040000, LENGTH = 512K
|
||||
SRAM5 (wal) : ORIGIN = 0x30080000, LENGTH = 0K /* SRAM5 is not available */
|
||||
SRAM6 (wal) : ORIGIN = 0x30080000, LENGTH = 0K /* SRAM6 is not available */
|
||||
SRAM4 (wal) : ORIGIN = 0x38000000, LENGTH = 16K
|
||||
}
|
||||
|
||||
main_stack_base = ORIGIN(SRAM2) + SIZEOF(.stack); /* 8-byte aligned full descending stack */
|
||||
_sstack = ORIGIN(SRAM2);
|
||||
_estack = main_stack_base;
|
||||
|
||||
/* used by the startup code to populate variables used by the C code */
|
||||
data_lma = LOADADDR(.data);
|
||||
data_vma = ADDR(.data);
|
||||
data_size = SIZEOF(.data);
|
||||
|
||||
/* used by the startup code to populate variables used by the C code */
|
||||
confidential_lma = LOADADDR(.confidential);
|
||||
confidential_vma = ADDR(.confidential);
|
||||
confidential_size = SIZEOF(.confidential);
|
||||
|
||||
/* used by the startup code to wipe memory */
|
||||
sram1_start = ORIGIN(SRAM1);
|
||||
sram1_end = ORIGIN(SRAM1) + LENGTH(SRAM1);
|
||||
sram2_start = ORIGIN(SRAM2);
|
||||
sram2_end = ORIGIN(SRAM2) + LENGTH(SRAM2);
|
||||
sram3_start = ORIGIN(SRAM3);
|
||||
sram3_end = ORIGIN(SRAM3) + LENGTH(SRAM3);
|
||||
sram4_start = ORIGIN(SRAM4);
|
||||
sram4_end = ORIGIN(SRAM4) + LENGTH(SRAM4);
|
||||
sram5_start = ORIGIN(SRAM5);
|
||||
sram5_end = ORIGIN(SRAM5) + LENGTH(SRAM5);
|
||||
sram6_start = ORIGIN(SRAM6);
|
||||
sram6_end = ORIGIN(SRAM6) + LENGTH(SRAM6);
|
||||
bss_start = ADDR(.bss);
|
||||
bss_end = ADDR(.bss) + SIZEOF(.bss);
|
||||
|
||||
/* reserve 256 bytes for bootloader arguments */
|
||||
boot_args_start = ORIGIN(BOOT_ARGS);
|
||||
boot_args_end = ORIGIN(BOOT_ARGS) + LENGTH(BOOT_ARGS);
|
||||
|
||||
_codelen = SIZEOF(.flash) + SIZEOF(.data) + SIZEOF(.confidential);
|
||||
|
||||
SECTIONS {
|
||||
.header : ALIGN(4) {
|
||||
KEEP(*(.header));
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.flash : ALIGN(512) {
|
||||
KEEP(*(.vector_table));
|
||||
. = ALIGN(4);
|
||||
*(.text*);
|
||||
. = ALIGN(4);
|
||||
*(.rodata*);
|
||||
. = ALIGN(512);
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.data : ALIGN(4) {
|
||||
*(.data*);
|
||||
. = ALIGN(512);
|
||||
} >SRAM1 AT>FLASH
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.ARM.exidx*);
|
||||
}
|
||||
|
||||
.bss : ALIGN(4) {
|
||||
*(.bss*);
|
||||
. = ALIGN(4);
|
||||
} >SRAM1
|
||||
|
||||
.buf : ALIGN(4) {
|
||||
*(.buf*);
|
||||
. = ALIGN(4);
|
||||
} >SRAM1
|
||||
|
||||
.stack : ALIGN(8) {
|
||||
. = 16K; /* Exactly 16K allocated for stack. Overflow causes Usage fault. */
|
||||
} >SRAM2
|
||||
|
||||
.confidential : ALIGN(512) {
|
||||
*(.confidential*);
|
||||
. = ALIGN(512);
|
||||
} >SRAM2 AT>FLASH
|
||||
|
||||
.fb : ALIGN(4) {
|
||||
__fb_start = .;
|
||||
*(.fb1*);
|
||||
*(.fb2*);
|
||||
__fb_end = .;
|
||||
. = ALIGN(4);
|
||||
} >SRAM3
|
||||
|
||||
.boot_args : ALIGN(8) {
|
||||
*(.boot_command*);
|
||||
. = ALIGN(8);
|
||||
*(.boot_args*);
|
||||
. = ALIGN(8);
|
||||
} >BOOT_ARGS
|
||||
}
|
@ -1,112 +0,0 @@
|
||||
/* Trezor v2 bootloader linker script */
|
||||
|
||||
ENTRY(reset_handler)
|
||||
|
||||
MEMORY {
|
||||
FLASH (rx) : ORIGIN = 0x0C010000, LENGTH = 128K
|
||||
SRAM1 (wal) : ORIGIN = 0x30000000, LENGTH = 768K - 0x100
|
||||
BOOT_ARGS (wal) : ORIGIN = 0x300BFF00, LENGTH = 0x100
|
||||
SRAM2 (wal) : ORIGIN = 0x300C0000, LENGTH = 64K
|
||||
SRAM3 (wal) : ORIGIN = 0x300D0000, LENGTH = 832K
|
||||
SRAM5 (wal) : ORIGIN = 0x301A0000, LENGTH = 832K
|
||||
SRAM6 (wal) : ORIGIN = 0x30270000, LENGTH = 0
|
||||
SRAM4 (wal) : ORIGIN = 0x38000000, LENGTH = 16K
|
||||
}
|
||||
|
||||
main_stack_base = ORIGIN(SRAM2) + SIZEOF(.stack); /* 8-byte aligned full descending stack */
|
||||
_sstack = ORIGIN(SRAM2);
|
||||
_estack = main_stack_base;
|
||||
|
||||
/* used by the startup code to populate variables used by the C code */
|
||||
data_lma = LOADADDR(.data);
|
||||
data_vma = ADDR(.data);
|
||||
data_size = SIZEOF(.data);
|
||||
|
||||
/* used by the startup code to populate variables used by the C code */
|
||||
confidential_lma = LOADADDR(.confidential);
|
||||
confidential_vma = ADDR(.confidential);
|
||||
confidential_size = SIZEOF(.confidential);
|
||||
|
||||
/* used by the startup code to wipe memory */
|
||||
sram1_start = ORIGIN(SRAM1);
|
||||
sram1_end = ORIGIN(SRAM1) + LENGTH(SRAM1);
|
||||
sram2_start = ORIGIN(SRAM2);
|
||||
sram2_end = ORIGIN(SRAM2) + LENGTH(SRAM2);
|
||||
sram3_start = ORIGIN(SRAM3);
|
||||
sram3_end = ORIGIN(SRAM3) + LENGTH(SRAM3);
|
||||
sram4_start = ORIGIN(SRAM4);
|
||||
sram4_end = ORIGIN(SRAM4) + LENGTH(SRAM4);
|
||||
sram5_start = ORIGIN(SRAM5);
|
||||
sram5_end = ORIGIN(SRAM5) + LENGTH(SRAM5);
|
||||
sram6_start = ORIGIN(SRAM6);
|
||||
sram6_end = ORIGIN(SRAM6) + LENGTH(SRAM6);
|
||||
|
||||
/* reserve 256 bytes for bootloader arguments */
|
||||
boot_args_start = ORIGIN(BOOT_ARGS);
|
||||
boot_args_end = ORIGIN(BOOT_ARGS) + LENGTH(BOOT_ARGS);
|
||||
|
||||
_codelen = SIZEOF(.flash) + SIZEOF(.data) + SIZEOF(.confidential);
|
||||
|
||||
SECTIONS {
|
||||
.header : ALIGN(4) {
|
||||
KEEP(*(.header));
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.flash : ALIGN(1024) {
|
||||
KEEP(*(.vector_table));
|
||||
. = ALIGN(4);
|
||||
*(.text*);
|
||||
. = ALIGN(4);
|
||||
*(.rodata*);
|
||||
. = ALIGN(512);
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.data : ALIGN(4) {
|
||||
*(.data*);
|
||||
. = ALIGN(512);
|
||||
} >SRAM1 AT>FLASH
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.ARM.exidx*);
|
||||
}
|
||||
|
||||
.bss : ALIGN(4) {
|
||||
*(.bss*);
|
||||
. = ALIGN(4);
|
||||
} >SRAM1
|
||||
|
||||
.buf : ALIGN(4) {
|
||||
*(.buf*);
|
||||
. = ALIGN(4);
|
||||
} >SRAM1
|
||||
|
||||
.stack : ALIGN(8) {
|
||||
. = 16K; /* Overflow causes UsageFault */
|
||||
} >SRAM2
|
||||
|
||||
.confidential : ALIGN(512) {
|
||||
*(.confidential*);
|
||||
. = ALIGN(512);
|
||||
} >SRAM2 AT>FLASH
|
||||
|
||||
.fb1 : ALIGN(4) {
|
||||
__fb_start = .;
|
||||
*(.fb1*);
|
||||
*(.gfxmmu_table*);
|
||||
*(.framebuffer_select*);
|
||||
. = ALIGN(4);
|
||||
} >SRAM3
|
||||
|
||||
.fb2 : ALIGN(4) {
|
||||
*(.fb2*);
|
||||
__fb_end = .;
|
||||
. = ALIGN(4);
|
||||
} >SRAM5
|
||||
|
||||
.boot_args : ALIGN(8) {
|
||||
*(.boot_command*);
|
||||
. = ALIGN(8);
|
||||
*(.boot_args*);
|
||||
. = ALIGN(8);
|
||||
} >BOOT_ARGS
|
||||
}
|
@ -1 +0,0 @@
|
||||
memory_T.ld
|
@ -1 +0,0 @@
|
||||
memory_T.ld
|
@ -1 +0,0 @@
|
||||
memory_T3T1.ld
|
@ -1,74 +0,0 @@
|
||||
/* TREZORv1 firmware linker script */
|
||||
|
||||
ENTRY(reset_handler)
|
||||
|
||||
MEMORY {
|
||||
FLASH (rx) : ORIGIN = 0x08010000, LENGTH = 1024K - 64K
|
||||
SRAM (wal) : ORIGIN = 0x20000000, LENGTH = 128K
|
||||
}
|
||||
|
||||
main_stack_base = ORIGIN(SRAM) + SIZEOF(.stack); /* 8-byte aligned full descending stack */
|
||||
_sstack = ORIGIN(SRAM);
|
||||
_estack = main_stack_base;
|
||||
|
||||
/* used by the startup code to populate variables used by the C code */
|
||||
data_lma = LOADADDR(.data);
|
||||
data_vma = ADDR(.data);
|
||||
data_size = SIZEOF(.data);
|
||||
|
||||
/* used by the startup code to wipe memory */
|
||||
/* we have no CCMRAM, so erase the first word of SRAM as hack */
|
||||
ccmram_start = ORIGIN(SRAM);
|
||||
ccmram_end = ORIGIN(SRAM) + 4;
|
||||
|
||||
/* used by the startup code to wipe memory */
|
||||
sram_start = ORIGIN(SRAM);
|
||||
sram_end = ORIGIN(SRAM) + LENGTH(SRAM);
|
||||
_ram_start = sram_start;
|
||||
_ram_end = sram_end;
|
||||
|
||||
_codelen = SIZEOF(.flash) + SIZEOF(.data) + SIZEOF(.exidx);
|
||||
_flash_start = ORIGIN(FLASH);
|
||||
_flash_end = ORIGIN(FLASH) + LENGTH(FLASH);
|
||||
_heap_start = ADDR(.heap);
|
||||
_heap_end = ADDR(.heap) + SIZEOF(.heap);
|
||||
|
||||
SECTIONS {
|
||||
.header : ALIGN(4) {
|
||||
KEEP(*(.header));
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.flash : ALIGN(512) {
|
||||
KEEP(*(.vector_table));
|
||||
. = ALIGN(4);
|
||||
*(.text*);
|
||||
. = ALIGN(4);
|
||||
*(.rodata*);
|
||||
. = ALIGN(512);
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
/* exception handling info generated by llvm which should consist of 8 bytes of "cantunwind" */
|
||||
.exidx : ALIGN(4) {
|
||||
*(.ARM.exidx*);
|
||||
. = ALIGN(4);
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.stack : ALIGN(8) {
|
||||
. = 16K; /* Exactly 16K allocated for stack. Overflow causes MemManage fault (when using MPU). */
|
||||
} >SRAM
|
||||
|
||||
.data : ALIGN(4) {
|
||||
*(.data*);
|
||||
. = ALIGN(512);
|
||||
} >SRAM AT>FLASH
|
||||
|
||||
.bss : ALIGN(4) {
|
||||
*(.bss*);
|
||||
. = ALIGN(4);
|
||||
} >SRAM
|
||||
|
||||
.heap : ALIGN(4) {
|
||||
. = 37K; /* this acts as a build time assertion that at least this much memory is available for heap use */
|
||||
. = ABSOLUTE(sram_end - 8); /* this explicitly sets the end of the heap, T1 bootloader had 8 bytes reserved at end */
|
||||
} >SRAM
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
/* TREZORv1 firmware linker script */
|
||||
|
||||
ENTRY(reset_handler)
|
||||
|
||||
MEMORY {
|
||||
FLASH (rx) : ORIGIN = 0x08010000, LENGTH = 1024K - 64K
|
||||
SRAM (wal) : ORIGIN = 0x20000000, LENGTH = 128K
|
||||
}
|
||||
|
||||
main_stack_base = ORIGIN(SRAM) + SIZEOF(.stack); /* 8-byte aligned full descending stack */
|
||||
_sstack = ORIGIN(SRAM);
|
||||
_estack = main_stack_base;
|
||||
|
||||
/* used by the startup code to populate variables used by the C code */
|
||||
data_lma = LOADADDR(.data);
|
||||
data_vma = ADDR(.data);
|
||||
data_size = SIZEOF(.data);
|
||||
|
||||
/* used by the startup code to wipe memory */
|
||||
/* we have no CCMRAM, so erase the first word of SRAM as hack */
|
||||
ccmram_start = ORIGIN(SRAM);
|
||||
ccmram_end = ORIGIN(SRAM) + 4;
|
||||
|
||||
/* used by the startup code to wipe memory */
|
||||
sram_start = ORIGIN(SRAM);
|
||||
sram_end = ORIGIN(SRAM) + LENGTH(SRAM);
|
||||
_ram_start = sram_start;
|
||||
_ram_end = sram_end;
|
||||
|
||||
_codelen = SIZEOF(.flash) + SIZEOF(.data) + SIZEOF(.exidx);
|
||||
_flash_start = ORIGIN(FLASH);
|
||||
_flash_end = ORIGIN(FLASH) + LENGTH(FLASH);
|
||||
_heap_start = ADDR(.heap);
|
||||
_heap_end = ADDR(.heap) + SIZEOF(.heap);
|
||||
|
||||
SECTIONS {
|
||||
.header : ALIGN(4) {
|
||||
KEEP(*(.header));
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.flash : ALIGN(512) {
|
||||
KEEP(*(.vector_table));
|
||||
. = ALIGN(4);
|
||||
*(.text*);
|
||||
. = ALIGN(4);
|
||||
*(.rodata*);
|
||||
. = ALIGN(512);
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
/* exception handling info generated by llvm which should consist of 8 bytes of "cantunwind" */
|
||||
.exidx : ALIGN(4) {
|
||||
*(.ARM.exidx*);
|
||||
. = ALIGN(4);
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.stack : ALIGN(8) {
|
||||
. = 16K; /* Exactly 16K allocated for stack. Overflow causes MemManage fault (when using MPU). */
|
||||
} >SRAM
|
||||
|
||||
.data : ALIGN(4) {
|
||||
*(.data*);
|
||||
. = ALIGN(512);
|
||||
} >SRAM AT>FLASH
|
||||
|
||||
.bss : ALIGN(4) {
|
||||
*(.bss*);
|
||||
. = ALIGN(4);
|
||||
} >SRAM
|
||||
|
||||
.heap : ALIGN(4) {
|
||||
. = 37K; /* this acts as a build time assertion that at least this much memory is available for heap use */
|
||||
. = ABSOLUTE(sram_end - 8); /* this explicitly sets the end of the heap, T1 bootloader had 8 bytes reserved at end */
|
||||
} >SRAM
|
||||
}
|
@ -1 +0,0 @@
|
||||
memory_T.ld
|
@ -1 +0,0 @@
|
||||
memory_T.ld
|
@ -1 +0,0 @@
|
||||
memory_T3T1.ld
|
@ -1,54 +0,0 @@
|
||||
.syntax unified
|
||||
|
||||
#include "version.h"
|
||||
|
||||
.section .header, "a"
|
||||
|
||||
.type g_header, %object
|
||||
.size g_header, .-g_header
|
||||
|
||||
// Firmware header for both Trezor One and Trezor T.
|
||||
// Trezor One must have bootloader version >= 1.8.0 (before that version the hdrlen used to be reset vector)
|
||||
|
||||
g_header:
|
||||
.byte 'T','R','Z','F' // magic
|
||||
.word g_header_end - g_header // hdrlen
|
||||
#ifdef TREZOR_MODEL_T
|
||||
.word 0 // expiry
|
||||
#else
|
||||
.word 1 // expiry
|
||||
#endif
|
||||
.word _codelen // codelen
|
||||
.byte VERSION_MAJOR // vmajor
|
||||
.byte VERSION_MINOR // vminor
|
||||
.byte VERSION_PATCH // vpatch
|
||||
.byte VERSION_BUILD // vbuild
|
||||
.byte FIX_VERSION_MAJOR // fix_vmajor
|
||||
.byte FIX_VERSION_MINOR // fix_vminor
|
||||
.byte FIX_VERSION_PATCH // fix_vpatch
|
||||
.byte FIX_VERSION_BUILD // fix_vbuild
|
||||
.word HW_MODEL // type of the designated hardware
|
||||
.byte HW_REVISION // revision of the designated hardware
|
||||
.byte VERSION_MONOTONIC // monotonic version of the binary
|
||||
. = . + 2 // reserved
|
||||
. = . + 512 // hash1 ... hash16
|
||||
|
||||
#if !defined TREZOR_MODEL_1
|
||||
// trezor-core header style
|
||||
. = . + 415 // reserved
|
||||
.byte 0 // sigmask
|
||||
. = . + 64 // sig
|
||||
#else
|
||||
// model 1 compatibility header
|
||||
. = . + 64 // sig1
|
||||
. = . + 64 // sig2
|
||||
. = . + 64 // sig3
|
||||
.byte 0 // sigindex1
|
||||
.byte 0 // sigindex2
|
||||
.byte 0 // sigindex3
|
||||
. = . + 220 // reserved
|
||||
. = . + 65 // reserved
|
||||
#endif
|
||||
|
||||
g_header_end:
|
||||
|
@ -0,0 +1,46 @@
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
.global reset_handler
|
||||
.type reset_handler, STT_FUNC
|
||||
reset_handler:
|
||||
// setup environment for subsequent stage of code
|
||||
ldr r0, =ccmram_start // r0 - point to beginning of CCMRAM
|
||||
ldr r1, =ccmram_end // r1 - point to byte after the end of CCMRAM
|
||||
ldr r2, =0 // r2 - the word-sized value to be written
|
||||
bl memset_reg
|
||||
|
||||
ldr r0, =boot_args_start // r0 - point to beginning of BOOT_ARGS
|
||||
ldr r1, =boot_args_end // r1 - point to byte after the end of BOOT_ARGS
|
||||
ldr r2, =0 // r2 - the word-sized value to be written
|
||||
bl memset_reg
|
||||
|
||||
ldr r0, =sram_start // r0 - point to beginning of SRAM
|
||||
ldr r1, =sram_end // r1 - point to byte after the end of SRAM
|
||||
ldr r2, =0 // r2 - the word-sized value to be written
|
||||
bl memset_reg
|
||||
|
||||
// copy data in from flash
|
||||
ldr r0, =data_vma // dst addr
|
||||
ldr r1, =data_lma // src addr
|
||||
ldr r2, =data_size // size in bytes
|
||||
bl memcpy
|
||||
|
||||
// setup the stack protector (see build script "-fstack-protector-all") with an unpredictable value
|
||||
bl rng_get
|
||||
ldr r1, = __stack_chk_guard
|
||||
str r0, [r1]
|
||||
|
||||
// re-enable exceptions
|
||||
// according to "ARM Cortex-M Programming Guide to Memory Barrier Instructions" Application Note 321, section 4.7:
|
||||
// "If it is not necessary to ensure that a pended interrupt is recognized immediately before
|
||||
// subsequent operations, it is not necessary to insert a memory barrier instruction."
|
||||
cpsie f
|
||||
|
||||
// enter the application code
|
||||
bl main
|
||||
|
||||
b shutdown_privileged
|
||||
|
||||
.end
|
@ -0,0 +1,25 @@
|
||||
FLASH_START = 0x8000000;
|
||||
BOARDLOADER_START = 0x8000000;
|
||||
BOOTLOADER_START = 0x8020000;
|
||||
FIRMWARE_START = 0x8040000;
|
||||
FIRMWARE_P2_START = 0x8120000;
|
||||
STORAGE_1_OFFSET = 0x10000;
|
||||
STORAGE_2_OFFSET = 0x110000;
|
||||
NORCOW_SECTOR_SIZE = 0x10000;
|
||||
BOARDLOADER_IMAGE_MAXSIZE = 0xc000;
|
||||
BOOTLOADER_IMAGE_MAXSIZE = 0x20000;
|
||||
FIRMWARE_IMAGE_MAXSIZE = 0x1a0000;
|
||||
FIRMWARE_P1_IMAGE_MAXSIZE = 0xc0000;
|
||||
FIRMWARE_P2_IMAGE_MAXSIZE = 0xe0000;
|
||||
BOARDLOADER_SECTOR_START = 0x0;
|
||||
BOARDLOADER_SECTOR_END = 0x3;
|
||||
BOOTLOADER_SECTOR_START = 0x5;
|
||||
BOOTLOADER_SECTOR_END = 0x5;
|
||||
FIRMWARE_SECTOR_START = 0x6;
|
||||
FIRMWARE_SECTOR_END = 0xb;
|
||||
FIRMWARE_P2_SECTOR_START = 0x11;
|
||||
FIRMWARE_P2_SECTOR_END = 0x17;
|
||||
STORAGE_1_SECTOR_START = 0x4;
|
||||
STORAGE_1_SECTOR_END = 0x4;
|
||||
STORAGE_2_SECTOR_START = 0x10;
|
||||
STORAGE_2_SECTOR_END = 0x10;
|
@ -0,0 +1,30 @@
|
||||
FLASH_START = 0xc000000;
|
||||
BOARDLOADER_START = 0xc004000;
|
||||
BOOTLOADER_START = 0xc010000;
|
||||
KERNEL_START = 0xc050000;
|
||||
FIRMWARE_START = 0xc050000;
|
||||
STORAGE_1_OFFSET = 0x30000;
|
||||
STORAGE_2_OFFSET = 0x50000;
|
||||
NORCOW_SECTOR_SIZE = 0x10000;
|
||||
BOARDLOADER_IMAGE_MAXSIZE = 0xc000;
|
||||
BOOTLOADER_IMAGE_MAXSIZE = 0x20000;
|
||||
FIRMWARE_IMAGE_MAXSIZE = 0x3a0000;
|
||||
KERNEL_IMAGE_MAXSIZE = 0x80000;
|
||||
BOARDLOADER_SECTOR_START = 0x2;
|
||||
BOARDLOADER_SECTOR_END = 0x7;
|
||||
BOOTLOADER_SECTOR_START = 0x8;
|
||||
BOOTLOADER_SECTOR_END = 0x17;
|
||||
FIRMWARE_SECTOR_START = 0x28;
|
||||
FIRMWARE_SECTOR_END = 0x1f7;
|
||||
STORAGE_1_SECTOR_START = 0x18;
|
||||
STORAGE_1_SECTOR_END = 0x1f;
|
||||
STORAGE_2_SECTOR_START = 0x20;
|
||||
STORAGE_2_SECTOR_END = 0x27;
|
||||
KERNEL_U_FLASH_SIZE = 0x200;
|
||||
KERNEL_U_RAM_SIZE = 0x200;
|
||||
KERNEL_SRAM1_SIZE = 0x4000;
|
||||
KERNEL_SRAM2_SIZE = 0x2400;
|
||||
KERNEL_SRAM3_SIZE = 0xbb800;
|
||||
BOOTARGS_SIZE = 0x100;
|
||||
BOARD_CAPABILITIES_ADDR = 0xc00ff00;
|
||||
CODE_ALIGNMENT = 0x400;
|
@ -0,0 +1,14 @@
|
||||
FLASH_START = 0x8000000;
|
||||
BOOTLOADER_START = 0x8000000;
|
||||
FIRMWARE_START = 0x8010000;
|
||||
NORCOW_SECTOR_SIZE = 0x10000;
|
||||
BOOTLOADER_IMAGE_MAXSIZE = 0x8000;
|
||||
FIRMWARE_IMAGE_MAXSIZE = 0xf0000;
|
||||
BOOTLOADER_SECTOR_START = 0x0;
|
||||
BOOTLOADER_SECTOR_END = 0x2;
|
||||
FIRMWARE_SECTOR_START = 0x4;
|
||||
FIRMWARE_SECTOR_END = 0xb;
|
||||
STORAGE_1_SECTOR_START = 0x2;
|
||||
STORAGE_1_SECTOR_END = 0x2;
|
||||
STORAGE_2_SECTOR_START = 0x3;
|
||||
STORAGE_2_SECTOR_END = 0x3;
|
@ -0,0 +1,30 @@
|
||||
FLASH_START = 0x8000000;
|
||||
BOARDLOADER_START = 0x8000000;
|
||||
BOOTLOADER_START = 0x8020000;
|
||||
FIRMWARE_START = 0x8040000;
|
||||
FIRMWARE_P2_START = 0x8120000;
|
||||
KERNEL_START = 0x8040000;
|
||||
STORAGE_1_OFFSET = 0x10000;
|
||||
STORAGE_2_OFFSET = 0x110000;
|
||||
NORCOW_SECTOR_SIZE = 0x10000;
|
||||
BOARDLOADER_IMAGE_MAXSIZE = 0xc000;
|
||||
BOOTLOADER_IMAGE_MAXSIZE = 0x20000;
|
||||
FIRMWARE_IMAGE_MAXSIZE = 0x1a0000;
|
||||
FIRMWARE_P1_IMAGE_MAXSIZE = 0xc0000;
|
||||
FIRMWARE_P2_IMAGE_MAXSIZE = 0xe0000;
|
||||
KERNEL_IMAGE_MAXSIZE = 0x80000;
|
||||
BOARDLOADER_SECTOR_START = 0x0;
|
||||
BOARDLOADER_SECTOR_END = 0x3;
|
||||
BOOTLOADER_SECTOR_START = 0x5;
|
||||
BOOTLOADER_SECTOR_END = 0x5;
|
||||
FIRMWARE_SECTOR_START = 0x6;
|
||||
FIRMWARE_SECTOR_END = 0xb;
|
||||
FIRMWARE_P2_SECTOR_START = 0x11;
|
||||
FIRMWARE_P2_SECTOR_END = 0x17;
|
||||
STORAGE_1_SECTOR_START = 0x4;
|
||||
STORAGE_1_SECTOR_END = 0x4;
|
||||
STORAGE_2_SECTOR_START = 0x10;
|
||||
STORAGE_2_SECTOR_END = 0x10;
|
||||
BOOTARGS_SIZE = 0x100;
|
||||
BOARD_CAPABILITIES_ADDR = 0x800bf00;
|
||||
CODE_ALIGNMENT = 0x200;
|
@ -0,0 +1,32 @@
|
||||
FLASH_START = 0x8000000;
|
||||
BOARDLOADER_START = 0x8000000;
|
||||
BOOTLOADER_START = 0x8020000;
|
||||
FIRMWARE_START = 0x8040000;
|
||||
FIRMWARE_P2_START = 0x8120000;
|
||||
KERNEL_START = 0x8040000;
|
||||
STORAGE_1_OFFSET = 0x10000;
|
||||
STORAGE_2_OFFSET = 0x110000;
|
||||
NORCOW_SECTOR_SIZE = 0x10000;
|
||||
BOARDLOADER_IMAGE_MAXSIZE = 0xc000;
|
||||
BOOTLOADER_IMAGE_MAXSIZE = 0x20000;
|
||||
FIRMWARE_IMAGE_MAXSIZE = 0x1a0000;
|
||||
FIRMWARE_P1_IMAGE_MAXSIZE = 0xc0000;
|
||||
FIRMWARE_P2_IMAGE_MAXSIZE = 0xe0000;
|
||||
KERNEL_IMAGE_MAXSIZE = 0x80000;
|
||||
BOARDLOADER_SECTOR_START = 0x0;
|
||||
BOARDLOADER_SECTOR_END = 0x3;
|
||||
BOOTLOADER_SECTOR_START = 0x5;
|
||||
BOOTLOADER_SECTOR_END = 0x5;
|
||||
FIRMWARE_SECTOR_START = 0x6;
|
||||
FIRMWARE_SECTOR_END = 0xb;
|
||||
FIRMWARE_P2_SECTOR_START = 0x11;
|
||||
FIRMWARE_P2_SECTOR_END = 0x17;
|
||||
STORAGE_1_SECTOR_START = 0x4;
|
||||
STORAGE_1_SECTOR_END = 0x4;
|
||||
STORAGE_2_SECTOR_START = 0x10;
|
||||
STORAGE_2_SECTOR_END = 0x10;
|
||||
KERNEL_CCMRAM_SIZE = 0x4000;
|
||||
KERNEL_SRAM_SIZE = 0x0;
|
||||
BOOTARGS_SIZE = 0x100;
|
||||
BOARD_CAPABILITIES_ADDR = 0x800bf00;
|
||||
CODE_ALIGNMENT = 0x200;
|
@ -0,0 +1,30 @@
|
||||
FLASH_START = 0xc000000;
|
||||
BOARDLOADER_START = 0xc004000;
|
||||
BOOTLOADER_START = 0xc010000;
|
||||
KERNEL_START = 0xc050000;
|
||||
FIRMWARE_START = 0xc050000;
|
||||
STORAGE_1_OFFSET = 0x30000;
|
||||
STORAGE_2_OFFSET = 0x50000;
|
||||
NORCOW_SECTOR_SIZE = 0x10000;
|
||||
BOARDLOADER_IMAGE_MAXSIZE = 0xc000;
|
||||
BOOTLOADER_IMAGE_MAXSIZE = 0x20000;
|
||||
FIRMWARE_IMAGE_MAXSIZE = 0x1a0000;
|
||||
KERNEL_IMAGE_MAXSIZE = 0x80000;
|
||||
BOARDLOADER_SECTOR_START = 0x2;
|
||||
BOARDLOADER_SECTOR_END = 0x7;
|
||||
BOOTLOADER_SECTOR_START = 0x8;
|
||||
BOOTLOADER_SECTOR_END = 0x17;
|
||||
FIRMWARE_SECTOR_START = 0x28;
|
||||
FIRMWARE_SECTOR_END = 0xf7;
|
||||
STORAGE_1_SECTOR_START = 0x18;
|
||||
STORAGE_1_SECTOR_END = 0x1f;
|
||||
STORAGE_2_SECTOR_START = 0x20;
|
||||
STORAGE_2_SECTOR_END = 0x27;
|
||||
KERNEL_U_FLASH_SIZE = 0x200;
|
||||
KERNEL_U_RAM_SIZE = 0x200;
|
||||
KERNEL_SRAM1_SIZE = 0x4000;
|
||||
KERNEL_SRAM2_SIZE = 0x2000;
|
||||
KERNEL_SRAM3_SIZE = 0x38400;
|
||||
BOOTARGS_SIZE = 0x100;
|
||||
BOARD_CAPABILITIES_ADDR = 0xc00ff00;
|
||||
CODE_ALIGNMENT = 0x200;
|
@ -0,0 +1,30 @@
|
||||
FLASH_START = 0xc000000;
|
||||
BOARDLOADER_START = 0xc004000;
|
||||
BOOTLOADER_START = 0xc010000;
|
||||
KERNEL_START = 0xc050000;
|
||||
FIRMWARE_START = 0xc050000;
|
||||
STORAGE_1_OFFSET = 0x30000;
|
||||
STORAGE_2_OFFSET = 0x50000;
|
||||
NORCOW_SECTOR_SIZE = 0x10000;
|
||||
BOARDLOADER_IMAGE_MAXSIZE = 0xc000;
|
||||
BOOTLOADER_IMAGE_MAXSIZE = 0x20000;
|
||||
FIRMWARE_IMAGE_MAXSIZE = 0x1a0000;
|
||||
KERNEL_IMAGE_MAXSIZE = 0x80000;
|
||||
BOARDLOADER_SECTOR_START = 0x2;
|
||||
BOARDLOADER_SECTOR_END = 0x7;
|
||||
BOOTLOADER_SECTOR_START = 0x8;
|
||||
BOOTLOADER_SECTOR_END = 0x17;
|
||||
FIRMWARE_SECTOR_START = 0x28;
|
||||
FIRMWARE_SECTOR_END = 0xf7;
|
||||
STORAGE_1_SECTOR_START = 0x18;
|
||||
STORAGE_1_SECTOR_END = 0x1f;
|
||||
STORAGE_2_SECTOR_START = 0x20;
|
||||
STORAGE_2_SECTOR_END = 0x27;
|
||||
KERNEL_U_FLASH_SIZE = 0x200;
|
||||
KERNEL_U_RAM_SIZE = 0x200;
|
||||
KERNEL_SRAM1_SIZE = 0x4000;
|
||||
KERNEL_SRAM2_SIZE = 0x2000;
|
||||
KERNEL_SRAM3_SIZE = 0x38400;
|
||||
BOOTARGS_SIZE = 0x100;
|
||||
BOARD_CAPABILITIES_ADDR = 0xc00ff00;
|
||||
CODE_ALIGNMENT = 0x200;
|
@ -1,127 +0,0 @@
|
||||
/* TREZORv2 firmware linker script */
|
||||
|
||||
ENTRY(reset_handler)
|
||||
|
||||
MEMORY {
|
||||
FLASH (rx) : ORIGIN = 0x0C050000, LENGTH = 3648K
|
||||
SRAM1 (wal) : ORIGIN = 0x30000000, LENGTH = 768K - 0x100
|
||||
BOOT_ARGS (wal) : ORIGIN = 0x300BFF00, LENGTH = 0x100
|
||||
SRAM2 (wal) : ORIGIN = 0x300C0000, LENGTH = 64K
|
||||
SRAM3 (wal) : ORIGIN = 0x300D0000, LENGTH = 832K
|
||||
SRAM5 (wal) : ORIGIN = 0x301A0000, LENGTH = 832K
|
||||
SRAM6 (wal) : ORIGIN = 0x30270000, LENGTH = 0
|
||||
SRAM4 (wal) : ORIGIN = 0x38000000, LENGTH = 16K
|
||||
}
|
||||
|
||||
main_stack_base = ORIGIN(SRAM2) + SIZEOF(.stack); /* 8-byte aligned full descending stack */
|
||||
_sstack = ORIGIN(SRAM2);
|
||||
_estack = main_stack_base;
|
||||
|
||||
/* used by the startup code to populate variables used by the C code */
|
||||
data_lma = LOADADDR(.data);
|
||||
data_vma = ADDR(.data);
|
||||
data_size = SIZEOF(.data);
|
||||
|
||||
/* used by the startup code to populate variables used by the C code */
|
||||
confidential_lma = LOADADDR(.confidential);
|
||||
confidential_vma = ADDR(.confidential);
|
||||
confidential_size = SIZEOF(.confidential);
|
||||
|
||||
/* used by the startup code to wipe memory */
|
||||
sram1_start = ORIGIN(SRAM1);
|
||||
sram1_end = ORIGIN(SRAM1) + LENGTH(SRAM1);
|
||||
sram2_start = ORIGIN(SRAM2);
|
||||
sram2_end = ORIGIN(SRAM2) + LENGTH(SRAM2);
|
||||
sram3_start = ORIGIN(SRAM3);
|
||||
sram3_end = ORIGIN(SRAM3) + LENGTH(SRAM3);
|
||||
sram4_start = ORIGIN(SRAM4);
|
||||
sram4_end = ORIGIN(SRAM4) + LENGTH(SRAM4);
|
||||
sram5_start = ORIGIN(SRAM5);
|
||||
sram5_end = ORIGIN(SRAM5) + LENGTH(SRAM5);
|
||||
sram6_start = ORIGIN(SRAM6);
|
||||
sram6_end = ORIGIN(SRAM6) + LENGTH(SRAM6);
|
||||
|
||||
/* reserve 256 bytes for bootloader arguments */
|
||||
boot_args_start = ORIGIN(BOOT_ARGS);
|
||||
boot_args_end = ORIGIN(BOOT_ARGS) + LENGTH(BOOT_ARGS);
|
||||
_codelen = SIZEOF(.flash) + SIZEOF(.data) + SIZEOF(.confidential);
|
||||
_flash_start = ORIGIN(FLASH);
|
||||
_flash_end = ORIGIN(FLASH) + LENGTH(FLASH);
|
||||
_heap_start = ADDR(.heap);
|
||||
_heap_end = ADDR(.heap) + SIZEOF(.heap);
|
||||
|
||||
SECTIONS {
|
||||
.vendorheader : ALIGN(4) {
|
||||
KEEP(*(.vendorheader))
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.header : ALIGN(4) {
|
||||
KEEP(*(.header));
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.flash : ALIGN(1024) {
|
||||
KEEP(*(.vector_table));
|
||||
. = ALIGN(4);
|
||||
*(.text*);
|
||||
. = ALIGN(4);
|
||||
*(.rodata*);
|
||||
. = ALIGN(4);
|
||||
KEEP(*(.bootloader));
|
||||
*(.bootloader*);
|
||||
. = ALIGN(512);
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.data : ALIGN(4) {
|
||||
*(.data*);
|
||||
. = ALIGN(512);
|
||||
} >SRAM1 AT>FLASH
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.ARM.exidx*);
|
||||
}
|
||||
|
||||
.bss : ALIGN(4) {
|
||||
*(.bss*);
|
||||
. = ALIGN(4);
|
||||
} >SRAM1
|
||||
|
||||
.data_ccm : ALIGN(4) {
|
||||
*(.no_dma_buffers*);
|
||||
. = ALIGN(4);
|
||||
} >SRAM1
|
||||
|
||||
.heap : ALIGN(4) {
|
||||
. = 37K; /* this acts as a build time assertion that at least this much memory is available for heap use */
|
||||
. = ABSOLUTE(sram1_end); /* this explicitly sets the end of the heap */
|
||||
} >SRAM1
|
||||
|
||||
.stack : ALIGN(8) {
|
||||
. = 16K; /* Overflow causes UsageFault */
|
||||
} >SRAM2
|
||||
|
||||
.confidential : ALIGN(512) {
|
||||
*(.confidential*);
|
||||
. = ALIGN(512);
|
||||
} >SRAM2 AT>FLASH
|
||||
|
||||
.fb1 : ALIGN(4) {
|
||||
__fb_start = .;
|
||||
*(.fb1*);
|
||||
*(.gfxmmu_table*);
|
||||
*(.framebuffer_select*);
|
||||
. = ALIGN(4);
|
||||
} >SRAM3
|
||||
|
||||
.fb2 : ALIGN(4) {
|
||||
*(.fb2*);
|
||||
__fb_end = .;
|
||||
. = ALIGN(4);
|
||||
} >SRAM5
|
||||
|
||||
.boot_args : ALIGN(8) {
|
||||
*(.boot_command*);
|
||||
. = ALIGN(8);
|
||||
*(.boot_args*);
|
||||
. = ALIGN(8);
|
||||
} >BOOT_ARGS
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
MCU_FLASH_ORIGIN = 0x08000000;
|
||||
MCU_FLASH_SIZE = 2M;
|
||||
MCU_CCMRAM = 0x10000000;
|
||||
MCU_CCMRAM_SIZE = 64K;
|
||||
MCU_SRAM = 0x20000000;
|
||||
MCU_SRAM_SIZE = 192K;
|
@ -0,0 +1,143 @@
|
||||
INCLUDE "./embed/trezorhal/stm32u5/linker/u58/memory.ld";
|
||||
|
||||
ENTRY(reset_handler)
|
||||
|
||||
MEMORY {
|
||||
FLASH (rx) : ORIGIN = KERNEL_START, LENGTH = KERNEL_IMAGE_MAXSIZE
|
||||
SRAM1 (wal) : ORIGIN = MCU_SRAM2 - KERNEL_SRAM1_SIZE, LENGTH = KERNEL_SRAM1_SIZE - BOOTARGS_SIZE
|
||||
BOOT_ARGS (wal) : ORIGIN = MCU_SRAM2 - BOOTARGS_SIZE, LENGTH = BOOTARGS_SIZE
|
||||
SRAM2 (wal) : ORIGIN = MCU_SRAM2, LENGTH = KERNEL_SRAM2_SIZE - KERNEL_U_RAM_SIZE
|
||||
SRAM2_U (wal) : ORIGIN = MCU_SRAM2 + KERNEL_SRAM2_SIZE - KERNEL_U_RAM_SIZE, LENGTH = KERNEL_U_RAM_SIZE
|
||||
SRAM3 (wal) : ORIGIN = MCU_SRAM3, LENGTH = KERNEL_SRAM3_SIZE
|
||||
SRAM5 (wal) : ORIGIN = MCU_SRAM5, LENGTH = 0K /* SRAM5 is not available */
|
||||
SRAM6 (wal) : ORIGIN = MCU_SRAM6, LENGTH = 0K /* SRAM6 is not available */
|
||||
SRAM4 (wal) : ORIGIN = MCU_SRAM4, LENGTH = MCU_SRAM4_SIZE
|
||||
}
|
||||
|
||||
main_stack_base = ORIGIN(SRAM2) + SIZEOF(.stack); /* 8-byte aligned full descending stack */
|
||||
_sstack = ORIGIN(SRAM2);
|
||||
_estack = main_stack_base;
|
||||
|
||||
ustack_base = ORIGIN(SRAM2_U) + 512;
|
||||
_sustack = ORIGIN(SRAM2_U) + 256;
|
||||
_eustack = ustack_base;
|
||||
|
||||
/* used by the startup code to populate variables used by the C code */
|
||||
data_lma = LOADADDR(.data);
|
||||
data_vma = ADDR(.data);
|
||||
data_size = SIZEOF(.data);
|
||||
bss_start = ADDR(.bss);
|
||||
bss_end = ADDR(.bss) + SIZEOF(.bss);
|
||||
|
||||
/* used by the startup code to populate variables used by the C code */
|
||||
confidential_lma = LOADADDR(.confidential);
|
||||
confidential_vma = ADDR(.confidential);
|
||||
confidential_size = SIZEOF(.confidential);
|
||||
|
||||
/* used by the startup code to wipe memory */
|
||||
sram1_start = ORIGIN(SRAM1);
|
||||
sram1_end = ORIGIN(SRAM1) + LENGTH(SRAM1);
|
||||
sram2_start = ORIGIN(SRAM2);
|
||||
sram2_end = ORIGIN(SRAM2) + LENGTH(SRAM2);
|
||||
sram2_u_start = ORIGIN(SRAM2_U);
|
||||
sram2_u_end = ORIGIN(SRAM2_U) + LENGTH(SRAM2_U);
|
||||
sram3_start = ORIGIN(SRAM3);
|
||||
sram3_end = ORIGIN(SRAM3) + LENGTH(SRAM3);
|
||||
sram4_start = ORIGIN(SRAM4);
|
||||
sram4_end = ORIGIN(SRAM4) + LENGTH(SRAM4);
|
||||
sram5_start = ORIGIN(SRAM5);
|
||||
sram5_end = ORIGIN(SRAM5) + LENGTH(SRAM5);
|
||||
sram6_start = ORIGIN(SRAM6);
|
||||
sram6_end = ORIGIN(SRAM6) + LENGTH(SRAM6);
|
||||
|
||||
/* reserve 256 bytes for bootloader arguments */
|
||||
boot_args_start = ORIGIN(BOOT_ARGS);
|
||||
boot_args_end = ORIGIN(BOOT_ARGS) + LENGTH(BOOT_ARGS);
|
||||
|
||||
_codelen = SIZEOF(.vendorheader) + SIZEOF(.header) + SIZEOF(.flash) + SIZEOF(.uflash) + SIZEOF(.data) + SIZEOF(.confidential);
|
||||
_flash_start = ORIGIN(FLASH);
|
||||
_flash_end = ORIGIN(FLASH) + LENGTH(FLASH);
|
||||
|
||||
_uflash_start = ADDR(.uflash);
|
||||
_uflash_end = ADDR(.uflash) + SIZEOF(.uflash);
|
||||
|
||||
SECTIONS {
|
||||
.vendorheader : ALIGN(4) {
|
||||
KEEP(*(.vendorheader))
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.header : ALIGN(4) {
|
||||
. = 1K;
|
||||
. = ALIGN(CODE_ALIGNMENT);
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.flash : ALIGN(CODE_ALIGNMENT) {
|
||||
KEEP(*(.vector_table));
|
||||
. = ALIGN(4);
|
||||
*(.text*);
|
||||
. = ALIGN(4);
|
||||
*(.rodata*);
|
||||
. = ALIGN(4);
|
||||
KEEP(*(.bootloader));
|
||||
*(.bootloader*);
|
||||
. = ALIGN(512);
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.data : ALIGN(4) {
|
||||
*(.data*);
|
||||
. = ALIGN(512);
|
||||
} >SRAM1 AT>FLASH
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.ARM.exidx*);
|
||||
}
|
||||
|
||||
.bss : ALIGN(4) {
|
||||
*(.no_dma_buffers*);
|
||||
*(.bss*);
|
||||
. = ALIGN(4);
|
||||
} >SRAM1
|
||||
|
||||
.stack : ALIGN(8) {
|
||||
. = 6K; /* Overflow causes UsageFault */
|
||||
} >SRAM2
|
||||
|
||||
/* unprivileged data and stack for SAES */
|
||||
.udata : ALIGN(512) {
|
||||
*(.udata*);
|
||||
. = ALIGN(256);
|
||||
. = 256; /* Overflow causes UsageFault */
|
||||
} >SRAM2_U
|
||||
|
||||
.confidential : ALIGN(512) {
|
||||
*(.confidential*);
|
||||
. = ALIGN(CODE_ALIGNMENT);
|
||||
} >SRAM2 AT>FLASH
|
||||
|
||||
.uflash : ALIGN(512) {
|
||||
*(.uflash*);
|
||||
. = ALIGN(512);
|
||||
} >FLASH AT>FLASH
|
||||
|
||||
.fb : ALIGN(4) {
|
||||
__fb_start = .;
|
||||
*(.fb1*);
|
||||
*(.fb2*);
|
||||
*(.framebuffer_select*);
|
||||
__fb_end = .;
|
||||
. = ALIGN(4);
|
||||
} >SRAM3
|
||||
|
||||
.buf : ALIGN(4) {
|
||||
*(.buf*);
|
||||
. = ALIGN(4);
|
||||
} >SRAM3
|
||||
|
||||
|
||||
.boot_args : ALIGN(8) {
|
||||
*(.boot_command*);
|
||||
. = ALIGN(8);
|
||||
*(.boot_args*);
|
||||
. = ALIGN(8);
|
||||
} >BOOT_ARGS
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
|
||||
|
||||
MCU_FLASH_S_ORIGIN = 0x0C000000;
|
||||
MCU_FLASH_ORIGIN = 0x08000000;
|
||||
MCU_FLASH_SIZE = 2M;
|
||||
|
||||
MCU_SRAM1 = 0x30000000;
|
||||
MCU_SRAM1_SIZE = 192K;
|
||||
MCU_SRAM2 = 0x30030000;
|
||||
MCU_SRAM2_SIZE = 64K;
|
||||
MCU_SRAM3 = 0x30040000;
|
||||
MCU_SRAM3_SIZE = 512K;
|
||||
MCU_SRAM4 = 0x38000000;
|
||||
MCU_SRAM4_SIZE = 16K;
|
||||
MCU_SRAM5 = 0x30080000;
|
||||
MCU_SRAM5_SIZE = 0K; /* SRAM5 is not available */
|
||||
MCU_SRAM6 = 0x30080000;
|
||||
MCU_SRAM6_SIZE = 0K ; /* SRAM6 is not available */
|
@ -0,0 +1,18 @@
|
||||
|
||||
|
||||
MCU_FLASH_S_ORIGIN = 0x0C000000;
|
||||
MCU_FLASH_ORIGIN = 0x08000000;
|
||||
MCU_FLASH_SIZE = 2M;
|
||||
|
||||
MCU_SRAM1 = 0x30000000;
|
||||
MCU_SRAM1_SIZE = 768K;
|
||||
MCU_SRAM2 = 0x300C0000;
|
||||
MCU_SRAM2_SIZE = 64K;
|
||||
MCU_SRAM3 = 0x300D0000;
|
||||
MCU_SRAM3_SIZE = 832K;
|
||||
MCU_SRAM4 = 0x38000000;
|
||||
MCU_SRAM4_SIZE = 16K;
|
||||
MCU_SRAM5 = 0x301A0000;
|
||||
MCU_SRAM5_SIZE = 832K;
|
||||
MCU_SRAM6 = 0x30270000;
|
||||
MCU_SRAM6_SIZE = 0K ;
|
@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env python3
|
||||
from __future__ import annotations
|
||||
|
||||
import click
|
||||
|
||||
from .common import get_linkerscript_for_model, MODELS_DIR
|
||||
from .layout_parser import find_all_values
|
||||
|
||||
@click.command()
|
||||
@click.option("--check", is_flag=True)
|
||||
def main(check: bool) -> None:
|
||||
|
||||
models = list(MODELS_DIR.iterdir())
|
||||
models = [model for model in models if model.is_dir()]
|
||||
|
||||
for model in models:
|
||||
values = find_all_values(model.name)
|
||||
content = ""
|
||||
for name, value in values.items():
|
||||
content += f"{name} = {hex(value)};\n"
|
||||
if not check:
|
||||
get_linkerscript_for_model(model.name).write_text(content)
|
||||
else:
|
||||
#todo
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in new issue