diff mbox

[U-Boot,1/6] powerpc/mpc85xx: support application without resetvec segment in the linker script

Message ID 1369030048-26130-1-git-send-email-ying.zhang@freescale.com
State Accepted
Delegated to: Andy Fleming
Headers show

Commit Message

ying.zhang@freescale.com May 20, 2013, 6:07 a.m. UTC
From: Ying Zhang <b40530@freescale.com>

For SD/SPI 2-stage bootloader, the On-Chip Rom code loads the SPL into L2 SRAM,
then jump to it to begin execution. After that, the SPL loads the final uboot
image into DDR, then jump to it to begin execution. The segment .resetvec in
the SPL and in final U-boot is useless.

So, add new symbols CONFIG_SYS_MPC85XX_NO_RESETVEC for this application.
If CONFIG_SYS_MPC85XX_NO_RESETVEC is set, the segment .resetvec is excluded
and the segment .bootpg is placed in the previous 4K of the segment .text.

Signed-off-by: Ying Zhang <b40530@freescale.com>
---
 README                                  |    5 +++++
 arch/powerpc/cpu/mpc85xx/u-boot-spl.lds |   14 ++++++++++++++
 arch/powerpc/cpu/mpc85xx/u-boot.lds     |    8 ++++++++
 3 files changed, 27 insertions(+), 0 deletions(-)

Comments

Andy Fleming June 21, 2013, 8:46 p.m. UTC | #1
On Mon, May 20, 2013 at 02:07:23PM +0800, ying.zhang@freescale.com wrote:
> From: Ying Zhang <b40530@freescale.com>
> 
> For SD/SPI 2-stage bootloader, the On-Chip Rom code loads the SPL into L2 SRAM,
> then jump to it to begin execution. After that, the SPL loads the final uboot
> image into DDR, then jump to it to begin execution. The segment .resetvec in
> the SPL and in final U-boot is useless.
> 
> So, add new symbols CONFIG_SYS_MPC85XX_NO_RESETVEC for this application.
> If CONFIG_SYS_MPC85XX_NO_RESETVEC is set, the segment .resetvec is excluded
> and the segment .bootpg is placed in the previous 4K of the segment .text.
> 
> Signed-off-by: Ying Zhang <b40530@freescale.com>

Applied, thanks!

Andy
diff mbox

Patch

diff --git a/README b/README
index 3d81092..ef95e4e 100644
--- a/README
+++ b/README
@@ -3978,6 +3978,11 @@  Low Level (hardware related) configuration options:
 		that is executed before the actual U-Boot. E.g. when
 		compiling a NAND SPL.
 
+- CONFIG_SYS_MPC85XX_NO_RESETVEC
+		Only for 85xx systems. If this variable is specified, the section
+		.resetvec is not kept and the section .bootpg is placed in the
+		previous 4k of the .text section.
+
 - CONFIG_ARCH_MAP_SYSMEM
 		Generally U-Boot (and in particular the md command) uses
 		effective address. It is therefore not necessary to regard
diff --git a/arch/powerpc/cpu/mpc85xx/u-boot-spl.lds b/arch/powerpc/cpu/mpc85xx/u-boot-spl.lds
index f2b7bff..d595b89 100644
--- a/arch/powerpc/cpu/mpc85xx/u-boot-spl.lds
+++ b/arch/powerpc/cpu/mpc85xx/u-boot-spl.lds
@@ -26,6 +26,13 @@ 
 #include "config.h"	/* CONFIG_BOARDDIR */
 
 OUTPUT_ARCH(powerpc)
+#ifdef CONFIG_SYS_MPC85XX_NO_RESETVEC
+PHDRS
+{
+	text PT_LOAD;
+	bss PT_LOAD;
+}
+#endif
 SECTIONS
 {
 	. = CONFIG_SPL_TEXT_BASE;
@@ -68,9 +75,16 @@  SECTIONS
 #else
 #error unknown NAND controller
 #endif
+#ifdef CONFIG_SYS_MPC85XX_NO_RESETVEC
+	.bootpg ADDR(.text) - 0x1000 :
+	{
+		KEEP(*(.bootpg))
+	} :text = 0xffff
+#else
 	.resetvec ADDR(.text) + RESET_VECTOR_OFFSET : {
 		KEEP(*(.resetvec))
 	} = 0xffff
+#endif
 
 	/*
 	 * Make sure that the bss segment isn't linked at 0x0, otherwise its
diff --git a/arch/powerpc/cpu/mpc85xx/u-boot.lds b/arch/powerpc/cpu/mpc85xx/u-boot.lds
index 0503dce..2643563 100644
--- a/arch/powerpc/cpu/mpc85xx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc85xx/u-boot.lds
@@ -95,6 +95,13 @@  SECTIONS
   . = ALIGN(256);
   __init_end = .;
 
+#ifdef CONFIG_SYS_MPC85XX_NO_RESETVEC
+  .bootpg ADDR(.text) - 0x1000 :
+  {
+    KEEP(arch/powerpc/cpu/mpc85xx/start.o (.bootpg))
+  } :text = 0xffff
+  . = ADDR(.text) + 0x80000;
+#else
   .bootpg RESET_VECTOR_ADDRESS - 0xffc :
   {
     arch/powerpc/cpu/mpc85xx/start.o	(.bootpg)
@@ -117,6 +124,7 @@  SECTIONS
 #if (RESET_VECTOR_ADDRESS == 0xfffffffc)
   . |= 0x10;
 #endif
+#endif
 
   __bss_start = .;
   .bss (NOLOAD)       :