服务器 2024-06-25

KunTai R522 服务器更换主板后无法识别PCIE设备

一、现网描述

1.1 环境描述

设备型号:KunTai R522

硬件配置:MegaRAID 9460-8i

                  MT27800 Family [ConnectX-5] *2

                  Riser(X16*1+X8*1) *2

                 12*3.5 SAS/SATA, Expander 06030682

                  4*2.5 SAS/SATA/NVME, Rear 03025VYV

软件配置:BMC:3.10.00.05

                  BIOS:KL4.009.KT.230803.R

                  KERNEL:4.19.90-23.29.v2101.ky10.aarch64


二、故障描述

2.1故障现象

客户于2024年6月11日出现一台R522服务器CPU UCE告警,需要更换主板

  第一次更换BIOS版本为KL4.009.KT.230803.R的主板后,BMC出现SAS线缆连接告警,且无法识别网卡和RAID卡的现象,BIOS正常识别PCIe设备,可正常进入操作系统;

  第二次更换BIOS版本为KL4.009.KT.230820.R的主板后,SAS线缆连接错误消除,BMC正常识别PCIE卡设备,服务器可正常进入操作系统,无异常告警;

  对比两次更换的主板,硬件物料一致,BMC版本均为3.10.00.05版本、CPLD为1.12版本,仅BIOS版本存在差异。


三、问题分析

3.1排查思路

1. 分析sel事件日志记录,发现日志打印存在SAS线缆告警的记录,该线缆用于RAID卡与前置硬盘背板的连接。

image.png

2. 分析card_info硬件日志,BMC下无法识别riser卡上安装的PCIe设备,包括网卡和RAID卡。

image.png

3. 分析systemcom系统串口日志,发现Cpu0CardType,Cpu1Riser2CardType,Cpu1Riser3CardType信息显示两次,并且两次显示的值不一致。

image.png

4. 根据以上日志可以看到BIOS的1783行代码和1809行代码,读取的Cpu0CardType,Cpu1Riser2CardType,Cpu1Riser3CardType信息有差异,问题出在BIOS侧。

5. 分析故障服务器日志发现,BIOS为KL4.009.KT.230803.R版本的串口日志在第1347行多了一条与问题相关的一行打印。

image.png

6. 分析“[1757L]xxx”打印,代码如下通过ReadCpldReg()接口由CPLD告知BIOS硬件Riser的在位状态,返回值0xD0标识Riser1和Riser2是在位状态,0xD0对应二进制是11010000,对应Bit7=1,Bit6=1,Bit5=0;

image.png

Cpu0CardType:因Bit7=1,表示Riser1在位,由BIOS给BMC发送命令获取该Riser的类型,由昆仑版本的[1783L]的打印Cpu0CardType=95为Riser1卡;

Cpu1Riser2CardType:因Bit6=1,表示Riser2在位,由BIOS给BMC发送命令获取该Riser的类型,由昆仑版本的打印[1783L]Cpu1Riser2CardType=95为Riser2卡;

Cpu1Riser3CardType:因Bit5=0,表示Riser3不在位,再进一步通过读CPLD的0x61寄存器判断该槽位接入的是哪种硬件设备,由昆仑版本的[1783L]的打印Cpu1Riser3CardType=4E可以看出目前当前环境接入硬盘背板为4NVME配置;

7. 分析昆仑版本中“[1809L]xxx”行打印信息,发现因代码Bug 从BMC端传回的Cpu0CardType、Cpu1Riser2CardType、Cpu1Riser3CardType变量值都会被Flash变量区中的“OemConfig1”结构体变量存储的值再次赋值,如果硬件上有变化,BMC端获取的值和flash变量的值就会有不同,这样就会导致错误。

image.png

当Cpu0CardType和Cpu1Riser2CardType变为99时,在BIOS侧都认为是无效值,而Cpu1Riser3CardType变为36时,则认为当前配置成了2X8的状态。

备注:Flash变量区中的“OemConfig1”中的Cpu0CardType、Cpu1Riser2CardType、Cpu1Riser3CardType的值是单板第一次启动时写入进去的,该变量掉电数据不消失,全擦升级BIOS固件可以更新为当前配置对应数据。 

8. 因Cpu0CardType为99,因此BIOS从BMC无法获取SlotTable信息,从而导致BIOS无法给BMC上报该Riser上的设备信息(包括SlotId、CPU号 、Bus、Dev、Func),在BMC侧的呈现就为识别不到设备;同理,Cpu1Riser2CardType和Cpu1Riser3CardType的变化,也会导致不上报或上报错误。

3.2 分析结论

更换主板后,iBMC无法识别PCIE卡的故障现象为昆仑BIOS KL4.009.KT.230803.R代码BUG所致,具体表现为如果硬件有变动(如主板、Riser卡、后置硬盘背板),BIOS以及系统下枚举设备的时候不依赖被替换的值,可正常显示PCIE设备,而BIOS给BMC上报会有依赖被替换的错误值,导致BMC无法识别PCIe设备,从而产生告警;如果硬件无变动,不会出现此问题。


四、问题解决

4.1解决办法

建议客户后续主板使用BIOS为更新基线后的S920S00K-KL4.009.KT.230820.R版本,此BIOS版本未合入该故障现象相关的代码,BIOS不会重新更新从BMC获取的Riser或后置硬盘背板的类型,同时也考虑主板厂家新基线会修复以及优化一些已知问题,建议后续现网固件持续更新,使用最新版BIOS版本。