summaryrefslogtreecommitdiff
path: root/src/xsvf/xsvf.c
diff options
context:
space:
mode:
authorMike Dunn <mikedunn@newsguy.com>2010-03-20 10:53:47 -0400
committerØyvind Harboe <oyvind.harboe@zylin.com>2010-03-22 08:28:19 +0100
commit4be9eded7f723af8fe755b1ef62469e87d1003bc (patch)
tree9760c11181f3b8b2156f8dac7105eb7c8602dcc0 /src/xsvf/xsvf.c
parentccfaed8bc7936d7a1640bf69df52ac65ca38e298 (diff)
downloadopenocd+libswd-4be9eded7f723af8fe755b1ef62469e87d1003bc.tar.gz
openocd+libswd-4be9eded7f723af8fe755b1ef62469e87d1003bc.tar.bz2
openocd+libswd-4be9eded7f723af8fe755b1ef62469e87d1003bc.tar.xz
openocd+libswd-4be9eded7f723af8fe755b1ef62469e87d1003bc.zip
fix software breakpoints on xscale
This patch fixes xscale software breakpoints by cleaning the dcache and invalidating the icache after the bkpt instruction is inserted or removed. The icache operation is necessary in order to flush the fetch buffers, even if the icache is disabled (see section 4.2.7 of the xscale core developer's manual). The dcache is presumed to be enabled; no harm done if not. The dcache is also invalidated after cleaning in order to safeguard against a future load of invalid data, in the event that cache_clean_address points to memory that is valid and in use. Also corrected a confusing typo I noticed in a comment. TODO (or not TODO...?): the xscale's 2K "mini dcache" is not cleaned. This cache is not used unless the 'X' bit in the page table entry is set. This is a proprietary xscale extension to the ARM architecture. If a target's OS or executive makes use of this for memory regions holding code, the breakpoint problem will persist. Flushing the mini dcache requires that 2K of valid cacheable memory (mapped with 'X' bit set) be designated by the user for this purpose. The debug handler that gets downloaded to the target will also need to be extended.
Diffstat (limited to 'src/xsvf/xsvf.c')
0 files changed, 0 insertions, 0 deletions