無料Wikiサービス | デモページ
Linuxなどのメモ書き

Fedora20と裸族の集合住宅


Fedora20で裸族の集合住宅 5Bay(CRSJ535EU3)を接続するまでの過程。

Fedora20をインストールした。

裸族の集合住宅 5Bay(CRSJ535EU3)をeSATAで接続したいのだが、起動中に

ata5.15: PMP product ID mismatch

のエラーが発生して、

ata5.00: disabled

結局、見えなくなってしまう。

この現象は、以前Fedora13の時にも発生していて、Kernel 2.6.33.8-149.fc13.x86_64だと正常に接続できていたのだが、2.6.34.9-69.fc13.x86_64に更新すると見えなくなっていた。そのうち解決されるかと思いほったらかしにしていたのだが、最近のカーネルでも状況は変わらないようだ。

動作しなくなった2.6.33.8->2.6.34.9のソース差分を見ていると、Port Multiplier関連でFBSがサポートされており、これが影響しているようだ。

集合住宅に搭載されているSATAコントローラーはdmesgによると

ata5.15: Port Multiplier 1.2, 0x197b:0x0325 r0, 5 ports, feat 0x5/0xf

VendorID 0x197b、DeviceID 0x0325でJMB321のようで、JMB321はFBSには対応していない模様。

dmesgを見るとFBSを有効にしようとしているので、FBS未対応のJMB321にFBSでアクセスしようとしているのが原因のようだ。

[    1.173618] ahci 0000:00:1f.2: FBS is enabled
[    1.174000] ata5.15: PMP product ID mismatch

カーネルの起動パラメータで、FBS/CBSを指定できるといいのだが、ないようなので、Fedora20と同じKernel 3.12.9をダウンロードして修正することにする。

修正箇所はdrivers/ata/libahci.cのahci_save_initial_config()関数。

	if (!(cap & HOST_CAP_FBS) && (hpriv->flags & AHCI_HFLAG_YES_FBS)) {
		dev_info(dev, "controller can do FBS, turning on CAP_FBS\n");
		cap |= HOST_CAP_FBS;
	}
cap &= ~HOST_CAP_FBS;  /* 追加 */

HOST_CAP_FBSを強制的に落として、AHCIホストコントローラをFBS未対応扱いにすることで、CBSで動作させるようにしている。

この修正を加えて、KernelをBuildしたら無事、集合住宅上のディスクにアクセスできるようになった。


複数のeSATAポートがあり、他方でFBS対応したデバイスがあるとそちらもCBSになってしまうので、本当なら、ahci_enable_fbs()あたりで、VendorID/DeviceIDをチェックして、JMB321ならfbs_enabledをfalseのままにするようにした方がよい。

そもそも、なぜFBS未対応のデバイスに対してFBSを有効にしようとしているかというと、AHCIコントローラのPxFBS Port(40h)をReadして、FIS based Switching Capable Port (FBSCP) bit (bit 22)でFBSサポートの有無を判定できるのだが、ここでなぜかFBSCP bitが立っているため、FBS対応デバイスとして扱ってしまっている。なぜ、FBSCP bitが立っているのかは不明。

static void ahci_enable_fbs(struct ata_port *ap)
{
	struct ahci_port_priv *pp = ap->private_data;
	void __iomem *port_mmio = ahci_port_base(ap);
	u32 fbs;
	int rc;

	if (!pp->fbs_supported)
		return;

	fbs = readl(port_mmio + PORT_FBS);
	if (fbs & PORT_FBS_EN) {
		pp->fbs_enabled = true;
		pp->fbs_last_dev = -1; /* initialization */
		return;
	}


参考

パッチ適用前(接続不可時)のdmesg(関連箇所のみ)

[    1.172446] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[    1.172521] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[    1.172541] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[    1.173153] ata5.15: Port Multiplier 1.2, 0x197b:0x0325 r0, 5 ports, feat 0x5
/0xf
[    1.173618] ahci 0000:00:1f.2: FBS is enabled
[    1.174000] ata5.15: PMP product ID mismatch

<snip>

[    6.635825] ata5.15: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[    6.635830] ata5.15: link online but device misclassified
[    6.636426] ata5.15: Port Multiplier vendor mismatch '0x197b' != '0x0'
[    6.636430] ata5.15: PMP revalidation failed (errno=-19)
[    6.636482] ata5.15: limiting SATA link speed to 1.5 Gbps
[   12.099160] ata5.15: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[   12.099167] ata5.15: PMP revalidation failed (errno=-19)
[   17.562496] ata5.15: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[   17.563125] ata5.15: Port Multiplier vendor mismatch '0x197b' != '0x0'
[   17.563130] ata5.15: PMP revalidation failed (errno=-19)
[   17.563180] ata5.15: failed to recover PMP after 5 tries, giving up
[   17.563232] ata5.15: Port Multiplier detaching
[   17.563240] ahci 0000:00:1f.2: FBS is disabled
[   17.563244] ata5.00: disabled



最終更新 2014/02/05 17:07:14 - kztomita
(2014/02/05 16:33:51 作成)