2367273_ja-JP

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

2367273_ja-JP

2367273_ja-JP

SJA1110A DSA起動:100BASE-TX送信障害およびT1リンクトレーニングの問題

こんにちは、

Microchip Linux 6.12 FPGAツリーに含まれるLinux DSA sja1105ドライバを使用して、SPI経由でMicrochip PolarFire SoCに接続されたSJA1110AELスイッチを起動しています

https://github.com/linux4microchip/linux/tree/linux-6.12-mchp%2Bfpga/drivers/net/dsa/sja1105

スイッチはSPIブートモード( BOOT_OPTION=11 )に設定されており、静的構成のアップロードは成功したようです。

[    2.546758] sja1105 spi9.0: Probed switch chip: SJA1110A
[    2.546777] sja1105 spi9.0: max_xfer_len = 256 bytes
[    2.549576] sja1105 spi9.0: Config buffer length: 1776 bytes
[    2.549605] sja1105 spi9.0: Config buffer device_id at offset 0: 0x0f0300b7
[    2.742531] sja1105 status decoded: CONFIGS=1 CRCCHKL=0 IDS=0 CRCCHKG=0 NSLOT=9
[    2.742563] sja1105 spi9.0: sja1105_static_config_load done
[    2.742579] sja1105 spi9.0: sja1105_clocking done
[    2.742592] sja1105 spi9.0: sja1105_TAS and flower setup done
[    2.743823] sja1105 spi9.0: sja1105_ptp_clock_register done
[    2.888661] sja1105 spi9.0: sja1105_mdiobus_register done
[    2.888699] sja1105 spi9.0: sja1105_devlink_setup done
[    2.902778] sja1105 spi9.0: dsa_tag_8021q_register and rtnl_unlockdone
[    2.904141] sja1105 spi9.0: configuring for fixed/sgmii link mode
[    2.909745] sja1105 spi9.0: Link is Up - 1Gbps/Full - flow control off
[    2.964511] sja1105 spi9.0 rj45 (uninitialized): PHY [spi9.0-base-tx:01] driver [NXP CBTX (SJA1110)] (irq=POLL)
[    2.973125] sja1105 spi9.0 t1-1 (uninitialized): PHY [spi9.0-base-t1:01] driver [Generic Clause 45 PHY] (irq=POLL)
[    2.976322] sja1105 spi9.0 t1-2 (uninitialized): PHY [spi9.0-base-t1:02] driver [Generic Clause 45 PHY] (irq=POLL)
[    2.979382] sja1105 spi9.0 t1-3 (uninitialized): PHY [spi9.0-base-t1:03] driver [Generic Clause 45 PHY] (irq=POLL)
[    2.982622] sja1105 spi9.0 t1-4 (uninitialized): PHY [spi9.0-base-t1:04] driver [Generic Clause 45 PHY] (irq=POLL)
[    2.985855] sja1105 spi9.0 t1-5 (uninitialized): PHY [spi9.0-base-t1:05] driver [Generic Clause 45 PHY] (irq=POLL)
[    2.989002] sja1105 spi9.0 t1-6 (uninitialized): PHY [spi9.0-base-t1:06] driver [Generic Clause 45 PHY] (irq=POLL)
[    2.991420] macb 20110000.ethernet eth0: entered promiscuous mode
[    2.991540] DSA: tree 0 setup
[    2.993156] clk: Disabling unused clocks

##############################################
***************   FSW-PIXXEL   ***************
***************     IN_xPC     ***************
##############################################
# ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host proto kernel_lo 
       valid_lft forever preferred_lft forever
2: bond0:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 4e:0a:f0:7b:bc:e0 brd ff:ff:ff:ff:ff:ff
3: can0:  mtu 16 qdisc noop state DOWN group default qlen 10
    link/can 
4: can1:  mtu 16 qdisc noop state DOWN group default qlen 10
    link/can 
5: eth0:  mtu 1536 qdisc noop state DOWN group default qlen 1000
    link/ether 5e:78:8f:24:86:53 brd ff:ff:ff:ff:ff:ff
6: eth1:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:04:a3:61:cc:6f brd ff:ff:ff:ff:ff:ff
7: sit0@NONE:  mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
8: rj45@eth0:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 5e:78:8f:24:86:53 brd ff:ff:ff:ff:ff:ff
9: interswitch@eth0:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 5e:78:8f:24:86:53 brd ff:ff:ff:ff:ff:ff
10: epc2-uplink@eth0:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 5e:78:8f:24:86:53 brd ff:ff:ff:ff:ff:ff
11: t1-1@eth0:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 5e:78:8f:24:86:53 brd ff:ff:ff:ff:ff:ff
12: t1-2@eth0:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 5e:78:8f:24:86:53 brd ff:ff:ff:ff:ff:ff
13: t1-3@eth0:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 5e:78:8f:24:86:53 brd ff:ff:ff:ff:ff:ff
14: t1-4@eth0:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 5e:78:8f:24:86:53 brd ff:ff:ff:ff:ff:ff
15: t1-5@eth0:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 5e:78:8f:24:86:53 brd ff:ff:ff:ff:ff:ff
16: t1-6@eth0:  mtu 1500 qdisc noop state DOWN group default qlen 1000

現在の観察結果:

  • CPUポート(SGMII)は正常に起動します。
  • RJ45 100BASE-TXポートに接続されたノートPCからARPパケットを受信できます。
  • ボード上のtcpdumpで、ノートPCからの受信ARPリクエストを確認しました。
  • ボードから送信(ping/arping)しても、ノートPCは何も受信しません。
  • ノートPCのtcpdumpで確認したところ、ボードからの受信パケットは検出されませんでした。

私の質問は以下のとおりです。

  1. SJA1110 DSAポートでTXトラフィックが正しく動作するために、追加のランタイムMAC設定、転送設定、ルーティングテーブル設定が必要ですか?
  2. このドライバツリーでは、 100BASE-T1 PHYは汎用条項45 PHYとしてのみ表示されることが想定されていますか?現在のLinux 6.12 Microchipツリーには、専用のBASE-T1 PHYドライバが欠落しているのでしょうか?
  3. <->テストのために、TRX_1_P<-> TRX_2_P と TRX_2_P<-> TRX_2_N を接続することで、2 つの T1 ポート ( t1-1 t1-2) 間で直接ループバックを試みました 。

  4. SJA1110 BASE-T1 PHYでは、リンクトレーニングのために明示的なマスター/スレーブ構成が必要ですか?

8: rj45@eth0:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 5e:78:8f:24:86:53 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::5c78:8fff:fe24:8653/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
11: t1-1@eth0:  mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000
    link/ether 5e:78:8f:24:86:53 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.1/24 scope global t1-1
       valid_lft forever preferred_lft forever
12: t1-2@eth0:  mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000
    link/ether 5e:78:8f:24:86:53 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.2/24 scope global t1-2
       valid_lft forever preferred_lft forever

[  133.739306] macb 20110000.ethernet eth0: configuring for fixed/sgmii link mode
[  133.739364] MACB : HWSTAMP check running
[  133.739414] MACB : HWSTAMP check passed found tsu_clk 
[  133.741036] macb 20110000.ethernet: gem-ptp-timer ptp clock registered.
[  133.742794] sja1105 spi9.0 t1-1: configuring for phy/internal link mode
[  149.008075] sja1105 spi9.0 t1-2: configuring for phy/internal link mode
[  543.849763] sja1105 spi9.0 rj45: configuring for phy/internal link mode
[  545.889486] sja1105 spi9.0 rj45: Link is Up - 100Mbps/Full - flow control off

 

ハードウェアストラップの構成:

  • すべてのPHY_MSピンはLOW(スレーブモード)に接続されています。
  • PHY_AUTO_MODE = HIGH
  • AUTO_POL_DET = HIGH
  • PHYアドレスは0x09から始まります

T1リンクが存在しない理由は、両方のPHYがスレーブとして接続されているため、リンクトレーニング用のマスタークロックソースが存在しないことにあるのでしょうか?

以下のような事項に関するガイダンス:

  • 正しいT1起動、
  • マスター/スレーブ構成、
  • または期待されるPHYドライバのサポート

大変ありがたく思います。


イーサネット・スイッチに使用されているDTSI規格は以下のとおりです。

/* MAC0 : DSA master into SJA1110A SGMII4 */
&mac0 {
    /delete-property/ phy-handle;
    clocks = <&clkcfg CLK_MAC0>, <&clkcfg CLK_AHB>, <&fabric_fic3_clk>;
    clock-names = "pclk", "hclk", "tsu_clk";
    phy-mode = "sgmii";
    status = "okay";
    dma-noncoherent;
    fixed-link {
        speed = <1000>;
        full-duplex;
    };
};

/*
* SPI9: SJA1110A Host Access Port (HAP)
*   CS0 (reg=0) -> SS0_N -> Switch AP endpoint (DSA driver)
*   CS1 (reg=1) -> SS1_N -> Cortex-M7 uC endpoint (unused)
*
* BOOT_OPTION=11 (serial SPI boot):
*   SJA1110A waits for host config at power-on.
*   DSA driver sends static config tables at probe via CS0.
*   Cortex-M7 is disabled by driver : CS1/SS1 never used.
*
* SPI mode: CPOL=1 CPHA=0 (mode 2) : as per sja1105.yaml
* SPI mode: CPOL=1 CPHA=1 (mode 3) : as per s32gxxxa-rdb.dtsi
*/
&spi9 {
    microchip,motorola-mode = <3>;  /* mode 3: CPOL=1 CPHA=1 */
    num-cs = <2>;
    status = "okay";
    /*
    * SJA1110A : DSA switch (mainline driver)
    * reg=0 -> CS0 -> SS0_N -> switch AP endpoint
    *   ethernet-switch@0 uses reg=<0> (SS0 = switch AP)
    *   sja1110-uc@1 uses reg=<1> (SS1 = uC, disabled here)
    *
    * Port map
    *   port@0  RevMII     Cortex-M7 uC (disabled by driver)
    *   port@1  100BASE-TX RJ45 diagnostic jack
    *   port@2  RGMII2     inter-switch trunk -> SJA port2
    *   port@3  SGMII3     EPC-2 MAC1 relay uplink
    *   port@4  SGMII4     EPC-1 MAC0 CPU port (this board)
    *   Confirm is actual physical address needs to be added here 
    *   port@5  100BASE-T1 TRX_1 (PHY addr 9  on mdio@0)
    *   port@6  100BASE-T1 TRX_2 (PHY addr 10 on mdio@0)
    *   port@7  100BASE-T1 TRX_3 (PHY addr 11 on mdio@0)
    *   port@8  100BASE-T1 TRX_4 (PHY addr 12 on mdio@0)
    *   port@9  100BASE-T1 TRX_5 (PHY addr 13 on mdio@0)
    *   port@a  100BASE-T1 TRX_6 (PHY addr 14 on mdio@0)
    */

    sja1110a: ethernet-switch@0 {
        compatible = "nxp,sja1110a";
        reg = <0>;
        spi-max-frequency = <1000000>;
        interrupt-parent = <&gpio8>;
        interrupts = <9 IRQ_TYPE_LEVEL_LOW>;
    
        mdios {
            #address-cells = <1>;
            #size-cells = <0>;
            mdio_t1: mdio@0 {
                compatible = "nxp,sja1110-base-t1-mdio";
                reg = <0>;
                #address-cells = <1>;
                #size-cells = <0>;
    
                port5_base_t1_phy: ethernet-phy@1 {
                    compatible = "ethernet-phy-ieee802.3-c45";
                    reg = <0x01>;
                };

                port6_base_t1_phy: ethernet-phy@2 {
                    compatible = "ethernet-phy-ieee802.3-c45";
                    reg = <0x02>;
                };

                port7_base_t1_phy: ethernet-phy@3 {
                    compatible = "ethernet-phy-ieee802.3-c45";
                    reg = <0x03>;
                };

                port8_base_t1_phy: ethernet-phy@4 {
                    compatible = "ethernet-phy-ieee802.3-c45";
                    reg = <0x04>;
                };

                port9_base_t1_phy: ethernet-phy@5 {
                    compatible = "ethernet-phy-ieee802.3-c45";
                    reg = <0x05>;
                };

                port10_base_t1_phy: ethernet-phy@6 {
                    compatible = "ethernet-phy-ieee802.3-c45";
                    reg = <0x06>;
                };
            };
    
            mdio_tx: mdio@1 {
                compatible = "nxp,sja1110-base-tx-mdio";
                reg = <1>;
                #address-cells = <1>;
                #size-cells = <0>;
                txphy1: ethernet-phy@1 {
                    reg = <1>;
                };
            };
        };
    
        ethernet-ports {
            #address-cells = <1>;
            #size-cells = <0>;
    
            port@0 { reg = <0>; status = "disabled"; };
    
            /* -------------------------------------
             * RJ45 diagnostic port
             * ------------------------------------- */
            port@1 {
                reg = <1>;
                label = "rj45";
                phy-mode = "internal";
                phy-handle = <&txphy1>;
            };
    
            port@2 {
                reg = <2>;
                label = "interswitch";
                phy-mode = "rgmii";
                rx-internal-delay-ps = <0>;
                tx-internal-delay-ps = <0>;
                fixed-link { speed = <1000>; full-duplex; };
            };
    
            port@3 {
                reg = <3>;
                label = "epc2-uplink";
                phy-mode = "sgmii";
                fixed-link { speed = <1000>; full-duplex; };
            };
    
            /* -------------------------------------
             * CPU port
             * MAC0 <-> SGMII4 <-> port4
             * ------------------------------------- */
            port@4 {
                reg = <4>;
                label = "cpu";
                ethernet = <&mac0>;
                phy-mode = "sgmii";
                fixed-link {
                    speed = <1000>;
                    full-duplex;
                };
            };
    
            port@5 {
                reg = <5>;
                label = "t1-1";
                phy-mode = "internal"; 
                phy-handle = <&port5_base_t1_phy>;
            };

            port@6 {
                reg = <6>; 
                label = "t1-2";
                phy-mode = "internal"; 
                phy-handle = <&port6_base_t1_phy>;
            };

            port@7 {
                reg = <7>; 
                label = "t1-3";
                phy-mode = "internal"; 
                phy-handle = <&port7_base_t1_phy>;
            };

            port@8 {
                reg = <8>; 
                label = "t1-4";
                phy-mode = "internal"; 
                phy-handle = <&port8_base_t1_phy>;
            };

            port@9 {
                reg = <9>; 
                label = "t1-5";
                phy-mode = "internal"; 
                phy-handle = <&port9_base_t1_phy>;
            };

            port@a {
                reg = <10>; 
                label = "t1-6";
                phy-mode = "internal"; 
                phy-handle = <&port10_base_t1_phy>;
            };
        };
    };

    /* SPIDEV for testing SPI lines using CS1 lines*/
    sja110_spidev: spidev@1 {
        compatible = "microchip,mpfs-spidev";
        reg = <1>;
        status = "okay";
        spi-max-frequency = <1000000>;
    };
};


-- アンクル

Re: SJA1110A DSA bring UP : 100BASE-TX TX failure and T1 link training issues

こんにちは、 @Ankur_pixl さん

詳細を一度にすべて共有していただき、ありがとうございます。

ご質問への回答は以下をご覧ください。

Q1.SJA1110 DSAポートでTXトラフィックが正しく動作するために、追加のランタイムMAC設定、転送設定、ルーティングテーブル設定が必要ですか?

A1. はい、下記をご覧ください。

Q2.このドライバツリーでは、100BASE-T1 PHYは汎用条項45 PHYとしてのみ表示されることが想定されていますか?現在のLinux 6.12 Microchipツリーには、専用のBASE-T1 PHYドライバが欠落しているのでしょうか?

A2. いいえ。

Q3.テストのために、TRX_1_P<->TRX_2_P と TRX_2_P<->TRX_2_N を接続することで、2 つの T1 ポート (t1-1 <-> t1-2) 間で直接ループバックを試みました。

A3:はい、その通りです。

Q4. SJA1110 BASE-T1 PHYでは、リンクトレーニングのために明示的なマスター/スレーブ構成が必要ですか?

A4. はい、100BASE-T1ではマスター/スレーブの明示的な設定が必要です。参考までに、ドライバのオプション「AUTO」は通常「ピンストラップに沿って固定する」という意味です。有効なリンクを確立するには、ハードウェアストラップまたはPHY構成のいずれかによって、一方のPHYをマスターとして、もう一方をスレーブとして構成する必要があります。



ログとDTを見る限り、スイッチの初期化とPHYバインディングは正しく行われているようです。

Linuxでブリッジが設定されていない場合、受信はできるが送信はできないという動作は想定されるものです。DSAでは、CPUポートとユーザーポート間でトラフィックは自動的に転送されません。DSAスイッチはハードウェアスイッチのように動作しますが、LinuxではブリッジまたはVLAN構成が明示的に作成されない限り、ポート間の転送は有効になりません。

ブリッジを作成し、CPUポート(eth0)とユーザーポート(rj45)の両方を接続してください。

ip link set eth0 up
ip link set rj45 up

ip link add br0 type bridge
ip link set br0 up
ip link set eth0 master br0
ip link set rj45 master br0

ip addr add 192.168.1.2/24dev br0


よろしくお願いいたします。

パベル

Tags (1)
No ratings
Version history
Last update:
a week ago
Updated by: