私たちはTI AM62A7をベースにしたカスタムボード上でTJA1120A RGMII車載イーサネットの開発に取り組んでいます。
Yocto Linuxでこのインターフェースを有効にする方法について教えてください。
私たちは、 https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/net/nxp%2Ctja11xx.ya...に記載されている DTS ノード形式に従って試してみました。
しかし、ドライバはカーネルdmesgを調べなかった
このPHYのベンダーIDはD001B:B031であると理解しています。
また、カーネル設定でCONFIG_NXP_C45_TJA11XX_PHYを有効にしました。
こんにちは、 @vikyhre さん。
絞り込むために、以下の情報を共有していただけますか?
1) U-Bootは、MDIOバス上のPHYを想定されたアドレスで検出しますか?(例えば「mdio list」/「mii info」の出力)
2) CPSWポートノードとMDIO/PHYノード(phy-handle、phy-mode、PHY reg/address)に関する関連するDTSスニペットと、MDIO/PHY初期化に関連するブートログ行を共有してください。
dmesg | egrep -i "mdio|cpsw|phy|tja|nxp"
これら2つの項目があれば、PHYがMDIO(ハードウェア/ピンマルチプレクサ/リセット/アドレス)上で認識されていないのか、それともDTバインディング/参照の問題なのかを迅速に判断できます。
よろしくお願いいたします。
パベル
私たちはAM62A7ベースのiWave SoMを使用しており、現時点ではeMMCに格納されているu-boot/ブートローダーファームウェアには手を加えていません。
U-Boot SPL 2023.04-g2b8a667ace (May 24 2024 - 11:27:05 +0000)
SYSFW ABI: 3.1 (firmware rev 0x0009 '9.1.8--v09.01.08 (Kool Koala)')
am62a_init: board_init_f done
SPL initial stack usage: 17040 bytes
am62a_init: spl_boot_device: devstat = 0x374b bootmedia = 0x9 bootindex = 0
Trying to boot from MMC1
am62a_init: spl_boot_device: devstat = 0x374b bootmedia = 0x9 bootindex = 0
Authentication passed
am62a_init: spl_boot_device: devstat = 0x374b bootmedia = 0x9 bootindex = 0
Authentication passed
am62a_init: spl_boot_device: devstat = 0x374b bootmedia = 0x9 bootindex = 0
Authentication passed
am62a_init: spl_boot_device: devstat = 0x374b bootmedia = 0x9 bootindex = 0
Authentication passed
am62a_init: spl_boot_device: devstat = 0x374b bootmedia = 0x9 bootindex = 0
Authentication passed
Starting ATF on ARM64 core...
NOTICE: BL31: v2.9(release):d7a7135d3-dirty
NOTICE: BL31: Built : 09:34:15, Aug 24 2023
U-Boot SPL 2023.04-g2b8a667ace (May 24 2024 - 11:27:05 +0000)
SYSFW ABI: 3.1 (firmware rev 0x0009 '9.1.8--v09.01.08 (Kool Koala)')
am62a_init: board_init_f done
am62a_init: spl_boot_device: devstat = 0x374b bootmedia = 0x9 bootindex = 0
Trying to boot from MMC1
am62a_init: spl_boot_device: devstat = 0x374b bootmedia = 0x9 bootindex = 0
Authentication passed
am62a_init: spl_boot_device: devstat = 0x374b bootmedia = 0x9 bootindex = 0
Authentication passed
U-Boot 2023.04-g2b8a667ace (May 24 2024 - 11:27:05 +0000)
SoC: AM62AX SR1.0 HS-FS
Model: iW-RainboW-G55M-TI-AM62AX OSM
DRAM: 2 GiB
Core: 60 devices, 29 uclasses, devicetree: separate
MMC: mmc@fa10000: 0, mmc@fa00000: 1
Loading Environment from nowhere... OK
In: serial@2800000
Out: serial@2800000
Err: serial@2800000
Board Info:
BSP Version : iW-PRHAZ-SC-01-R2.0-REL1.0-Linux6.1.46
SOM Version : iW-PRHAZ-AP-01-R2.0
Net: eth0: ethernet@8000000port@1
Hit any key to stop autoboot: 0
iWave-G55M > mdio list
mdio@f00:
ethernet@8000000port@1:
4 - Generic PHY <--> ethernet@8000000port@1
iWave-G55M > mii infoU-Bootのファームウェアは変更せず、LinuxをSDカードから起動しています
k3-am62a7-iwg55m.dtsi を添付しました。ここで、両方のイーサネットeth0、eth1が無効化されています
&cpsw3g {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&main_rgmii1_pins_default>, <&main_rgmii2_pins_default>;
cpts@3d000 {
/* MAP HW3_TS_PUSH to GENF1 */
ti,pps = <2 1>;
};
};
&cpsw_port1 {
status = "disabled";
phy-mode = "rgmii-rxid";
phy-handle = <&cpsw3g_phy0>;
};
&cpsw_port2 {
status = "disabled";
phy-mode = "rgmii-rxid";
phy-handle = <&cpsw3g_phy1>;
};
&cpsw3g_mdio {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&main_mdio1_pins_default>;
cpsw3g_phy0: ethernet-phy@0 {
reg = <4>;
adi,rx-internal-delay-ps = <2000>;
};
cpsw3g_phy1: ethernet-phy@1 {
reg = <5>;
qca,disable-smarteee;
vddio-supply = <&vddio0>;
vddio0: vddio-regulator {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
};
};k3-am62a7-iwg55s-prgjj-41.dts では、適切な DT エントリを使用して eth0 と eth1 の両方を有効にしました。
&cpsw_port1と&cpsw3g_phy0はオートイーサネットに対応しています
&cpsw_port1 {
status = "okay";
phy-mode = "rgmii";
};
&cpsw_port2 {
status = "okay";
phy-mode = "rgmii";
};
&cpsw3g_phy0 {
//compatible = "ethernet-phy-id001b.b031", "ethernet-phy-ieee802.3-c45";
compatible = "ethernet-phy-id001b.b030";
nxp,rmii-refclk-in;
reg = <4>;
};
&cpsw3g_phy1 {
compatible = "ethernet-phy-id0022.1620";
reg = <0>;
txc-skew-ps = <900>;
rxc-skew-ps = <900>;
rxd0-skew-ps = <420>;
rxd1-skew-ps = <420>;
rxd2-skew-ps = <420>;
rxd3-skew-ps = <420>;
txd0-skew-ps = <420>;
txd1-skew-ps = <420>;
txd2-skew-ps = <420>;
txd3-skew-ps = <420>;
rxdv-skew-ps = <420>;
txen-skew-ps = <420>;
};ここで、私のPHY TJA1120AにはPHY識別レジスタ1:1BとPHY識別レジスタ2:B030があります。
したがって、適切なドライバーは イーサネット と互換性があるはずです = "ethernet-phy-id001b.b030"
dmesg | egrep -i "mdio|cpsw|phy|tja|nxp"に対する応答
root@am62ax-iwg55m-osm:/sys/class/hwmon/hwmon0# dmesg | egrep -i "mdio|cpsw|phy|tja|nxp"
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] arch_timer: cp15 timer(s) running at 200.00MHz (phys).
[ 1.349271] davinci_mdio 8000f00.mdio: davinci mdio revision 9.7, bus freq 1000000
[ 1.358577] davinci_mdio 8000f00.mdio: phy[0]: device 8000f00.mdio:00, driver Micrel KSZ9031 Gigabit PHY
[ 1.368066] davinci_mdio 8000f00.mdio: phy[4]: device 8000f00.mdio:04, driver unknown
[ 1.375925] am65-cpsw-nuss 8000000.ethernet: initializing am65 cpsw nuss version 0x6BA01103, cpsw version 0x6BA81103 Ports: 3 quirks:00000006
[ 1.388839] am65-cpsw-nuss 8000000.ethernet: Use random MAC address
[ 1.395108] am65-cpsw-nuss 8000000.ethernet: initialized cpsw ale version 1.5
[ 1.402236] am65-cpsw-nuss 8000000.ethernet: ALE Table size 512
[ 1.412875] am65-cpsw-nuss 8000000.ethernet: CPTS ver 0x4e8a010c, freq:500000000, add_val:1 pps:1
[ 1.422952] am65-cpsw-nuss 8000000.ethernet: set new flow-id-base 19
[ 6.876699] am65-cpsw-nuss 8000000.ethernet eth1: PHY [8000f00.mdio:00] driver [Micrel KSZ9031 Gigabit PHY] (irq=POLL)
[ 6.893353] am65-cpsw-nuss 8000000.ethernet eth1: configuring for phy/rgmii link mode
[ 6.937861] am65-cpsw-nuss 8000000.ethernet eth0: validation of rgmii with support 00000000,00000000,00006280 and advertisement 00000000,00000000,00002280 failed: -EINVALdmesgも添付しました。
こんにちは、 @vikyhre さん。
今後追加の支援が必要な場合は、新しいコミュニティクエリを作成するか、サポートチケット を作成 https://support.nxp.com/s/?language=en_US することをお勧めします。
さて、私の分析結果は以下の通りです。
以下のLinuxコマンドは推奨される診断チェックとして提供されていることに注意してください。正確なビルドやランタイム環境にアクセスできないため、セットアップ上で直接検証できず、システム構成によっては軽微な調整が必要になるかもしれません。
TJA1120とi.MX8評価用ハードウェアではパケット送信は行われません。
[ 1.358577] davinci_mdio 8000f00.mdio: phy[0]: device 8000f00.mdio:00, driver Micrel KSZ9031 Gigabit PHY
[ 1.368066] davinci_mdio 8000f00.mdio: phy[4]: device 8000f00.mdio:04, driver unknown
つまり、TJA1120AはMDIOアドレス4で見えるようですが、まだNXP C45のTJA11xx PHYドライバには割り当てられていません。これが、CPSWポートが後にRGMII検証中に失敗する理由である可能性が高い。
まず最初のステップとして、TJA1120A PHYノードを更新して、条項45を明示的に指定してみてください。
&cpsw_port1 {
status = "OK";
phy-mode = "RGMII"; /* または rgmii-id / rgmii-rxid / rgmii-txid(ボードの遅延設計によります)*/
phy-handle = <&cpsw3g_phy0>;
};
&cpsw3g_phy0 {
コンパソコント = 「イーサネット-PHY-ID001B.B030」、「イーサネット-PHY-IEEE802.3-C45」;
reg = <4>;
status = "OK";
};
nxp,rmii-refclk-in;
dmesg | egrep -i "mdio|cpsw|phy|tja|nxp"
予想される結果として、アドレス4のPHYはもはや driver unknownとして表示されず、NXP C45 TJA11xx/TJA1120ドライバに接続されます。
もしまだ driver unknownのままであれば、実行中のカーネルに本当にドライバーのサポートが含まれているかも確認してください。
zcat /proc/config.gz | egrep "NXP.*TJA|C45|PHYLIB"
find /lib/modules/$(uname -r) -name "*tja*"
よろしくお願いいたします。
パベル