From patchwork Fri Mar 9 03:20:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Pitre X-Patchwork-Id: 10269587 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 32118602BD for ; Fri, 9 Mar 2018 03:21:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2345029C9B for ; Fri, 9 Mar 2018 03:21:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 17DAF29CA0; Fri, 9 Mar 2018 03:21:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 09FD929C9D for ; Fri, 9 Mar 2018 03:21:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=4USkyJM5ooKPl8ZO1ui6CbSP6saDZzedDKF+o28fTRo=; b=rWldvhSTQ2pEjjNeI85aEBc/4S MvBDf73GZyJHpsECZmd/GsPSOZpqVvTAiKu+C7DBaA9KvAkYWmvE3FwQ6UiiyT+Mh2rEeXrakD66w l2CgNQ6Z1X3zvnzyI6QXmoYAx1nuVRZV6pFZix6zDTW9vdSh4nAU3FENuzd5+9x74NmT84NlGbztp Ptc1oISlXi26XN61t8KbdrHS2v9GgXumueUKFNTB8Q1OG4wNNUeGYsZMoiupr18CKm9clwpKa00DB 3SkTqq/UFNueQXibm6w/jSO5FL/vvX38jxZ/FKVbSV/zvrw5wldhdJISZtZvgyInd/v1GOd9jjVVL jRBAJMYA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1eu8bM-0000DZ-MB; Fri, 09 Mar 2018 03:21:48 +0000 Received: from pb-smtp2.pobox.com ([64.147.108.71]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1eu8bH-0000Av-4V for linux-arm-kernel@lists.infradead.org; Fri, 09 Mar 2018 03:21:45 +0000 Received: from pb-smtp2.pobox.com (unknown [127.0.0.1]) by pb-smtp2.pobox.com (Postfix) with ESMTP id 874A2D7A80; Thu, 8 Mar 2018 22:21:30 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=from:to:cc :subject:date:message-id:in-reply-to:references; s=sasl; bh=jEFl Ni4e91wsgdUIXuF/fVXWPF8=; b=KS1iQ3Jn8izSOSNq9+4lrtovRAPkuMc4mvIZ dAlCUIatxMvGvVY9um8n0/aRFoQIaA3wkyh/5rJXV6xYOnsZZkzcuqaP94KWmjPy Xi3rYxnGheOoWvqz/D8zYWP76xc8knMAvEN7LKIJv5RGtt+pKGWLOnTIPCsNweJh 6tkXZns= Received: from pb-smtp2.nyi.icgroup.com (unknown [127.0.0.1]) by pb-smtp2.pobox.com (Postfix) with ESMTP id 7EB62D7A7F; Thu, 8 Mar 2018 22:21:30 -0500 (EST) Received: from yoda.home (unknown [70.82.104.228]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by pb-smtp2.pobox.com (Postfix) with ESMTPSA id 0DB35D7A7E; Thu, 8 Mar 2018 22:21:30 -0500 (EST) Received: from xanadu.home (xanadu.home [192.168.2.2]) by yoda.home (Postfix) with ESMTP id C2B9F2DA0639; Thu, 8 Mar 2018 22:21:28 -0500 (EST) From: 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 Message-Id: <20180309032100.31039-7-nicolas.pitre@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180309032100.31039-1-nicolas.pitre@linaro.org> References: <20180309032100.31039-1-nicolas.pitre@linaro.org> X-Pobox-Relay-ID: F5A694F6-2348-11E8-84CE-67830C78B957-78420484!pb-smtp2.pobox.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180308_192143_365379_BBD1F61E X-CRM114-Status: GOOD ( 15.29 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Chris Brandt , Russell King - ARM Linux MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP This is a plain move with identical results, and therefore still broken in the XIP case. Signed-off-by: Nicolas Pitre --- 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 = .; \ + }