一般人很难理解BIOS工程师的工作,甚至我工作二十多年,母亲还会疑惑:电脑这东西生产出来就是好的,为什么需要调试?
去年碰到了一个诡异的问题,以此为例可以看看BIOS工程师的工作。
去年的冬天比往年要冷一些。这个季节的业务量相比其他季节也会少很多,因为圣诞节是传统的销售旺季,在此之前货物必须达到量产阶段,生产出来的大量产品已经达到商铺等待终端客户的选择。
这时收到一封客户的邮件,他们碰到了问题需要支持:最近生产的一批板子,在启动过程中 SoC 会卡在内存初始化中(MRC)。因此,怀疑我们给他们提供的样品有批次问题。基本情况是:之前客户打过同样的板子,前一个批次完全没有问题,但是这一次发现大量的不良品,屏幕亮了然后就卡住了。从串口看到的信息是内存初始化失败。客户使用了三种内存:Samsung 的差不多1/4有问题;LongSys 的1/10 有问题。这个问题影响非常严重,需要我们马上解决。
厂商生产的是类似下面的主板,最终会装进笔记本电脑外壳中,图片中的红色方框就是 SoC (CPU + IO 芯片 + 显卡 等等集成在一起,通常叫 SoC。随着技术的进步,越来越多的功能集成在同一颗芯片中)

电脑主板,来源参考【1】

出于体积和性能的考量,内存颗粒会直接焊接在主板上,上面的图片中就是焊接在主板上的内存颗粒来源【参考2】
对于内存问题,串口Log 是关键,拿到Log 后我请 Memory 专家检查,发现错误集中固定在第一个内存控制器的第一个通道的Byte1上。对于同一块主板发生的错误是固定的,但是不同主板会发生在 RefPi / LockUI / DQS Training过程中。根据现象怀疑是下面问题导致的:
1. BIOS / MRC问题
2. Memory兼容性(D-die EOL)
3. Board设计(PI / layout)
接下来一个个确认。首先怀疑 BIOS/MRC 问题,升级 MRC 版本 (这里强烈推荐使用 Intel FSP 构建 BIOS,可以方便的验证问题),经过一些列实验,想象没有变化。虽然在这个过程中发现了客户设计上的一些瑕疵,比如,内存单路供电和双路供电设置的问题,但是这些对问题都没有影响。
继续检查发现客户选择的 Memory 颗粒是厂家年初计划准备 EOL 的,理论上应该不再使用,但是估计是产能/成本问题,现在仍在使用。客户快递给我们内存颗粒,在Intel RVP (参考板)上验证,工作正常。通常情况下内存出现问题,通过降频可以解决大部分。但是这招在这里不好用。
接下来,硬件工程师上场,仔细 review 电路,PCB 设计,然后进行仿真,结论是信号质量在正常范围内,排除板子设计问题。
又请客户更换板子上的内存颗粒,问题依旧。
最终客户将 SOC 焊接下来,放在我们的 RVP 上实验,结果 RVP 会出现同样的现象。继续实验,客户的将有问题的旧主板更换一个新的 SoC ,问题会消失。这就是俗话说的问题跟着 SoC 走了。客户更加怀疑我们给他们一批有问题的SoC。

图片来源【参考3】 RVP 是 Intel 制作的参考开发板,上面的SoC 无需焊接即可更换的,同时有些RVP 内存也是可以更换的。这种开发板因为出货量少,所以价格奇高,通常一片需要3000美元。
接着又拆下新的 SOC 更换为旧的 SoC,同样的问题再次出现。最终结论: SoC 确实坏了。
每年在研发阶段, Intel 都会提供价值2到3亿美元,大量的样品给厂商进行测试。这正是因为这样的大量的“撒币”,使得 Intel 处理器整体稳定性高于竞争对手。并且作为终端用户或者开发者,不太容易碰到独一无二奇怪的问题。这些样品无论是服务器,还是台式机笔记本,我从来没听说过有批量损坏的问题。但是目前确认 SoC 坏了,不是一块,而是至少有十片以上。
最终只能联系 CPU的生产工厂,对于他们来说,批量性的样品损坏也是前所未闻的事情。在怀疑声中,有问题的 SOC 快递给了 CPU 工厂,请他们帮助分析。经过一周的等待,最终的结论是:DDR PHY区域存在硅裂纹(silicon crack)。
前面的解决问题的过程中,客户快递给我一台有问题的整机,根据CPU工厂的提示,我用显微镜查看:在板子 SoC 的角落同样有一个破碎的痕迹(例如,下图中指示位置)。这个痕迹估计只有苍蝇屎大小。如果真是出厂时 SoC 就已经损坏,只能是有人用小锤子在显微镜的帮助下,在每一个 SoC 上角认真仔细的锤过。

图片并非有问题的SoC, 只是用于说明问题来源 【参考4】,中间凸起部分会和散热器紧密接触。
我们把这边拍到的照片发给客户,客户用手上的显微镜去检查,果然,在其他有问题板子的 SoC上也发现了同样的损坏。经过一天的沉默,最终客户确认手上的散热模组有问题:两家供应商提供的散热模组,一家提供的存在尺寸问题,当按照特定顺序安装的时候会压坏 SoC,这就是硅裂纹的来源。
真相让一切奇怪的现象都能得到完美解释:之前生产的那一批没问题是因为用的没有问题的那一家散热模组;后面换成有问题的散热模组,操作工在安装的时候顺序手法不同,有些人操作之后会损坏,有些人安装之后不会。随机损坏的结果让人怀疑是SOC 本体的问题。
前后花了将近2个月,终于找到了问题答案。回到最初的问题作为BIOS工程师,整个过程中最重要的作用可能是:拿着板子去看了一下显微镜吧?
参考: