NXP MCU 技术论坛
直播中

刘杰

7年用户 1274经验值
私信 关注
[问答]

以太网PHY在yocto linux中不工作是什么原因?

我们在 qbase2 karo 板上有一个工作项目,它使用了 SoM QS8M-MQ00 (i.MX8MM) 和 KSZ9131RNX RGMII,并且一直没有问题。我们正在使用 yocto linux。
当尝试使 yocto 项目适应我们的定制板时,我们在使用 DP83867IR/CR (eth0) 时遇到问题,我们已经设法使用板上的另一个芯片 ping 到网络,USB-Eth 芯片使用 eth1。
为了配置使用,我们在内核中添加了以下配置。

CONFIG_MII=y
CONFIG_DP83867_PHY=y
我们还修改了 u-boot 和 linux 的设备树文件。这是我们的内核 .dts,我们在 u-boot 中有相同的文件。

#include "imx8mm-qs8m-mq00.dts"
#include ti-dp83867.h>

/ {
        model = "TEST";
};

&fec1 {
        pinctrl-names = "default", "sleep";
        pinctrl-0 = <&pinctrl_fec1_b &pinctrl_etnphy_rst_b>;
        pinctrl-1 = <&pinctrl_fec1_b_sleep>;
        phy-mode = "rgmii";
        phy-handle = <ðphy1>;
        phy-supply = <®_vdd_3v3>;
        // phy-reset-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
        // phy-reset-duration-us = <25000>;
        // phy-reset-post-delay-us = <250000>;
        status = "okay";

        mdio0 {
            #address-cells = <1>;
              #size-cells = <0>;
              ethphy1: ethernet-phy@0 {
                        compatible = "ethernet-phy-ieee802.3-c22";
                reg = <0>;
                tx-fifo-depth = ;
                //rx-fifo-depth = ;
                ti,clk-output-sel = ;
                ti,rx-internal-delay = ;
                ti,tx-internal-delay = ;
              };
        };
};

&iomuxc {
        // pinctrl_etnphy_int_b: etnphy-int-bgrp {
        //         fsl,pins = <
        //                     MX8MM_IOMUXC_GPIO1_IO10_GPIO1_IO10                0x90
        //         >;
        // };

        pinctrl_etnphy_rst_b: etnphy-rst-bgrp {
                fsl,pins = <
                            MX8MM_IOMUXC_SD2_CD_B_GPIO2_IO12                0x140
                >;
        };

        pinctrl_fec1_b: fec1-bgrp {
                fsl,pins = <
                            MX8MM_IOMUXC_ENET_MDC_ENET1_MDC                0x142
                            MX8MM_IOMUXC_ENET_MDIO_ENET1_MDIO                0x142
                            MX8MM_IOMUXC_ENET_TXC_ENET1_RGMII_TXC        0x010
                            MX8MM_IOMUXC_ENET_TD0_ENET1_RGMII_TD0        0x016
                            MX8MM_IOMUXC_ENET_TD1_ENET1_RGMII_TD1        0x016
                            MX8MM_IOMUXC_ENET_TD2_ENET1_RGMII_TD2        0x016
                            MX8MM_IOMUXC_ENET_TD3_ENET1_RGMII_TD3        0x016
                            MX8MM_IOMUXC_ENET_RD0_ENET1_RGMII_RD0        0x150 /* MODE0 */
                            MX8MM_IOMUXC_ENET_RD1_ENET1_RGMII_RD1        0x150 /* MODE1 */
                            MX8MM_IOMUXC_ENET_RD2_ENET1_RGMII_RD2        0x150 /* MODE2 */
                            MX8MM_IOMUXC_ENET_RD3_ENET1_RGMII_RD3        0x150 /* MODE3 */
                            MX8MM_IOMUXC_ENET_RXC_ENET1_RGMII_RXC        0x116 /*qbase 4 0x156 */
                            MX8MM_IOMUXC_ENET_RX_CTL_ENET1_RGMII_RX_CTL        0x116 /*qbase 4 0x156 */
                            MX8MM_IOMUXC_ENET_TX_CTL_ENET1_RGMII_TX_CTL        0x016
                >;
        };

        pinctrl_fec1_b_sleep: fec1-b-sleep-grp {
                fsl,pins = <
                            MX8MM_IOMUXC_ENET_MDC_GPIO1_IO16                0x120
                            MX8MM_IOMUXC_ENET_MDIO_GPIO1_IO17                0x120
                            MX8MM_IOMUXC_ENET_TXC_GPIO1_IO23                0x120
                            MX8MM_IOMUXC_ENET_TD0_GPIO1_IO21                0x120
                            MX8MM_IOMUXC_ENET_TD1_GPIO1_IO20                0x120
                            MX8MM_IOMUXC_ENET_TD2_GPIO1_IO19                0x120
                            MX8MM_IOMUXC_ENET_TD3_GPIO1_IO18                0x120
                            MX8MM_IOMUXC_ENET_RD0_GPIO1_IO26                0x120
                            MX8MM_IOMUXC_ENET_RD1_GPIO1_IO27                0x120
                            MX8MM_IOMUXC_ENET_RD2_GPIO1_IO28                0x120
                            MX8MM_IOMUXC_ENET_RD3_GPIO1_IO29                0x120
                            MX8MM_IOMUXC_ENET_RXC_GPIO1_IO25                0x120
                            MX8MM_IOMUXC_ENET_RX_CTL_GPIO1_IO24                0x120
                            MX8MM_IOMUXC_ENET_TX_CTL_GPIO1_IO22                0x120
                >;
        };
};
我们知道 RGMII 芯片正在工作,因为我们实际上可以从 u-boot 访问 mdio 并读取所有寄存器。但是linux好像找不到PHY。我试图将静态 IP 添加到 u-boot 并从那里 ping,但这也不起作用。此外,当将其余部分添加到 .dts 时,u-boot 停止检测 PHY,但复位引脚似乎没问题。有任何想法吗?

0 - Generic PHY <--> ethernet@30be0000
QS8M U-Boot > mdio list
FEC0:
0 - Generic PHY <--> ethernet@30be0000
QS8M U-Boot > mii device
MII devices: 'FEC0'
Current device: 'FEC0'

更多回帖

发帖
×
20
完善资料,
赚取积分