]> git.dujemihanovic.xyz Git - u-boot.git/commit
MIPS: Fix cache maintenance in relocate_code & simplify
authorPaul Burton <paul.burton@imgtec.com>
Wed, 21 Sep 2016 10:11:06 +0000 (11:11 +0100)
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Wed, 21 Sep 2016 14:25:43 +0000 (16:25 +0200)
commitd263cda5ae41279208d9576eab1c5215a57252a6
tree287efea0e6b14588278c579a20a522c6feb64a7a
parentad8783cb1cb258b71d81800f72cd64eb44081653
MIPS: Fix cache maintenance in relocate_code & simplify

The relocate_code function was handling cache maintenance incorrectly.
It copied U-Boot to its new location, flushed the caches & then
proceeded to apply relocations & jump to the new code without flushing
the caches again. This is problematic as the instruction cache could
potentially have already fetched instructions that hadn't had relocs
applied.

Rework this to perform the flush_cache call using the code in the
original copy of U-Boot, after having applied relocations to the new
copy of U-Boot. The new U-Boot can then be jumped to safely once that
cache flush has been performed.

As part of this, since the old U-Boot is used up until after that cache
flush, complexity around loading values from the GOT using a jump & link
instruction & loads from a table is removed. Instead we can simply load
the needed values with PTR_LA fromt the original GOT.

Signed-off-by: Paul Burton <paul.burton@imgtec.com>
arch/mips/cpu/start.S
arch/mips/cpu/u-boot.lds