public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] [NEXT] arm926ejs: add split relocation support
@ 2010-09-14 18:25 Albert Aribaud
  2010-09-14 18:47 ` Albert ARIBAUD
  0 siblings, 1 reply; 10+ messages in thread
From: Albert Aribaud @ 2010-09-14 18:25 UTC (permalink / raw)
  To: u-boot

Many arm926ejs-based SoCs boot at 0xffff0000.
Currently these last 64 KB of flash are wasted just
for a jump to the location where u-boot was flashed.
This commit provides split relocation where the first
part of u-boot is stored from the reset address to the
end of the flash, and the second part is stored below
the first one.
This allows booting directly into _start at 0xffff0000,
thus fully using the last flash sector. For the ED Mini
V2, this frees 12.5% of the flash for other uses.

Signed-off-by: Albert Aribaud <albert.aribaud@free.fr>
---
As indicated in the subject line, this patch is *not* a bugfix
and thus *not* expected to be integrated into 2010.09.

It was heavily tested on an ED Mini V2 and a 5Big Network. All
the following cases were debugged step by step through JTAG:

- boot from RAM (with relocation, without low level init)
- boot from linear image in FLASH (with reloc & ll init)
- boot from split image in FLASH (with reloc & ll init)

'checkpatch.pl --no-tree' reported 0 errors and warnings.

 arch/arm/cpu/arm926ejs/start.S |   81 +++++++++++++++++++++++++++++++++------
 1 files changed, 68 insertions(+), 13 deletions(-)

diff --git a/arch/arm/cpu/arm926ejs/start.S b/arch/arm/cpu/arm926ejs/start.S
index cf40ce1..9a0a9ef 100644
--- a/arch/arm/cpu/arm926ejs/start.S
+++ b/arch/arm/cpu/arm926ejs/start.S
@@ -5,8 +5,8 @@
  *
  *  ----- Adapted for OMAP1610 OMAP730 from ARM925t code ------
  *
- *  Copyright (c) 2001	Marius Gr?ger <mag@sysgo.de>
- *  Copyright (c) 2002	Alex Z?pke <azu@sysgo.de>
+ *  Copyright (c) 2001	Marius Gr??ger <mag@sysgo.de>
+ *  Copyright (c) 2002	Alex Z??pke <azu@sysgo.de>
  *  Copyright (c) 2002	Gary Jennejohn <garyj@denx.de>
  *  Copyright (c) 2003	Richard Woodruff <r-woodruff2@ti.com>
  *  Copyright (c) 2003	Kshitij <kshitij@ti.com>
@@ -166,21 +166,74 @@ reset:
 	bl	cpu_init_crit
 #endif
 
+/*
+ * This code copies SIZE bytes of u-boot from 'source' _start (in FLASH)
+ * to 'destination' _TEXT_BASE (in RAM) RAM. It can handle two cases:
+ *
+ * 1) source is entirely located at [_start,_start+_bss_start-_armboot_start[
+ *    i.e. u-boot.bin was linearly written to FLASH (this is the case when
+ *    the target's reset vector can be _start, or points to some code which
+ *    will eventually jump inside FLASH to _start)
+ *
+ * 2) source was split in two parts, one located at [_start,0x1.0000.0000[
+ *    (for SIZE1 bytes where SIZE1 = (0x1.0000.000 - _start) and one located
+ *    at [_start-A, SIZE-SIZE1[ where A = (_bss_start-_armboot_start) rounded
+ *    up to the nearest multiple of SIZE1. This is the case when the target's
+ *    reset vector must point directly to _start but there is not enough room
+ *    between _start and the end of the 32-bit addressable FLASH.
+ *
+ * Example for the Orion5x 88F5182, which resets at 0xFFFF0000, and with an
+ * overall u-boot size of 0x0001CAFE:
+ * - the first 64 KB of u-boot.bin are flashed at [0xFFFF0000, 0x100000000[;
+ * - there are 0xCAFE bytes left, which take up one 64KB block. The second
+ *   part of u-boot will thus be flashed at [0xfffE0000, 0xfffECAFE[.
+ *
+ * To determine if the copy must be split, we taken the start addresse
+ * of the source and add the source length to it to form the end address.
+ * if this end address is below the start address, then the image was split.
+ * If it is above the start address, the image was not split.
+ */
+
 #ifndef CONFIG_SKIP_RELOCATE_UBOOT
-relocate:				/* relocate U-Boot to RAM	    */
+	/* relocate U-Boot to RAM */
+relocate:
+	/* skip copy if source == destination */
 	adr	r0, _start		/* r0 <- current position of code   */
 	ldr	r1, _TEXT_BASE		/* test if we run from flash or RAM */
 	cmp     r0, r1                  /* don't reloc during debug         */
 	beq     stack_setup
+
+	/* skip split copying if copy is split */
 	ldr	r2, _armboot_start
 	ldr	r3, _bss_start
-	sub	r2, r3, r2		/* r2 <- size of armboot            */
-	add	r2, r0, r2		/* r2 <- source end address         */
+	sub	r4, r3, r2		/* r4 <- size of armboot            */
+	add	r2, r0, r4		/* r2 <- source end address         */
+	cmp	r2, r0			/* does the source rollover?        */
+	bhi	copy_loop		/* no: copy is linear, go do it.    */
+
+	/* block size is 0x1.0000.0000 - _start */
+	rsb	r3, r0, #0
+
+	/* round u-boot size up to the nearest multiple of block size */
+	sub	r3, r3, #1
+	orr	r4, r4, r3
+	add	r4, r4, #1
+
+	/* copy second part, end condition is r0 rollover to 0 */
+copy_second:
+	ldmia	r0!, {r5-r12}		/* copy from source address [r0]    */
+	stmia	r1!, {r5-r12}		/* copy to   target address [r1]    */
+	cmp	r0, #0			/* until source end address [#0]    */
+	bne	copy_second
+
+	/* move source start and end back by the u-boot size rounded up */
+	sub	r0, r0, r4		/* r0 <- source address of 2nd part */
+	sub	r2, r2, r4		/* r2 <- source end adr of 2nd part */
 
 copy_loop:
-	ldmia	r0!, {r3-r10}		/* copy from source address [r0]    */
-	stmia	r1!, {r3-r10}		/* copy to   target address [r1]    */
-	cmp	r0, r2			/* until source end addreee [r2]    */
+	ldmia	r0!, {r5-r12}		/* copy from source address [r0]    */
+	stmia	r1!, {r5-r12}		/* copy to   target address [r1]    */
+	cmp	r0, r2			/* until source end address [r2]    */
 	ble	copy_loop
 #endif	/* CONFIG_SKIP_RELOCATE_UBOOT */
 
@@ -189,14 +242,14 @@ stack_setup:
 	ldr	r0, _TEXT_BASE		/* upper 128 KiB: relocated uboot   */
 	sub	sp, r0, #128		/* leave 32 words for abort-stack   */
 #ifndef CONFIG_PRELOADER
-	sub	r0, r0, #CONFIG_SYS_MALLOC_LEN	/* malloc area                      */
-	sub	r0, r0, #CONFIG_SYS_GBL_DATA_SIZE /* bdinfo                        */
+	sub	r0, r0, #CONFIG_SYS_MALLOC_LEN	/* malloc area              */
+	sub	r0, r0, #CONFIG_SYS_GBL_DATA_SIZE /* bdinfo                 */
 #ifdef CONFIG_USE_IRQ
 	sub	r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
 #endif
 #endif /* CONFIG_PRELOADER */
 	sub	sp, r0, #12		/* leave 3 words for abort-stack    */
-	bic	sp, sp, #7		/* 8-byte alignment for ABI compliance */
+	bic	sp, sp, #7		/* ABI-compliant 8-bit alignment    */
 
 clear_bss:
 	ldr	r0, _bss_start		/* find start of bss segment        */
@@ -310,7 +363,8 @@ cpu_init_crit:
 
 	ldr	r2, _armboot_start
 	sub	r2, r2, #(CONFIG_STACKSIZE+CONFIG_SYS_MALLOC_LEN)
-	sub	r2, r2, #(CONFIG_SYS_GBL_DATA_SIZE+8)  @ set base 2 words into abort stack
+	@ reserve a couple spots in abort stack
+	sub	r2, r2, #(CONFIG_SYS_GBL_DATA_SIZE+8)
 	@ get values for "aborted" pc and cpsr (into parm regs)
 	ldmia	r2, {r2 - r3}
 	add	r0, sp, #S_FRAME_SIZE		@ grab pointer to old stack
@@ -344,7 +398,8 @@ cpu_init_crit:
 	.macro get_bad_stack
 	ldr	r13, _armboot_start		@ setup our mode stack
 	sub	r13, r13, #(CONFIG_STACKSIZE+CONFIG_SYS_MALLOC_LEN)
-	sub	r13, r13, #(CONFIG_SYS_GBL_DATA_SIZE+8) @ reserved a couple spots in abort stack
+	@ reserve a couple spots in abort stack
+	sub	r13, r13, #(CONFIG_SYS_GBL_DATA_SIZE+8)
 
 	str	lr, [r13]	@ save caller lr in position 0 of saved stack
 	mrs	lr, spsr	@ get the spsr
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH] [NEXT] arm926ejs: add split relocation support
  2010-09-14 18:25 [U-Boot] [PATCH] [NEXT] arm926ejs: add split relocation support Albert Aribaud
@ 2010-09-14 18:47 ` Albert ARIBAUD
  2010-09-14 20:28   ` Rogan Dawes
  0 siblings, 1 reply; 10+ messages in thread
From: Albert ARIBAUD @ 2010-09-14 18:47 UTC (permalink / raw)
  To: u-boot

Le 14/09/2010 20:25, Albert Aribaud a ?crit :
>

Sorry, the patch posted is against master, not next, and thus does not 
take Heiko's relocation work. I'm rebasing / updating the patch and will 
provide a V2 of it that will.

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH] [NEXT] arm926ejs: add split relocation support
  2010-09-14 18:47 ` Albert ARIBAUD
@ 2010-09-14 20:28   ` Rogan Dawes
  2010-09-15  5:53     ` Albert ARIBAUD
  0 siblings, 1 reply; 10+ messages in thread
From: Rogan Dawes @ 2010-09-14 20:28 UTC (permalink / raw)
  To: u-boot

On 2010/09/14 8:47 PM, Albert ARIBAUD wrote:
> Le 14/09/2010 20:25, Albert Aribaud a ?crit :
>>
> 
> Sorry, the patch posted is against master, not next, and thus does not 
> take Heiko's relocation work. I'm rebasing / updating the patch and will 
> provide a V2 of it that will.
> 
> Amicalement,

You should probably take a closer look at the patch itself. It seems to
be changing lines that you do not intend to, such as the copyright lines
(I guess it is an encoding issue).

Rogan

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH] [NEXT] arm926ejs: add split relocation support
  2010-09-14 20:28   ` Rogan Dawes
@ 2010-09-15  5:53     ` Albert ARIBAUD
  2010-09-15  6:59       ` Wolfgang Denk
  0 siblings, 1 reply; 10+ messages in thread
From: Albert ARIBAUD @ 2010-09-15  5:53 UTC (permalink / raw)
  To: u-boot

Le 14/09/2010 22:28, Rogan Dawes a ?crit :
> On 2010/09/14 8:47 PM, Albert ARIBAUD wrote:
>> Le 14/09/2010 20:25, Albert Aribaud a ?crit :
>>>
>>
>> Sorry, the patch posted is against master, not next, and thus does not
>> take Heiko's relocation work. I'm rebasing / updating the patch and will
>> provide a V2 of it that will.
>>
>> Amicalement,
>
> You should probably take a closer look at the patch itself. It seems to
> be changing lines that you do not intend to, such as the copyright lines
> (I guess it is an encoding issue).

Thanks for pointing this out; it is a switch from ISO8859-1 to UTF-8 
done by the EDI I use.

Both encodings are present in u-boot. I figure UTF-8 seems a better 
choice, but if there is a coding rule about encodings, I'll happily 
follow it, of course.

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH] [NEXT] arm926ejs: add split relocation support
  2010-09-15  5:53     ` Albert ARIBAUD
@ 2010-09-15  6:59       ` Wolfgang Denk
  2010-09-15 12:16         ` Albert ARIBAUD
  0 siblings, 1 reply; 10+ messages in thread
From: Wolfgang Denk @ 2010-09-15  6:59 UTC (permalink / raw)
  To: u-boot

Dear Albert ARIBAUD,

In message <4C905F6D.7010902@free.fr> you wrote:
>
> Both encodings are present in u-boot. I figure UTF-8 seems a better
> choice, but if there is a coding rule about encodings, I'll happily
> follow it, of course.

So far we've been using ISO8859-1

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
It is impractical for  the  standard  to  attempt  to  constrain  the
behavior  of code that does not obey the constraints of the standard.
                                                          - Doug Gwyn

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH] [NEXT] arm926ejs: add split relocation support
  2010-09-15  6:59       ` Wolfgang Denk
@ 2010-09-15 12:16         ` Albert ARIBAUD
  2010-09-18 20:45           ` Wolfgang Denk
  0 siblings, 1 reply; 10+ messages in thread
From: Albert ARIBAUD @ 2010-09-15 12:16 UTC (permalink / raw)
  To: u-boot

Le 15/09/2010 08:59, Wolfgang Denk a ?crit :
> Dear Albert ARIBAUD,
>
> In message<4C905F6D.7010902@free.fr>  you wrote:
>>
>> Both encodings are present in u-boot. I figure UTF-8 seems a better
>> choice, but if there is a coding rule about encodings, I'll happily
>> follow it, of course.
>
> So far we've been using ISO8859-1

It is not clear to me whether you're expressing a coding rule or just a 
statement of fact, so I'll ask more precise questions:

1) is UTF-8 allowed or not in u-boot?

2) if UTF-8 is allowed along with ISO8859-1, then a) which one should be 
preferred for new files, and b) which should be preferred for patches to 
existing files?

3) if UTF-8 is not allowed, then what should be done about the 56 u-boot 
source files that currently are UTF-8?

Wolfgang, can you explicitly answer these points? In case the answer to 
question 3 is "they should be converted to ISO", of course being the one 
to raise the issue, I shall be the one to submit the fix.

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH] [NEXT] arm926ejs: add split relocation support
  2010-09-15 12:16         ` Albert ARIBAUD
@ 2010-09-18 20:45           ` Wolfgang Denk
  2010-09-18 21:12             ` Albert ARIBAUD
  0 siblings, 1 reply; 10+ messages in thread
From: Wolfgang Denk @ 2010-09-18 20:45 UTC (permalink / raw)
  To: u-boot

Dear Albert ARIBAUD,

In message <4C90B904.9020305@free.fr> you wrote:
>
> > So far we've been using ISO8859-1
> 
> It is not clear to me whether you're expressing a coding rule or just a 
> statement of fact, so I'll ask more precise questions:
> 
> 1) is UTF-8 allowed or not in u-boot?
> 
> 2) if UTF-8 is allowed along with ISO8859-1, then a) which one should be 
> preferred for new files, and b) which should be preferred for patches to 
> existing files?
> 
> 3) if UTF-8 is not allowed, then what should be done about the 56 u-boot 
> source files that currently are UTF-8?
> 
> Wolfgang, can you explicitly answer these points? In case the answer to 
> question 3 is "they should be converted to ISO", of course being the one 
> to raise the issue, I shall be the one to submit the fix.

So far this has not been "officially" decided yet. My personal
preference is ISO-8859-1, so if nobody protests I suggest we add a
"[i18n] commitencoding = ISO-8859-1" to the .git/config file.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
If God had a beard, he'd be a UNIX programmer.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH] [NEXT] arm926ejs: add split relocation support
  2010-09-18 20:45           ` Wolfgang Denk
@ 2010-09-18 21:12             ` Albert ARIBAUD
  2010-09-18 21:18               ` Wolfgang Denk
  0 siblings, 1 reply; 10+ messages in thread
From: Albert ARIBAUD @ 2010-09-18 21:12 UTC (permalink / raw)
  To: u-boot

Le 18/09/2010 22:45, Wolfgang Denk a ?crit :
> Dear Albert ARIBAUD,
>
> In message<4C90B904.9020305@free.fr>  you wrote:
>>
>>> So far we've been using ISO8859-1
>>
>> It is not clear to me whether you're expressing a coding rule or just a
>> statement of fact, so I'll ask more precise questions:
>>
>> 1) is UTF-8 allowed or not in u-boot?
>>
>> 2) if UTF-8 is allowed along with ISO8859-1, then a) which one should be
>> preferred for new files, and b) which should be preferred for patches to
>> existing files?
>>
>> 3) if UTF-8 is not allowed, then what should be done about the 56 u-boot
>> source files that currently are UTF-8?
>>
>> Wolfgang, can you explicitly answer these points? In case the answer to
>> question 3 is "they should be converted to ISO", of course being the one
>> to raise the issue, I shall be the one to submit the fix.
>
> So far this has not been "officially" decided yet. My personal
> preference is ISO-8859-1, so if nobody protests I suggest we add a
> "[i18n] commitencoding = ISO-8859-1" to the .git/config file.
>
> Best regards,
>
> Wolfgang Denk

Thanks -- as promised, I will compile the list of u-boot files currently 
encoded in UTF-8 and will provide a patch to reencode them to ISO-8895-1.

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH] [NEXT] arm926ejs: add split relocation support
  2010-09-18 21:12             ` Albert ARIBAUD
@ 2010-09-18 21:18               ` Wolfgang Denk
  2010-09-18 22:04                 ` Albert ARIBAUD
  0 siblings, 1 reply; 10+ messages in thread
From: Wolfgang Denk @ 2010-09-18 21:18 UTC (permalink / raw)
  To: u-boot

Dear Albert ARIBAUD,

In message <4C952B3D.9000802@free.fr> you wrote:
>
> > So far this has not been "officially" decided yet. My personal
> > preference is ISO-8859-1, so if nobody protests I suggest we add a
> > "[i18n] commitencoding = ISO-8859-1" to the .git/config file.
...
> Thanks -- as promised, I will compile the list of u-boot files currently 
> encoded in UTF-8 and will provide a patch to reencode them to ISO-8895-1.

Please wait a couple of days so others have sufficient opportunity to
comment...

Best regards,

Wolfgang Denk

--
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"I dislike companies that have a we-are-the-high-priests-of-hardware-
so-you'll-like-what-we-give-you attitude. I like commodity markets in
which iron-and-silicon hawkers know that they exist to  provide  fast
toys for software types like me to play with..."    - Eric S. Raymond

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH] [NEXT] arm926ejs: add split relocation support
  2010-09-18 21:18               ` Wolfgang Denk
@ 2010-09-18 22:04                 ` Albert ARIBAUD
  0 siblings, 0 replies; 10+ messages in thread
From: Albert ARIBAUD @ 2010-09-18 22:04 UTC (permalink / raw)
  To: u-boot

Le 18/09/2010 23:18, Wolfgang Denk a ?crit :

>> Thanks -- as promised, I will compile the list of u-boot files currently
>> encoded in UTF-8 and will provide a patch to reencode them to ISO-8895-1.
>
> Please wait a couple of days so others have sufficient opportunity to
> comment...

All right, I will.

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2010-09-18 22:04 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-14 18:25 [U-Boot] [PATCH] [NEXT] arm926ejs: add split relocation support Albert Aribaud
2010-09-14 18:47 ` Albert ARIBAUD
2010-09-14 20:28   ` Rogan Dawes
2010-09-15  5:53     ` Albert ARIBAUD
2010-09-15  6:59       ` Wolfgang Denk
2010-09-15 12:16         ` Albert ARIBAUD
2010-09-18 20:45           ` Wolfgang Denk
2010-09-18 21:12             ` Albert ARIBAUD
2010-09-18 21:18               ` Wolfgang Denk
2010-09-18 22:04                 ` Albert ARIBAUD

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox