]> git.sur5r.net Git - openocd/commit
fix software breakpoints on xscale
authorMike Dunn <mikedunn@newsguy.com>
Sat, 20 Mar 2010 14:53:47 +0000 (10:53 -0400)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Mon, 22 Mar 2010 07:28:19 +0000 (08:28 +0100)
commit4be9eded7f723af8fe755b1ef62469e87d1003bc
tree9760c11181f3b8b2156f8dac7105eb7c8602dcc0
parentccfaed8bc7936d7a1640bf69df52ac65ca38e298
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.
src/target/xscale.c