こんにちは、
現在使用しているもの:
当社は、既存製品向けにLS1021A TWRプラットフォームをベースにした新しい通信ボードを開発しています。この新しい通信ボードでは、 eth1インターフェースはSGMIIを介してMAC-to-MAC/PHYレス構成で外部イーサネット・スイッチICにコネクテッドされています。既存の通信ボードでは、代わりにMarvell PHYを使用して、eth1上のSGMIIを介してホストプロセッサに接続されています。
私たちは、共通のU-Bootを使用して両製品をサポートしつつ、Linuxがさまざまなeth1トポロジーを正しく処理できるように努めています。
当初、新しい通信ボードを動作させるために、以下のDTS変更を行いました。
U-Bootでは、arch/arm/dts/ls1021a-twr.dtsiでenet0とenet1の両方に同じTBIハンドルを使用するように強制しました。
カーネルDTS(arch/arm/boot/dts/ls1021a-twr.dts)では、eth1が独自のTBIハンドルと固定リンク記述を使用するように変更しました。
また、gianfar.cも修正しました。eth1ではTBIオートネゴシエーションを無効にしつつ、通常のPHY接続CASEではオートネゴシエーションを有効にしたままにする。
上記の回避策により、プロセッサは新しい通信ボード上の外部スイッチと通信できるようになりました。
U-Bootは2つの製品間で共有する必要があり、既存の製品ではeth1に実際のPHYが接続されているため、U-Bootが通常のインターフェースごとのTBIバインディングを使用する必要があります。
U-Bootでは、インターフェースを次のように記述する必要があります。
しかし、U-Bootでこの変更を行うと、プロセッサは新しいMAC間/固定リンク通信ボード上のイーサネットスイッチとの通信を停止してしまう。
eth0で実際のPHYを使用し、eth1で固定リンク/MAC間SGMII接続を使用するインターフェースの場合の推奨される処理方法について理解したいと考えています。
ご回答ありがとうございます。
これらの変更を加え、さらにテストを試みましたが、依然として同じ問題が発生しています。
両方のデバイスに同じubootイメージを使用したいので、enet1はPHY接続とPHYレス接続の両方で同じubootを使用することになります。
uboot から enet1 の定義を削除して、enet の設定を完全にカーネルで処理するように試みましたが、これは固定 PHY の場合はうまくいきましたが、PHY が接続されている場合はうまくいきませんでした。PHY構成は正しく機能しているようですが、TBI構成が機能していないようです。
1. この状況をどのように対処するのが良いと思いますか?
2. ubootでenetインターフェースが全く設定されていなかった場合、カーネルでenetインターフェースを設定するために他に何か必要なことはありますか?
よろしくお願い申し上げます。
1. fixed-link は、Linux dts で以下のように宣言できます。
&enet1 {
phy-mode = "sgmii";
管理対象 = "固定リンク";
固定リンク
{ speed = <1000>; full-duplex; pause; }
;
ステータス = "正常";
};
2. はい、U-Boot はポートごとの TBI を初期化する必要がありますが、固定リンクの場合は TBI の自動ネゴシエーションを無効にする必要があります。
3. リンクが修復されたら、gfar_configure_serdesでPCS/TBIをリセットする必要があります。例:
if (is_fixed_link)
{ phy_write(phydev, MII_BMCR, BMCR_RESET); udelay(10); phy_write(phydev, MII_BMCR, BMCR_FULLDPLX | BMCR_SPEED1000); ... // 自動ネガを無効にする }
ありがとう
1.ハードウェアのバリアント両方で同じU-Bootイメージを使用しながら、enet1を完全に削除するのではなく、U-Boot内で最小限の初期化状態にしておくことをお勧めします。
具体的には:
a. U-Bootでenet1のMACとPCS/TBIの初期化を保持する。
b.U-Bootでは、PHY固有の設定(遅延調整、LED設定、ベンダー固有のレジスタなど)は避けてください。
c.Linuxカーネルのデバイスツリーにenet1が使用するかどうかを決定させる。
固定リンク(PHYなしの場合)、または
phy-handle を介した実際の外部 PHY。
2. はい、いくつかの追加的な考慮事項が適用されますが、それはある程度に限られます。
U-BootでENETインターフェースが全く設定されていない場合でも、以下の条件を満たせばLinuxカーネルはMACとPHYを初期化できます。
デバイスツリーはインターフェースを正しく記述しています(ステータス=「okay」、適切なphy-mode、有効なphy-handleまたはfixed-link)。
クロック、pinctrl、およびMDIOは適切に定義されています。
PHY自体はカーネルドライバによってアクセス可能であり、サポートされています。
しかし、Linuxドライバは通常、PCS/TBI(またはSerDes)ブロックを完全に初期化しません。多くのSoC、特にSGMII/RGMII構成の場合、カーネルはPCS/TBIがブートローダーによって既に使用可能なモードになっていることを前提としています。
よろしくお願いします。