I'm not sure what your flush_icache_range() does exactly, but at a
It is not mine ;-)
"your", as in "not mine" :-)
minimum it is misnamed: you need to flush the dcache for this range to memory (dcbst is enough), do a sync, invalidate the icache (icbi), do another sync, do an isync.
It does exacly what you explain, see arch/ppc/qemu/start.S:
Excellent, so it is just misnamed; it says neither what it does nor what its purpose is. Oh well.
Segher