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

编 者 按   
在linux操作系统中,看如何按下pcie的复位键
操作系统中的pcie
拿一张pcie spec中的拓扑图:
每一张pcie ep设备连接switch也好,还是直接插到rc上也好,按照pcie的协议规定,pcie是一个点对点传输协议,对于每个ep设备,其作为dwon stream端口,而与其对应的,则是其upstream 端口。像在switch中的结构:
这里面对于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号。
import osdef find_upstreamport(ep_bdf):    result_dirs = []    for root, dirs, files in os.walk(/sys/devices):        for dir in dirs:            if dir == ep_bdf:                return os.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定义:
按照协议中secondary bus reset的定义:
设置该位会触发相应 pci express 端口上的热复位。软件必须确保最短复位持续时间 (trst)。软件和系统必须遵守第 6.6 节中定义的先访问后复位时序要求,除非使用就绪通知机制(请参阅第 6.23 节)或设置相关功能状态寄存器中的立即就绪位。
端口配置寄存器不得更改,除非需要更新端口状态。
该位的默认值为 0b。
即我们可以通过对该位域先写1,再写0从而对port bridge下的设备进行复位。


区块链实体运用开发区块链交易所源码开发
艾为电子推出高效率RFPA电源管理芯片AW37428CSR
初创公司Deep 6Land利用AI技术在医疗领域的研究
关于燃料电池行业的现状与氢燃料电池零部件国产化进程详解
优必选成功在港交所挂牌上市
Linux操作系统中如何按下PCIe的复位键
高算力行业带动,液冷数据中心需求初显
是哪6款3D打印传感器在2017年惊艳了传感器业界
远程控制PLC的方式有哪些?PLC如何通过4G无线实现远程通讯
科技育儿产品Gululu互动水杯_科技助力提升育儿效率
OPPO首款AR眼镜正式发布,可应用于多种场景
隧道人员定位管理系统方案是什么样的
iPhone8提前量产功能超赞,红米Note4X情人节售价猛
商务部/海关总署发布对镓、锗相关物项实施出口管制
激光雷达烧坏相机 如何保证人眼安全
Two Solar OPS高空长航时飞机已完成飞行测试,顺利完成了起降和飞行动作
学习PLC编程入门要注意的问题
区块链可以充当信用中介角色吗
防疫机器人来了 人工智能加入“战队”
笔记本电脑数据保密七项注意