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:
parent
9147095896
commit
c3146c43db
|
@ -144,60 +144,7 @@ SECTIONS
|
||||||
__init_end = .;
|
__init_end = .;
|
||||||
|
|
||||||
#ifdef CONFIG_HAVE_TCM
|
#ifdef CONFIG_HAVE_TCM
|
||||||
/*
|
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 = .;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
BSS_SECTION(0, 0, 8)
|
BSS_SECTION(0, 0, 8)
|
||||||
|
|
|
@ -139,60 +139,7 @@ SECTIONS
|
||||||
_edata = .;
|
_edata = .;
|
||||||
|
|
||||||
#ifdef CONFIG_HAVE_TCM
|
#ifdef CONFIG_HAVE_TCM
|
||||||
/*
|
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 = .;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
BSS_SECTION(0, 0, 0)
|
BSS_SECTION(0, 0, 0)
|
||||||
|
|
|
@ -113,3 +113,63 @@
|
||||||
__stubs_end = .; \
|
__stubs_end = .; \
|
||||||
\
|
\
|
||||||
PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
|
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 = .; \
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue