ZHCZ054A December 2024 – October 2025 AWR2544
块和全局一致性操作期间的 L2 缓存损坏问题
AWR2544
在一组特定的情况下,L1D 或 L2 的块和全局一致性操作可能导致 L2 缓存损坏。当同一 L2 组中连续发生以下四个操作时,会引发该问题:
该问题适用于所有块和全局一致性操作,但以下操作除外:
通用权变措施:
以下权变措施具有通用性,但可能影响性能。建议客户理解应用场景,然后选择更适合的方案。
权变措施 1:
此权变措施要求内存系统在块和全局一致性操作期间保持空闲状态。因此,程序必须等待块和全局一致性操作完成后才能继续执行。这适用于 L1D 和 L2 内存块以及全局一致性操作。
要发出块一致性操作,请按照以下顺序操作:
禁用中断。
将起始地址写入相应的 BAR 寄存器。
将字计数写入相应的 WC 寄存器
通过以下任一方式等待操作完成:
发出 MFENCE 指令(首选)
轮询 WC 寄存器,直到字计字段读数为 0
执行 16 个 NOP
恢复中断
要发出全局一致性操作,请按照以下顺序操作:
禁用中断。
向相应的全局一致性寄存器(L1DINV、L1DWBINV、L2DINV 和 L2DWBINV)写入 1
通过以下任一方式等待操作完成
发出 MFENCE 指令(首选)
轮询相应的全局一致性寄存器(L1DINV、L1DWBINV、L2DINV 和 L2DWBINV),直到位 [0] 字段读取为 0
执行 16 个 NOP
恢复中断
权变措施 2:
此变通办法同样具有通用性,但允许 CPU 事务与缓存一致性操作并行执行。要发出块一致性操作,请按照以下顺序操作:
发出 MFENCE 命令。
冻结 L1D 缓存
启动 L1D WBINV
重新启动 CPU 事务(CPU 操作与 WBINV 并行执行,无需等待缓存一致性操作完成)
轮询 WC 寄存器,直到字计字段读数为 0。
当字数统计字段读数为 0 时,WBINV 完成
发出 MFENCE 命令。
解冻 L1D 缓存。
有关缓存控制寄存器(BAR、WC、L1DINV、L1DWBINV、L2DINV 和 L2DWBINV)的更多信息,请参阅《TMS320C66x DSP CorePac 用户指南》(SPRUGW0)。MFENCE 指令是 C66x DSP 的新增指令。该指令会使 DSP 暂停,直至所有未完成的内存操作执行完毕。有关 MFENCE 指令的更多信息,请参阅《C66x DSP 和指令集参考指南》(SPRUGH7)。