こんばんは。

CASIO の cassiopeia FIVA (206VL) を 5.4-RELEASE から 
6.1-BETA4 に上げたら hibernation (suspend to disk, S4BIOS)
ができなくなりました。
検索したところ、6.0-RELEASE でもだめという話も見つかったので、
RELENG_5_BP から RELENG_6_0_RELEASE までを試して回ったところ、

$FreeBSD: src/sys/dev/pci/pci.c,v 1.269 2004/12/02 08:07:12 njl Exp $
$FreeBSD: src/sys/dev/pci/pci.c,v 1.298 2005/09/21 19:47:00 imp Exp $
$FreeBSD: src/sys/dev/pci/pci.c,v 1.292.2.3 2005/09/27 05:57:47 imp Exp $

これらの影響であることが分かりました。結論としては、
6.0-RELEASE 以降では、/boot/loader.conf か /etc/sysctl.confに

hw.pci.do_power_resume="0"

と書くと hibernation ができるようになりました。

S4BIOS ができる機種は非常に珍しいのではないかと思うのですが、
kernel が BIOS に制御を移す前に HDD か ata0 の電源を切ってし
まい、BIOS が HDD に書き込めなくなり freeze するということな
のではないかと(本体を眺めている感じでは)思います。

「5.2.1 以降でまだ本家に取り込まれていない、いわさきさんの 
patch」として、fiva 使いの人々の頁に紹介されている、apm.c の 
patch は、有り/無し試してみましたが、無くても動いているように見えます。
apm.c の いわさきさん patch が元々どういう問題を解決していたのかを
実は知らないので、FreeBSD の acpi code が進歩していらなくなったのか
どうかは分からないのですが…。

いま試している様子をいちおうまとめておきます(有無の有用性を
自分で検証していない物がいっぱいですが)。

kernel config:
options PSM_HOOKRESUME
options PSM_RESETAFTERSUSPEND 
options CPU_ENABLE_LONGRUN

loader.conf:
hint.cbb.0.irq="11"
hint.cbb.1.irq="11" 
hw.acpi.pci.link.0.10.0.irq="11"
hw.acpi.pci.link.0.10.1.irq="11"
snd_t4dwave_load="YES"

/etc/sysctl.conf:
hw.pci.do_power_resume="0"
hw.pci.do_power_nodriver="1"
hw.acpi.reset_video=0
hw.acpi.lid_switch_state=S4
hw.acpi.standby_state=S4
hw.acpi.suspend_state=S4
hw.acpi.power_button_state=S4
hw.acpi.sleep_button_state=S4
hw.acpi.thermal.min_runtime=300
hw.acpi.battery.info_expire=30
 
先人に従い loader.conf でしつこく cbb の irq を 11 にしようと
している努力の後がありますが、実際には irq 4 と 5 が割り当て
られてしまいます。最近の書き方はどうするんでしたっけ…。

試しに PCcard modem と compact flash card を挿して見たところ、
irq storm が起こりますが、driver/kernel 側で抑止してくれ、
結果として modem も flash も使用可能でした。

というわけで fiva をまだお使いの方へ FYI です。

P.S.
冒頭では 5.4を…と書いていますが、実際には今まで 5.0-DP1 を
使っていて、5.4 は hibernation を試すためにいれただけなので、
いろんな物がかなり新鮮です。usb memory を2回以上抜き差ししても 
freeze しないとか、usb multi card reader が2番目以降の 
device も認識するとか…。
-- 
Hiroharu Tamaru

メールによる返信