All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] AT91: problems master vs. next
@ 2010-09-21 12:39 Reinhard Meyer
  2010-09-21 14:00 ` Albert ARIBAUD
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Reinhard Meyer @ 2010-09-21 12:39 UTC (permalink / raw)
  To: u-boot

Just to report on preliminary findings I had:

Rebasing my current TOP9000 port on u-boot/master compiles
and works fine.
Code size increased moderately from 223592 to 223976.

Rebasing my current TOP9000 port on u-boot/next compiles
after defining CONFIG_SYS_SDRAM_BASE and CONFIG_SYS_INIT_SP_ADDR.
Code size increased heavyly from 223592 to 245544.

And U-Boot crashes instantly (I know there is more to be done
than just defining those two macros).

What bothers me really here is the huge increase in code size.

And, on almost all AT91 systems booting will be through a
first boot loader, which sets up SDRAM, loads u-boot to the
"correct" address and jumps to it.
All low level init and relocation is not required in such cases.

It should be always possible to #define relocation off!

With Best Regards
Reinhard

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

* [U-Boot] AT91: problems master vs. next
  2010-09-21 12:39 [U-Boot] AT91: problems master vs. next Reinhard Meyer
@ 2010-09-21 14:00 ` Albert ARIBAUD
  2010-09-21 14:18   ` Reinhard Meyer
                     ` (2 more replies)
  2010-09-21 14:40 ` [U-Boot] AT91: problems master vs. next Stefan Roese
  2010-09-21 17:27 ` Wolfgang Denk
  2 siblings, 3 replies; 10+ messages in thread
From: Albert ARIBAUD @ 2010-09-21 14:00 UTC (permalink / raw)
  To: u-boot

Le 21/09/2010 14:39, Reinhard Meyer a ?crit :
> Just to report on preliminary findings I had:
>
> Rebasing my current TOP9000 port on u-boot/master compiles
> and works fine.
> Code size increased moderately from 223592 to 223976.
>
> Rebasing my current TOP9000 port on u-boot/next compiles
> after defining CONFIG_SYS_SDRAM_BASE and CONFIG_SYS_INIT_SP_ADDR.
> Code size increased heavyly from 223592 to 245544.
>
> And U-Boot crashes instantly (I know there is more to be done
> than just defining those two macros).
>
> What bothers me really here is the huge increase in code size.

I see numbers similar for orion5x based net5big, where non relocating 
build is 117252 bytes while relocating build is 127120, a 8.4% increase 
(yours is 9.8%).

This is due to the fact that each routine has to recompute the PIC 
register. As a test, I tried adding -msingle-pic-base to -fPIC (this 
computes the PIC register once for the whole code) and the code size 
falls back to 123764 bytes, 'only' 5.5% more than the non relocating 
case. Using -fPIE -pie -msingle-pic-base lowers this again to 5.2%.

Of course you cannot just turn -msingle-pic-base on; you've got to have 
the code in start.S that computes the register. Also, switching from PIC 
to PIE needs to be verified. I've got the code in my local tree, but 
it's not tested yet. I'll test it tonight and post it if it works.

> And, on almost all AT91 systems booting will be through a
> first boot loader, which sets up SDRAM, loads u-boot to the
> "correct" address and jumps to it.
> All low level init and relocation is not required in such cases.
>
> It should be always possible to #define relocation off!

On arm926ejs this is controlled by CONFIG_SKIP_LOWLEVEL_INIT and 
CONFIG_SKIP_RELOCATE_UBOOT. For instance, openrd_base, a kirkwood board, 
always skips lowlevel inits.

Amicalement,
-- 
Albert.

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

* [U-Boot] AT91: problems master vs. next
  2010-09-21 14:00 ` Albert ARIBAUD
@ 2010-09-21 14:18   ` Reinhard Meyer
  2010-09-21 14:36     ` Reinhard Meyer
  2010-09-21 17:27     ` Wolfgang Denk
  2010-09-21 17:27   ` Wolfgang Denk
  2010-09-22  7:14   ` [U-Boot] ARM Relocation compiler and linker switches (was: AT91: problems master vs. next) Albert ARIBAUD
  2 siblings, 2 replies; 10+ messages in thread
From: Reinhard Meyer @ 2010-09-21 14:18 UTC (permalink / raw)
  To: u-boot

Dear Albert ARIBAUD,
> Le 21/09/2010 14:39, Reinhard Meyer a ?crit :
>> Rebasing my current TOP9000 port on u-boot/next compiles
>> after defining CONFIG_SYS_SDRAM_BASE and CONFIG_SYS_INIT_SP_ADDR.
>> Code size increased heavyly from 223592 to 245544.
>>
>> And U-Boot crashes instantly (I know there is more to be done
>> than just defining those two macros).
>>
>> What bothers me really here is the huge increase in code size.
> 
> I see numbers similar for orion5x based net5big, where non relocating 
> build is 117252 bytes while relocating build is 127120, a 8.4% increase 
> (yours is 9.8%).
> 
> This is due to the fact that each routine has to recompute the PIC 
> register. As a test, I tried adding -msingle-pic-base to -fPIC (this 
> computes the PIC register once for the whole code) and the code size 
> falls back to 123764 bytes, 'only' 5.5% more than the non relocating 
> case. Using -fPIE -pie -msingle-pic-base lowers this again to 5.2%.
> 
> Of course you cannot just turn -msingle-pic-base on; you've got to have 
> the code in start.S that computes the register. Also, switching from PIC 
> to PIE needs to be verified. I've got the code in my local tree, but 
> it's not tested yet. I'll test it tonight and post it if it works.
> 
>> And, on almost all AT91 systems booting will be through a
>> first boot loader, which sets up SDRAM, loads u-boot to the
>> "correct" address and jumps to it.
>> All low level init and relocation is not required in such cases.
>>
>> It should be always possible to #define relocation off!
> 
> On arm926ejs this is controlled by CONFIG_SKIP_LOWLEVEL_INIT and 
> CONFIG_SKIP_RELOCATE_UBOOT. For instance, openrd_base, a kirkwood board, 
> always skips lowlevel inits.

Yep, those are set and work well with master. However the extra almost 10%
of code increase (with next) will not go away with that.

Therefore I strongly suggest that all extras (PIC) needed solely for relocation
should be switchable OFF by a configuration option. Who does need that
relocation in the first place? For years ARM did work without it; why now
blowing up the code?

Reinhard

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

* [U-Boot] AT91: problems master vs. next
  2010-09-21 14:18   ` Reinhard Meyer
@ 2010-09-21 14:36     ` Reinhard Meyer
  2010-09-21 17:27     ` Wolfgang Denk
  1 sibling, 0 replies; 10+ messages in thread
From: Reinhard Meyer @ 2010-09-21 14:36 UTC (permalink / raw)
  To: u-boot

Reinhard Meyer schrieb:
> Therefore I strongly suggest that all extras (PIC) needed solely for relocation
> should be switchable OFF by a configuration option. Who does need that
> relocation in the first place? For years ARM did work without it; why now
> blowing up the code?

Sorry, to be precise: the option CONFIG_SYS_ARM_WITHOUT_RELOC should stay as a
permanent feature.

However, when I compile with that option defined in my board-config.h I get the
following warnings for EVERY file:

/home/reinhard/embedded/u-boot/include/configs/top9000_9xe.h:74:1: warning: "CONFIG_SYS_ARM_WITHOUT_RELOC" redefined
<command-line>: warning: this is the location of the previous definition
In file included from /home/reinhard/embedded/u-boot/include/config.h:4,
                 from /home/reinhard/embedded/u-boot/include/common.h:37,
                 from stmicro.c:30:

because of that recursion:
+ifdef CONFIG_SYS_ARM_WITHOUT_RELOC
+PLATFORM_CPPFLAGS += -DCONFIG_SYS_ARM_WITHOUT_RELOC
+endif

The code size changes from 223592 to 229792 which is more acceptable, but
I still does crash (I will look into that soon).

Reinhard

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

* [U-Boot] AT91: problems master vs. next
  2010-09-21 12:39 [U-Boot] AT91: problems master vs. next Reinhard Meyer
  2010-09-21 14:00 ` Albert ARIBAUD
@ 2010-09-21 14:40 ` Stefan Roese
  2010-09-21 14:50   ` Reinhard Meyer
  2010-09-21 17:27 ` Wolfgang Denk
  2 siblings, 1 reply; 10+ messages in thread
From: Stefan Roese @ 2010-09-21 14:40 UTC (permalink / raw)
  To: u-boot

Hi Reinhard,

On Tuesday 21 September 2010 14:39:41 Reinhard Meyer wrote:
> Rebasing my current TOP9000 port on u-boot/next compiles
> after defining CONFIG_SYS_SDRAM_BASE and CONFIG_SYS_INIT_SP_ADDR.
> Code size increased heavyly from 223592 to 245544.

Please note that this increase is not only because of the new ARM relocation 
support, but the environment rework done by Wolfgang:

http://lists.denx.de/pipermail/u-boot/2010-July/074125.html

As stated in this mail, the code size increase is typically 5...7KiB.

Cheers,
Stefan

--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de

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

* [U-Boot] AT91: problems master vs. next
  2010-09-21 14:40 ` [U-Boot] AT91: problems master vs. next Stefan Roese
@ 2010-09-21 14:50   ` Reinhard Meyer
  0 siblings, 0 replies; 10+ messages in thread
From: Reinhard Meyer @ 2010-09-21 14:50 UTC (permalink / raw)
  To: u-boot

Stefan Roese schrieb:
> Please note that this increase is not only because of the new ARM relocation 
> support, but the environment rework done by Wolfgang:

Yes, that, too. About 5.5k

next w/o relocation (#define CONFIG_SYS_ARM_WITHOUT_RELOC)
and w/o cache (#define CONFIG_SYS_NO_[DI]CACHE): 229440
master: 223976
delta: 5464.

Cache on costs 352 bytes.

Reinhard

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

* [U-Boot] AT91: problems master vs. next
  2010-09-21 12:39 [U-Boot] AT91: problems master vs. next Reinhard Meyer
  2010-09-21 14:00 ` Albert ARIBAUD
  2010-09-21 14:40 ` [U-Boot] AT91: problems master vs. next Stefan Roese
@ 2010-09-21 17:27 ` Wolfgang Denk
  2 siblings, 0 replies; 10+ messages in thread
From: Wolfgang Denk @ 2010-09-21 17:27 UTC (permalink / raw)
  To: u-boot

Dear Reinhard Meyer,

In message <4C98A78D.7070407@emk-elektronik.de> you wrote:
> 
> What bothers me really here is the huge increase in code size.

As has been pointed out by others, there are several factors that
contribute to that code.

> And, on almost all AT91 systems booting will be through a
> first boot loader, which sets up SDRAM, loads u-boot to the
> "correct" address and jumps to it.

When you have to support multiple memory configurations that
"correct" address is typically right in the middle of your RAM.

Assume you have a system with 64 or 128 MB of RAM. In the old way,
U-Boot will probably sit somewhere at offset 63 MB or so, close to the
end of the "small" configuration.

On the big board this is neatly splitting the RAM into two small
chunks - please explain to a customer why he cannot load a 64 MB image
to RAM when there are 128 MB of RAM on his board, 127 MB of these
actually unused?

r why you need multiple binary images of U-Boot if you want to
initialize and pass some memory at the end of RAM for further use in
Linux, say frame buffer, or PRAM, or a log buffer?

> All low level init and relocation is not required in such cases.

Relocation is still needed.

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
"May your future be limited only by your dreams."
- Christa McAuliffe

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

* [U-Boot] AT91: problems master vs. next
  2010-09-21 14:18   ` Reinhard Meyer
  2010-09-21 14:36     ` Reinhard Meyer
@ 2010-09-21 17:27     ` Wolfgang Denk
  1 sibling, 0 replies; 10+ messages in thread
From: Wolfgang Denk @ 2010-09-21 17:27 UTC (permalink / raw)
  To: u-boot

Dear Reinhard Meyer,

In message <4C98BEC7.9090500@emk-elektronik.de> you wrote:
>
> should be switchable OFF by a configuration option. Who does need that
> relocation in the first place? For years ARM did work without it; why now
> blowing up the code?

Maintenancewise, the relocation is needed to allow to merge the ARM
code back into a common source tree with other architectures.

Technically, it is needed to be able to run a single U-Boot binary
image on systems where you don;t know the exact RAM size at compile
time (say on boards that come with more than one RAM size
configurations), or to dynamically adapt to things like PRAM, frame
buffer memory, syslog buffer, etc.

Yes, ARM kind of worked without that for years, but it has always been
a PITA for many of us.

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
The rule on staying alive as a program manager is to give 'em a  num-
ber or give 'em a date, but never give 'em both at once.

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

* [U-Boot] AT91: problems master vs. next
  2010-09-21 14:00 ` Albert ARIBAUD
  2010-09-21 14:18   ` Reinhard Meyer
@ 2010-09-21 17:27   ` Wolfgang Denk
  2010-09-22  7:14   ` [U-Boot] ARM Relocation compiler and linker switches (was: AT91: problems master vs. next) Albert ARIBAUD
  2 siblings, 0 replies; 10+ messages in thread
From: Wolfgang Denk @ 2010-09-21 17:27 UTC (permalink / raw)
  To: u-boot

Dear Albert ARIBAUD,

In message <4C98BA84.9040104@free.fr> you wrote:
>
> > It should be always possible to #define relocation off!
>
> On arm926ejs this is controlled by CONFIG_SKIP_LOWLEVEL_INIT and
> CONFIG_SKIP_RELOCATE_UBOOT. For instance, openrd_base, a kirkwood board,
> always skips lowlevel inits.

You cannot use CONFIG_SKIP_RELOCATE_UBOOT they way you used to do it.

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
How many QA engineers does it take to screw in a lightbulb? 3:  1  to
screw it in and 2 to say "I told you so" when it doesn't work.

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

* [U-Boot] ARM Relocation compiler and linker switches (was: AT91: problems master vs. next)
  2010-09-21 14:00 ` Albert ARIBAUD
  2010-09-21 14:18   ` Reinhard Meyer
  2010-09-21 17:27   ` Wolfgang Denk
@ 2010-09-22  7:14   ` Albert ARIBAUD
  2 siblings, 0 replies; 10+ messages in thread
From: Albert ARIBAUD @ 2010-09-22  7:14 UTC (permalink / raw)
  To: u-boot

Le 21/09/2010 16:00, Albert ARIBAUD a ?crit :

> This is due to the fact that each routine has to recompute the PIC
> register. As a test, I tried adding -msingle-pic-base to -fPIC (this
> computes the PIC register once for the whole code) and the code size
> falls back to 123764 bytes, 'only' 5.5% more than the non relocating
> case. Using -fPIE -pie -msingle-pic-base lowers this again to 5.2%.
>
> Of course you cannot just turn -msingle-pic-base on; you've got to have
> the code in start.S that computes the register. Also, switching from PIC
> to PIE needs to be verified. I've got the code in my local tree, but
> it's not tested yet. I'll test it tonight and post it if it works.

I haven't fully tested yet, but I've given a look at -fPIC vs -fPIE vs 
-fPIE -pie, with and without -msingle-pic-base, and here are the 
results; note that the following numbers were measured on the edminiv2 
config (I'd previously used a not-yet-submitted net5big config).

Compiling u-boot with '#define CONFIG_SYS_ARM_WITHOUT_RELOC' yields a 
133700 byte u-boot.bin whereas '#undef CONFIG_SYS_ARM_WITHOUT_RELOC' 
yields 145588, an increase of +8.9% -- AIUI this increase is due only to 
relocation changes as all the rest is unchanged, including Wolfgang's 
environment patches. This increase is explained by the fact that all 
global object accesses now need an additional indirection through the GOT.

Replacing -fPIC with -fPIE reduces size down to 144856 (+8.3%), by 
replacing the GOT indirection for initialized data with sl-relative 
addressing (uninitialized data still go through the GOT). This has the 
added marginal benefit that the GOT shrinks from 520 down to 296 bytes. 
The condition for -fPIE to work is that the relative position of .data 
to .text must remain constant across relocations, which is the case for 
u-boot.

Unfortunately I haven't seen any gcc/ld option which would replace 
indirection by sl-relative addressing for .bss.

Adding linker option -pie to -fPIE has no noticeable effect on size, 
though it does move things around -- I'll have to dig deeper into this 
one; until I know its effects, I'll just not add it.

Finally, adding -msingle-pic-base to any of the previous obviously 
reduces code size by not recomputing the pic base register in every 
function; for -fPIE -msingle-pic-base, the u-boot size shrinks down to 
140992 (+5.5%). Since this recomputation is useful only if relocation 
scatters .text, which is not a requirement (that I know of) for u-boot, 
we can safely add -msingle-pic-base, provided start.S computes the pic 
base register.

As for implementing these changes: going from -fPIC to -fPIE can be done 
at ARM level because it only requires modifying PLATFORM_RELFLAGS in 
arch/arm/config.mk. Adding -msingle-pic-base, though, requires a change 
to start.S for computing the pic base into r10 and r9 (only one of these 
will be used, depending on whether stack checking is enabled or not); 
since start.S is cpu-specific, the change must be at cpu, not arch, 
level. I'll provide a tested patch for arm926ejs along with the -fPIE 
patch; for other arm cpus, I can provide a patch but not test it.

Amicalement,
-- 
Albert.

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

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

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-09-21 12:39 [U-Boot] AT91: problems master vs. next Reinhard Meyer
2010-09-21 14:00 ` Albert ARIBAUD
2010-09-21 14:18   ` Reinhard Meyer
2010-09-21 14:36     ` Reinhard Meyer
2010-09-21 17:27     ` Wolfgang Denk
2010-09-21 17:27   ` Wolfgang Denk
2010-09-22  7:14   ` [U-Boot] ARM Relocation compiler and linker switches (was: AT91: problems master vs. next) Albert ARIBAUD
2010-09-21 14:40 ` [U-Boot] AT91: problems master vs. next Stefan Roese
2010-09-21 14:50   ` Reinhard Meyer
2010-09-21 17:27 ` Wolfgang Denk

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.