【讨论】PCIe Switch场景下如何加载PCIe卡

当前的加载方式:


一些设想:

关于PCIe Switch场景下的一些其他交流结论:
1、芯片温度如果需要通过复杂协议才能获取,可以放在general_hardware组件实现。或者由CPLD完成,BMC做简单读取
2、PCIe Switch板比较接近IEU,可以放在general_hardware
3、PCIe Switch芯片的flash升级也可以放在general_hardware

有几个疑问,请教一下


        "UnitConfiguration_IEU1": {
            "SlotType": "IEU",
            "SlotNumber": 1,
            "SlotSilkText": "IEUSlot1",
            "Configurations": [
                {
                    "UID": "343437351",
                    "Index": 1,
                    "SrcPortName": [
                        "A3a",
                        "A3c"
                    ],
                    "TargetPortID": [
                        49,
                        50
                    ],
                    "Slot": [
                        2,
                        3
                    ],
                    "Device": []
                },

1.如上代码块,UnitConfiguration对象中的SrcPortName、TargetPortID、Slot属性如何确定?找谁可以获取。

        "BusinessConnector_CPU1UBCDD1": {
            "Direction": "Downstream",
            "BCUIndex": "${Slot}",
            "Slot": 3,
            "LinkWidth": "X16",
            "MaxLinkRate": "PCIe 4.0",
            "ConnectorType": "UBCDD",
            "SilkText": "CPU1 UBCDD1",
            "UpstreamResources": [
                {
                    "Name": "SerDes_0_8",
                    "ID": 8,
                    "Offset": 0,
                    "Width": 8
                },
                {
                    "Name": "SerDes_0_7",
                    "ID": 7,
                    "Offset": 0,
                    "Width": 4
                },
                {
                    "Name": "SerDes_0_10",
                    "ID": 10,
                    "Offset": 0,
                    "Width": 4
                }
            ],
            "ActualResourceOrder": [
                "SerDes_0_10",
                "SerDes_0_7",
                "SerDes_0_8"
            ],
            "Ports": [
                {
                    "Name": "A3a",
                    "ID": 9,
                    "Offset": 0,
                    "Width": 8
                },
                {
                    "Name": "A3c",
                    "ID": 11,
                    "Offset": 8,
                    "Width": 8
                }
            ],
            "Port1LinkInfo": "",
            "Port2LinkInfo": ""
        },


2.如上代码块,UnitConfiguration对象的srcportname和slot属性是否要和BCU中BusinessConnector对象的Name、ID属性对应?文档说是需要对应的,但是实际上默认的配置并没有对应上。

"SerDes_1_10": {
    "Name": "SerDes_1_10",
    "ID": 10,
    "SocketID": 1,
    "LinkWidth": 4,
    "WorkMode": 1,
    "ModeConfigs": [
        {
            "Mode": 1,
            "Device": [14,14,15,15],  
            "ControllerIndex": [1,1,1,1]
        }
    ]
}

3.如上代码块,为什么能够确认portid为14,而不是15?如何根据portid,SocketId计算rootbdf?在文档中,“对于以上的案例,可知socketIdportId分别为114,随后可以在root_bdf表中查询对应的RootBDF。最终找到对应的RootBDF[0xAA, 0x2, 0]。”不知道这是如何计算得到0xaa,0x2,0x0的。

1、跟基础板SMC命令字对应,在代码里用来比对读取到的高速线缆信息。

SrcPortName:当前上报的拓扑发现信息对应的Area端口号
TargetPortID:组件端口信息,用于BMC判断线缆是否插错
Slot:全局的槽位号

这些信息都是找硬件板主获取。硬件规划接线方式,再在PSR里配置线缆白名单。

2、UnitConfiguration对象的SrcPortName和BCU里BusinessConnector对象Port的Name对应,比如SrcPortName的A3a,就会找到BusinessConnector_CPU1UBCDD1的A3a(宽度是x8),对应SerDes_0_10(宽度是x4)和SerDes_0_7(宽度是x4)

3、portid为14是因为取匹配到的SerDes里最小的值作为portid。 socketIdportId和RootBDF的对应关系是一个table,默认是在代码里override_root_bdf对象里,或者配置在PSR的BDFConfig对象里。数据来源是带内bios的同事bus号分配规划的。

1 个赞

由于大量社区举报,此话题被临时关闭至少 4 小时。