Processor Used: c6472.
We have a situation where we suspect we could be hitting a L1D to L2 cache coherency issue but not sure.
We use all of L1D as cache. We have a (temporary) processing buffer (significant size) in LL2. The final output buffer is in DDR2. We use EDMA3 to transfer the processed output from LL2 to DDR2 and then clear the LL2 for next round of processing.
We are seeing an intermittent artifact and What we are not sure is if somehow L1D cache could be overwriting the cleared LL2 buffer (LL2 got written over by the L1D cached contents because it needed a new line to be assigned to L1D cache).
However reading SPRU871 it doesn't look like that should be happening.
This is what I am referring to in SPRU871.
3.3.6 Cache Coherence Protocol
The C64x+ L1D cache remains coherent with respect to DMA activity in L2 RAM. To support this
paradigm, the L1D cache accepts cache coherence commands arriving from L2.
3.3.6.1 L2 to L1D Cache Coherence Protocol
To support L1D cache coherence with respect to DMA/IDMA traffic in L2 RAM, the L1D controller supports
two cache coherence commands arriving from L2: snoop-read (SNPR) and snoop-write (SNPW). The L2
only sends these snoop commands, when necessary, in response to DMA and IDMA activity in L2 RAM.
Snoop-read is sent to L1D when L2 detects that the L1D cache holds the requested line, and that the line
is dirty. L1D responds by returning the requested data.
Snoop-write is sent to L1D when L2 detects that the L1D holds the requested line. It does not matter if the
line is modified within L1D. The L1D updates its contents accordingly.
Will appreciate any help you can provide in clarifying the above.
Thanks,
Somnath Banik