PCIe协议翻译【第三章】【Data Link Layer Specification】

数据链路层是事务层和物理层之间的中间组件。它的主要职责是提供可靠的机制,用于在链路上的两个组件之间交换事务层数据包(TLP)。

3.1 Data Link Layer Overview

在这里插入图片描述
数据链路层负责将事务层提供的TLP可靠地传输到另一个组件的事务层。数据链路层提供的服务包括:

  • 数据交换
    - 接受从传输事务层传输的TLP并将它们传递到传输物理层
    - 接受通过链路从物理层接收的TLP并将其传递到接收事务层
  • 错误检测和重试
    - TIP序列号和LCRC生成
    - 用于数据链路层重发的TLP包存储
    - TLP和数据链路层包(DLLP)的数据完整性检查
    - 积极和消极应答DLLP
    - 错误报告和日志机制的错误指示
    - 链接应答超时重发机制
  • 初始化和电源管理
    - 跟踪链接状态并将活动/重置/断开状态传递到事务层

DLLPs:

  • 用于链路管理功能,包括TLP确认、电源管理和流控制信息交换
  • 在链路上两个直接连接的组件的数据链路层之间传输
  • DLLP在一个链路上的两个组件之间进行点对点发送。TLP可能通过一个或多个中间组件从一个组件路由到另一个组件。
  • DLLP和TLP的数据完整性检查是使用通过链路发送的每个数据包中包含的CRC来完成的。DLLP使用16位CRC,而TLP(可以比DLLP长得多)使用32位LCRC。TLP还包括序列号,用于检测一个或多个完整TLP丢失的情况。
  • 收到的未通过CRC检查的DLLP将被丢弃。使用DLLP的机制可能会因这种信息丢失而遭受性能损失,但可以自我修复,以便连续的DLLP将取代任何丢失的信息。
  • 未通过数据完整性检查(LCRC和序列号)或在从一个组件到另一个组件的传输中丢失的TLP将由发送器重新发送。发送器存储已发送的所有TLP的副本,在需要时重新发送这些副本,并仅在收到来自其他组件的无错误接收的肯定确认时清除这些副本。如果在指定时间段内未收到肯定确认,发送器将自动开始重新传输。接收者可以使用否定确认请求立即重新传输。

数据链路层表现为对事务层具有不同延迟的信息管道。在任何给定的单个链路上,送入发射数据链路层(1和3)的所有TLP将在稍后以相同的顺序出现在接收数据链路层(2和4)的输出处,如图3-1所示。延迟将取决于多种因素,包括管道延迟、链路的宽度和操作频率、链路上的电信号传输以及数据链路层重发引起的延迟。由于这些延迟,发射数据链路层(1和3)可以向发射事务层施加反压力,而接收数据链路层(2和4)将有效信息的存在或不存在传达给接收事务层。

3.2 Data Link Control and Management State Machine

数据链路层跟踪链路的状态。它与事务层和物理层通信链路状态,并通过物理层执行链路管理。数据链路层包含数据链路控制和管理状态机(DLCMSM)来执行这些任务。该状态机的状态如下所述,如图3-2所示。

状态:

  • DL_Inactive。物理层报告链路不可操作或没有连接到端口
  • DL_Feature (optional) 。物理层报告链路可运行,执行 Link Feature交换
  • DL_Init。物理层报告链路可操作,初始化默认虚拟通道VC0的流控制
  • DL_Active。正常操作模式

状态输出:

  • DL_Down。数据链路层与链路另一端的组件通信
  • DL_Up。数据链路层正在与链路另一端的组件通信

在这里插入图片描述

3.2.1 Data Link Control and Management State Machine Rules

规则

  • DL_Inactive
    • PCI Express hot、warm或冷重置后的初始状态(请参阅第6.6节)。请注意,DL状态不受FLR的影响(请参阅第6.6节)
    • 进入DL_Inactive后
      • 将所有数据链路层状态信息重置为默认值
      • 如果端口支持可选的 Data Link Feature ,则必须清除“Remote Data Link Feature Supported,”和“Remote Data Link Feature Supported Valid”有效字段
      • 丢弃数据链路层retry buffer的内容(请参阅第3.6节)
    • 处于DL_Inactive状态时
      • 向事务层以及数据链路层的其余部分报告DL_Down状态注意:这将导致事务层丢弃任何未完成的事务并在内部终止任何传输TLP的尝试。对于下游端口,这相当于“热移除”。对于上游端口,链路关闭相当于热重置(请参阅第2.9节)。
      • 丢弃事务层和物理层的TLP信息
      • 不生成或接受DLLP
    • 退出到DL_Feature状态,如果
      • 该端口支持可选的数据链路功能交换,数据链路功能交换启用位为设置,事务层指示软件未禁用该链路,物理层报告物理LinkUp = 1b
    • 退出到DL_lint状态,如果
      • 该端口不支持可选的数据链路功能交换,事务层指示该链路未被软件禁用,物理层报告物理LinkUp = 1。
      • 该端口支持可选的数据链路功能交换,数据链路功能交换启用位为清除,事务层指示软件未禁用该链路,物理层报告物理LinkUp = 1b
      • 上述2个条件取或
  • DL_Feature
    • 在DL_Feature中
      • 执行第3.3节中所述的数据链路功能交换协议
      • 报告DL_Down状态
      • 具有DL_Down状态的端口的数据链路层被允许丢弃任何收到的TLP,除非已经发送一个或多个ACK DLLP来确认这些TLP。
    • 退出到DL_lint状态,如果
      • 数据链路功能交换成功完成,物理层继续报告物理链路Up = 1b
      • 数据链路功能交换确定远程数据链路层不支持可选的数据链路功能交换协议,物理层继续报告物理LinkUp = 1b
      • 上述2个条件取或
  • DL_Init
    • 在DL_Init中
      • 遵循第3.4节中描述的流控制初始化协议,初始化默认虚拟通道VC 0的流控制
      • 处于FC_INIT1状态时报告DL_Down状态;处于FC_INIT2状态时报告DL_Up状态
      • 具有DL_Down状态的端口的数据链路层被允许丢弃任何收到的TLP,除非已经发送一个或多个ACK DLLP来确认这些TLP。
    • 退出到DL_Active状态,如果
      • 流量控制初始化成功完成,物理层继续报告物理LinkUp = 1b
    • 如果出现以下情况,则终止初始化VC 0的流控制的尝试并退出DL_Inactive
      • 物理层报告物理LinkUp = 0
  • DL_Active
    • DL_Active称为正常工作状态
    • 处于DL_Active状态时
      • 事务层和物理层接受并传输TLP信息
      • 生成和接受DLLP
      • 向事务和数据链路层报告DL_Up状态
    • 退出到DL_Inactive,如果
      • 物理层报告物理LinkUp = 0
      • 具有Surprise Down错误报告功能的下游端口(请参阅7.5.3.6部分)必须将从DL_Active到DL_Inactive的转换视为Surprise Down错误,除非以下情况下此错误检测被阻止:
        • 软件设置了桥控制寄存器的Secondary bus Reset
        • 软件设置了Link Disable
        • switch的下游端口因为上游端口的事件导致从DL_Active到DL_Inactive的转换不被视为错误。比如上游端口的Hot reset,上游链路转换到DL_Down,上游端口的Secondary bus Reset
        • 通过此端口发送OME_Turn_Off消息。
        • 关闭电源,复位,恢复链路的请求发送到物理层之前,不允许转换到DL_Inactive。
        • 如果PME_Turn_off/PME_TO_Ack握手失败,则可能会检测到Surprise Down。
        • 如果该端口和可热插入插槽关联,(Slot Capabilities寄存器的Hot-Plug Capable bit设置1),Hot-Plug Surprise bit设置1,那么任何到DL_Inactive的转换都不能被视为错误。
        • 如果该端口和可热插入插槽关联,(Slot Capabilities寄存器的Hot-Plug Capable bit设置1), Power Controller Control bit设置1,那么任何到DL_Inactive的转换都不能被视为错误。

由上述一种或多种情况启动的错误阻止必须保持有效,直到端口退出DL_Active并随后返回DL_Active,并且在返回DL_Active时没有任何阻止情况有效。注意,从DL_Active的转变只是根据错误检测阻止条件预期的预期转变。如果实现,这是与检测端口相关的报告错误(请参阅第6.2节)。请注意,在某些情况下,物理层可能暂时无法接受来自数据链路层的TLP和DLLP。数据链路层必须通过为物理层提供传达此条件的机制来理解这一点,并为TLP和DLLP提供被该条件暂时阻止的机制。

3.3 Data Link Feature Exchange

数据链功能交换协议是可选的。实现此协议的端口包含数据链路功能扩展功能(请参阅第7.7.4节)。此功能包含四个字段:

  • Local Data Link Feature Supported field。本地支持Data Link Features
  • Remote Data Link Feature Supported field。远端支持。
  • Remote Data Link Feature Supported Valid bit 指示 Remote Data Link Feature Supported field包含有效数据。
  • Data Link Feature Exchange Enable field允许系统禁止DL,用于未正确忽略DL DLLP包的硬件处理。

DL Feature交换协议将端口的本地功能支持信息传输到远程端口并捕获该远程端口的功能支持信息。
协议的规则有:

  • 进入DL_Performance时
    • 事务层必须阻止TLP的传输
    • 发送Dl Feature DLLP
      • 传输的 Feature Supported 字段必须等于Local Data Link Feature Supported字段
      • Feature Ack bit必须等于Remote Data Link Feature Supported Valid bit。
    • DL DLLP必须至少每34 μs传输一次。在恢复或配置LTSSM状态中花费的时间不会影响此限制。
    • 处理收到的DL DLLP
      • 如果Remote Data Link Feature Supported Valid bit为0,记录下DLLP包中Remote Data Link Feature Supported field,然后设置Remote Data Link Feature Supported Valid bit为1。
    • 退出DL_Feature,如果
      • 收到1个 InitFC1 DLLP
      • 收到1个 MR-IOV MRInit DLLP
      • 至少收到1个DL DLLP且包中的Feature Ack bit为1

每个DL Feature功能都有一个关联的bit在 Feature Supported 字段中。DL Feature功能被激活需要本地和远端的 Data Link Feature Supported都为1。

Data Link Feature Supported bit的位置与表3-1所示。
在这里插入图片描述

3.4 Flow Control Initialization Protocol

在通电或互连重置后开始正常操作之前,有必要初始化默认虚拟通道VC0的流控制(请参阅第6.6节)。此外,当启用其他虚拟通道(VC)时,必须为每个新启用的VC完成流控制初始化过程,然后才能使用(请参阅第2.6.1节)。本节描述用于所有VC的初始化过程。请注意,由于VC 0先于所有其他VC启用,因此在VC0初始化之前,任何类型的TIP流量都不会处于活动状态。然而,当初始化其他VC时,通常会有TLP流量在其他已经启用的VC上流动。此类流量对额外VC的初始化过程没有直接影响。
(先初始化VC0,初始化其他VC时,可能同时有VC0的TLP包流量)

VC初始化过程中有两种状态,分别是:

  • FC_INIT1
  • FC_INIT2

相关规则如下。

3.4.1 Flow Control Initialization State Machine Rules

  • 如果在VC 1-7的初始化期间的任何时间,VC都被禁用,则终止VC的流量控制初始化过程
  • FC_INIT1状态规则
    • 需要初始化VC(VCx)时进入
      • 当进入DL_Init状态时(VCx = VC0)
      • 当软件启用VC(VCx = VC1 -7)时(请参阅第7.9.1节和第7.9.2节)
    • 在FC_INIT1中
      • 事务层必须阻止使用VCx传输TLP。(VCx没有初始化前不允许发送TLP)
      • 按照以下顺序传输以下三个InitFC1 DLLP
        • InitFC1-P (first)
        • InitFC1-NP (second)
        • InitFC1-Cpl (third)
      • 这三个InitFC1 DLLPs至少每隔34us发送一次。
        • 在链路恢复或者LTSSM的配置状态花费的时间不计算。
        • 强烈推荐频繁发送InitFC1 DLLP,尤其是没有其他TLP或者DLLP包发送时。
      • 如果在链路上激活了Scaled Flow Control,请将InitFC1 DLLP中的HdrScale和DataScale字段设置为01 b、10 b或11b,以指示它在相应的HdrFC和DataFC值上使用的缩放因子
      • 除非需要确保至少所需的InitFC1 DLLP传输频率,否则数据链路层不得阻止其他传输
        • 请注意,这包括所有物理层发起的传输(例如,有序集)、ACK和Nak DLLP(如果适用)以及使用之前已完成初始化的VC的TLR(如果适用)
      • 处理收到的InitFC1和InitFC2 DLLP
        • 记录指示的HdrFC和DataFC值
        • 如果接收器支持Scaled流量控制,请记录指示的HdrScale和DataScale值
        • 一旦为VCx的P、NP和Cpl中的每个记录了FC单位值,就设置标志FI1
    • 退出到FC_INIT2,如果
      • Fl1 标志位被置1
  • FC_INIT2状态规则
    • 在FC_INIT2中
      • 事务层必须阻止使用VCx传输TLP
      • 按照以下顺序传输InitFC2 DLLP
        • InitFC2-P (first)
        • InitFC2-NP (second)
        • InitFC2-Cpl (third)
      • 这三个InitFC2 DLLPs至少每隔34us发送一次。
        • 在链路恢复或者LTSSM的配置状态花费的时间不计算。
        • 强烈推荐频繁发送InitFC1 DLLP,尤其是没有其他TLP或者DLLP包发送时。
      • 如果在链路上激活了Scaled Flow Control,请将InitFC2 DLLP中的HdrScale和DataScale字段设置为01 b、10 b或11b,以指示它在相应的HdrFC和DataFC值上使用的缩放因子
      • 如果发送器不支持缩放流量控制或如果链路上未激活缩放流量控制,请将HdrScale和DataScale字段设置为00
      • 除非需要确保至少所需的InitFC1 DLLP传输频率,否则数据链路层不得阻止其他传输
        • 请注意,这包括所有物理层发起的传输(例如,有序集)、ACK和Nak DLLP(如果适用)以及使用之前已完成初始化的VC的TLR(如果适用)
      • 处理收到的InitFC1和InitFC2 DLLP
        • 忽略收到的HdrFC、HdrScale、DataFC和DataScale值
        • 在收到任何针对VCx的InitFC2 DLLP时设置标志FI2
      • 在收到任何VCx上的TLP包或者UpdateFC DLLP时设置Fl2标志位
    • 发出完成信号并退出,如果
      • Fl2被设置1
      • 如果在链路上激活了Scaled Flow Control,则发送器必须在VCx的所有UpateFC DLLP中发送HdrScale和DataScale的01 b、10 b或11b
      • 如果不支持缩放流量控制或如果链路上未激活缩放流量控制,则发送器必须在所有用于VCx的UpdatateFC DLLP中发送HdrScale和DataScale的00 b

3.4.2 Scaled Flow Control

当没有足够的流控credits用来计算链路的往返时间时,链路的性能可能会受到影响。在更高的链路速度下,这种影响变得更加明显,并且127个header credits和2047个data credits的限制可能会限制性能。扩展流量控制机制旨在解决这一限制。
所有端口都允许支持扩展流量控制。支持16.0 GT/s和更高数据率的端口必须支持扩展流量控制。缩放流量控制激活不会影响以16.0 GT/s和更高数据速率运行的能力

Scaled流控未激活时,应用以下规则:

  • InitFC1、InitFC2和Update FC DLLP必须在HdrScale和DataScale字段中包含00 b
  • HdrFC计数器为8 bit宽,HdrFC DLLP字段包括计数器的所有位
  • DataFC计数器为12 bit宽,并且DataFC DLLP字段包括计数器的所有位
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值