SWRZ150A December   2024  – October 2025 AWR2544

 

  1.   1
  2. 1Introduction
  3. 2Device Nomenclature
  4. 3Device Markings
  5. 4Advisory to Silicon Variant / Revision Map
  6. 5Known Design Exceptions to Functional Specifications
    1.     MSS#25
    2.     MSS#27
    3.     MSS#28
    4.     MSS#29
    5.     MSS#30
    6.     MSS#33
    7.     MSS#40
    8. 5.1  MSS#49
    9. 5.2  MSS#52
    10. 5.3  MSS#53
    11. 5.4  MSS#54
    12. 5.5  MSS#55
    13. 5.6  MSS#56
    14. 5.7  MSS#57
    15. 5.8  MSS#58
    16. 5.9  MSS#59
    17. 5.10 MSS#60
    18. 5.11 MSS#61
    19. 5.12 MSS#62
    20. 5.13 MSS#63
    21. 5.14 MSS#64
    22. 5.15 MSS#65
    23.     MSS#68
    24.     MSS#71
    25. 5.16 ANA#12A
    26.     ANA#37A
    27.     ANA#39
    28.     ANA#43
    29.     ANA#44
    30.     ANA#45
    31.     ANA#47
    32.     ANA#59
  7.   Trademarks
  8. 6Revision History

MSS#64

L2 Cache Corruption during block and global coherence operations issue

Revision(s) Affected:

AWR2544

Description:

Under a specific set of circumstances, L1D or L2 block and global coherence operations can cause L2 cache corruption. The problem arises when the following four actions happen back-to-back in the same L2 set:

  1. L1D write miss
  2. Invalidate or writeback-with-invalidate due to block and global coherence operations
  3. Write allocate for some address
  4. Read or write allocate for some address

This issue applies to all the block and global coherence operations EXCEPT:

  • L1D block writeback
  • L1D global writeback
  • L2 block writeback
  • L2 global writeback

See also: Advisory 63 - Potential L2 Cache Corruption During Block Coherence Operations Issue

Workaround(s):

Generic Workaround:

The workarounds below are very generic and may have performance impacts. Customers are requested to understand the application and see which one suits them better.

Workaround #1:

This workaround requires that the memory system be idle during the block and global coherence operations. Hence programs must wait for block and global coherence operations to complete before continuing. This applies to L1D and L2 memory block and global coherence operations.

To issue a block coherence operation, follow the sequence below:

  1. Disable interrupts.

  2. Write the starting address to the corresponding BAR register.

  3. Write the word count to the corresponding WC register

  4. Wait for completion by one of the following methods:

    1. Issue an MFENCE instruction (preferred)

    2. Poll the WC register until the word count field reads as 0

  5. Perform 16 NOPs

  6. Restore interrupts

To issue a global coherence operation, follow the sequence below:

  1. Disable interrupts.

  2. Write 1 to the corresponding global coherence register (L1DINV, L1DWBINV, L2DINV, and L2DWBINV)

  3. Wait for completion by one of the following methods

    1. Issue an MFENCE instruction (preferred)

    2. Poll the corresponding global coherence register (L1DINV, L1DWBINV, L2DINV, and L2DWBINV) until the bit [0] field reads as 0

  4. Perform 16 NOPs

  5. Restore interrupts

Workaround #2:

This workaround is also generic, but will allow CPU traffic to go on in parallel with cache coherence operations. To issue a block coherence operation, follow the sequence below:

  1. Issue a MFENCE command.

  2. Freeze L1D cache

  3. Start L1D WBINV

  4. Restart CPU traffic (CPU operations happen in parallel with WBINV and do not need to wait for cache coherency operation to complete)

  5. Poll the WC register until the word count field reads as 0.

  6. WBINV completes when word count field reads 0

  7. Issue an MFENCE command.

  8. Unfreeze L1D cache.

For more information about the cache control registers (BAR, WC, L1DINV, L1DWBINV, L2DINV, and L2DWBINV) see the TMS320C66x DSP CorePac User Guide (SPRUGW0). The MFENCE instruction is new to the C66x DSP. It stalls the DSP until all outstanding memory operations complete. For further information about the MFENCE instruction, see the C66x DSP and Instruction Set Reference Guide (SPRUGH7).