Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c3146c43 authored by Nicolas Pitre's avatar Nicolas Pitre
Browse files

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: default avatarNicolas Pitre <nico@linaro.org>
Tested-by: default avatarChris Brandt <Chris.Brandt@renesas.com>
parent 91470958
Loading
Loading
Loading
Loading
+1 −54
Original line number Diff line number Diff line
@@ -144,60 +144,7 @@ SECTIONS
	__init_end = .;

#ifdef CONFIG_HAVE_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 = .;
	}
	ARM_TCM
#endif

	BSS_SECTION(0, 0, 8)
+1 −54
Original line number Diff line number Diff line
@@ -139,60 +139,7 @@ SECTIONS
	_edata = .;

#ifdef CONFIG_HAVE_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 = .;
	}
	ARM_TCM
#endif

	BSS_SECTION(0, 0, 0)
+60 −0
Original line number Diff line number Diff line
@@ -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 = .;						\
	}