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

    文章

    10990

    浏览量

    206738
  • 操作系统
    +关注

    关注

    37

    文章

    6288

    浏览量

    121887
  • 端口
    +关注

    关注

    4

    文章

    820

    浏览量

    31588

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

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

收藏 人收藏

    评论

    相关推荐

    Linux与其他操作系统的区别

    Linux是新近被人们所关注的操作系统,它正在逐渐为PC机的用户所接受。那么,Linux与其他操作系统的主要区别是什么呢?下面从两个方面加以论述。  首先看一
    发表于 09-13 10:12

    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操作系统的Python语言程序设计

    文章目录前言导引前言由于本专栏涉及内容较多,如果大家希望系统学习Linux操作系统的Python语言程序设计,可参考此文章。本文章所列文
    发表于 12-22 06:17

    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 1593次阅读

    什么是Linux操作系统

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

    趣谈Linux操作系统

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

    基于linux的十大操作系统排名

    基于linux内核开源的特性,并随着linux的不断发展,各种基于Linux操作系统版本也在不断发行出来,其中每一个不同版本的Linux
    发表于 07-10 16:23 1.5w次阅读

    Linux操作系统与Windows操作系统的五大区别

    Linux操作系统和Windows操作系统身为三大操作系统巨头里面的两大巨头,他们有什么区别呢?首先,先要声明一点,所有以Linux内核为基
    发表于 07-10 16:28 7553次阅读

    Linux嵌入式操作系统有哪些优势

    嵌入式Linux操作系统是将Linux操作系统进行裁剪,使Linux操作系统能够在嵌入式计算机
    发表于 07-10 16:34 4721次阅读

    五款常用的Linux操作系统

     Linux操作系统诞生于1991年的10月5日。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。
    发表于 07-16 14:48 1902次阅读

    linux属于什么操作系统

    Linux属于一种类UNIX操作系统Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX
    的头像 发表于 11-08 11:01 1746次阅读