Flit Performance Measurement Extended Capability
Flit Performance Measurement Extended Capability
该 capabilities 是可选的,允许在 Downstream Port,Upstream Port 的 Function 0 和RCRBs 中实现,在其它 function 中不允许实现。由于是 Gen6 新增的,该 capability 只在Flit Mode 中使用,在 Non-Flit Mode 中使用无效。并且该 capability 中的 LTSSM Performance Status 1 到 LTSSM Performance Status 5 是可选的,具体支持的个数在该capability 的 Flit Performance Measurement Capability 寄存器的 LTSSM Tracking Register Count 字段指示。没有实现的寄存器是不存在的。该capability的结果如下图所示:

Flit Performance Measurement Extended Capability Header (Offset 00h)

| 比特位置 | 寄存器描述 | 属性 |
|---|---|---|
| bit[15:0] | Flit Performance Measurement Extended Capability ID – PCI-SIG 定义的ID号,用以标志是什么能力 Flit Performance Extend Capability 的 Extended Capability ID 是0033h |
RO |
| bit[19:16] | Capability Version, PCI-SIG 组织定义的 Capability 结构版本号,对于 pcie6,该字段必须是 1h | RO |
| bit[31:20] | Next Capability Offset 下一个 Capablity 的偏移,该字段表明下一个 PCI Express Capability 结构的偏移地址,如果在 Capabilities 链表中,后面不存在其他的 capability,则该字段为 000h 如果在配置空间中实现了 Extended Capabilities,该偏移是相对于PCI-兼容的配置空间,该值要么是 000h (capabilities的结束) 或者大于 0FFh (传统的PCI配置空间最大地址) |
RO |
Flit Performance Measurement Capability Register (Offset 04h)

| 比特位置 | 描述 | 属性 |
|---|---|---|
| bit[9:0] | Flit Performance Interrupt Vector ,中断向量,包含 MSI 或者 MSI-X 向量号 如果 MSI 和 MSI-X 都实现了,基于哪一种使能,该字段允许改变其值。此外,当使能 MSI 时,基于 Multiple Message Enable 的值(Message Control 寄存器的比特 6:4,决定分配向量的个数) ,该字段允许改变其值。 |
RO |
| bit[12:10] | LTSSM Tracking Register Count, 表明支持允许追踪的LTSSM变化事件。其值在 0 到 5 | Hwinit |
Flit Performance Measurement Control Register (Offset 08h)
该寄存器的字段分布如下图

| 比特位置 | 描述 | 属性 |
|---|---|---|
| bit[0] | Flit Latency Measurment Enable – 使能位,当把该比特设置为1时,开始测试一个发送一个 Flit 到收到该 Flit 对应的Ack/Nak/Replay 的延时。当在测试时,把该比特写 0 会停止测试并且会把 Flit Latency Tracking Status 字段设置为 10b。当该比特已经是 1,在写 1 是无效的 测试延迟的单位是 8ns,默认值为0 |
RW |
| bit[3:1] | Flit Response Type – Flit 响应类型,设置相应的比特为 1,可以开始测试一个 Flit 到收到该笔 Flit ack 的延迟或者 Flit 到收到该笔 Flit 的 Nak 延迟或者 Flit 到说到该笔 Flit replay 的延迟。如果在测试过程中,该字段发生了变化,其行为是未定义的,如果 Flit Latency Measurement Enable 已经为 1,并且该字段的编码为保留,其行为也是为定义的。 001b Flit to Ack Latency, 在相同的链路宽度下,测试发送一笔原始的Flit到接收到该笔 Flit 的 Ack 的延时。重传的Flit 不包含测试范围内,隐式的 Ack 也不算在测试范围内(不是每一笔 Flit 都需要回 Ack) 010b Flit to Nak Latency, 在相同的链路宽度下,测试发送原始 Flit 到接收到该笔 Flit 的 Nak 之间的延时。同样不包含重传的 Flit 或者隐式的 Nak 100b Nak to Replay Latency – 在相同的链路宽度下,对应特定的 sequence number,测试发送第一个包含 Nak的 Flit 到收到第一笔对应 replay FLit 的延迟 其它 保留 默认值为0 |
RW |
| bit[5:4] | 保留,该比特允许实现为RsvdP或者无任何效果的RW,如果实现为RW,则默认值为0,pcie 6.0协议是有的,在6.2时删了 | RsvdP/RW |
| bit[10:6] | Number Of instance to track, 追踪的数量 0 0000b 追踪最坏情况下的延迟,一直测试,直到Flit Latency Measurement Enable被清除 其它 追钟该比特指示数量 Flit 的累计延迟 在测试过程中,该比特的值如果发生了变化,其行为是未定义的 当该比特为 0 时,当 Flit Latency Measurement Enable 被清掉时,测试完成 当该比特非 0 时,测试的 Flit 个数等于该值时,测试完成 |
RW |
| bit[13:11] | Interrupt if delay for any tracked Flit exceeds this encoded value, 如果任何一个追踪的 Flit 的延迟超过该编码的值,就产生中断 000b 000b – 不产生中断 001b 100ns 010b 200ns 011b 300ns 其它 保留 在测试过程中,如果该字段的值发生了该变,行为是未定义的,默认值为 0 |
RW |
| bit[18:14] | LTSSM State Transition Tracker,用于追踪 LTSSM 的变化,每一比特表示追钟一个独立的事件. bit[14] L0 到 Recovery,Framing Error或者在L0时软件发起bit[15] L0p, 在 upconfig 中,在 lane 上从Electrical Idle 到开始传输数据流。NOTE : 降 lane 不会追踪bit[16] L1.0 到 L0bit[17] L1.1 到 L0bit[18] L1.2 到 L0如果该字段得值大于 LTSSM Tracking Register Count 的值,则行为是未定义的,默认是0 |
RW |
| bit[23:19] | Number of Instance to track for LTSSM transition,追踪 LTSSM 转换的次数. 0 0000b 追踪最坏情况的延迟,一直追踪,直到关闭测试 其它值 该字段表示的总的延迟 默认值是0 |
RW |
| bit[26:24] | LTSSM State Transition Tracker Interrupt 如果bit[16:14] 的指示的任意一个事件的延迟超过了该编码字段编码的值,就产生中断 000b 不产生中断 001b 6.4ms 010b 12.8ms 011b 19.2ms 其它 保留 默认值为0 |
RW |
| bit[29:27] | LTSSM State Transition Tracker L12 PM Substate Interrupt – 如果bit[18:17] 指示的任意一个事件的延迟超过了该字段编码表示的延迟,就产生中断 000b 不产生中断 001b 1s 010b 2s 011b 3s 100b 4s 101b 5s 110b 10s 111b 保留 默认值为0 |
RW |
Flit Performance Measurement Status Register (Offset 0Ch)

| 比特位置 | 寄存器描述 | 属性 |
|---|---|---|
| bit[1:0] | Flit Latency Tracking Status,Flit Latency追踪状态 00b 未开始 01b 开始了 10b 完成 11b 完成了但是有错误(计数溢出) 默认值为0 |
RO |
| bit[6:2] | Flit Latency Tracking, 该字段表示已跟踪并记录在 Flit 延迟跟踪计数器中的 Flit 的确切数量。记录到最大值后不会从0开始 当 Number of instances to track 是非 0 值时,该值小于等于 Number of instances to track 字段 当 Number of instances to track 是 0 时,该字段可能包含任何值 如果 Flit Latency Tracking Status 是 11b ,该字段是未定义的 默认值为 0 |
RO |
| bit[7] | Interrupt generated based on trigger event, 基于触发事件的中断,如果 Flit Latency 大于设置的值后产生了中断,则该比特设置 1,当该比特设置为 1 后,不允许再次基于触发事件产生中断 | RW1C |
| bit[23:8] | Flit Latency Tracking Counter 如果 Number of instances to track 是非 0 值,该字段表示所有追踪过的 flit 的总延迟值,软件可以用该值除以 Flit Latency Tracking 字段来获得平均延迟 如果 Number of instance to track 是 0,该字段表示最大延迟值,即只要还在测试期间,该值会一直加。 如果 Flit Latency Tracking Status 是11b,该字段是未定义的。 测量的单位是8ns(pcie7.0正式版以修改为8ns,其它版本不一定是这个值),默认值是0 |
RO |
LTSSM Performance Measurement Status Register (Offsets 10h to 20h)
下面的寄存器最多支持 5 个。每个寄存器支持追踪一种 LTSSM 状态转变。如果支持多个事件,则关联顺序基于控制寄存器中启用的位。在对某一类事件进行测量时,软件不能在使能其它测试 LTSSM 状态转变的位(也就是说需要测试的 LTSSM 状态跳转要在测试前就配置好,测试后不允许在更改)。
可以追踪多少个状态机变化事件,就需要实现多个寄存器,寄存器的先后顺序来源于 LTSSM State Transition Tracker 中比特使能情况,而不是固定第几个状态寄存器就记录第几个事件
ig 如果需要追踪
L0到Recovery和L1.0到L0,那么需要实现两个寄存器来记录,10h 就是记录L0到Recovery跳转相关信息的。14h 地址的寄存器就是记录L1.0到Recovery跳转相关信息的

| 比特位置 | 寄存器描述 | 属性 |
|---|---|---|
| 1:0 | LTSSM State Transition Tracking Status 00b 未开始 01b 开始了 10b 完成了 11b 有错(包括计数器溢出) 当 Flit Latency Measurement Enable 从 0 到 1 转变时会清掉改比特 默认值是 0 |
ROS |
| 6:2 | LTSSM State Transition Tracking – 在当前测试追踪类型下, LTSSM 状态跳转的次数 该值达到最大后,不会变为 0 当 Flit Latency Measurement Enable 从 0 到 1 时清掉 默认值是 0 |
ROS |
| 7 | Interrupt generated based on trigger event count due to LTSSM State Transition Tracking – 当状态跳转的时间超过设定编码对应的值后,就触发中断。当该值已经设置后,不允许基于触发事件产生新的中断 默认值是 0 |
RW1CS |
| 23:8 | LTSSM State Transition Tracking Counter 测量单位是 64us 当 Flit Latency Measurement Enable 从 0 变为 1 时,清掉该值 默认是 0 |
ROS |
感谢您的支持,请扫码打赏