PCIe 拓扑建立及BDF问题分享总结

一、PCIe拓扑建立过程

拓扑建立的主要目的是生成SlotId到PortId的关系,并填写到对应的PcieAddrInfo中。

1. 关键定义

(1) PSR:配置BCU端口和IEU端口映射关系

UnitConfiguration: 线缆白名单,配置在PSR中。承接BCU(CPU板)和IEU(Riser卡)之间的连接关系。

(2) BCU:配置串行/解串器的硬件信息,包含每条SerDes的对应的RootBDF的Device

① Serdes:CPU资源,配置在BCU的sr中。包含丝印文件的关键属性RootPortDeviceId,即PcieAddrInfo对象的PortID属性。

② BusinessConnector(BusinessConnector_CPU2UBCDD2):BCU 下行连接器,对应BCU上的UBC/UBCDD端口

(3) IEU:配置上行连接器及下行连接器,以及PCIeAddrInfo

① BusinessConnector:业务Connector,用于定义Riser对应PCIeSlot的上下行带宽和绑定的PCIeConnector,同时其中定义了UID信息,用于定位PSR中对应的UnitConfiguration。

② PCIeAddrInfo:PCIe对应的UnitConfiguration配置,与BusinessConnector绑定

2. 拓扑建立流程

3. RootBDF计算方法

RootBDF的计算方法有两种:根据 SocketID 和 PortID 在 override_root_bdf 或 BDFConfig 里查找。

(对于1630处理器的机型,对应表直接写在代码中,其他机型配置在BDFConfig里)

(1) override_root_bdf方式(pcie_device组件)

硬编码的芯片默认Root BDF,对应代码里的这个二维查找表:

override_root_bdf[SocketID][PortID] → { Bus, Device, Function }

(2) BDFConfig方式(PSR)

根据PSR文件里读到的实际值,得到RootBDF

二、相关问题

PCIe卡总线信息与OS获取到的不一致

Ø 现象描述:web上显示CX6网卡的总线信息显示与OS获取的不一致

image

Ø 问题分析:总线信息来自Riser卡的PCIeAddrInfo,通过mdbctl lsprop PCIeAddrInfo查看RootBDF值,确定数据不对

Ø 处理方法:

① 分析PSR中的Device是直接指定的,故Riser卡的PCIeAddrInfo的BDF是通过BDFConfig方式计算的;

② 根据PortID=32(即PSR Device)和SocketID=0查询得到bus=96,device=0,换算成16进制:”60:00.0”,与OS查询一致

image

2 个赞