This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DP83826I:imx8qxp + Linux 5.4:无 TX 和 RX 数据包

Guru**** 2394295 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/950810/dp83826i-imx8qxp-linux-5-4-no-tx-and-rx-packets

器件型号:DP83826I
主题中讨论的其他器件:TCA9535

您好! 我们正在尝试将 DP83826 Phy 集成到我们的定制基板中。 我们使用基于 i.MX8QXP 的 SoM、运行基于 Yocto 的 Linux 发行版、当前在内核版本5.4.3上。

我想我们至少有一些事情是正确的、因为现在我们能够启动 eth 接口并成功地将 MAC 连接到 PHY、但从未有任何 TX 或 RX 数据包。 我将在下面列出配置器件所执行的步骤。

1) 1)在下图中、有一部分原理图涉及 eth phy。

上拉 Strap4以在基本模式下启用 RMII。

imx8qxp 处理器具有2个 FEC (快速以太网控制器) MAC (ENET0、ENET1)。 我们将使用 enet1引脚(我将在下面提供器件树的一部分)。

2) dp83822驱动程序(支持83826 IC)未在5.4.3上游内核上完全更新,因此我从 https://www.ti.com/tool/ETHERNET-SW 获取了 dp83822.c 文件的更新版本 。 我已将其修补到我们的内核中、该内核需要在 phy_core.c 和 phy_device.c 上添加一个小修补程序、以添加驱动程序使用的一些定义和辅助方法。

3) 3)通过 CONFIG_DP83822启用驱动程序、并成功编译。

4)相关器件树节点:

pinctrl_fec2_enet1:fec2_grp{
FSL、引脚=<
IMX8QXP_SPDIF0_RX_CONN_ENET1_RGMII_RXD0 0x00000040
IMX8QXP_ESAI0_TX3_RX2_RX2_CONN_ENET1_RGMII_RXD1 0x00000040
IMX8QXP_ESAI0_TX2_RX3_CONN_ENET1_RMII_RX_ER 0x00000040
IMX8QXP_SPDIF0_TX_CONN_ENET1_RGMII_RX_CTL 0x00000040

IMX8QXP_ESAI0_TX4_RX1_CONN_ENET1_RGMII_TXD0 0x00000040
IMX8QXP_ESAI0_TX5_RX0_CONN_ENET1_RGMII_TXD1 0x00000040
IMX8QXP_ESAI0_SCKR_CONN_ENET1_RGMII_TX_CTL 0x00000040

IMX8QXP_ENET0_MDIO_CONN_ENET1_MDIO 0x00000020
IMX8QXP_ENET0_MDC_CONN_ENET1_MDC 0x00000040

IMX8QXP_ESAI0_FSR_CONN_ENET1_RCLK50M_IN 0x00000040

// PWRD/INT#
IMX8QXP_MIPI_DSI1_GPIO0_01_LSIO_GPIO2_IO00 0x00000060
>;
};

//以太网1 (FEC2)
fect2{
pinctrl-names ="default";
pinctrl-0 =<&pinctrl_fec2_enet1>;
PHY-SUPPLY =<Registered_3V3>;
PHY-MODE ="RMII";
PHY-Handle =<&ethphy>;
FSL、魔术包;
mac-address =[ 00 00 00 00 00 00 00];
local-mac-address =[ 00 00 00 00 00 00];
最大速度=<100>;
状态="正常";

PHY-RESET-GPIO =<&T 9535_EXPANDER15 GPIO_ACTIVE_LOW>;
PHY-RESET-DURATION =<200>;

MDIO{
#address-cells =<1>;
#size-cells =<0>;

ethphy:ethernet-phy@1{
兼容="Eth以 太网-phy-IEEE802.3-C22";
reg =<1>;
};
};
};

5) phy 在总线上找到并连接到。 这是"dmesg | grep eth"的输出

[2.288987] FEC 5b050000。以太网 eth0:寄存 PHC 设备0
[ 7.335403] TI DP83826NC 5b050000.Ethernet-1:01:连接的 PHY 驱动器[TI DP83826NC](MII_BUS:phy_addr=5b050000.Ethernet-1:01、IRQ=POLL)
[9.407544] FEC 5b050000。以太网 eth0:链路向上- 100Mbps/全-流控制 Rx/TX
[9.415564] IPv6:ADDRCONF (NETDEV_CHANGE):eth0:链路就绪

但是、我们无法以任何有意义的方式传输任何数据或使用 eth0接口。 以下是一些可能有用的信息:

- ethtool:

eth0的设置:
支持的端口:[ TP MII]
支持的链路模式:10BaseT/Half 10baseT/Full
100BaseT /半个100BaseT /全双工
支持的暂停帧使用:对称
支持自动协商:是
支持的 FEC 模式:未报告
通告的链路模式:10BaseT /半10baseT/全
100BaseT /半个100BaseT /全双工
通告的暂停帧使用:对称
广播自协商:是
通告的 FEC 模式:未报告
链接伙伴通告的链接模式:10BaseT /半10baseT/全
100BaseT /半个100BaseT /全双工
链接伙伴通告的暂停帧使用:对称仅接收
连接方通告的自动协商:是
连接伙伴通告的 FEC 模式:未报告
速度:100Mb/s
双工:全双工
端口:MII
PHYAD:1.
收发器:内部
自协商:开
支持唤醒:g
唤醒:D
检测到链接:是

- ethtool -S eth0:

一切都是0。

- ifconfig eth0:

eth0 Link encap:ethernet HWaddr 00:d0:93:51:22:e0
iNet addr:192.168.0.100 Bcast:192.168.0.255掩码:255.255.255.0
inet6 addr:fe80::2d0:93ff:fe51:22e0/64范围:链接
运行多播 MTU:1500公制:1的上广播
RX 数据包:0错误:0丢弃:0超限:0帧:0
TX 数据包:0错误:0丢弃:0超限:0载波:0
冲突:0 txqueuelen:1000
RX 字节:0 (0.0 B) TX 字节:0 (0.0 B)

目前不确定 IP 地址为192.168.0.100、它不是 DHCP。

6)我们还使用 phytool (https://github.com/wkz/phytool)通过 MDIO 总线读取 DP83826上的一些寄存器、但似乎存在很多不一致之处、因此我不确定我们可以信任哪些数据以及哪些数据不正确。 例如、寄存器0x467应在 PHY 初始化时返回设置状态。 读取它将返回0x2001、这意味着 PHY 地址不是0x01、这是不正确的、因为它是错误的。

一些相关的寄存器及其内容:

0x00 = 0x3100
0x09 = 0000
0x0A = 0x0100
0x0b = 0000
0x10 = 0x5115
0x11 = 0x010b
0x17 = 0x0065
0x19 = 0xbc01
0x467 = 0x2001
0x468 = 0000

7) 7)我们测量了 TX_EN 和 RX0、TX0信号。 RX 引脚上似乎有一些活动、但 TX 引脚(EN 和 TX[1:0])仍然存在。

8)我们测量了 RST_N (引脚32)和 PWRDN/INT (引脚21)、两者都处于高电平。 奇怪的是、寄存器似乎指示 PWRDN 引脚被用作中断、如果没有明确的寄存器配置、就不应该发生这种情况。

9) 9)我们偶尔也会得到 TX 环形转储、其外观如下所示:

------ [在此处剪切]-----
[263.915343] NETDEV 看门狗:eth0 (FEC):发送队列0超时
[263.921736]警告:CPU:3 PID:0 at net/sched/sch_generic.c:454 DEV_Watchdog+0x2fc/0x308
[263.930009]链接的模块:crct10dif_ce a6 usbnet FSL_imx8_DDR_perf flexcan _dev galcore (O)
[263.939172] CPU:3 PID:0 Comm:swapper/3被污染:G O 5.4.3-tq+g02868ec #1
[263.947444]硬件名称:ATBN 1.0 (DT)上的六角农业 i.MX8QXP TQMa8XQP4
[263.955022]状态:20000005 (nzCv daif -PAN -UAO)
[263.959818] PC:DEV_安全 装置+0x2fc/0x308
[263.963829] LR:DEV_WATCHDOG+0x2FC/0x308
[263.967841] sp:ff80001001bdb0
[263.971158] X29:ff80001001bdb0 x28:ff0000794e8300
[263.976475] X27:000000000004 x26:0000000000000140
[263.981791] x25:0000ffff x24:ff0000786cf000
[263.987108] x23:ff0000786cf39c x22:ff0000786cefb8
[263.992425] x21:ff0000786cf3b8 x20:ff800011876000
[263.997741] x19:000000000000 x18:000000000010
[264.003058] X17:000000000000 x16:0000000000000000
[264.008375] x15:ff0000780b3c70 x14:ffffffffffffffffffffff
[264.01362] X13:ff80009001bb17 x12:ff80001001bb1f
[264.019008] x11:000000000000 x10:0000000000000000
[264.024325] x9:0000000000000000 x8:ff8000119a3000
[264.029642] x7:ff8000106ad930 x6:0000000000000181
[264.034958] x5:0000000000000000 x4:0000000000000008
[264.040275] x3:000000000004 x2:0000000000000100
[264.045592] x1:1bcbcda14a1fc800 x0:000000000000
[264.050911]呼叫追踪:
[264.053367] DEV_安全 装置+0x2FC/0x308
[264.057034] call_timer_fn.isra.0+0x20/0x78
[264.061218] RUN_TIMER_softirq+0x1a0/0x408
[264.065320]__do_softirq+0x120/0x23c
[264.068985] IRQ_EXIT+0xb8/0xd8
[264.072131]__Handle_domain_IRQ+0x64/0xb8
[264.076227] GIC_Handle_IRQ+0x5c/0x148
[264.079982] el1_IRQ+0xb8/0x180
[264.083128] arch_cpu_idle+0x10/0x18
[264.086709] do_idle+0x200/0x280
[264.089936] CPU_STARTUP_END+0x20/0x40
[264.093868] secondary _start_kernel+0x154/0x190
[264.098396]--[结束线迹6670558fa7ef539a]--
[264.103053] FEC 5b050000.以太网 eth0:TX 环转储

后跟 TX 环形缓冲器的转储。 这似乎表明 PHY 无法满足内核发送数据包的请求。

 

现在、我们还不知道要调查的其他事项。 希望有这样的想法。

此致、

Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    从硬件角度来看、配置看起来正常。 我要将该主题转发给我们的驱动程序专家、以便查看。

    此致、
    GET

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好

    首先、phytool 只能访问 IEEE 寄存器、扩展寄存器集中的任何寄存器都将产生意外结果。  您需要根据数据表设置 DEVADDR 寄存器才能读取扩展寄存器。

    接下来、如果 Rx 正在切换且 Tx 未切换、则可能是处理器 DT 未针对 I/O 以及上拉和下拉进行正确设置。  由于这是一个 IMX 处理器、因此我们在该处理器上的知识领域有限。 如果 Tx 环缓冲区正在进行错误检查、则可能是 MAC 存在问题。

    如图所示、硬件似乎设置正确、器件正在被识别、并且可以与 LP 建立链路。 我会联系处理器供应商以验证 I/O 线路的 DT 设置。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、您好!

    实际上、与处理器供应商和 SoM 提供商联系是有意义的、我也会这样做。 但我真的想确认一切是否都好"从物理角度来看"。 我可以在驱动程序或寄存器中执行任何调试、以查看 PHY 是否正常?

    我认为这不太可能成为 MAC 的问题、因为我们的 SoM 提供商还提供了一个 Devkit、它成功使用2个 DP83867 PHY、尽管处于 RGMII 模式(而我们只需要 RMII)。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好

    您应该读取寄存器0x468以查看位(4)是否已设置。 还要检查寄存器0x12和0x13以确保中断关闭。  

    Dan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、您好!

    我们已经得到了问题的答案(虽然这将导致重新设计和重新评估所使用的 PHY 模型)、我将在这里发布、以便在有人遇到相同问题时发布。

     在以下文档中,https://www.nxp.com/docs/en/data-sheet/IMX8QXPAEC.pdf 第77页(4.10.5)提供了有关不同 MAC 模式操作的电压电平的注释。

    RMII 仅在3.3V 时受支持(而 RGMII 在1.8V 和2.5V 时受支持)。 我们为 ENET1多路复用的焊球目前由1.8V 电压供电。 虽然我们无法轻松更改此电压以测试它是否能够解决问题、但这似乎是故障的原因。

    感谢你们的帮助!