[U-Boot-Users] Re: [PATCH][CFT] bring ARM memory layout in line with the documented behaviour
Anders Larsen
alarsen at rea.de
Thu Sep 18 14:15:21 CEST 2003
Wolfgang Denk <wd at denx.de> schreibt:
>in message <fc.004c4e48001cba02004c4e48001cba02.1cba71 at rea.de> you wrote:
>>
>> Since the stack and malloc-heap are now located below the U-Boot code,
>> the TEXT_BASE of the supported ARM boards can be increased accordingly
>> (for most (but not all) boards, the patch already does this).
>
>This is actually the biggest "problem" with the existing ARM code (as
>inherited from ARMBoot): with the orginal philosophy of PPCBoot,
>TEXT_BASE should not play ANY role here.
>
>The way I would like to soo this implemented, and as it _is_
>implemented in PPCBoot (and in U-Boot for PowerPC) is as follows:
>
>TEXT_BASE determines the start address in FLASH memory which is used
>before relocation.
>
>The RAM initialization code is, among other things, responsible to
>determine the size of the RAM, and the relocation address is then
>calculated DYNAMICALLY dependend on the RAM size found. This allows
>that boards with different RAM sizes will always provide maximum free
>RAM under U-Boot.
Dear Wolfgang,
are you saying that the patch doesn't go far enough?
(I feared that the patch might have gone too far :-)
It looks like a substantial amount of work to implement your wishes (but
its doable, I believe).
Would you accept the patch as is as a first step in that direction (in
order not to change too much in one step) provided the other ARM board
maintainers don't object?
>
>> Memory layout example based on my PXA255 (TEXT_BASE = 0xA07E0000):
>>
>> 0xA079FF74 Monitor Stack (growing downwards)
>> 0xA079FF80 Board Info Data and permanent copy of Global Data
>> 0xA07A0000 Malloc Arena
>> 0xA07E0000 RAM copy of Monitor Code
>> ... optional: Frame Buffer
>> 0xA07FFFFF [End of RAM]
>
>I still see references to _armboot_start, _armboot_end_data, and
>_armboot_end - which role do these play now? Can we get rid of them?
>
>How are they (should they be) set in your memory map above?
_armboot_start contains the value of TEXT_BASE (0xA07E0000); it seems
TEXT_BASE and _armboot_start are both used for the same purpose in
different parts of the (ARM) code.
Furthermore, the startup code (cpu/<arm>/start.S) internally uses
another variable (_TEXT_BASE) with the same content as _armboot_start.
I agree that this mess should be cleaned up.
_armboot_end_data is the end address of the initialized data section,
and is only used in one place (board/logodl/flash.c - the reference in
lib_arm/board.c is purely informational).
_armboot_end is the end address of the BSS and is used to determine
the address of the VFD buffer.
Eliminating those should be doable, and at least the patch already
eliminates _armboot_real_end.
>
>I think some more code should be changed like the allocation of
>display memory (see CONFIG_VFD in "lib_arm/board.c") - this should be
>done like we do for PowerPC, too.
Again, my available HW doesn't have a display, so I can't test it.
I'll take a look at it anyway, though.
>
>
>Any test results / comments from the other board maintainers?
Any comment is appreciated!
Cheers
Anders
More information about the U-Boot
mailing list