[U-Boot] [RFC] arm926ejs: fix jump to RAM nand_boot

Albert ARIBAUD
2010-11-01T19:30:32Z

Le 01/11/2010 20:23, Wolfgang Denk a ?crit :
> Dear Albert ARIBAUD,
>
> In message<4CCEF2E4.5080003@free.fr> you wrote:
>>
>> Also, I understand why the second RFC change I did was harmful to tx25.
>> Contrary to u-boot itself, u-boot-spl is not compiled to be position
>> independent; it actually loads at a given address then copies itself,
>> without relocating, to its home location.
>
> It copies _itself_? Not the U-Boot payload?
>
> Heiko, is this intentional? Do we really first load the whole image,
> then copy the U-Boot payload to some other address, then relocate it
> to yet another one?

I haven't been clear.

The boot ROM or IPL loads u-boot-spl in RAM at a fixed location and
jumps to it.

u-boot-spl copies itself at its intended location if not already there,
and jumps to tiself at that new location.

u-boot-spl loads u-boot at a fixed location and jumps to it.

u-boot relocates (copies and fixes up) itself at top of ram if not
already there, and jumps to itself at that new location.

>> I also think I might have found out what hit tx25.
>>
>> include/configs/tx25 defines the size of u-boot which SPL will use to
>> load from NAND into RAM. currently it is defined thus:
>>
>> #define CONFIG_SYS_NAND_U_BOOT_SIZE 0x30000
>
> Arghh...
>
>> Wolfgang, please try the following:
>>
>> - on u-boot-testing, branch reloc_tests, revert commit 7fab02d...
>> (that's "arm926ejs: fix jump to RAM nand_boot") as this 'fix' is a mistake.
>>
>> - in include/configs/tx25.h, increasing CONFIG_SYS_NAND_U_BOOT_SIZE to
>> 0x31000
>>
>> Let me know if building tx25 after these two corrections makes things
>> better.
>
> Bingo.

Phew.

> Both the ELDK and the CS compiled versions run fine now:
>
> with ELDK:
>
> U-Boot 2010.12-rc1-00030-g7fec359 (Nov 01 2010 - 20:13:53)
>
> U-Boot code: 81200000 -> 81224E64 BSS: -> 8122DF68
> CPU: Freescale i.MX25 at 399 MHz
>
> monitor len: 0002DF68
> ramsize: 02000000
> TLB table at: 81ff0000
> Top of RAM usable for U-Boot at: 81ff0000
> Reserving 183k for U-Boot at: 81fc2000
> Reserving 1024k for malloc() at: 81ec2000
> Reserving 24 Bytes for Board Info at: 81ec1fe8
> Reserving 92 Bytes for Global Data at: 81ec1f8c
> New Stack Pointer is: 81ec1f88
> RAM Configuration:
> Bank #0: 80000000 32 MiB
> relocation Offset is: 00dc2000
> monitor flash len: 00024E64
> Now running in RAM - U-Boot at: 81fc2000
> ....
>
> with CS:
>
> U-Boot 2010.12-rc1-00030-g7fec359 (Nov 01 2010 - 20:18:09)
>
> U-Boot code: 81200000 -> 812237E8 BSS: -> 8122C8F0
> CPU: Freescale i.MX25 at 399 MHz
>
> monitor len: 0002C8F0
> ramsize: 02000000
> TLB table at: 81ff0000
> Top of RAM usable for U-Boot at: 81ff0000
> Reserving 178k for U-Boot at: 81fc3000
> Reserving 1024k for malloc() at: 81ec3000
> Reserving 24 Bytes for Board Info at: 81ec2fe8
> Reserving 92 Bytes for Global Data at: 81ec2f8c
> New Stack Pointer is: 81ec2f88
> RAM Configuration:
> Bank #0: 80000000 32 MiB
> relocation Offset is: 00dc3000
> monitor flash len: 000237E8
> Now running in RAM - U-Boot at: 81fc3000
> ....
>
> Note that the CS tool chain gives somewhat smaller code...
>
> Thanks a lot!

You're welcome. :)
>
> Guess we should submit the temporary changes now as formal patches?

Yes, I will now prepare a patchset for mainline master. Do I include the
increase of tx25 size?

> Best regards,
>
> Wolfgang Denk

Amicalement,
--
Albert.