功能等级复位 - 4.0 简体中文

QDMA Subsystem for PCI Express v4.0 产品指南 (PG302)

Document ID
PG302
Release Date
2022-05-20
Version
4.0 简体中文

功能级别复位 (FLR) 机制支持软件按功能级别的粒度将端点硬件置于静止和复位状态。当 VF 复位时,仅复位与该 VF 关联的资源。当 PF 复位时,则复位 PF 的所有资源,包括其关联的 VF 的资源。由于 FLR 属特权操作,它必须由管理系统中运行的 PF 驱动程序来执行。

使用模式

  • 当功能发生连接和断开连接(即上电和下电)时,虚拟机管理器会请求 FLR。
  • 您可按如下方式请求 FLR:
    echo 1 > /sys/bus/pci/devices/$BDF/reset

    其中,$BDF 是目标功能的总线器件功能编号。

FLR 进程

完整的 FLR 进程涉及三个主要步骤。

  1. “Pre-FLR”(FLR 前):此步骤会复位目标功能的所有 QDMA 上下文结构、邮箱和用户逻辑。
    • 每个功能都有一个称为 MDMA_PRE_FLR_STATUS 的寄存器,用于保留功能的 FLR 前状态的记录。偏移的计算方式为 MDMA_PRE_FLR_STATUS_OFFSET = MB_base + 0x100,它位于功能的邮箱存储器空间的偏移 0x100 处。请注意,PF 和 VF 具有不同的 MB_base。MDMA_PRE_FLR_STATUS 的定义如下图表所示。
    • 软件将 1 写入目标功能的 MDMA_PRE_FLR_STATUS[0](位 0)以启动 FLR 前步骤。当 FLR 前步骤完成时,硬件会将 MDMA_PRE_FLR_STATUS[0] 清零。软件不断轮询 MDMA_PRE_FLR_STATUS[0],仅当它返回 0 时,才会继续下一个步骤。
    表 1. MDMA_PRE_FLR_STATUS 寄存器
    偏移 字段 读/写类型 宽度 默认 描述
    0x100 pre_flr_st RW 32 0

    [31:1] 保留。

    [0]: 1 表示启动 FLR 前步骤。

    [0]: 0 表示 FLR 前步骤完成。

    bit[0] 由驱动程序置位,由硬件清零。

  2. “Quiesce”(静止):软件必须确保所有待处理的传输事务均已完成。方法是轮询器件状态寄存器中的传输事务待处理位(位于 PCIe 配置空间内),直到该位清零或者在一段时间后超时为止。
  3. PCIe-FLR:PCIe-FLR 步骤会复位 PCIe 控制器中目标功能的所有资源。
    注释: 目标功能的启动功能级别复位位(PCIe 器件控制寄存器的位 15)应设为 1,以触发 PCIe 中的 FLR 进程。

OS 支持

如果 PF 驱动程序已加载并处于活动状态(即,使用模式为 1),则上述所有三个步骤均由驱动程序来执行。但对于 UltraScale+ ,如果用户要在加载 PF 驱动程序之前执行 FLR(按上述“使用模式”中定义的方式),我们提供了操作系统内核补丁,允许操作系统通过 //…/source/drivers/pci/quick.c 中定义的功能按正确顺序来执行 FLR 步骤。