Armadilloフォーラム

Armadillo-X1 PCIeのホットプラグ対応可否と、対応方法について

hideaki.aota

2017年10月27日 19時48分

使用カーネルバージョン : v3.14-x1-at17

お世話になります、青田と申します。
ホットプラグ操作にて、PCIeデバイスをとっかえひっかえ、動作させるシステムを検討しています。

当方で後述の試行錯誤したのですが、実現させることが出来ておりませんで
・Armadillo-X1にてPCIeのホットプラグに対応できるのか
・ホットプラグに対応できるのであれば、対応する方法
に、ついてご教示頂きたいです。

試行錯誤の内容は以下です。(長文すいません)
(前提①pciutilsをインストールし、PCIeデバイスを接続した状態で電源ONし、lspciによりデバイスが接続されていることを確認)
(前提②PCIeデバイスのドライバをinsmodし、動作させられることを確認)
(前提③# echo 1 > /sys/bus/pci/devices/0000\:00\:00.0/remove で、00:00.0 のデバイスがlspciより無くなることを確認)
(前提④PCIeデバイスを抜き、再び差し、# echo 1 > /sys/bus/pci/rescan で、00:00.0 のデバイスがlspciに再び現れることを確認)

・前提③, ④の操作を行った後にドライバのinsmodを行うと、insmodに失敗する
 それは、前提③, ④を行う前にドライバをinsmodしている・していないに関わらず発生する
・PCIeデバイスを接続しない状態で電源ONし、その後にPCIeデバイスを接続すると、そもそもlspciで表示されないことが判明
 上記rescanをしても表示されず
・Linuxのカーネルコンフィグにて、HOTPLUG_PCI_PCIEなるsymbolが在ることを知るが、Armadillo-X1ではmenuconfigでそれを操作出来ない。
 HOTPLUG_PCIがunknownのせい?
 また、そのsymbolにより対応出来るようになるのかは、調べきれず、不明
 (カーネルコンフィグ検索画面より)
│ Symbol: HOTPLUG_PCI [=HOTPLUG_PCI] │
│ Type : unknown │
│ │
│ │
│ Symbol: HOTPLUG_PCI_PCIE [=n] │
│ Type : boolean │
│ Prompt: PCI Express Hotplug driver │
│ Location: │
│ -> Bus support │
│ (2) -> PCI Express Port Bus support (PCIEPORTBUS [=y]) │
│ Defined at drivers/pci/pcie/Kconfig:16 │
│ Depends on: HOTPLUG_PCI && PCIEPORTBUS [=y] │

ご助力頂ければありがたいです。

以上です、よろしくお願いいたします。

コメント

at_mizo

2017年10月30日 9時14分

溝渕です。

> ・Armadillo-X1にてPCIeのホットプラグに対応できるのか
> ・ホットプラグに対応できるのであれば、対応する方法
> に、ついてご教示頂きたいです。

PCIeドライバがホットプラグに対応していません。

少なくとも、
- 1pinの論理によるconnect/remove検出
- PCIe電源制御
の実装は必要になるかと思います。

以上です。

hideaki.aota

2017年11月7日 17時37分

溝渕様

ご回答ありがとうございます。青田です。
当方の対応が遅くなり申し訳ありません。

ご回答頂いた旨について理解を試みたのですが
こちらの知識不足もあり理解することが出来ませんでした。

念の為の確認をさせて頂きたいのですが、つまりは
- 1pinの論理入力を受けて、PCIeデバイスのconnect/removeを検出する
- 接続されたPCIeデバイスの電源を制御する
を、行うPCIeドライバを、カーネルコード上でコーディングして作成すれば実現出来る、というのが
溝渕様のご回答の主旨で合っていますでしょうか?

そうなのであれば、重ねての質問となりますが
どうすれば、その様に振る舞うドライバが作成できるか、お示し頂くことは可能でしょうか?

以上です、よろしくお願いいたします。

at_mizo

2017年11月8日 8時20分

溝渕です。

> 念の為の確認をさせて頂きたいのですが、つまりは
> - 1pinの論理入力を受けて、PCIeデバイスのconnect/removeを検出する
> - 接続されたPCIeデバイスの電源を制御する
> を、行うPCIeドライバを、カーネルコード上でコーディングして作成すれば実現出来る、というのが
> 溝渕様のご回答の主旨で合っていますでしょうか?

いえ。違います。

> 少なくとも、

と記載した通り、PCIeドライバにホットプラグの機能が無いため、最低でもお
伝えした2つの機能実装は必要になるということを意図しています。

そのため、これだけ実装すれば実現できるといったものではありません。

理解仕辛い文章で混乱を与えてしまい、申し訳ございません。

hideaki.aota

2017年11月9日 10時29分

溝渕様

ご回答ありがとうございます、青田です。

申し訳ありませんが、また、念の為確認させて下さい。
(認識のズレが無い様に、何度か質問のやり取りを
 させて頂くかもと思っております、ご容赦下さい。)

前にお示し頂いた、2つの機能実装は
Armadillo-X1カーネル内のPCIeドライバのコードを編集し
カーネルビルドして盛り込むものなのかな、と理解しているのですが
この部分の理解は、正しいでしょうか?

at_mizo

2017年11月9日 12時35分

溝渕です。

> 申し訳ありませんが、また、念の為確認させて下さい。
> (認識のズレが無い様に、何度か質問のやり取りを
>  させて頂くかもと思っております、ご容赦下さい。)

理解してもらうのを目的に返信しているので、気にしないでください。

> 前にお示し頂いた、2つの機能実装は
> Armadillo-X1カーネル内のPCIeドライバのコードを編集し
> カーネルビルドして盛り込むものなのかな、と理解しているのですが
> この部分の理解は、正しいでしょうか?

正しいです。

ただし前述の通り、2つの機能実装を行っても(他にも未実装機能がある等の理
由で)ホットプラグ機能が動作しない可能性があることにご注意ください。

hideaki.aota

2017年11月13日 9時54分

溝渕様

お世話になります、青田です。
ご回答ありがとうございます、下記の通りだと認識しました。

・Armadillo-X1 + カーネル v3.14-x1-at17 では、現状ホットプラグ動作は出来ない
・カーネルコード内に存在する、PCIeドライバ部分を編集することで、PCIeホットプラグ対応出来るかもしれないが
 これは、実際にそれで対応出来た、という物ではない。
 何とか方法を調べて、それを盛り込んでも、他の理由によりPCIeホットプラグに対応出来ない可能性はある

頂いた情報を踏まえて、ホットプラグ対応を進めて課題を解決するのが適当か、から再検討したいと思います。

ご協力ありがとうございます、大変助かりました。
以上です、よろしくお願いいたします。

at_mizo

2017年11月13日 10時01分

溝渕です。

> ・Armadillo-X1 + カーネル v3.14-x1-at17 では、現状ホットプラグ動作は出来ない
> ・カーネルコード内に存在する、PCIeドライバ部分を編集することで、PCIeホットプラグ対応出来るかもしれないが
>  これは、実際にそれで対応出来た、という物ではない。
>  何とか方法を調べて、それを盛り込んでも、他の理由によりPCIeホットプラグに対応出来ない可能性はある

上記ご認識で問題ありません。

あまりお力になれず申し訳ございません。