为什么当TCM卡存在时,清完CMOS后不报CMOS checksum error ?

一.Bug report


SVE03出货时会有两种型号,have TCM和no TCM,他们共用一套BIOS code。SIT最近反馈了一个issue,使用拔CMOS battery的方式清CMOS,有TCM的机台上不会报CMOS checksum error,而 no TCM的机台则没有此问题。


二.Bug Analysis


我首先想到的是这个问题和TCM卡有什么关系,可是想不出来,那就只能使用笨方法去追code了。于是去子程序postCmosTest里丢debug code,发现一个现象,这个程序在整个POST过程中被调用了两次,第一次会check到error,第二次则不会。

 

为什么会被调用两次呢,查到系统跑到49那里时会做一次reset的动作,而postCmosTest 是在49之前跑的,所以reset完毕后又会被跑一次。突然记起TCM卡init完毕时也会发一次reset,经过验证,49附近就是初始化TCM的地方。豁然开朗。

 

为什么第二次check不到error呢,原因是第一次error后,CMOS已经被load default了。


 

三.How to fix it?

 

解决办法很简单,创建一个CMOS bit作为记checksum error的flag,这个flag的default值设为0.在第一次check到error时,把这个flag置1,再在检测到checksum ok之后的那里多加一项对这个flag的判断,如果为1,则cmos error。因为系统是在49 那里reset的,所以在49之后的任何地方,比如55,59那些在整个post阶段只跑一次的程序里把这个flag清掉就万事ok了。为什么要清掉?不清的话以后每次开机都会报cmos error的哦。

你可能感兴趣的:(BIOS,debug心得)