edpc

1. DPC 配置 (DPC_CAP_CONTROL_OFF, B+0x4)

  • DPC_DL_ACTIVE_ERR_COR--0b--禁用。通常不需要在链路激活时产生 ERR_COR 消息。
  • DPC_DPC_SW_TRIGGER--0b--初始化时保持为 0。仅在需要手动触发 DPC 错误注入验证时写 1。
  • POISON_TLP_EGR_BLOCK_EN--1b--开启。阻断带毒(Poisoned)报文向下游传播,防止错误扩散。
  • DPC_DPC_ERR_COR_EN--1b--开启。当 DPC 被触发时,向系统发送一条 ERR_COR 消息作为通知。
  • DPC_DPC_INT_EN--1b--开启。启用 DPC 中断,使固件/驱动能接收到 DPC 事件通知。
  • DPC_DPC_CPL_CNTRL--1b--设置为 UR (Unsupported Request)。当 DPC 触发导致链路断开时,根端口自动向 CPU 返回 UR 状态。这能防止 CPU 因等待 PIO 响应而发生 Completion Timeout (CTO)。
  • DPC_DPC_TRIG_EN--10b

    触发策略

    - 01b:检测到非屏蔽非致命或致命错误时触发。

    - 10b仅在致命错误 (ERR_FATAL) 时触发(推荐,更稳定)。

2. eDPC (RP PIO) 配置

如果 DPC_RP_EXT_DPC 为 1,需配置以下寄存器

  • DPC_RP_PIO_MASK_OFF (B+0x10):设置0x00000000,取消所有屏蔽

  • DPC_RP_PIO_SEVERITY_OFF (B+0x14)设置严重程度。将 MEM_CTO (位18)、IO_CTO (位10)、CFG_CTO (位2) 设为 Fatal (1b)。这样当设备挂死导致读写超时时,能直接触发 DPC

  • DPC_RP_PIO_SYSERROR_OFF (B+0x18):设置0x00000000,防止配置PIO 错误应上报为系统错误。

 

误注入方案

  1. 读-改-写:读取 DPC_CAP_CONTROL_OFF (B+0x4) 的值。

  2. 置位:将 位 22 (DPC_DPC_SW_TRIGGER) 置为 1

  3. 写回:将修改后的值写回寄存器。

 

2. eDPC / RP PIO 错误注入 (针对 Root Port PIO)

  • PIO 读写超时/非法响应

    • 通过 CPU 对一个不存在的下游设备地址空间进行读操作(PIO Read)。

    • 预期结果DPC RP PIO Status Register 记录错误,固件能够从 DPC RP PIO Header Log 中读取导致故障的报文信息。

posted @ 2025-12-07 21:50  qiuqiu95  阅读(52)  评论(0)    收藏  举报