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

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

3天内不再提示

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

Spinal FPGA 来源:Spinal FPGA 2024-01-20 09:31 次阅读

编 者 按

Linux操作系统中,看如何按下PCIe的复位键

操作系统中的PCIe

拿一张PCIe Spec中的拓扑图:

a103e3fe-b6c2-11ee-8b88-92fbcf53809c.jpg

每一张PCIe EP设备连接Switch也好,还是直接插到RC上也好,按照PCIe的协议规定,PCIe是一个点对点传输协议,对于每个EP设备,其作为dwon stream端口,而与其对应的,则是其upstream 端口。像在Switch中的结构:

a122eba0-b6c2-11ee-8b88-92fbcf53809c.jpg

这里面对于Switch而言具有三个Downstream Port,而对于插在上面的三个EP设备而言,其是EP设备的Upstream Port。这三个Switch中的三个DownStream Port在Linux操作系统中也会创建三个PCI文件系统。


在PCIe体系结构中,如果作为EP的设备出现了故障,那么往往其Upstream Port也是会受到影响。通过系统重启可以解决,而在一些场景下,可能系统重启不太能接受,那么能否有其他方式来对这条出现问题的点对点链路进行下恢复呢?


按下Linux里面的PCIe复位键。

找到EP的Upstream Port

EP设备的Upstream Port在Linux操作系统中会当作一个PCIe Bridge Port,通过lspci是能够看到的。

对于如何找到对应的EP设备的Upstream Port,如果你对lspci工具命令行熟悉的话,可以通过lspci -tv指令去获取对应的Upstream Port。如果不熟,也没关系,提供一段python代码,可以获取到EP对应的Upstream Port的BDF号。

importos

deffind_upstreamport(ep_bdf):
result_dirs = []
forroot, dirs, files inos.walk("/sys/devices"):
fordir indirs:
ifdir == ep_bdf:
returnos.path.basename(root)
print("{0} upstream port not found".format(ep_bdf))

参数ep_bdf为对应的ep设备的bdf号,需带上domain域,形式为xxxxxx.x

Secondary Bus Reset

对于Port bridge,其配置空间定义中Bridge Control Register (Offset 3Eh)包含Secondary Bus Reset定义:

a14a113a-b6c2-11ee-8b88-92fbcf53809c.jpg

按照协议中Secondary Bus Reset的定义:

设置该位会触发相应 PCI Express 端口上的热复位。软件必须确保最短复位持续时间 (Trst)。软件和系统必须遵守第 6.6 节中定义的先访问后复位时序要求,除非使用就绪通知机制(请参阅第 6.23 节)或设置相关功能状态寄存器中的立即就绪位。

端口配置寄存器不得更改,除非需要更新端口状态。

该位的默认值为 0b。

即我们可以通过对该位域先写1,再写0从而对Port Bridge下的设备进行复位。

审核编辑:汤梓红

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

    关注

    87

    文章

    11222

    浏览量

    208891
  • 操作系统
    +关注

    关注

    37

    文章

    6734

    浏览量

    123184
  • 端口
    +关注

    关注

    4

    文章

    954

    浏览量

    32008

原文标题:按下Linux里PCIe的复位键

文章出处:【微信号:Spinal FPGA,微信公众号:Spinal FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux操作系统常见文件类型分析

    Linux操作系统常见文件类型分析,压缩和打包文件,普通文件格式,系统文件
    发表于 01-06 17:00 980次阅读

    labview在window操作系统中生成的exe能否移植到linux操作系统

    没有找到破解的labview for linux。于是想能不能在window操作系统写好程序,打包成exe。之后能否移植到用linux操作系统
    发表于 03-11 17:49

    LINUX操作系统

    Linux操作系统,分为好几种,它们有什么区别吗?今天安装了个乌班图操作系统,这个LINUX操作系统如何?本人不太清楚,还请前辈指点一
    发表于 12-16 18:34

    STM32移植FreeRTOS复位会杀死操作系统的原因?

    根据网上资料移植FreeRTOS到STM32上面成功做了几个任务,结果出现一个奇怪的现象就是复位会杀死操作系统即任何任务全部死掉。但是
    发表于 08-03 08:00

    Linux操作系统

    linux的教学内容1 、Linux概述 2 、Linux操作系统安装3、 Linux的内核 4 、Li
    发表于 04-10 16:54 0次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>

    Linux操作系统原理及应用

    Linux操作系统原理及应用 1.1  操作系统的地位 1.2  操作系统的功能 1.3  操作系统的发
    发表于 04-28 14:53 0次下载

    Linux与其他操作系统的区别

    Linux与其他操作系统的区别 Linux与其他操作系统的区别  Linux可以与MS-DOS、OS/2、Windows等其他
    发表于 01-18 12:42 1654次阅读

    什么是Linux操作系统

    什么是Linux操作系统  简单地说,Linux是一套
    发表于 12-26 12:04 1404次阅读

    手机支持的Linux操作系统

    手机支持的Linux操作系统   Linux系统Linux系统是一个源代
    发表于 01-28 17:07 1817次阅读

    Linux快速入门之安装Linux操作系统及小结

    .4 实验内容安装Linux操作系统 1.实验目的 读者通过亲自动手安装Linux操作系统,对Linux有个初步的认识,并且加深对
    发表于 10-18 14:16 0次下载

    基于Linux操作系统C语言编程入门

    基于Linux操作系统C语言编程入门
    发表于 10-27 15:36 11次下载
    基于<b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b><b class='flag-5'>下</b>C语言编程入门

    Linux操作系统的PCI驱动开发

    、安全的优点,尤其是Linux加入GNU并遵循公共版权许可证(GPL)之后,几乎所有的GNU软件都可以移植到Linux,从而完善和提高了Linux系统的使用性,并逐步成为通信、工业控制
    发表于 12-03 01:22 1247次阅读
     <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b><b class='flag-5'>下</b>的PCI驱动开发

    Linux操作系统C语言编程入门.pdf

    Linux操作系统C语言编程入门
    发表于 05-17 10:08 96次下载

    趣谈Linux操作系统

    趣谈Linux操作系统
    的头像 发表于 01-13 16:00 6438次阅读

    Linux终端命令操作常用的快捷

    作为一名 Linux 的开发人员,和 Linux 系统打交道是每天必做的事情,通过 Linux 终端下命令行与
    的头像 发表于 05-12 10:54 2228次阅读