mips: load fast data transfer handler code with mips32_pracc_write_mem()
authorSalvador Arroyo <sarroyofdez@yahoo.es>
Sat, 24 Aug 2013 12:18:09 +0000 (14:18 +0200)
committerFreddie Chopin <freddie.chopin@gmail.com>
Fri, 9 May 2014 20:38:21 +0000 (20:38 +0000)
commitb08306a1725f7dcd70b9d2f7500be02d08b4cfb1
tree9a70b9081c758570d0bf9084e75fa92570f1531f
parente9497fbf75b3d5cf852151ce6e2549517e95e819
mips: load fast data transfer handler code with mips32_pracc_write_mem()

Currently the code is loaded calling mips32_pracc_write_mem_generic().
Cache synchronization is not performed.
If configured as write back cache there is no chance to execute the
handler. If configured as write through cache and the cache
lines written to are not cache resident (I-side cache miss) may work.
The patch makes possible to execute the handler in a cached active
memory segment (mainly from KSEG0), but nothing else. The data
is still loaded without performing cache synchronization, code loaded
may not be executable.
Performance may not be faster. At start, for example, the code resides in
main memory, not in cache, and the core must transfer code from
memory. We can really modify the code to force a wait for the first
transfer like we do with start and end addresses, making sure the code
is cache resident for the rest of the queued transfers.
This can also may happen if we execute code (greater than the I cache size)
and the handler code is evicted from the cache.
Code tested on ar7241.

Change-Id: Iffdb4dae108b872fef0e7bacc5ea99649cdc1630
Signed-off-by: Salvador Arroyo <sarroyofdez@yahoo.es>
Reviewed-on: http://openocd.zylin.com/1564
Tested-by: jenkins
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
src/target/mips32_pracc.c