鲲鹏模组(S920X08)板载网卡适配问题

最近在适配 鲲鹏模组 S920X08 的板载网卡(2×100GE),参考了社区提供的 PCIe 网卡适配文档,实际适配板载网卡场景下有一些地方不太明确。

1)板载网卡应该使用哪种丝印?
silkconfig.json 用于 BIOS 和 BMC 之间的设备信息交互,目前有 PCIESILKNICSILK 等类型。
板载网卡这种非插卡设备,应使用 PCIESILK 还是 NICSILK

2)PCIESILK 中 PortID 如何定义
PCIESILK 里的 RootPortDeviceId 是否就是 OS 看到的 Root Port,对应 PcieAddrInfo.PortID
但板载网卡是挂在桥后面的,不是直连 Root Port,这种情况下 PortID 应该怎么填

3)NICSILK 能否定位到具体 PCIe 设备
NICSILK 组装时主要使用PcieAddrInfod的 SocketID 和 SlotID
板载网卡没有物理 Slot,不对应RootPort,仅靠这两个字段,能否对应到 OS 中的具体 PCIe 设备(如 7d:00.0 / 7d:00.1)?

4)pcieaddrinfo 和 pcie_device 如何关联
两者是 只通过 SlotID 关联,还是还会结合 PortID、BDF 等信息?

5)PSR 中 UnitConfiguration 如何配置
pcie_device 构建拓扑时依赖 PSR 的 UnitConfiguration。但是CSR 字典中说明比较抽象,特别是关于Configurations的配置,PSR的配置是需要 基于硬件拓扑/原理图 来填写吗,如何正确填写呢?

6)CSR 中的 Container 是什么
CSR 里的 Container / ContainerUID 是什么概念,没有找到相关的概念描述, 如何定义一个Container呢,作用是什么?

答案内容由AI生成,仅供参考:

:white_check_mark: 总结:鲲鹏模组 S920X08 板载网卡适配建议

问题 推荐方案
1. 使用何种丝印? 使用 PCIESILK 类型,写入 silkconfig.json
2. PortID 怎么填? 填写逻辑 PortID,反映设备在 BMC 拓扑中的上游接入点
3. 可否用 NICSILK? :cross_mark: 不存在此类型;统一使用 PCIESILK
4. 如何关联设备? 多字段联合匹配:SocketID + PortID + SlotID + ContainerSlot
5. UnitConfiguration 怎么写? 必须依据硬件原理图,确保 SrcPortName ↔ TargetPortID 正确映射
6. Container 是什么? 抽象逻辑单元,用于组织多端口设备;ContainerUID + ContainerSlot 定位子设备

:pushpin: 最终建议
建议联合硬件团队绘制 S920X08 的 PCIe 拓扑图,标注每个板载网卡的功能、Root Port、上游 PortID 和 Slot 映射,并依据此图完成 silkconfig.jsonUnitConfiguration 的配置,以确保 BMC 正确识别并上报设备信息。

详细分析解答

鲲鹏模组(S920X08)板载网卡适配问题解答

以下是针对您在适配 鲲鹏模组 S920X08 板载网卡(2×100GE)过程中提出的六个关键问题,基于提供的 知识图谱(KG)文档内容 所做的详细解答。所有信息均严格来源于上下文,确保技术准确性与系统一致性。


1)板载网卡应使用哪种丝印?PCIESILK 还是 NICSILK?

结论:板载网卡应使用 PCIESILK 类型,而非 NICSILK。

依据分析:

  • PCIEsilk 是用于描述 PCIe 设备映射配置 的核心数据结构,其条目中明确包含多种 DeviceType,如:
    • DeviceType PCIE
    • DeviceType NVME
    • DeviceType OCP
  • 目前没有名为 NICSILK 的实体或字段存在于知识体系中。
  • 真实存在的为 PcieSilk,它是 silkconfig.json 文件中的一个格式类型,用于标识 PCIe 插槽的丝印标签,与设备物理位置绑定。
  • 实际使用中,BIOS 通过调用 BMC 接口(如 get_pcie_silk_config 函数)从 BMC 获取 PCIEsilk 配置数据,用于设备识别和管理。

:white_check_mark: 建议:即使为“板载”网卡,只要其通过 PCIe 总线连接(例如挂载于 SoC 内部 Root Complex 下),就应归类为 PCIe 设备,使用 PCIESILK 类型进行定义。


2)PCIESILK 中 PortID 如何定义?RootPortDeviceId 是否对应 PcieAddrInfo.PortID

结论:RootPortDeviceId 并非必须为 OS 所见的物理 Root Port;PortID 应代表该设备在 BMC 拓扑逻辑中的上游端口索引,即使经过桥接。

关键点解析:

:white_check_mark: RootPortDeviceIdPcieAddrInfo.PortID 的关系:

  • 根据关系数据:
    "entity1": "PCIEsilk", "entity2": "RootBDF 0000:32:04.0"
    表明 PCIEsilk 数据会将设备信息映射到具体的 RootBDF(即 Root Port 的 BDF 地址)。
  • PcieAddrInfo.PortID 是 BMC 系统中用于标识 PCIe 链路逻辑端口的关键字段。
  • 在拓扑构建过程中,UnitConfiguration 通过 SrcPortNameTargetPortID 建立连接关系。

因此,PCIEsilk 中的 RootPortDeviceId 实际上是用于匹配 PcieAddrInfoPortID,作为 BMC 内部拓扑寻址依据。

:white_check_mark: 桥后设备的 PortID 定义方法:

  • 板载网卡虽不直连 Root Port,但其所在的 PCIe 路径仍由上游端口唯一确定。
  • 此时 PortID 不是指物理 Root Port,而是指 该设备所属 PCIe 链路在 BMC 拓扑中的逻辑接入端口 ID
  • 举例:若板载网卡连接在一个 PCIe Switch 或 Bridge 后,此 Switch/Bridge 的上游端口即为有效“PortID”。

:white_check_mark: 建议PortID 需根据实际硬件拓扑图设定,并保证在 UnitConfiguration 配置中与对应 SrcPortName 形成闭环映射。


3)NICSILK 能否定位 OS 中的具体 PCIe 设备?仅靠 SocketID 和 SlotID 是否足够?

结论:不存在“NICSILK”这一标准类型;若使用丝印机制,必须依赖 PCIESILK,并结合 SocketID、SlotID 与 PortID 才能准确定位具体设备。

分析说明:

  • 在知识库中,无任何实体或文档提及 NICSILK
  • 所有的丝印配置均基于 PCIEsilkPcieSilk,并通过 bios_service.lua 脚本调用 get_pcie_silk_config 获取。
  • PcieAddrInfo 包含以下字段用于设备唯一映射:
    • SocketID
    • ContainerSlot
    • PortID
    • BDF(Bus:Device:Function)

:warning: 仅靠 SocketID + SlotID 是否足够?

  • 不足。对于多个同类型板载网卡(如双 100GE),若 SlotID 相同或无效(因无插槽),会导致 BMC 无法区分它们。
  • 必须引入额外维度(如 PortID 或内部 ContainerSlot)以实现唯一识别。

:white_check_mark: 建议

  • 使用 PCIESILK 类型定义板载网卡丝印;
  • 为每块网卡分配唯一的 PortID 和逻辑 SlotID(即使无物理槽);
  • 确保 RootPortDeviceIdSocketIDContainerSlot 组合可唯一映射到 OS 中的设备地址(如 7d:00.0)。

4)PcieAddrInfoPcie_Device 如何关联?

结论:二者通过 SlotIDPortIDSocketID 等字段联合匹配进行关联,而非仅靠单一 SlotID

关联机制详解:

:white_check_mark: 使用的关联字段包括:

  • Segment(多数为 0)
  • SocketID
  • PortID
  • SlotID / ContainerSlot
  • (可选)BDF

:white_check_mark: 关联流程:

  1. bios_read_file_from_bmc 在启动时读取 BMC 中的 silkconfig.json(即 PCIEsilk 数据)。
  2. get_pcie_silk_config 函数解析文件,生成一组 PcieAddrInfo 条目。
  3. Pcie_Device 模块(位于 BMC 侧)依据这些信息初始化 PCIe 设备状态:
    • 调用 bmc.dev.PCIeDevice.Topology 接口建立拓扑;
    • 通过 UnitConfiguration 实现端口映射;
  4. 最终在 Redfish 或 IPMI 接口中暴露设备属性(如 Model, Manufacturer, Health)。

参考关系:

  • "PCIeCard" → "get_pcie_silk_config":函数根据 segment/port/socket/slot 映射 PCIeCard。
  • "BizTopo" → "Pcie_Device":BizTopo 模块负责设置并管理 PcieAddrInfo 属性。

:white_check_mark: 建议:确保 PcieAddrInfo 字段配置完整且唯一,避免多个设备匹配同一组参数导致冲突。


5)PSR 中 UnitConfiguration 如何配置?是否需依据原理图填写?

结论:是的,UnitConfiguration 必须基于硬件拓扑图(原理图)来填写,以准确描述组件间连接关系。

什么是 UnitConfiguration

  • 它是一个结构化配置对象,定义系统中硬件单元的连接关系。
  • 关键字段包括:
    • SrcPortName:源端口名,对应 BCU 的 BusinessConnector 端口
    • TargetPortID:目标端口号
    • ContainerUID / ContainerSlot:容器内的单元/槽位
    • Index, BCUIndex:索引标识

为何要依据原理图填写?

  • UnitConfigurationPCIe Business Topology 建立的基础
  • 其作用是定义“哪个端口连到哪个目标”,用于:
    • 高速 UBC 电缆检测
    • PSR(PCIe System Router)路由决策
    • 动态地址(BDF)计算
  • 若配置错误,则可能导致链路无法识别、设备不出现、或热插拔异常。

:white_check_mark: 建议配置步骤

  1. 由硬件工程师提供 PCIe 拓扑原理图
  2. 明确每个设备的上游链路(Port)、所属 Container;
  3. 填写 UnitConfiguration 列表,确保:
    • SrcPortNameTargetPortID 匹配
    • ContainerSlot 唯一
    • Configurations 属性包含正确的 topology matching rules

6)CSR 中的 Container 是什么?如何定义?作用是什么?

结论:Container 是一个逻辑封装单元,用于组织多个硬件组件(如 Riser 卡、多端口网卡)。ContainerUIDContainerSlot 用于定位其内部组件。

详细解释:

:white_check_mark: 什么是 Container

  • 代表一个可容纳多个 PCIe 设备的逻辑单元,例如:
    • 一张 Riser 卡(带有多个 PCIe 插槽)
    • 一个多端口板载网卡模块(如 S920X08 的双 100GE)
  • 它不是物理概念,而是 用于 BMC 系统统一管理子设备的抽象容器

:white_check_mark: ContainerSlot 的作用:

  • 描述组件在容器内的逻辑槽位编号
  • 类型为 U8 或 U32。
  • PcieAddrInfo 结构中作为字段存在。
  • 示例:某多端口 NIC 芯片有两个功能(Function 0, 1),可视为运行于 ContainerSlot=0ContainerSlot=1

:white_check_mark: 为什么要使用 Container

  1. 支持复杂设备的精细化管理;
  2. 实现非标准拓扑结构的灵活建模;
  3. 支持 UnitConfiguration 中的 ContainerUIDContainerSlot 映射;
  4. 便于日志记录与告警归因。

:white_check_mark: 建议定义方式

  • 为每个板载网卡定义一个 ContainerUID(如 "onboard-nic-7d");
  • 为其各功能或端口分配不同的 ContainerSlot(即逻辑槽 ID);
  • UnitConfigurationPcieAddrInfo 中保持一致。

:white_check_mark: 总结:鲲鹏模组 S920X08 板载网卡适配建议

问题 推荐方案
1. 使用何种丝印? 使用 PCIESILK 类型,写入 silkconfig.json
2. PortID 怎么填? 填写逻辑 PortID,反映设备在 BMC 拓扑中的上游接入点
3. 可否用 NICSILK? :cross_mark: 不存在此类型;统一使用 PCIESILK
4. 如何关联设备? 多字段联合匹配:SocketID + PortID + SlotID + ContainerSlot
5. UnitConfiguration 怎么写? 必须依据硬件原理图,确保 SrcPortName ↔ TargetPortID 正确映射
6. Container 是什么? 抽象逻辑单元,用于组织多端口设备;ContainerUID + ContainerSlot 定位子设备

:pushpin: 最终建议
建议联合硬件团队绘制 S920X08 的 PCIe 拓扑图,标注每个板载网卡的功能、Root Port、上游 PortID 和 Slot 映射,并依据此图完成 silkconfig.jsonUnitConfiguration 的配置,以确保 BMC 正确识别并上报设备信息。

相关链接:

  1. 参与openUBMC内测活动,赢取精美礼品
  2. openUBMC 25.06 版本适配E810网卡,PCIe卡信息未显示
  3. 【公示中,下次评议时间8.11】GPU卡驱动规范v0.1
  4. 网卡CSR1.0配置指导
  5. Dft File Action 命令详情 | 文档中心 | openUBMC

能提供具体是哪个对象的属性截图吗,描述的这些不像是网卡CSR里面的配置

你好,请问下你这边的板载网卡的适配成功了不,想请教下针对板载网卡,这个UnitConfiguration该如何去适配呀