diff options
author | Pali Rohár <pali@kernel.org> | 2022-06-28 17:54:00 +0200 |
---|---|---|
committer | Peng Fan <peng.fan@nxp.com> | 2022-07-03 15:13:51 +0800 |
commit | 9167a1c28c2751b97ac48da5384e540e714a752a (patch) | |
tree | a9a9543a30046f8ab8b4fe8020c045610c889e25 /include/configs/galileo.h | |
parent | 6b74cfdcee4df3ee6400866f39e4806c1005a9fd (diff) | |
download | u-boot-9167a1c28c2751b97ac48da5384e540e714a752a.tar.gz u-boot-9167a1c28c2751b97ac48da5384e540e714a752a.tar.bz2 u-boot-9167a1c28c2751b97ac48da5384e540e714a752a.zip |
powerpc: mpc85xx: Simplify jump to _start_cont in flash code
After more patches code for jumping to _start_cont symbol in flash memory
involved to code with useless mathematical operations. Currently it does:
r3 := CONFIG_SYS_MONITOR_BASE + ABS(_start_cont) - CONFIG_SYS_MONITOR_BASE
jump to r3
Which is equivalent of just:
r3 := ABS(_start_cont)
jump to r3
The purpose of that code is just to jump to _start_code symbol,
independently of program counter. So branch must be done to absolute
address. Trying to write:
ba _start_cont
just cause linker error:
LD u-boot
powerpc-linux-gnuspe-ld.bfd: arch/powerpc/cpu/mpc85xx/start.o: in function `switch_as':
(.bootpg+0x4b8): relocation truncated to fit: R_PPC_ADDR24 against symbol `_start_cont' defined in .text section in arch/powerpc/cpu/mpc85xx/start.o
make: *** [Makefile:1801: u-boot] Error 1
Probably by the fact that absolute address cannot be expressed by 24-bits.
So write the code via mtlr+blr pattern as it was before and load general
purpose register with absolute address of the symbol:
lis r3,_start_cont@h
ori r3,r3,_start_cont@l
mtlr r3
blr
Seems that gcc and gnu ld linker support symbol@h and symbol@l syntax like
number@h and number@l without any problem. And disassembling of compiler
u-boot binary proved that lis+ori instructions are called with numbers
which represent halves of absolute address of _start_cont symbol.
Signed-off-by: Pali Rohár <pali@kernel.org>
Diffstat (limited to 'include/configs/galileo.h')
0 files changed, 0 insertions, 0 deletions