无PHY连接到DSA交换机的设备树

3
我们在为Marvell DSA交换机和Xilinx Zynq处理器的配置创建设备树时遇到了一些问题。它们之间的连接如下所示:
|——————————————|               |——————————————————————————————|
|     e000b000—|———— SGMII ————|—port6 (0x16)      port3 —— PHY3
| Zynq         |               |         mv88e6321            |
|     e000c000—|—x           x—|—port5             port4 —— PHY4
|——————————————|               |——————————————————————————————|
        |___________ MDIO _______________|

我们为Linux内核准备了一个设备树,看起来像这样:

ps7_ethernet_0: ps7-ethernet@e000b000 {
            #address-cells = <1>;
            #size-cells = <0>;
            clock-names = "ref_clk", "aper_clk";
            clocks = <&clkc 13>, <&clkc 30>;
            compatible = "xlnx,ps7-ethernet-1.00.a";
            interrupt-parent = <&ps7_scugic_0>;
            interrupts = <0 22 4>;
            local-mac-address = [00 0a 35 00 00 00];
            phy-handle = <&phy0>;
            phy-mode = "gmii";
            reg = <0xe000b000 0x1000>;
            xlnx,ptp-enet-clock = <0x69f6bcb>;
            xlnx,enet-reset = "";
            xlnx,eth-mode = <0x0>;
            xlnx,has-mdio = <0x1>;
            mdio_0: mdio {
                #address-cells = <1>;
                #size-cells = <0>;
                phy0: phy@16 {
                    compatiable = "marvell,dsa";
                    reg = <0x16>;
                } ;
            } ;

} ;

    dsa@0 {
            compatible = "marvell,dsa";

            #address-cells = <2>;
            #size-cells = <0>;

            interrupts = <10>;

            dsa,ethernet = <&ps7_ethernet_0>;
            dsa,mii-bus = <&mdio_0>;

            switch@0 {
                #address-cells = <1>;
                #size-cells = <0>;
                reg = <0 0>;
             port@3 {
                    reg = <3>;
                    label = "lan0";                
             };
             port@4 {
                    reg = <4>;
                    label = "lan1";
             };
             port@5 {
                    reg = <5>;
                    label = "lan2";
             };
             port@6 {
                    reg = <6>;
                    label = "cpu";       
             };
        };
        };     
} ;

问题是,如您从图片中看到的,端口6没有连接PHY,即Zynq和交换机之间的连接是没有PHY的,但我不得不指定<phy0>在设备树中让dsa驱动程序看到交换机。但是然后它尝试与不存在的PHY通信并失败了,显然。
所以问题是:如何为连接到此类处理器的dsa交换机创建正确的设备树?
谢谢您的任何帮助!
(有一个类似的问题P1010 MAC to Switch port direct connection without PHY,但我无法对其发表评论,并且没有答案,不幸的是)
1个回答

4

如果没有指定&phy0,您可以将其写为fixed-link。

fixed-link = <0 1 1000 0 0>;

其中0是模拟PHY ID,1代表全双工,速度为1000 Mb/s。您还需要禁用与交换机端口6连接的处理器端口的自协商功能。

ps7_ethernet_0: ps7-ethernet@e000b000 {
        #address-cells = <1>;
        #size-cells = <0>;
        clock-names = "ref_clk", "aper_clk";
        clocks = <&clkc 13>, <&clkc 30>;
        compatible = "xlnx,ps7-ethernet-1.00.a";
        interrupt-parent = <&ps7_scugic_0>;
        interrupts = <0 22 4>;
        local-mac-address = [00 0a 35 00 00 00];
        fixed-link = <0 1 1000 0 0>;
        phy-mode = "gmii";
        reg = <0xe000b000 0x1000>;
        xlnx,ptp-enet-clock = <0x69f6bcb>;
        xlnx,enet-reset = "";
        xlnx,eth-mode = <0x0>;
        xlnx,has-mdio = <0x1>;
        mdio_0: mdio {
            #address-cells = <1>;
            #size-cells = <0>;
        } ;

} ;

dsa@0 {
        compatible = "marvell,dsa";

        #address-cells = <2>;
        #size-cells = <0>;

        interrupts = <10>;

        dsa,ethernet = <&ps7_ethernet_0>;
        dsa,mii-bus = <&mdio_0>;

        switch@0 {
            #address-cells = <1>;
            #size-cells = <0>;
            reg = <22 0>;
         port@3 {
                reg = <3>;
                label = "lan0";                
         };
         port@4 {
                reg = <4>;
                label = "lan1";
         };
         port@5 {
                reg = <5>;
                label = "lan2";
         };
         port@6 {
                reg = <6>;
                label = "cpu";       
         };
    };
    };     

假设交换机芯片的SMI地址为0x16;如果不是,请将reg设置为<22,0>至<0,0>,与switch@0下面的相同。 此外,您可能需要添加mdio驱动器reg地址和兼容属性,在设备树中未指定。


谢谢你的回答!但是我该如何指定处理器连接的端口地址呢?我遇到了dsa:探测dsa@22失败,错误代码为-22。 - Alexey Sidelnikov
你可以举个带有这种属性的设备树的例子吗? - Alexey Sidelnikov
由于交换机直接连接到处理器的MII总线,没有外部PHY芯片,因此在mdio_0: mdio下不需要指定phy0: phy@16 {..}。从mdio中删除phy部分。 此外,如果没有外部phy,如何将phy reg地址指定为mdio上的0x16。 0x16是交换机芯片的SMI地址吗?如果是,则需要在switch@0下指定reg = <22 0>或reg = <0x16 0>; - Vijay Katoch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接