中断聚合环 - 4.0 简体中文

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

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

对于间接中断,它会进行中断聚合。以下是中断聚合的一些限制。

  • 每个中断聚合环只能与一个功能关联。但是多个环可与同一功能关联。
  • 中断引擎最多支持来自同一源的三个中断,直至软件对中断进行处理。

中断引擎采用以下步骤处理间接中断。

  • 中断源会提供它所属的中断环的索引。
  • 读取该队列的中断上下文。
  • 写入中断聚合环。
  • 传出 PCIe MSI-X 报文。

下图显示了间接中断模块框图。

图 1. 间接中断

中断上下文包含中断聚合环的信息。它有 256 个条目,最多支持 256 个中断聚合环。

由于添加了颜色位,因此软件仅读取它应读取的条目。当软件为中断聚合环分配存储器空间时,coal_color1'b0 开头。软件需要将中断上下文的颜色位初始化为 1'b1。当硬件完成整个环并在下一轮中翻转到第一个条目时,它还会将颜色值翻转为 0 并开始在颜色位空间中写入 0。软件在完成最后一个颜色值为 1 的条目后也同样执行此操作,在第二轮中转到第一个条目,预期的颜色值为 0。如果软件没有找到指示旧条目的颜色值 0,则会等待颜色值为 0 的新条目出现。

软件读取中断聚合环以获取 Qidint_type(H2C 或 C2H)。通过 Qid,软件可以确定队列是串流还是 MM。

中断聚合环中的 stat_desc 是来自中断源的状态描述符。如果状态描述符已禁用,软件可从中断聚合环获取状态描述符信息。

这其中可能有两种情况:

  • 中断源为 C2H 串流。然后,它是 C2H 完成环的状态描述符。软件可读取 C2H 完成环的 pidx
  • 中断源为其它(H2C 串流、H2C MM、C2H MM)。然后,它是该源的状态描述符。软件可读取 cidx

最后,中断引擎使用来自中断上下文的中断矢量传出 PCIe MSI-X 报文。当存在来自任何源的中断时,中断引擎会更新 PIDX 并检查该中断上下文的 int_st。如果 int_st 为 0 (WAITING_TRIGGER),那么中断引擎将发送中断。如果 int_st 为 1 (ISR_RUNNING),那么中断引擎将不发送中断。如果中断引擎发送中断,它会将 int_sts 更新为 1,一旦软件更新 CIDX,并且 CIDX 与 PIDX 匹配,就会清除 int_sts。此进程说明如下。

当主机接收到 PCIe MSI-X 中断时,软件将读取中断聚合环以确定需要处理哪个队列。软件读取环后,会对软件 CIDX 执行动态指针更新,以指示软件读取的累积指针。软件使用寄存器 QDMA_DMAP_SEL_INT_CIDX[2048] (0x18000) 进行动态指针更新。如果软件 CIDX 等于 PIDX,这将触发写入中断上下文,以针对该队列的中断状态清除 int_st。这是为了向 QDMA 表明,软件已读取中断聚合环中的所有条目。如果软件 CIDX 不等于 PIDX,中断引擎将传出另一条 PCIe MSI-X 报文。因此,软件可再次读取中断聚合环。之后,软件可对中断源环进行指针更新。例如,如果是 C2H 串流中断,那么软件将更新中断源环(即 C2H 完成环)的指针。

以下是针对软件的步骤:

  1. 软件收到 PCIe MSI-X 报文后,会读取中断聚合环条目。
  2. 软件使用 coal_color 位来识别写入的条目。每个条目都有 QidInt_type(H2C 或 C2H)。通过 QidInt_type,软件可以检查它是串流还是 MM。这样会指向对应的源环。例如,如果是 C2H 串流,则源环是 C2H 完成环。然后,软件可读取源环以获取信息,之后对源环进行动态指针更新。
  3. 软件读取完中断聚合环中所有写入的条目后,会使用寄存器 QDMA_DMAP_SEL_INT_CIDX[2048] (0x18000) 对软件 cidx 进行动态指针更新。这将传递到软件所使用中断聚合环指针的硬件。

    如果软件 cidx 不等于 pidx,硬件将传出另一条 PCIe MSI-X 报文,以使软件可再次读取中断聚合环。

软件使用寄存器 QDMA_DMAP_SEL_INT_CIDX[2048] (0x18000) 对中断聚合环进行动态指针更新时,会发送中断聚合环的环索引。

下图显示了间接中断流程。中断模块获取中断请求。它首先写入中断聚合环。然后等待写入完成。此后,它会传出 PCIe MSI-X 报文。中断请求可不断传入,中断模块会持续对其进行处理。同时,软件读取中断聚合环,并进行动态指针更新。如果软件 CIDX 不等于 PIDX,它将传出另一条 PCIe MSI-X 报文。