基板: S32G-VNP-RDB3をベースにしたカスタムS32G399Aモジュール。PFE_MAC1 RGMII(PE_02–PE_13)を介してNXPのSJA1110Aスイッチポート2にコネクテッド、DSA CPUポートとして設定されていました(in-tree sja1105ドライバ、カーネル6.x BSP43.0)。
トポロジー:
- PFE_MAC0: SerDes1 レーン 1 経由の SGMII、モード 1
- PFE_MAC1: RGMII から SJA1110A ポート 2 (DSA CPU ポート) — 問題のポート
- PFE_MAC2: SerDes0レーン1経由のSGMII
S32G MACは以下のように構成されています。
+---------+--------------+------------------+
| | レーン0 | レーン1 |
+---------+--------------+------------------+
| SERDES0 | GMAC (SGMII) | PFE_MAC2 (SGMII) |
| SERDES1 | 未使用 | PFE_MAC0 (SGMII) |
+---------+--------------+------------------+
完全なU-Bootハードウェア構成:
hwconfig=pcie0:mode=sgmii,clock=ext,fmhz=100,xpcs_mode=both;pcie1:mode=sgmii,clock=ext,fmhz=100,xpcs_mode=0
pfeng_mode=enable,sgmii,rgmii,sgmii
port@2用DTS(スイッチ側):
port@2 {
reg = <2>;
label = "OBC-1";
ethernet = <&pfe_netif1>;
phy-mode = "rgmii";
rx-internal-delay-ps = <0>;
tx-internal-delay-ps = <0>;
fixed-link {
speed = <1000>;
full-duplex;
};
};
pfe_netif1 (MAC側) の DTS:
&pfe_netif1 {
phy-mode = "rgmii";
status = "okay";
fixed-link {
speed = <1000>;
full-duplex;
};
};PFE_MAC1(pfe1)リンク状態 — Linux/ドライバーレベルで確認・正しく設定:
起動時のdmesg:
[ 5.264108] pfeng 46000000.pfe: netif name: pfe1
[ 5.274127] pfeng 46000000.pfe: netif(pfe1) linked phyif: 1
[ 5.279692] pfeng 46000000.pfe: netif(pfe1) mode: std
[ 5.284853] pfeng 46000000.pfe: netif(pfe1) HIFs: count 1 map 02
[ 6.012884] pfeng 46000000.pfe pfe1 (uninitialized): Subscribe to HIF1
[ 6.019438] pfeng 46000000.pfe pfe1 (uninitialized): Host LLTX disabled
[ 6.026270] pfeng 46000000.pfe pfe1 (uninitialized): Enable HIF1
[ 6.032374] pfeng 46000000.pfe pfe1 (uninitialized): setting MAC addr: 00:04:9f:be:ef:01
[ 6.040545] pfeng 46000000.pfe pfe1 (uninitialized): PTP HW addend 0x80000000, max_adj configured to 46566128 ppb
[ 6.060939] pfeng 46000000.pfe pfe1 (uninitialized): Registered PTP HW clock successfully on EMAC1
[ 6.070441] pfeng 46000000.pfe pfe1: registered
[ 6.207482] pfeng 46000000.pfe pfe1: configuring for fixed/rgmii link mode
[ 6.214306] pfeng 46000000.pfe pfe1: Set TX clock to 125000000Hz
[ 6.220158] pfeng 46000000.pfe pfe1: Link is Up - 1Gbps/Full - flow control off
[ 5.257995] pfeng 46000000.pfe: EMAC0 interface mode: 4
[ 5.290707] pfeng 46000000.pfe: EMAC1 interface mode: 9
[ 5.323320] pfeng 46000000.pfe: EMAC2 interface mode: 4
[ 5.354571] pfeng 46000000.pfe: Interface selected: EMAC0: 0x4 EMAC1: 0x9 EMAC2: 0x4
[ 5.382609] pfeng 46000000.pfe: TX clock on EMAC0 for interface sgmii installed
[ 5.390050] pfeng 46000000.pfe: RX clock on EMAC0 for interface sgmii installed
[ 5.404998] pfeng 46000000.pfe: TX clock on EMAC1 for interface rgmii installed
[ 5.419918] pfeng 46000000.pfe: Defer enabling of RX clock on EMAC1 for interface rgmii (ret: -5)
[ 5.434235] pfeng 46000000.pfe: TX clock on EMAC2 for interface sgmii installed
[ 5.448374] pfeng 46000000.pfe: RX clock on EMAC2 for interface sgmii installed
[ 5.667058] pfeng 46000000.pfe: EMAC timestamp external mode bitmap: 0
[ 5.998447] pfeng 46000000.pfe pfe0 (uninitialized): Registered PTP HW clock successfully on EMAC0
[ 6.060939] pfeng 46000000.pfe pfe1 (uninitialized): Registered PTP HW clock successfully on EMAC1
[ 6.130296] pfeng 46000000.pfe pfe2 (uninitialized): Registered PTP HW clock successfully on EMAC2
[ 6.215040] pfeng 46000000.pfe: RX clock on EMAC1 for interface rgmii installedLive DTBは、カーネルがソースDTSと一致することを確認します。
# cat /proc/device-tree/soc/pfe@46000000/ethernet@11/phy-mode
rgmiiip a の出力:
6: pfe1: mtu 1536 qdisc mq state UP group default qlen 1000
link/ether 00:04:9f:be:ef:01 brd ff:ff:ff:ff:ff:ff
inet6 fe80::204:9fff:febe:ef01/64 scope link
SJA1110 DSAスレーブポートはすべて正しく列挙されました。これにより、sja1105のDSAドライバが正常にバインドされていることが確認されました
pfe1をCPUポート/DSAマスターとして設定し、静的設定を誤りなく解析しました。
クロックツリー: TXおよびRXのRGMIIクロックが両方とも有効で、正しいコンシューマーに接続されています。
# cat /sys/kernel/debug/clk/clk_summary | grep pfe1
pfe1_tx_mii 0 0 0 125000000 0 0 50000 Y deviceless no_connection_id
pfe1_rx_mii 0 0 0 125000000 0 0 50000 Y deviceless no_connection_id
pfe1_tx_rmii 0 0 0 125000000 0 0 50000 Y deviceless no_connection_id
pfe1_rx_rmii 0 0 0 125000000 0 0 50000 Y deviceless no_connection_id
pfe1_tx_rgmii 1 1 0 125000000 0 0 50000 Y ethernet@11 tx_rgmii
pfe1_rx_rgmii 1 1 0 125000000 0 0 50000 Y ethernet@11 rx_rgmii
pfe1_tx_sgmii 0 0 0 125000000 0 0 50000 Y deviceless no_connection_id
pfe1_rx_sgmii 0 0 0 125000000 0 0 50000 Y deviceless no_connection_id SO pfe1はUP、LOWER_UP、DSAマスターとして正しくSJA1110バインドされ、RGMIIモードで動作しています
両方のクロックが有効になっている場合 — これによりPFE1がダウン、アンバウンド、または誤った設定で
Linux/ドライバレベル。未解決の問題は、フレームが実際に
PFE_MAC1とSJA1110ポート2間の物理的なRGMIIピン。
問題:
PFE_MAC1とSJA1110ポート2間のRGMIIバスでは、バスの両側の機器がすべて独立して稼働しているにもかかわらず、どちらの方向にもトラフィックが流れていないようです。
テスト1 — S32G ->スイッチ方向
セットアップ:
ip addr add 192.168.1.100/24 dev EPS-100bt1-9
ethtool -S pfe1 | grep '^ p02_' > before
tcpdump -i pfe1 -e -nn -c 20 > capture.txt &
arping -c 10 -I EPS-100bt1-9 192.168.1.6
ethtool -S pfe1 | grep '^ p02_' > after# arping -c 10 -I EPS-100bt1-9 192.168.1.6
ARPING 192.168.1.6 from 192.168.1.100 EPS-100bt1-9
Sent 10 probes (10 broadcast(s))
Received 0 response(s)$ cat capture.txt
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on pfe1, link-type NULL (BSD loopback), snapshot length 262144 bytes
18:08:36.352535 AF Unknown (4294967295), length 64:
0x0000: ffff 0004 9fbe ef01 dadb 0c09 0806 0001 ................
0x0010: 0800 0604 0001 0004 9fbe ef01 c0a8 0164 ...............d
0x0020: ffff ffff ffff c0a8 0106 0000 0000 0000 ................
0x0030: 0000 0000 0000 0000 0000 0000 ............
[... 9 more identical ARP frames, all correctly DSA-tagged (dadb 0c09) and well-formed,
plus one unrelated IPv6 background frame interleaved ...]# diff before after
--- before
+++ after
@@ -1,4 +1,4 @@
- p02_: 1
+ p02_: 0
p02_n_runt: 0
p02_n_soferr: 0
p02_n_alignerr: 0# grep n_rxfrm before after
before: p02_n_rxfrm: 0
after: p02_n_rxfrm: 0
テスト2 — スイッチ-> S32G方向
セットアップパートナーボードは別のスイッチベースのSJA1105ボードです。
# ping -c 10 -I t1-6 192.168.1.100 (run on a separate SJA1105/1110-family switch board
connected to our port 9 / 100BASE-T1 / EPS-100bt1-9)# diff before after (ethtool -S EPS-100bt1-9)
- n_rxfrm: 0
+ n_rxfrm: 9 <- port 9 physically received 9 frames from the wire # diff before after
- p02_n_txfrm: 0
+ p02_n_txfrm: 9 <- switch fabric forwarded all 9 toward the CPU port# tcpdump -i pfe1 -e -nn -c 20 (same window)
listening on pfe1, link-type NULL (BSD loopback), snapshot length 262144 bytes
[-- nothing captured --]
ポート9は9つの実際のフレームを受信しました。ファブリックは9つすべてをポート2に転送しましたが、
pfe1には何も届きませんでした。
SO、SJA1110自身のファブリックカウンターでは、ポート9からポート2の出口へ9フレームすべてが正常に転送されたことが示されています。
しかし、このテスト中にS32Gでtcpdump -i pfe1 -e -nnを実行すると、何も受信されなかったことが示されます。
つまり、S32G側のDSA/ソフトウェア層は送信していると認識しています(CASE 1)。スイッチの内部ファブリックはCPUポートに向かって送信していると認識しています(CASE 2)。どちらの側も、相手側が物理的なRGMIIバスを介して実際に何かを受信したという確証は得ていない。このバスに隣接する各層は個別に機能します。バス自体は、どちらの方向にも正常に通過したことが確認されていません。
これまでに除外されたこと:
- pfeng_mode / hwconfig (xpcs_mode) — 正確であることが確認されています。EMAC1モードはRGMII(0x9)であり、SGMIIではありません(以前はSerDes1でxpcs_mode=両方がPFE_MAC1のXPCSSをSGMIIに強制的に入ったためSGMIIとして誤って設定されていました。PFE_MAC0単独でXPCS0が必要なため、xpcs_mode=0に修正します)
- PFE_MAC1 TX/RXクロックのイネーブルメント — clk_summaryで正しいレート(125MHz)で有効化が確認されています
- DSAタグ付けおよびCPUポートバインディング — 動作確認済み(netdevのポートが存在し、フレームにDSAヘッダーで正しい宛先ポートがタグ付けされる)
- SJA1110内部ファブリック/転送 — 実際の外部トラフィックを用いて他の2つのポート(9と2)間で動作が確認されました
- BASE-T1リンクパートナー — 実際のフレームをスイッチに渡すことを確認しました(ポート9 n_rxfrm実際のワイヤートラフィックからのインクリメント)
まだ排除されていないこと/未解決の疑問:
- MAC側とスイッチ側の両方で内部遅延ゼロ(rx/tx-internal-delay-ps=0、単に「rgmii」ではなく「rgmii-id」)の1000 Mbps RGMIIがボードトレース長による遅延なしに互換性があるかどうか — タイミングマージンテストとしてリンクを100 Mbpsに強制的に落とす試みはまだしていません
1. 1000 Mbps RGMII において、両端で rx/tx-internal-delay-ps=0 は正常に動作すると想定されますか?それとも、PCB が明示的に遅延を考慮していない限り、この組み合わせでは通常、遅延補償が必要になりますか?
2. 他に何か設定漏れはありますか?
必要であれば、完全なレジスタダンプを提供いたします。PE_02-13バスをロジックアナライザで探査する前に、何かアドバイスをいただけるとありがたいです(基板レイアウトのためプローブへのアクセスが限られているため、現状はあまり便利ではありません)。
ありがとう。
こんにちは、 @Joey_z さん、@db16122 さん。回路図の関連部分をここに添付します。接続の流れは以下のとおりです。
PFE_MAC1には、s32g3_pfe_mac1_connections.pngに示されているS32G3チップ上のPE_02からPE_13を使用します。基板間コネクタ( Board_to_board_connectorに示されています)。png)を使い、これらの信号をスイッチを持つ別のボードにルーティングします。スイッチ接続は SJA1110_Aで示されています。png および SJA1110_B.png。
接続はPE_xxピン - >基板コネクタ - >スイッチ(SJA1110)
ご質問があればお知らせください。同じ詳細でサポートチケット( #00990408)も提出しました。
こんにちは、 pcentauri92
ご返信よろしくお願いします。
貴社のETHに関する回路図、特にPFE_MCA1およびSJA1110セクションの回路図をご提供ください。
内部サポートシステムのケースを作成することもできます。情報の説明欄に、 @Joey さん、回路図の情報を提供してください。こちらのウェブサイトを参照してください: https://support.nxp.com
BR
ジョーイ
こんにちは、 @Joey_z さん。
ご回答ありがとうございます。
ここで扱っているモジュールは、S32G399AチップとNXP SJA1110Aイーサネットスイッチを組み合わせたカスタム設計です。このデザインはS32G-VNP-RDB3の開発プラットフォームを基にしましたが、ベースデザインからかなりの変更を加えました。RGMIIを使用するPFE_MAC1は、そうした変更点の1つです。
また、PFE_MAC1モードとピン多重化を変更するdtsファイルのオーバーライドも添付します。
PFE_MAC1モードの設定:
/* pfe_mdio1 is already disabled in the base config in s32gxxxa-rdb.dtsi */
&pfe_mdio1 {
/* occupied by GMAC0 */
status = "disabled";
};
/*
* pfe_netif1 = PFE_MAC1 — management port to Switch-A port 2.
* Overrides the base "sgmii" stub in s32gxxxa-rdb.dtsi.
* Plain "rgmii" (no -id/-txid) since both MAC and switch add zero delay.
* No phy-handle: the link partner is the SJA1110A switch, described as a
* fixed-link on switch port@2. MDIO is not needed for link management here.
*/
&pfe_netif1 {
phy-mode = "rgmii";
status = "okay";
fixed-link {
speed = <1000>;
full-duplex;
};
};
PFE_MAC1ピンマルチプレクサ:
/*
* PFE_MAC1 RGMII pinmux — management port to Switch-A.
*
* All RX pad SSS values confirmed from S32G3 IOMUX spreadsheet.
* TX path: output pads only, no IMCR needed.
* RX path: input pads + IMCR registers to route pads into PFE_MAC1.
*
* Note: PE_07 (TXD3) uses FUNC3, not FUNC2. Similarly PE_08 (RX_CLK) output uses FUNC3; its IMCR (CR#859) uses FUNC2.
*/
pfe1rgmii_pins: pfe1rgmii_pins {
/* TX outputs: PE_02=TX_CLK, PE_03=TX_EN, PE_04=TXD0,
PE_05=TXD1, PE_06=TXD2 PE_07 (TXD3) */
pfe1rgmii_grp0 {
pinmux = , /* PE_02: PFE_MAC1_TX_CLK */
, /* PE_03: PFE_MAC1_TX_EN */
, /* PE_04: PFE_MAC1_TXD0 */
, /* PE_05: PFE_MAC1_TXD1 */
, /* PE_06: PFE_MAC1_TXD2 */
; /* PE_07: PFE_MAC1_TXD3 */
output-enable;
slew-rate = ;
};
/* RX inputs — pads set to FUNC0 (input mode); routing into PFE_MAC1
is handled by the IMCR entries in pfe1rgmii_grp2 below.
NXP input mux pattern: pad=FUNC0 + IMCR=FUNC2 */
pfe1rgmii_grp1 {
pinmux = , /* PE_08: input */
, /* PE_09: input */
, /* PE_10: input */
, /* PE_11: input */
, /* PE_12: input */
; /* PE_13: input */
input-enable;
slew-rate = ;
};
/* IMCR input mux — selects which pad drives each PFE_MAC1 RX signal.
CR#866 routes PE_02 (TX_CLK pad) back into PFE_MAC1_TX_CLK_I; required
even for RGMII TX because the MAC samples its own TX_CLK internally.
All entries at FUNC2 per S32G3 IOMUX spreadsheet. */
pfe1rgmii_grp2 {
pinmux = , /* CR#866: PFE_MAC1_TX_CLK_I ← PE_02 */
, /* CR#859: PFE_MAC1_RX_CLK_I ← PE_08 */
, /* CR#865: PFE_MAC1_RXDV_I ← PE_09 */
, /* CR#861: PFE_MAC1_RXD_I[0] ← PE_10 */
, /* CR#862: PFE_MAC1_RXD_I[1] ← PE_11 */
, /* CR#863: PFE_MAC1_RXD_I[2] ← PE_12 */
; /* CR#864: PFE_MAC1_RXD_I[3] ← PE_13 */
};
};
他に何か情報が必要な場合はお知らせください。
PFE_MAC1とSJA1110ポート2間のRGMIIバスに関するハードウェア側の回路図を共有していただけませんか?
こんにちは、 pcentauri92
詳細な情報を提供していただきありがとうございます。
私の理解では、開発ボード上でRGMAIIとポート2を使うPFE_MAC1通信に問題があるようですSJA1110A。それは正しいですか?
S32G-VNP-RDB3のデフォルト構成は、PFE_MAC0/1がSGMIIモードで動作し、SJA1110にコネクテッドです。開発ボードでRGMIIモードを使うことを考えたのはなぜですか?対応するソフトウェア構成を変更することが推奨されます。
BR
ジョーイ