良い一日!
カスタムLS1046ベースのボードでイーサネットポートを起動しようとしています。すべてのethポートはプロトコル0x2223のserdes上にあります。
ポートは以下のとおりです。
MAC9 ethernet@f0000 (SGMII,2.5) -> RTL8221
MAC10 - ethernet@f2000 (SGMII,2.5) -> RTL8221
MAC5 - ethernet@e8000 (SGMII,2.5) -> RTL8221
MAC6 - ethernet@ea000 -> RTL8211私が作成したfman関連のUBoot DTSファイル(LS1046ARDB用のDTSファイルに基づく):
........
#include "fsl-ls1046-post.dtsi"
&fman0 {
EMAC6: ethernet@ea000 {
phy-handle = <&sgmii_phy4>;
phy-connection-type = "sgmii";
status = "okay";
};
rtl8211: mdio@fc000 {
sgmii_phy4: ethernet-phy@4 {
reg = <0x4>;
};
};
};これで全て問題なく動作します。Uboot のethernet@ea000 は完璧に動作します。
その後、私はLinuxに移行しました。私はUSDPAA SDKドライバを使用しています。
私のLinux DTSもLS1046ardb SDK DTSをベースにしています。
........
#include "fsl-ls1046-post.dtsi"
&fman0 {
//// MAC 5
ethernet@e8000 { /// 2.5G SerDes SGMII external
phy-handle = <&sgmii_phy3>;
phy-connection-type = "sgmii";
};
/// MAC6
ethernet@ea000 { /// 1G SerDes SGMII external
phy-handle = <&sgmii_phy4>;
phy-connection-type = "sgmii";
};
//// MAC9
ethernet@f0000 { /// 2.5G SerDes SGMII external
phy-handle = <&sgmii_phy1>;
phy-connection-type = "sgmii";
};
/// MAC10
ethernet@f2000 { /// 2.5G SerDes SGMII external
phy-handle = <&sgmii_phy2>;
phy-connection-type = "sgmii";
};
mdio@fc000 {
compatible = "fsl,fman-memac-mdio";
/// RTL8221
sgmii_phy1: ethernet-phy@1 {
reg = <0x1>;
compatible = "ethernet-phy-ieee802.3-c45";
};
/// RTL8221
sgmii_phy2: ethernet-phy@2 {
reg = <0x2>;
compatible = "ethernet-phy-ieee802.3-c45";
};
/// RTL8221
sgmii_phy3: ethernet-phy@3 {
reg = <0x3>;
compatible = "ethernet-phy-ieee802.3-c45";
};
/// RTL8211
sgmii_phy4: ethernet-phy@4 {
reg = <0x4>;
};
};
};
....
#include "qoriq-dpaa-eth.dtsi"
#include "qoriq-fman3-0-6oh.dtsi"
....
&fsldpaa {
ethernet@0 {
status = "disabled";
};
ethernet@1 {
status = "disabled";
};
ethernet@2 {
status = "okay";
};
ethernet@3 {
status = "okay";
};
ethernet@4 {
status = "okay";
};
ethernet@5 {
status = "okay";
};
ethernet@6 {
status = "okay";
};
ethernet@8 {
status = "okay";
};
ethernet@10 {
status = "okay";
compatible = "fsl,dpa-ethernet";
fsl,fman-mac = <&enet7>;
dma-coherent;
};
};
&fman0 {
compatible = "fsl,fman", "simple-bus";
};
.....Linuxの起動中に、次のようなメッセージが表示されました。
MAC10のみ有効で、他のすべてのポートは失敗しました。MAC6はUBootでは正常に動作していたにもかかわらず、今回失敗したというのは非常に興味深い。
私のRCW:
SYS_PLL_RAT=7
MEM_PLL_RAT=21
CGA_PLL1_RAT=18
CGA_PLL2_RAT=16
/// SerDes PLL & Protocol configuration
SRDS_PRTCL_S1=8739 /// 0x2223
SRDS_PRTCL_S2=34952 /// 0x8888
SRDS_PLL_REF_CLK_SEL_S1=2
SRDS_PLL_REF_CLK_SEL_S2=0
SRDS_PLL_PD_S1=0
SRDS_PLL_PD_S2=0
SRDS_DIV_PEX_S1=0
SRDS_DIV_PEX_S2=0
/// Misc PLL-Related Configuration
DDR_REFCLK_SEL=1
SRDS_REFCLK_SEL_S1=1
SRDS_REFCLK_SEL_S2=1
DDR_FDBK_MULT=2
/// Boot configuartion
PBI_src=4
/// Clocking configuration
HWA_CGA_M1_CLK_SEL=6
DRAM_LAT=1
/// Pin Multiplexing Configuration
UART_BASE=5
IRQ_OUT=1
IRQ_BASE=510
IFC_GRP_A_EXT=1
IFC_GRP_E1_EXT=2
IFC_GRP_E1_EXT=0
IFC_GRP_F_EXT=1
/// SoC-specific Configuration
EM1=0
EMI1_DMODE=0
EMI1_CMODE=0
EM2=1
EMI2_DMODE=1
EMI2_CMODE=1
DVDD_VSEL=2
/// PLL & Clocking Configuration Expansion
SYSCLK_FREQ=600
HWA_CGA_M2_CLK_SEL=1ポートに何か問題があるのでしょうか?なぜMAC10だけが有効化されるのか?
こんにちは、
sgmiiタイプはデフォルトで1Gに設定されていることが多い。phy-connection-type "2500base-x"または"sgmii-2500"に変更します。"sgmii" (1G) のままにしておいてください。compatible = "ethernet-phy-ieee802.3-c45"を使用していると表示されます。mdio@fc000 )がドライバを介して条項45をサポートするように明示的に構成されていない場合、それらのPHYをプローブできない可能性があります。dmesg 「PHY not found」と表示されますか?そうであれば、MDIO互換文字列がfsl,fman-memac-mdioと完全に一致することを確認してください。fsldpaaノードの不整合 DTSには以下が含まれています。ethernet@10 {
fsl,fman-mac = <&enet7>; // This maps to MAC10
};
ethernet@2 ~ ethernet@8 )は、間違ったラベリングにマッピングされている可能性があります。LS1046A SDKでは:&enet4です&enet5です&enet6です&enet7 (動作ポート番号と一致する)です。 &fsldpaa 配下のすべての ethernet@X ノードについて、 fsl,fman-mac プロパティが fsl-ls1046-post.dtsi で定義されている正しい &enetX ラベリングを指していることを確認してください。fman0定義の重複 スニペットの最後に、次のコードがあります。&fman0 { compatible = "fsl,fman", "simple-bus"; };
simple-busを追加してcompatible文字列を変更すると、DPAA FManドライバがサブノード(MAC)に正しくバインドできなくなる可能性があります。ドライバは、NXP SDKのdtsiファイルによって提供される特定のFMan互換文字列を必要とします。