2314130_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2314130_ja-JP

2314130_ja-JP

LS1028A の 10g-qxgmii phy の起動

こんにちは。ls1028a で 10g usxgmii phy を起動しようとしていますが、いくつか問題が発生しています。この phy は、4x2.5Gb 構成で、usxgmii リンクを介して 4 つのポートを集約します。

私が使用している PHY は正常に動作しているようです。ファームウェアがロードされ、PHY はリンク パートナーがポートにコネクテッドであること検出し、パートナーとリンク速度をネゴシエートしますが、SoC との通信に失敗します。Phy は、usxgmii 自動ネゴシエーションだけでなく、usxgmii 経由で 4 つのポートを集約するように構成されています。

RCW で 0x13cc Serdes プロトコルを有効にしました。phy は Serdes レーン 1 にコネクテッドです。Serdes PLL は PLL ロックを正しく取得します。
以下は私が使用しているデバイス ツリー フラグメントです。


&enetc_mdio_pf3 {
	rgmii_phy0: ethernet-phy@1 {
		reg = <0x01>;
	};

	qxgmii_phy0: ethernet-phy@18 {
		reg = <0x18>;
		compatible = "ethernet-phy-ieee802.3-c45";
	};

	qxgmii_phy1: ethernet-phy@19 {
		reg = <0x19>;
		compatible = "ethernet-phy-ieee802.3-c45";
	};

	qxgmii_phy2: ethernet-phy@1a {
		reg = <0x1a>;
		compatible = "ethernet-phy-ieee802.3-c45";
	};

	qxgmii_phy3: ethernet-phy@1b {
		reg = <0x1b>;
		compatible = "ethernet-phy-ieee802.3-c45";
	};
};

&enetc_port1 {
	phy-handle = <&rgmii_phy0>;
	phy-mode = "rgmii-id";
	status = "okay";
};

&enetc_port2 {
	status = "okay";
};

&enetc_port3 {
	status = "okay";
};

&mscc_felix {
	status = "okay";
};

&mscc_felix_port0 {
	label = "swp0";
	managed = "in-band-status";
	phy-handle = <&qxgmii_phy0>;
	phy-mode = "10g-qxgmii";
	phys = <&serdes 1>;
	phy-names = "serdes";
	status = "okay";
};

&mscc_felix_port1 {
	label = "swp1";
	managed = "in-band-status";
	phy-handle = <&qxgmii_phy1>;
	phy-mode = "10g-qxgmii";
	phys = <&serdes 1>;
	phy-names = "serdes";
	status = "okay";
};

&mscc_felix_port2 {
	label = "swp2";
	managed = "in-band-status";
	phy-handle = <&qxgmii_phy2>;
	phy-mode = "10g-qxgmii";
	phys = <&serdes 1>;
	phy-names = "serdes";
	status = "okay";
};

&mscc_felix_port3 {
	label = "swp3";
	managed = "in-band-status";
	phy-handle = <&qxgmii_phy3>;
	phy-mode = "10g-qxgmii";
	phys = <&serdes 1>;
	phy-names = "serdes";
	status = "okay";
};

&mscc_felix_port4 {
	status = "okay";
};

&mscc_felix_port5 {
	status = "okay";
};

それは正しいようです。

いくつかのトレースを追加するために PCS lynx ソース コードを変更しました。以下は変更点の 1 つです。

static void lynx_pcs_get_state_usxgmii(struct mdio_device *pcs,
				       struct phylink_link_state *state)
{
	pr_info("%s\n", __func__);

	struct mii_bus *bus = pcs->bus;
	int addr = pcs->addr;
	int status, lpa;

	status = mdiobus_c45_read(bus, addr, MDIO_MMD_VEND2, MII_BMSR);
	if (status < 0)
		return;

	state->link = !!(status & MDIO_STAT1_LSTATUS);
	state->an_complete = !!(status & MDIO_AN_STAT1_COMPLETE);

	dev_info(&pcs->dev, "%s: link=%u, an_complete: %u\n", __func__, state->link, state->an_complete);

	if (!state->link || !state->an_complete)
		return;

	lpa = mdiobus_c45_read(bus, addr, MDIO_MMD_VEND2, MII_LPA);
	if (lpa < 0)
		return;

	phylink_decode_usxgmii_word(state, lpa);
}


例えばインターフェースを開くたびにswp0 ログには常に link = 1、an_complete=0 が報告されています。

自動ネゴシエーションが完了しない理由を突き止めるのに苦労しています。

私は Linux 側からカスタム ドライバを必要とする phy を使用していますが、現時点では、ドライバの read_status 関数でリンクがアップしていて速度が 1000 であることを報告しています。これは、phy が設計されたモードで動作するように事前構成されているため、厳密な config init を必要としないためです。

pcs_lynx が link = 1 を報告しているのに、autoneg を完了しないのはなぜでしょうか?


Re: 10g-qxgmii phy on LS1028A bring-up

Linuxメインラインのカーネルリンクで関連パッチを見つけました:コミット · torvalds/linux · GitHub

いくつかは NXP Linux-factory に統合されていません。

顧客はそれらを参照することができます。

Re: 10g-qxgmii phy on LS1028A bring-up

こんにちは。ご返信ありがとうございます。提供されたパッチを確認しましたが、そうではないようです。
私は linux-qoriq 6.6 を使用しており、パッチについては次のとおりです。
- 0001-arm64-dts-ls1028a-add-Lynx-10G-SerDes-nodes-on-NXP-b.patch - すでに 6.6 に含まれています
- 0001-arm64-dts-ls1028a-qds-replace-usxgmii-with-10g-qxgmi.patch - すでに 6.6 に含まれています
- 0001-net-dsa-felix-support-phy-mode-10g-qxgmii.patch - 6.6に既に含まれていますが、

+	if (ocelot->ports[port]->phy_mode == PHY_INTERFACE_MODE_USXGMII)
+		__set_bit(PHY_INTERFACE_MODE_10G_QXGMII,
+			  config->supported_interfaces);

felix.c 内ただし、phy_modeが10G_QXGMIIではなくUSXGMIIの場合にのみ重要です。

- 0001-net-pcs-lynx-accept-in-band-autoneg-for-2500base-x.patch - 10G-QXGMIIとは関係ありません

- 0001-net-pcs-lynx-no-need-to-read-LPA-in-lynx_pcs_get_sta.patch - 10G-QXGMII とは関係ありません

- 0001-net-pcs-lynx-support-phy-mode-10g-qxgmii.patch - まったく適用できません - 6.6 および 6.12 の phylink レイヤーは、メインラインの変更から大きく遅れています。この変更はいずれにせよ、大きな意味をもたらすものではない

他に何かアイデアはありますか? 何が間違っているのでしょうか?私は PHY のベンダーと連絡を取っていますが、ベンダーの観点からすると PHY は適切な構成で稼働しています。


Re: 10g-qxgmii phy on LS1028A bring-up

最新情報をお伝えしたいと思います。原因を突き止めようとドキュメントを参照していたところ、Serdes モジュール MDIO デバイスのレジスタ定義 (第 29.6 章 LS1028ARM.pdf) を見つけました。アドレス 0x1F には、QXGMII USXGMII レプリケーター レジスタと呼ばれるデバイスがあります。pcs-lynx ドライバーは、このデバイスを使用して USXGMII レプリケーターの機能を設定します。

pcs.lynx.c(lynx_pcs_config_usxgmii)

/* USXGMIIレプリケータのデバイス機能を設定します */

mdiobus_c45_write(バス、アドレス、MDIO_MMD_VEND2、MII_ADVERTISE、

MDIO_USXGMII_10G | MDIO_USXGMII_LINK |

MDIO_USXGMII_FULL_DUPLEX |

ADVERTISE_SGMII | ADVERTISE_LPACK);

 

このデバイスのアドレス空間をブラウズしているときに、QXGMII USXGMIIレプリケータに制御レジスタ(0x00h)があり、そこに「Auto_Negotiaton_Enable」ビット(29.6.5.3)があることに気付きました。制御レジスタ (CONTROL) (LS1028ARM.pdf)。

 

このレジスタをダンプしたところ、常に 0 になっていることがわかりました。好奇心から、このレジスタを変更してビット 12 を 1 に設定したところ、どういうわけか自動ネゴシエーションが開始されました。pcs-lynx はリンク パートナーの機能を確認し、リンク速度を検出し、他のデバイスからインターフェイスを ping することさえできました。これは解決策ではないと思いますが、私の問題を理解していただき、解決策を見つけるのに役立つかもしれないヒントとして、これを皆さんと共有します。なぜ設定されないのか理解できません。設定する必要があるのかどうかもわかりません。設定する必要がある場合、どのような状況で設定する必要があるのかもわかりません。

Re: 10g-qxgmii phy on LS1028A bring-up申し訳ありませんが、ここで質問を投稿するたびに、ランダムな回答が返ってくるので、時間を無駄にしているように感じます。以下の情報を「AE チーム」に転送してください。
まず、私は LS1028ARDB を使用していません。LS1028ARDB で 10G-QXGMII モードを有効にしようとしているとは決して言っていません。LS1028ARDB クアッド PHY はその目的向けに設計されていないため、それは不可能だからです。私は LS1028A でこれを実行しようとしていると言いましたが、これは適切なイーサネット PHY を備えた LS1028A をベースにした独自のボードを使用していることを意味します。
2 つ目 - レーン B で 10G-QXGMII プロトコルをサポートするように RCW を適切に構成しました。これを正しく実行できたことがなぜわかるのでしょうか。それ以外の場合、SoC は無効なプロトコル選択や PLL ロックなどにより再起動を要求するだけだからです。したがって、PLL クロックは良好であり、プロトコル選択が適切に設定されていると想定できます。次に、最初の質問で投稿したデバイス ツリーを AE チームに転送して、これが 1028AQDS-13BB または 128AQDS-13CC とまったく同じであることを AE チームに確認してもらいます。わかりましたか?それから、私がpcs-lynx.cにパッチを当てた時の情報(これは非常に重要です)を提供してください。QXGMII USXGMII レプリケーター制御レジスタ AN_EN = 1、AN_RESTART = 1 を設定するコードを追加すると、自動ネゴシエーションが魔法のように機能し始めました。それでは、AE チームに問い合わせてください - なぜ pcs-lynx.c によって設定されないのですか?そして、どのような状況で設定すべきでしょうか?あるいは、コード内にこれらのビットを設定する魔法の場所があるのかもしれません。
なぜそれについて尋ねているのでしょうか?あなたのマニュアル(LS1028ARM第29.7.1.6章QXGMII には、「USXGMII 自動ネゴシエーションを有効にするには、ポートごとに次のシーケンスを実行します。」と明記されています。
「QXGMII USXGMII レプリケータ制御レジスタ:
• AN_EN=1
• RESTART_AN=1"

では、コードのどこに設定されているのでしょうか?どのような状況ですか?
Re: 10g-qxgmii phy on LS1028A bring-up

こんにちは。ご返信ありがとうございます。提供されたパッチを確認しましたが、そうではないようです。
私は linux-qoriq 6.6 を使用しており、パッチについては次のとおりです。
- 0001-arm64-dts-ls1028a-add-Lynx-10G-SerDes-nodes-on-NXP-b.patch - すでに 6.6 に含まれています
- 0001-arm64-dts-ls1028a-qds-replace-usxgmii-with-10g-qxgmi.patch - すでに 6.6 に含まれています
- 0001-net-dsa-felix-support-phy-mode-10g-qxgmii.patch - 6.6に既に含まれていますが、

+ if (ocelot->ports[ポート]->phy_mode == PHY_INTERFACE_MODE_USXGMII)
+ __set_bit(PHY_INTERFACE_MODE_10G_QXGMII、
+ config->supported_interfaces);

felix.c 内ただし、phy_modeが10G_QXGMIIではなくUSXGMIIの場合にのみ重要です。

- 0001-net-pcs-lynx-accept-in-band-autoneg-for-2500base-x.patch - 10G-QXGMIIとは関係ありません

- 0001-net-pcs-lynx-no-need-to-read-LPA-in-lynx_pcs_get_sta.patch - 10G-QXGMII とは関係ありません

- 0001-net-pcs-lynx-support-phy-mode-10g-qxgmii.patch - まったく適用できません - 6.6 および 6.12 の phylink レイヤーは、メインラインの変更から大きく遅れています。この変更はいずれにせよ、大きな意味をもたらすものではない

他に何かアイデアはありますか? 何が間違っているのでしょうか?私は PHY のベンダーと連絡を取っていますが、ベンダーの観点からすると PHY は適切な構成で稼働しています。


linux-qoriq 6.6 https://github.com/nxp-qoriq/linux/tree/lf-6.6.yはls1028a で 10g-qxgmii 4x2,5Gb インターフェイスを使用するために必要なすべてのパッチが含まれていますか?

Re: 10g-qxgmii phy on LS1028A bring-up

AE チームからの次のアップデートを参照してください。

お客様は「10G-QXGMII」を使いたいのだと思いますが、これはUSXGMIIとは少し異なります。

お客様は以下を参照できます: arch/arm64/boot/dts/freescale/fsl-ls1028a-qds-13bb.dtso

「10G-QXGMII」は ls1028a-qds ボードでのみサポートされ、rdb ボードではサポートされません。

dtso ファイルには次のコメントがあります。

+ * レーン B のリワークを伴う LS1028A QDS ボードが必要です。
+ * コネクタのレーン A を PHY レーン C に再配線した SCH-30841 カードが必要です。
+ * セットアップでは、スロット 1 に SCH-30842 カード、スロット 2 に SCH-30841 カードが装着されています。


「10G-QXGMII」SerDesのドライバは、drivers/phy/freescale/phy-fsl-lynx-10g.cにあります。

顧客は、「git log -p --author=Vladimir」を実行してから 10G_QXGMII を検索することで、Linux メインラインの関連パッチを取得することもできます。


よろしくお願いします。

Re: 10g-qxgmii phy on LS1028A bring-up@yipingwang私の質問を見ていただくか、他の人に転送していただいてもよろしいでしょうか?Re: 10g-qxgmii phy on LS1028A bring-up問題がどこにあるかが分かりましたので、このトピックを閉じていただけます。私はウラジミールに連絡を取り、解決策がどうあるべきかについて合意しました。Re: 10g-qxgmii phy on LS1028A bring-up

LSDK開発チームからも返答をいただきました。

この顧客もアップストリームを通じて私に連絡してきました。

https://lore.kernel.org/netdev/CA+DkFDaW_wJ5p9_P7pMpz-8iE6xeKkdF-MQcd2m2GcyVUE3S4Q@mail.gmail.com/


そこに回答を投稿しました。


同じトピックに対して 2 つのコミュニケーション チャネルを開いたままにしておく必要はないと思います。

Tags (1)
No ratings
Version history
Last update:
‎02-28-2026 03:23 AM
Updated by: