[U-Boot-Users] U-Boot Boot Sequence

Hello all,
Im currently looking closely to the boot sequence for the MPC8xx but cant exactly figure it out how it works. Every hint is appreciated.
Since most MPC8xx and MPCxx both start executing at adress 0x100 there must reside some code at this location at boot time. I assume the U-Boot image will be burned to the external flash (CS0) and we start from there (0x100).
What I dont understand is, that the label _start (In cpu/mpc8xx/start.S) will be placed to the runtime adress 0x100, but resides in the .text section which according to the linker file (take as example board/cogent/u-boot.lds) wont probably start at adresse 0x100 in the image. The .text section is located after the .interp section.
Are this assumptions true?
I have another question concerns the adress calculation to in_flash label (Some guys already mentioned something about this on this list). The U-Boot image is located in flash (CS0) we start executing at adress 0x100 in flash somehow. MPC is now executing instruction by instruction until the following lines:
/* * Calculate absolute address in FLASH and jump there */ lis r3, CFG_MONITOR_BASE@h ori r3, r3, CFG_MONITOR_BASE@l addi r3, r3, in_flash - _start + EXC_OFF_SYS_RESET mtlr r3 blr
My question is why to calculate the branch to in_flash and why adding the CFG_MONITOR_BASE? (dont be angry I know the same question has alredy been asked but....)
Since _start label is placed to location 0x100
. = EXC_OFF_SYS_RESET .globl _start _start:
and location counter will increase until to the in_flash label (and further of course), the in_flash label will be always in a specific offset from the label _start.
Why we cant simply leave it (the branch calculation) and simply executing the next instruction? (first instrution in in_flash)
I really dont know whether I simply make a huge mess but please help me to clarify it. Best regards,
Martin

Hello,
in message 8911.1042398376@www47.gmx.net you wrote:
Im currently looking closely to the boot sequence for the MPC8xx but cant exactly figure it out how it works. Every hint is appreciated.
Did you read the README file? Section "System Initialization" ?
Since most MPC8xx and MPCxx both start executing at adress 0x100 there
This is not necessarily true. It may be 0xFFF00100 as well, depending on the HRCW...
What I dont understand is, that the label _start (In cpu/mpc8xx/start.S) will be placed to the runtime adress 0x100, but resides in the .text section which according to the linker file (take as example board/cogent/u-boot.lds) wont probably start at adresse 0x100 in the image. The .text section is located after the .interp section.
See the README.
I have another question concerns the adress calculation to in_flash label (Some guys already mentioned something about this on this list).
So what was not clear in the previous explanations?
My question is why to calculate the branch to in_flash and why adding the CFG_MONITOR_BASE? (dont be angry I know the same question has alredy been asked but....)
Which exact part of the previous explanations did you not understand? It makes little sense to repeat the explanations if they are not clear enough for you.
Best regards,
Wolfgang Denk
participants (2)
-
Martin Winistörfer
-
Wolfgang Denk