ARM: linker script: factor out TCM bits

This is a plain move with identical results, and therefore
still broken in the XIP case.

Signed-off-by: Nicolas Pitre <nico@linaro.org>
Tested-by: Chris Brandt <Chris.Brandt@renesas.com>
This commit is contained in:
Nicolas Pitre
2018-03-08 20:19:48 -05:00
parent 9147095896
commit c3146c43db
3 changed files with 62 additions and 108 deletions

View File

@@ -113,3 +113,63 @@
__stubs_end = .; \
\
PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
#define ARM_TCM \
/* \
* We align everything to a page boundary so we can \
* free it after init has commenced and TCM contents have \
* been copied to its destination. \
*/ \
.tcm_start : { \
. = ALIGN(PAGE_SIZE); \
__tcm_start = .; \
__itcm_start = .; \
} \
\
/* \
* Link these to the ITCM RAM \
* \
* Put VMA to the TCM address and LMA to the common RAM \
* and we'll upload the contents from RAM to TCM and free \
* the used RAM after that. \
*/ \
.text_itcm ITCM_OFFSET : AT(__itcm_start) \
{ \
__sitcm_text = .; \
*(.tcm.text) \
*(.tcm.rodata) \
. = ALIGN(4); \
__eitcm_text = .; \
} \
\
/* \
* Reset the dot pointer, this is needed to create the \
* relative __dtcm_start below (to be used as extern in code). \
*/ \
. = ADDR(.tcm_start) + SIZEOF(.tcm_start) + SIZEOF(.text_itcm); \
\
.dtcm_start : { \
__dtcm_start = .; \
} \
\
/* \
* TODO: add remainder of ITCM as well, \
* that can be used for data! \
*/ \
.data_dtcm DTCM_OFFSET : AT(__dtcm_start) \
{ \
. = ALIGN(4); \
__sdtcm_data = .; \
*(.tcm.data) \
. = ALIGN(4); \
__edtcm_data = .; \
} \
\
/* Reset the dot pointer or the linker gets confused */ \
. = ADDR(.dtcm_start) + SIZEOF(.data_dtcm); \
\
/* End marker for freeing TCM copy in linked object */ \
.tcm_end : AT(ADDR(.dtcm_start) + SIZEOF(.data_dtcm)){ \
. = ALIGN(PAGE_SIZE); \
__tcm_end = .; \
}