Software Cache Coherency and the MPC745x G4 Procs

Boerner, Brian bmb at pirus.com
Fri Jun 28 06:44:00 EST 2002


Hi Everyone. First Time Caller.. Short Time Listener.

I have a question about doing software cache coherency on the MPC745x G4 processors. It appears MOT in all it's infinite wisdom has removed the dcbi, or rather changed the dcbi, instruction. The old instruction simply used to invalidate the cache line. Now it appears to do the same thing as the dcbf instruction. So, rather than simply invalidating the cache, it flushes it and the reader gets the invalid cache line.

I'm just getting my feet wet again in the embedded Linux space and was wondering how Linux is handling this? Looking in the source tree, I have found the following routine that appears to be used for software cache coherency:

/*
 * Like above, but invalidate the D-cache.  This is used by the 8xx
 * to invalidate the cache so the PPC core doesn't get stale data
 * from the CPM (no cache snooping here :-).
 *
 * invalidate_dcache_range(unsigned long start, unsigned long stop)
 */
_GLOBAL(invalidate_dcache_range)
        li      r5,L1_CACHE_LINE_SIZE-1
        andc    r3,r3,r5
        subf    r4,r3,r4
        add     r4,r4,r5
        srwi.   r4,r4,LG_L1_CACHE_LINE_SIZE
        beqlr
        mtctr   r4

1:      dcbi    0,r3
        addi    r3,r3,L1_CACHE_LINE_SIZE
        bdnz    1b
        sync                            /* wait for dcbi's to get to ram */
        blr


This too is using the dcbi instruction, which simply isn't going to do what the author intended it to do. According to Motorola, there is no replacement for dcbi. Does anyone have a theory on how to do software cache coherency. I know that some of the memory controllers will maintain cache coherency through snooping, but in certain applications, I need to control it from software.

Thanks.
-Brian

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-embedded mailing list