Digi NS9215 Computer Hardware User Manual


 
. . . . .
WORKING WITH THE CPU
Noncachable instruction fetches
www.digiembedded.com 135
recommended that either a nonbuffered store (STR) or a noncached load
(
LDR) be used to trigger external synchronization.
4 Invalidate the cache. The ICache must be invalidated to remove any stale
copies of instructions that are no longer valid. If the ICache is not being used,
or the modified regions are not in cachable areas of memory, this step might
not be required.
5 Flush the prefetch buffer. To ensure consistency, the prefetch buffer should be
flushed before self-modifying code is executed (see “Self-modifying code” on
page 133).
Sample IMB
sequences
These sequences correspond to steps 1–4 in "IMB operation."
clean loop
MRC p15, 0, r15, c7, c10, 3 ; clean entire dcache using test and clean
BNE clean_loop
MRC p15, 0, r0, c7, c10, 4 ; drain write buffer
STR rx,[ry] ; nonbuffered store to signal L2 world to
; synchronize
MCR p15, 0, r0, c7, c5, 0 ; invalidate icache
This next sequence illustrates an IMB sequence used after modifying a single
instruction (for example, setting a software breakpoint), with no external
synchronization required:
STR rx,[ry] ; store that modifies instruction at address ry
MCR p15, 0, ry, c7, c10, 1 ; clean dcache single entry (MVA)
MCR p15, 0, r0, c7, c10, 4 ; drain write buffer
MCR p15, 0, ry, c7, c5, 1 ; invalidate icache single entry (MVA)