CATERR 介绍

CATERR# 是 CPU 上的一个引脚,当CPU 有严重错误发生时,这个引脚会拉低(#表示低有效)。它在所有的Intel CPU 上都有。特别注意:这里是 OD 输出,是没法输出高电平,想要输出高电平,必须外部再接一个上拉电阻(pull-up resistor)。换句话说,如果测量这里为高或者低,务必记得在外面连接一个上拉电阻才能得到正确值【参考3】.

CATERR# 来自【参考1】

Intel 错误分类

首先是两大类:可以检测到的(Detected) 和 不可以检测到的(Undetected)。其中的 Undetected 是非常重要的,因为这种错误无法检测到的错误是没有办法捕捉到和处理的。进一步分为影响不大的 (Benign)和Critical(严重的,这种又被称作 Silent Data Corruption缩写 SDC)。作为系统设计者,必须努力降低这种情况的发生率。

更多的,我们需要关注Detected 这一类。其中又分作可纠正(Corrected)错误(例如,ECC 内存发现了错误,然后可以纠正为正确值)和不可纠正(Uncorrected)错误。例如,我们经常看到的蓝屏就是可以检测不可纠正错误。再进一步,不可纠正(Uncorrected)错误又分作可检测但是不可修正错误(DUE)和可检测不可纠正但可恢复错误(UCR,比如在从U盘Copy 数据到硬盘时,发生了错误,这个错误就是可以检测不可纠正,但是再次尝试读取还可以继续Copy,就是 UCR错误)。

显而易见,我们最大的敌人是DUE。

Intel 内置了 MCA(Machine Check Architecture)来帮助诊断DUE。这也是为什么在碰到稀奇古怪的问题时需要使用 CCA/DCI 的原因:CPU 死翘翘的,只能从不依赖CPU 的路径取得当前的错误。MCA提供了检测和记录:系统总线错误,内存错误,奇偶校验错误,Cache错误和TLB 错误等等。它是通过CPU内部的一组专用的MSR寄存器来实现的。例如:下面就是一组MCA 的 MSR 寄存器:

这里有一个MCA 应用的典型例子【参考4】。当问题发生的时候CATERR#会拉低,进一步检查出现的错误是ROB Timeout(这个有时候也被称作  “three-strike timeout”。3 strike 翻译为“三振出局” ,通常出现问题的时候CPU会进行多次尝试,尝试都失败后就放弃之)。这里提到的 ROB 在前面有介绍过,作用是:“Retirement (Reorder buffer, ROB) ,"主要用于记录μops的状态以及存储EU执行完成后返回的结果,然后按照in-order的顺序把执行结果写回寄存器”。ROB Timeout 的意思是有正在执行的指令超时。所有的指令发送给下一层的 Scheduler 来分配执行的时候会进行记录,如果15秒之后无法得到结果,会报告这个错误。

很明显这样的错误更容易出现在内存读写,IO读写等等和外围设备打交道的情景中。【参考4】提到的错误是发生在内存读写中,发生问题的内存地址是一个 PCIE设备映射的位置,最终配合PCIE 逻辑分析仪找到了原因。

作为BIOS工程师,大部分工作是在诊断定位问题,真正BIOS本身的问题少之又少,类似上面这种问题,如果能确定是某个PICE 的问题,下面直接交给对应工程师或者联系厂商就可以了。

参考:

  1. https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/10th-gen-core-families-datasheet-vol-1-datasheet.pdf
  2. https://www.intel.com/content/dam/www/public/us/en/documents/research/2012-vol16-iss-2-intel-technology-journal.pdf
  3. https://blog.csdn.net/zwl1584671413/article/details/83095044?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163100098916780265447231%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163100098916780265447231&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-1-83095044.pc_v2_rank_blog_default&utm_term=OD&spm=1018.2226.3001.4450 单片机I/O口推挽输出与开漏输出的区别(open-drain与push-pull)
  4. https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/rob-timeout-debug-guide-paper.pdf

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注