0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PCIe系统复位方式

冬至子 来源:存储随笔 作者:古猫 2023-06-05 17:30 次阅读

系统复位(Reset)

在PCIe Spec中,Reset总共分为两类:Conventional Reset和Function Level Reset.

1. Conventional Reset

从字面上来讲,Conventional Reset是传统的Reset方式。这一类Reset功能是在PCIe Spec 2.0之前的Spec中定义的,所以称为传统的Reset。PCIe设备必须要支持这一类Reset。

Convential Resets包含了三种Resets: Cold Reset,Warm Reset 和 Hot Reset.

另外,还有一个概念: Cold Reset和Warm Reset又被称为Fundamental Reset, Hot Reset被称为Non-Fundamental Reset.

什么是Fundamental Reset呢?

这是PCIe最基本的复位方式,主要通过硬件实现,效果是重置整个设备,对每个状态机、所有硬件逻辑、端口状态和配置寄存器重新初始化。

但是,也会有例外的情况:在某些寄存器中的字段只有在全部电源(包括VCC电源和Vaux备用电源)切断的情况下才会被重置。PCIe Spec给这些固执的字段起了个外号"Sticky Bits".

一般来说,Fundamental Reset是针对整个系统做Reset,但是有时也可以针对某个单一设备进行重置。

在这里说明一下Fundamental Reset中的Cold Reset和Warm Reset。

  • Cold Reset : 设备的主电源VCC上电时,就会触发Cold Reset。
  • Warm Reset : 在VCC不断电的情况下,系统可以触发Warm Reset。比如,电源状态的变化就会触发Warm Reset. 不过,PCIe Spec并没有定义触发Warm Reset的具体方式,这部分可以有系统设计人员自行决定。

另外,在PCIe Spec中,规定了两种触发Fundamental Reset方式。

  • 一是通过PERST#(PCIe Reset)信号控制。
  • 二是在没哟PERST#信号的情况下,通过Power on/off的方式实现。

举个例子,看看PERST#是如何生成的。

  1. 系统上电稳定后,有POWERGOOD信号产生(下图红色框所示)。
  2. 当系统的南桥芯片(也就是图中的IO控制器ICH)收到POWERGOOD信号后,就会产生PERST#信号(下图绿色部分),此时会引起Cold Reset。
  3. 如果系统可以通过非上电的方式触发PERST#信号,此时会引起Warm Reset。

图片

明白了Fundamental Reset,那Non-Fundamental Reset中的Hot Reset又是什么呢?

与Fundatmental Reset相反,Hot Reset是一种软件控制的复位方式。PCIe设备出现错误时,通常情况下用软件的方式对设备重置。软件可以通过在Bridge control中设置Secondary Bus Reset bit来触发Hot Reset.

图片

另外,在PCIe总线中,通过发送TS1序列,并且在TS1序列中设置Hot Reset bit来对下游设备进行Hot Reset(如下图红色框).

在这个过程中,发送端会持续发送TS1序列至2ms, 接收端在接到2个连续的TS1序列之后进行Hot Reset.

图片

同样,举个例子说明一下Hot Reset:

  1. 系统通过软件对Switch A左边端口的Secondary Bus Reset bit置为1(下图红色框),触发了Hot Reset.
  2. 之后通过发送TS1序列对PCIe链路中的下游设备触发Hot Reset(下图黑色箭头).

图片

2. Function Level Reset

在传统复位方式的基础上,PCIe Sepc 2.0以后开始增加了新的复位方式FLR(Function Level Reset)。前面讲到的传统复位方式(Cold Reset, Warm Reset, Hot Reset)均属于全局复位方式,而FLR的优势则是对局部复位。

在PCIe协议中,一个PCIe设备可能包含多个功能模块(Function),每个功能模块相互对立,共用一个PCIe link。其中,某个功能模块出问题时,虽然可以采用传统复位方式对整个PCIe设备复位,但这个显然不友好,因为其他功能模块可能正在埋头苦干。这就好比如,在一个团体中,一个人犯错了,要团队所有人一起承担,这个肯定会影响团结呀。

所以,PCIe深得管理学的精髓,为了不影响团结,FLR允许只对其中出错的功能模块(Function)进行重置,其他功能模块正常工作。

不过,FLR复位方式对PCIe设备并不是必须的,在对PCIe设备使用FLR复位之前必须先检查是否支持FLR。这部分可以查看Device Capabilities Register是否将Funcion-Level Reset Capability bit置起。

图片

如果PCIe设备支持FLR,那么就可以通过设置Device Control Register中的Function-Level Reset bit触发FLR复位咯~

图片

触发FLR之后,PCIe链路中都有哪些变化呢?

我们前面提到了,FLR是一个局部复位方式,只对出问题的那个Function起作用。所以说, FLR只会改变当下Function内部的状态和寄存器的内容 。以下几个方面不会被影响:

  • 执行FLR的Function所在的PCIe链路状态不会改变,因为其他Function也在共用整条PCIe链路;
  • Sticky Bits . 传统复位方式也无法改变Sticky bits, 除非完全断电。
  • HwInit Bits . HwInit bits是硬件初始化的内容,这些值由芯片的配置引脚决定,后者上电复位后从EEPROM中获取。Cold和Warm Reset可以复位这些寄存器,然后从EEPROM中从新获取数据,但是使用FLR方式不能复位这些寄存器。
  • 与Link相关的寄存器 。比如ASPM,Flow control等相应的寄存器。

另外,PCIe Sepc规定,某个Function的FLR必须在100ms之后完成。所以,PCIe Spec写了一封倡议书给要使用FLR复位方式的"人们"-软件:

为了创造一个温馨的FLR工作环境,请做到以下几点:

  • 在FLR工作期间,请不要访问对应的Function;
  • 清除所有的Command Register;
  • 通过Polling Device Status Register中的Transaction Pending bit来确保之前请求的Compeletion报文已完成,或者确保后续不会再发送Compeletion报文。
  • 触发FLR之后,请耐心等待至少100ms;
  • 初始化Function的配置寄存器,让其正常工作。

在FLR执行的过程中,如果收到TLP或者Compeletions都会被默默的丢弃,而不会向系统报错。

举个栗子,看看FLR执行过程,

  1. 如下图,这个PCIe设备中有两个功能模块:Function 0和Function 5. 此时,两个Functions依旧是互不干扰,认真工作,传输TLPs.

图片

  1. 之后,Function 5出了一些问题,需要做FLR。FLR之后,Function5中的之前的TLPs全部被清除。

图片

  1. Function 5做FLR,并不影响Function 0,继续TLPs传输。如下图,3个TLPs正常传输完毕。

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16346

    浏览量

    177903
  • EEPROM
    +关注

    关注

    9

    文章

    1020

    浏览量

    81568
  • TLP
    TLP
    +关注

    关注

    0

    文章

    32

    浏览量

    15627
  • Vcc
    Vcc
    +关注

    关注

    2

    文章

    305

    浏览量

    35976
  • PCIe接口
    +关注

    关注

    0

    文章

    120

    浏览量

    9703
收藏 人收藏

    评论

    相关推荐

    简谈PCIe的软件配置方式

    大家好,又到了每日学习的时间了,今天我们来聊一聊PCIe的软件配置方式。 关于PCIe的软件配置和初始化 PCIe设计出来考虑了和pci兼容问题。所以
    的头像 发表于 07-29 09:26 7762次阅读
    简谈<b class='flag-5'>PCIe</b>的软件配置<b class='flag-5'>方式</b>

    复位那些小事—系统复位的特殊处理

    复位就是复位撤离,系统复位就是复位结束了系统准备开始工作。
    的头像 发表于 12-04 15:25 1734次阅读
    <b class='flag-5'>复位</b>那些小事—<b class='flag-5'>系统</b>解<b class='flag-5'>复位</b>的特殊处理

    Cortex-M内核的软件复位方式

    这里只讨论内核的软件复位方式。像STM32的备份域复位里面也有软件复位,则不在本文讨论范围。额外提一句,上电复位是完整
    的头像 发表于 12-06 16:18 2208次阅读
    Cortex-M内核的软件<b class='flag-5'>复位</b><b class='flag-5'>方式</b>

    Linux操作系统中如何按下PCIe复位

    在Linux操作系统中,看如何按下PCIe复位
    的头像 发表于 01-20 09:31 1576次阅读
    Linux操作<b class='flag-5'>系统</b>中如何按下<b class='flag-5'>PCIe</b>的<b class='flag-5'>复位</b>键

    PCIe总线的复位方式是什么?

    PCIe总线规定了两个复位方式:conventional Reset和FLR(FunctionLevel Reset),而Conventional Reset由进一步分为两大类:Fundamental Reset和Non-Fun
    发表于 10-16 08:19

    简谈PCIe的软件配置方式

           大家好,又到了每日学习的时间了,今天我们来聊一聊PCIe的软件配置方式。       关于PCIe的软件配置和初始化       PCIe设计出来考虑了和pci兼容问题。
    的头像 发表于 07-27 19:16 3661次阅读
    简谈<b class='flag-5'>PCIe</b>的软件配置<b class='flag-5'>方式</b>

    复位电路的作用及基本的复位方式

    手动按钮复位需要人为在复位输入端RST上加入高电平(图1)。一般采用的办法是在RST端和正电源Vcc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮
    的头像 发表于 09-06 09:40 11.6w次阅读
    <b class='flag-5'>复位</b>电路的作用及基本的<b class='flag-5'>复位</b><b class='flag-5'>方式</b>

    PCIe总线的信号介绍

    该信号为全局复位信号,由处理器系统提供(RC),处理器系统需要为PCIe插槽和PCIe设备提供该复位
    发表于 12-22 14:45 2.3w次阅读

    PCIe总线的两种复位方式

    传统的复位方式分为Cold、Warm和Hot Reset。PCIe设备可以根据当前的设备的运行状态选择合适的复位方式
    的头像 发表于 12-30 09:37 2.3w次阅读

    CPU的复位方式有哪些

    上电复位就是直接给产品上电,上电复位与低压LVR操作有联系,电源上电的过程是逐渐上升的曲线过程,这个过程不是瞬间的完成的,一上电时候系统进行初始化,此时振荡器开始工作并提供系统时钟,
    的头像 发表于 09-17 11:05 1.2w次阅读
    CPU的<b class='flag-5'>复位</b><b class='flag-5'>方式</b>有哪些

    简述复位电路概述以及方式和目的

    是有的电路需要时钟信号那样,而有的电路是不需要复位信号的。复位又分为同步复位和异步复位,这两种各有优缺点。下面我们主要来说说复位信号的用途和
    的头像 发表于 06-28 09:49 6753次阅读

    stm32复位方式分类

    stm32复位方式分类按照复位区域的范围分类,大概可以分为系统复位,电源复位,备份域
    发表于 12-07 19:36 12次下载
    stm32<b class='flag-5'>复位</b><b class='flag-5'>方式</b>分类

    GD32 MCU电源复位系统复位有什么区别

    GD32 MCU的复位分为电源复位系统复位,电源复位又称为冷复位,相较于
    的头像 发表于 02-02 09:37 1498次阅读
    GD32 MCU电源<b class='flag-5'>复位</b>和<b class='flag-5'>系统</b><b class='flag-5'>复位</b>有什么区别

    FPGA同步复位和异步复位

    FPGA(Field-Programmable Gate Array,现场可编程门阵列)中的复位操作是设计过程中不可或缺的一环,它负责将电路恢复到初始状态,以确保系统的正确启动和稳定运行。在FPGA设计中,复位
    的头像 发表于 07-17 11:12 1528次阅读

    STM32复位电路用复位芯片和阻容复位电路区别

    系统中,复位电路是保证系统正常工作的重要部分。当系统出现异常或需要重新启动时,复位电路能够迅速将系统
    的头像 发表于 08-06 10:26 1433次阅读