All of lore.kernel.org
 help / color / mirror / Atom feed
From: nicolas.pitre@linaro.org (Nicolas Pitre)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 6/7] ARM: linker script: factor out TCM bits
Date: Thu,  8 Mar 2018 22:20:59 -0500	[thread overview]
Message-ID: <20180309032100.31039-7-nicolas.pitre@linaro.org> (raw)
In-Reply-To: <20180309032100.31039-1-nicolas.pitre@linaro.org>

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

Signed-off-by: Nicolas Pitre <nico@linaro.org>
---
 arch/arm/kernel/vmlinux-xip.lds.S | 55 +----------------------------------
 arch/arm/kernel/vmlinux.lds.S     | 55 +----------------------------------
 arch/arm/kernel/vmlinux.lds.h     | 60 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 62 insertions(+), 108 deletions(-)

diff --git a/arch/arm/kernel/vmlinux-xip.lds.S b/arch/arm/kernel/vmlinux-xip.lds.S
index 5a50a2a917..c727c56f3c 100644
--- a/arch/arm/kernel/vmlinux-xip.lds.S
+++ b/arch/arm/kernel/vmlinux-xip.lds.S
@@ -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)
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index 2b89363090..1e9f2a6b3d 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -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)
diff --git a/arch/arm/kernel/vmlinux.lds.h b/arch/arm/kernel/vmlinux.lds.h
index 0a4682ecc4..cf9dabbdbd 100644
--- a/arch/arm/kernel/vmlinux.lds.h
+++ b/arch/arm/kernel/vmlinux.lds.h
@@ -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 = .;						\
+	}
-- 
2.14.3

  parent reply	other threads:[~2018-03-09  3:20 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-09  3:20 [PATCH 0/7] further linker script cleanups Nicolas Pitre
2018-03-09  3:20 ` [PATCH 1/7] ARM: linker script: factor out some common definitions between XIP and non-XIP Nicolas Pitre
2018-03-09  9:27   ` Vladimir Murzin
2018-03-10  1:05     ` Nicolas Pitre
2018-03-09  3:20 ` [PATCH 2/7] ARM: linker script: factor out stuff for the DISCARD section Nicolas Pitre
2018-03-09  3:20 ` [PATCH 3/7] ARM: linker script: factor out stuff for the .text section Nicolas Pitre
2018-03-09  3:20 ` [PATCH 4/7] ARM: linker script: factor out unwinding table sections Nicolas Pitre
2018-03-09  3:20 ` [PATCH 5/7] ARM: linker script: factor out vectors and stubs Nicolas Pitre
2018-03-09  3:20 ` Nicolas Pitre [this message]
2018-03-09  3:21 ` [PATCH 7/7] ARM: simplify and fix linker script for TCM Nicolas Pitre
2018-03-09 18:06 ` [PATCH 0/7] further linker script cleanups Chris Brandt
2018-03-10  1:07   ` Nicolas Pitre

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180309032100.31039-7-nicolas.pitre@linaro.org \
    --to=nicolas.pitre@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.