仙石浩明の日記

2008年7月14日

なぜ DELL PowerEdge SC440 は ICH7R の Watchdog Timer 機能を利用できないのか?

DELL PowerEdge SC440 は、 インテル 82801GR I/O コントローラー・ハブ (ICH7R) を使っている。 ところが、ICH7 にあるはずの ウォッチドッグ・タイマ (Watchdog Timer) 機能が利用できない。 例えば Linux だとブート時に 「reboot disabled by hardware」すなわち 「ハードウェアによってリブートが禁止されている」とカーネル・ログに出力される:

iTCO_vendor_support: vendor-support=0
iTCO_wdt: Intel TCO WatchDog Timer Driver v1.02 (26-Jul-2007)
iTCO_wdt: failed to reset NO_REBOOT flag, reboot disabled by hardware
iTCO_wdt: No card detected

この「reboot disabled by hardware」とは何なのかを調べてみると、 Intel I/O Controller Hub 7 (ICH7) Family Datasheet の 78ページ、 Table 2-23. Functional Strap Definitions (Sheet 3 of 3) に、

SignalUsageWhen SampledComment
SPKRNo RebootRising Edge of PWROK The signal has a weak internal pull-down. If the signal is sampled high, this indicates that the system is strapped to the "No Reboot" mode (ICH7 will disable the TCO Timer system reboot feature). The status of this strap is readable via the NO REBOOT bit (Chipset Config Registers:Offset 3410h:bit 5).

と書いてある。 つまり ICH7 の SPKR 端子 (Ball# A19) はスピーカ出力なのであるが、 入力端子としても使われていて、 PWROK 入力端子 (Ball# AA4) の立ち上がりエッジ時 (すなわち電源投入時) において SPKR 端子が H レベルであれば、 「No Reboot」モードに固定される。

「No Reboot」モードというのは、 TCO タイマ (つまり Watchdog Timer) による再起動を行なわないモードで、 通常はソフトウェアでこのモードの設定/解除が可能なのであるが、 SPKR 端子によって「固定される」と No Reboot モードのまま変更できなくなる。

具体的には、 「No Reboot」モードの設定/解除は、 ICH7 の「NO REBOOT bit」に 1/0 を書込むことによって行ない、 逆にこの「NO REBOOT bit」を読むことによって現在のモードを確認できる。 Linux カーネルの drivers/watchdog/iTCO_wdt.c に、 このビットを解除し、解除できたか確認するコードがある:

static int iTCO_wdt_unset_NO_REBOOT_bit(void)
{
        ...
        /* Unset the NO_REBOOT bit: this enables reboots */
        if (iTCO_wdt_private.iTCO_version == 2) {
                val32 = readl(iTCO_wdt_private.gcs);
                val32 &= 0xffffffdf;
                writel(val32, iTCO_wdt_private.gcs);

                val32 = readl(iTCO_wdt_private.gcs);
                if (val32 & 0x00000020)
                        ret = -EIO;
        ...
        return ret; /* returns: 0 = OK, -EIO = Error */
}

この iTCO_wdt_unset_NO_REBOOT_bit 関数は、 GCS (General Control and Status Register, オフセット 0x3410) のビット5 に 0 を書込むことによって No Reboot モードの解除を試み、 続いてこのビットを読んで正しく 0 に変わっているか確認し、 確認結果を返す。 つまりこの関数が正常に 0 を返せば、 ICH7 の Watchdog Timer が利用可能であることを示し、 -EIO を返せば、 (No Reboot モード固定なので) 利用不可能であることを示す。

というわけで、 DELL PowerEdge SC440 で Intel TCO Watchdog Timer が利用できない理由は、 電源投入時に SPKR 端子に電圧がかかってしまっていて、 No Reboot モード固定になっているためだろう。 SPKR 端子は内部的にプルダウン (20kΩ) されているので、 SPKR 端子につながっているスピーカを切り離せば SPKR 端子は L レベルになり、 Watchdog Timer が利用できるようになるはず。

PowerEdge SC440 の基板上のスピーカ (RDI # DMT-1206. 48Ω audio tone transducer) 周辺を見てみると:

PowerEdge SC440 intel NH82801GR ICH7R & RDI DMT-1206

intel NH82801GR と書いてあるチップが ICH7R で、 その左にある円筒形の部品がスピーカ (円周に沿って RDI-DMT-1206 と書いてある) である。

このスピーカを破壊して (一個 50円程度だし) 基板表面から取り除くという手も考えられるが、 基板のパターンを破損する恐れもある。 きちんと半田を融かして引き抜くには基板を裏返さなければならない。 ICH7R の A19 端子からスピーカまでの配線が特定できれば、 そのパターンを切るという手も考えられるが、 基板を裏返さずに表面に見える配線だけから特定するのは無理っぽい。

あいにく私の PowerEdge SC440 は現在の GCDメイン・サーバ なので (ちなみに サブ・サーバは HP ProLiant ML115)、 あまり長時間停止させるのは好ましくなく、 基板の取外しが必要となるような作業は (少なくとも今は) 躊躇している (格安サーバ なのだから、 実験用にもう一台 PowerEdge SC440 を買っておくべきだった)。 なんらかの方法 (もちろんスピーカの機能を損なわない方法がベスト) で 電源投入時の SPKR 端子を L レベルに設定し、 PowerEdge SC440 の ICH7R の Watchdog Timer を利用できたかたは、 トラックバック等をいただけると幸いである。

Filed under: ハードウェアの認識と制御 — hiroaki_sengoku @ 07:45

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.