[FreeBSD-users-jp 96412] Re: ICH7でSATA3のHDDがUDMA5(SATA1)で認識する

Tetsuya Ito chaltier @ agate.plala.or.jp
2019年 6月 28日 (金) 12:40:22 UTC


みよしさま

伊藤です。貴重なお時間を頂き感謝しかありません。
ありがとうございます。

ドライバとしてはAHCI対応でなければモードは表示できないんですね。
私にとっては非常に有用な情報でした。
ちなみに、pciconfの内容を再度確認しましたが、ABARの情報はありませんでした。

# 実は最初、ケーブルが古い規格だからかと金違いして
# 無意味な出費をしてました...。

お忙しいところありがとうございました。

以上です。

>  みよし です。
> 
> Tetsuya Ito <chaltier @ agate.plala.or.jp> writes:
> > はい。このマザーボードは AHCI 未対応なので IDE で間違いありません。
> 
>  なるほど…スピードが気になるようであれば何はともあれ AHCI で動かす
> 事を考えるのがいいのではないかと思いましたが、ICH7 は AHCI にはなれ
> ませんでしたか。失礼いたしました。
>  
>  あらためて atapci(ata-intel.c) が ICH7 で SATA デバイスの情報をどう
> 取得しているのかという観点でドライバのソースを少し眺めてみました。
> 
>  結論から言いますと smartctl の出力を信じたので大丈夫だと思います。
> ドライバの方はうまく情報を取得できていません。
> 
>  ドライバでうまく情報を取得するためには atapci0 に ABAR のリソースが
> 必要であるように思います。しかしこのマザーボードには以下で確認している
> 通り割り当てられていません。もっとも、non-AHCI な ICH7 ですので ABAR
> は無くていいと思うのですが、ドライバとしてはそれが無いと SATA1/2/3
> を区別する事ができず、実際のモードがどうであれ全て
> 
> >  ada0: 150.000MB/s transfers (SATA, UDMA5, PIO 8192bytes) ★
> 
> で表示するようです。
> 
>  以下少し長くなりますが、私が確認してみた事を書いてみます。
> 
> -------------------------------------------------------------------------
> > # pciconf -lvbc
> >
> >  atapci0 @ pci0:0:31:2:    class=0x010180 card=0xb0021458 chip=0x27c08086 rev=0x01 hdr=0x00
> >      vendor     = 'Intel Corporation'
> >      device     = 'NM10/ICH7 Family SATA Controller [IDE mode]'
> >      class      = mass storage
> >      subclass   = ATA
> >      bar   [20] = type I/O Port, range 32, base 0xf800, size 16, enabled
> >      cap 01[70] = powerspec 2  supports D0 D3  current D0
> 
>  まずここで報告されている atapci0 に関する出力はこれで全てという事で
> いいでしょうか? この情報からすると BAR は bar[20] があるだけのようです。
>  一方でドライバは ICH7 の SATA コントローラで SATA1/2/3 をちゃんと見
> 分けるためには BAR(5) (bar[24]==ABAR) のリソースを必要としているよう
> です。以下の辺りがその発端です。
> 
> [ata-intel.c] ==========================================================
>     208 static int
>     209 ata_intel_chipinit(device_t dev)
>     210 {
>     211     struct ata_pci_controller *ctlr = device_get_softc(dev);
> (中略)
>     266 
>     267     /* BAR(5) may point to SATA interface registers */
>     268     if ((ctlr->chip->cfg1 & INTEL_ICH7)) {
>     269         ctlr->r_type2 = SYS_RES_MEMORY;
>     270         ctlr->r_rid2 = PCIR_BAR(5);
>     271         ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2,
>     272             &ctlr->r_rid2, RF_ACTIVE);
>     273         if (ctlr->r_res2 != NULL) {
>     274             /* Set SCRAE bit to enable registers access. */
>     275             pci_write_config(dev, 0x94,
>     276                 pci_read_config(dev, 0x94, 4) | (1 << 9), 4);
>     277             /* Set Ports Implemented register bits. */
>     278             ATA_OUTL(ctlr->r_res2, 0x0C,
>     279                 ATA_INL(ctlr->r_res2, 0x0C) | 0xf);
>     280         }
> ========================================================================
> 
>  この BAR(5) すなわち ABAR のリソースがないとドライバは ICH7 で
> SATA1/2/3 を見分ける事ができません。その場合ドライバは固定値として
> 持っている
> 
> 	cpi->base_transfer_speed = 150000;
> 
> を使う事で
> 
> >  ada0: 150.000MB/s transfers (SATA, UDMA5, PIO 8192bytes) ★
> 
> と表示する事になるようです。
> -------------------------------------------------------------------------
> 
>  以上、だいぶ端折ってはいますが私が何か勘違いしている部分もあるかも
> しれません。気になる点がありましたらご指摘ください。
> 
>  ただこれは、ドライバが正確な情報を持っていないというだけであって、
> 実動作には問題無いと思います。すなわち正確には smartctl で表示される
> モードで動いていると思います。
>  ちなみに smartctl の方はこの辺りのドライバの話とは関係なく、IDENTIFY
> DEVICE で取得したデータから情報を得ているようですので、正確な情報が
> 表示できているはずです。
> 
> -- 
>  三好勝幸
> _______________________________________________
> freebsd-users-jp @ freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-users-jp
> To unsubscribe, send any mail to "freebsd-users-jp-unsubscribe @ freebsd.org"



freebsd-users-jp メーリングリストの案内