Skip to content

Commit e99513e

Browse files
committed
arch: riscv: common: linker: Add itcm & dtcm sections
The current riscv linker script don't have sections for Data & Instruction Tightly Coupled Memory. Add itcm and dtcm sections to make it available. All sections were 8 byte align to keep compatible with rv64 SoCs. Signed-off-by: Gerson Fernando Budke <[email protected]>
1 parent 689864e commit e99513e

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

include/arch/riscv/common/linker.ld

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#include <autoconf.h>
1818
#include <linker/sections.h>
19+
#include <linker/devicetree_regions.h>
1920

2021
#include <linker/linker-defs.h>
2122
#include <linker/linker-tool.h>
@@ -79,6 +80,11 @@ MEMORY
7980
ROM (rx) : ORIGIN = ROM_BASE, LENGTH = ROM_SIZE
8081
#endif
8182
RAM (rwx) : ORIGIN = RAM_BASE, LENGTH = RAM_SIZE
83+
84+
/* Data & Instruction Tightly Coupled Memory */
85+
LINKER_DT_REGION_FROM_NODE(ITCM, rw, DT_CHOSEN(zephyr_itcm))
86+
LINKER_DT_REGION_FROM_NODE(DTCM, rw, DT_CHOSEN(zephyr_dtcm))
87+
8288
/* Used by and documented in include/linker/intlist.ld */
8389
IDT_LIST (wx) : ORIGIN = 0xFFFFF7FF, LENGTH = 2K
8490
}
@@ -268,6 +274,58 @@ SECTIONS
268274
__kernel_ram_end = .;
269275
__kernel_ram_size = __kernel_ram_end - __kernel_ram_start;
270276

277+
#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_itcm), okay)
278+
GROUP_START(ITCM)
279+
280+
SECTION_PROLOGUE(_ITCM_SECTION_NAME,,SUBALIGN(8))
281+
{
282+
__itcm_start = .;
283+
*(.itcm)
284+
*(".itcm.*")
285+
__itcm_end = .;
286+
} GROUP_LINK_IN(ITCM AT> ROMABLE_REGION)
287+
288+
__itcm_size = __itcm_end - __itcm_start;
289+
__itcm_rom_start = LOADADDR(_ITCM_SECTION_NAME);
290+
291+
GROUP_END(ITCM)
292+
#endif
293+
294+
#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_dtcm), okay)
295+
GROUP_START(DTCM)
296+
297+
SECTION_PROLOGUE(_DTCM_BSS_SECTION_NAME, (NOLOAD),SUBALIGN(8))
298+
{
299+
__dtcm_start = .;
300+
__dtcm_bss_start = .;
301+
*(.dtcm_bss)
302+
*(".dtcm_bss.*")
303+
__dtcm_bss_end = .;
304+
} GROUP_LINK_IN(DTCM)
305+
306+
SECTION_PROLOGUE(_DTCM_NOINIT_SECTION_NAME, (NOLOAD),SUBALIGN(8))
307+
{
308+
__dtcm_noinit_start = .;
309+
*(.dtcm_noinit)
310+
*(".dtcm_noinit.*")
311+
__dtcm_noinit_end = .;
312+
} GROUP_LINK_IN(DTCM)
313+
314+
SECTION_PROLOGUE(_DTCM_DATA_SECTION_NAME,,SUBALIGN(8))
315+
{
316+
__dtcm_data_start = .;
317+
*(.dtcm_data)
318+
*(".dtcm_data.*")
319+
__dtcm_data_end = .;
320+
} GROUP_LINK_IN(DTCM AT> ROMABLE_REGION)
321+
322+
__dtcm_end = .;
323+
324+
__dtcm_data_rom_start = LOADADDR(_DTCM_DATA_SECTION_NAME);
325+
326+
GROUP_END(DTCM)
327+
#endif
328+
271329
/* Located in generated directory. This file is populated by the
272330
* zephyr_linker_sources() Cmake function.
273331
*/

0 commit comments

Comments
 (0)