Specifications

Silicon Updates
SPRZ293A—November 2009 TMS320C6457 Fixed-Point Digital Signal Processor Silicon Errata 21
www.ti.com
Submit Documentation Feedback Silicon Revisions 1.0, 1.1, 1.2, 1.3, 1.4 .
Workaround 2: Make DMA Buffers Dirty After Use
The errant snoop-write occurs only when the DMA buffer in L1D has not been
modified. This is due to the additional snoop checking mechanisms associated with
tracking victims as they leave L1D.
Therefore, another workaround is to mark DMA buffers as dirty before releasing them.
This will generate additional victims whenever the buffer gets pushed out of L1D. It will
also block the errant snoop-write.
This workaround assumes a similar model to workaround #1. In place of
l1d_block_wbinv(), call the function make_dirty() provided in section of Appendix
A—Code Examples. The make_dirty() function reads one byte from each cache line of
the buffer and writes the same value back to it immediately.
The function is called as follows:
void make_dirty(void *base, size_t byte_count);
Note—This workaround is not acceptable if the DMA could be writing to the
buffer at the same time make_dirty() gets called. The process of making the
cache line dirty requires reading and writing within the buffer and so the CPU
writes could overwrite the inbound data from the DMA.
Note—Please see Advisory 8. “DMA Corruption of L2 Ram Data” for more
information. This workaround may cause the application to be affected by that
issue.
Workaround 3: Do Not Cache Data from External Memory in L1D
If the user’s program only makes a small number of data accesses to external memory,
consider marking the data portions of external memory as non-cacheable. This
prevents caching copies of external memory in L1D cache.
Alternately, freeze the L1D cache around each access to an external address, to prevent
the line from allocating in L1D. The long_dist_load_word function (please see the code
listing for ldld.asm provided in section of Appendix A—Code Examples) is suitable
for isolated accesses. For larger accesses, such as reading a block, other techniques may
be more appropriate.
The incorrect snoop-write only occurs when the L1D read miss involved is to an
external address. The snoop-write corrupts the newly cached copy in L1D. If all
accesses to external data memory are non-cacheable or occur while L1D is frozen, this
prevents copies from being stored in L1D.