UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 52032

Zynq-7000 SoC, APU - 带有 DMB 指示的短回路可能导致试图执行 CP15 广播操作的另一个处理器上的服务拒绝

描述

带有 DMB 指示的短回路可能导致试图执行 CP15 广播操作的另一个处理器上的服务拒绝.

解决方案

该问题的出现,必须具备以下条件:

- 两个处理器都运行在 SMP 模式下 (ACTLR.SMP=1)
- 其中一个处理器连续执行一个包含至少一个 DMB 指令的短回路。此外,短回路还必须满足以下所有附加条件:

  •        除了 DMB 之外,在每个 DMB 之间执行的指令不超过 10 个
  •        在每个 DMB 之间不执行非条件加载或存储,也不执行通过条件代码检查的条件加载或存储。

- 另一个处理器执行一个广播的 CP15 维护操作。这需要处理器启用 CP15 操作的广播 (ACTLR.FW=1)

所有这些条件都满足时,短回路会生成一个连续的 DMB 指令流。这可能会阻止执行短回路的处理器执行接收到的广播 CP15 操作,从而导致拒绝服务。因此,最初执行广播 CP15 操作的处理器会被停止,直到回路执行中断。

请注意,发出 CP15 广播操作的过程无法完成该操作,因此无法进入任何调试模式,也无法采取任何中断措施。如果执行短回路的处理器也不能中断,例如,如果它已禁用中断,或者如果没有中断路由至该处理器,该错误可能会导致系统活锁。

 
影响:
很小。该错误可能会产生性能问题,在最糟糕的情况下,如果执行 DMB 的处理器处于一个无法中断的无限回路中,它可能还会导致系统活锁。但这种情况很少见,而且也有解决方法。
解决方法:
将无正式文档的诊断控制寄存器的位元[4]设置为 1,可解决该问题。 参考解决详情以获得更多信息。
受影响的配置:
使用 CPU 的系统。
受影响的器件修订版本:全部。无计划修复。参考 (Xilinx Answer 47916) - ZynqZynq-7000 SoC 器件修订版本差异答复记录。


解决方法详情

将无正式文档的诊断控制寄存器的位元[4]设置为 1,可解决该问题。 该寄存器编码为 CP15 c15 0 c0 1。这个比特位只能在安全状态下通过下列读取-修改-写入代码序列写入:

MRC p15, 0, rt, c15, c0, 1
ORR  rt, rt, #0x10
MCR p15, 0, rt, c15, c0, 1


设置该比特位会导致 DMB 指令被解码并像 DSB 一样执行。

使用这个软件解决方法不会影响典型代码库中处理器的整体性能。

此外,该问题还可通过执行以下任何一种操作来解决:

  •  在每个 DMB 之间插入一个非条件加载或存储指令
  •  在该回路中插入 NOP 等其它指令,可避免处理器发现连续的 DMB 指令。
  • 让处理器执行短回路需要定期中断。

链接问答记录

主要问答记录

Answer Number 问答标题 问题版本 已解决问题的版本
47916 Zynq-7000 SoC 器件:芯片修订差异 N/A N/A
AR# 52032
日期 06/13/2018
状态 Active
Type 设计咨询
器件
的页面