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.

[参考译文] AM62A 上的 C45 PHY 支持

Guru**** 2482105 points
Other Parts Discussed in Thread: AM62A7

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1451214/c45-phy-support-on-am62a

器件型号:AM62A7

工具与软件:

双向转换

德州仪器(TI)工程师、

我正在 AM62A7上使用 TJA110 C45、驱动程序是

board-support/ti-linux-kernel-6.6.32+git-ti/drivers/net/phy/NXP-c45-tja11xx.c

遇到以下问题:

环境:
ti-processor-sdk-linux-edgeai-am62a-evm-10_00_00_08

2)器件树

&cpsw3g_mdio {
        status = "okay";
        pinctrl-names = "default";
        pinctrl-0 = <&main_mdio1_pins_default>;

        cpsw3g_phy1: ethernet-phy@1 {
                compatible = "ethernet-phy-ieee802.3-c45";
                reg = <1>;
                //ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
                //ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
                ti,min-output-impedance;
        };
};

错误
get_phy_device

  • get_phy_c45_ids
    • get_phy_c45_devs_in_pkg
      • mdiobus_c45_read//返回 -22

如何解决此问题?

此致、
兰溪地区

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

    您好 Ranxi、

    [quote userid="566281" url="~/support/processors-group/processors/f/processors-forum/1451214/c45-phy-support-on-am62amdiobus_c45_read //返回 -22

    首先、我了解一下 get_phy_c45_devs_ids 函数(drivers/net/phy/phy_device.c)、似乎唯一的预期返回值是0、-EIO (-5)或-ENODEV (-19)。 返回值-22 (-EINVAL)将指示某种无效参数。  https://elixir.bootlin.com/linux/v6.12.4/source/include/uapi/asm-generic/errno-base.h

    在 AM62Ax 器件上、以太网驱动程序应为 am65-cpsw-nuss.c、而 MDIO 驱动程序为 Davinci_MDIO.c 在 davinci_mdio.c (drivers/net/ti/davinci_mdio.c)中、通过 MDIO 位旁路/手动模式读取第45条寄存器时需要一个函数回调 davinci_mdiob_read_c45。  

    https://lore.kernel.org/all/20221227-v6-2-rc1-c45-seperation-v3-6-ade1deb438da@walle.cc/ 

    使用 davinci_mdiobb_read_c45读取 c45寄存器需要以位拆裂/手动模式运行 MDIO。 默认情况下、在我们的 TI Linux SDK 上、MDIO 应该已经配置为位拆/手动模式: https://lore.kernel.org/netdev/20220810111345.31200-1-r-gunasekaran@ti.com/T/ 

    1.您能否检查您的 MDIO 是否在位拆/手动模式下运行?  

    2.DaVinci_mdiobb_read_c45函数在 PHY 设备初始化时是否被调用?

    3.是否可以插入设备启动的启动日志? (使用"插入"->"代码"粘贴日志)

    -道林

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

    尊敬的 Daolin:

    上 星期五 、我          通过 修改  1103 驱动程序 文件、在 C22模式下完成了通信、 但  可能 仍 存在 潜在 问题。

          应  找到先前 C45故障的原因。  在 10.0SDK ( davinci_mdio_probe)中、  以下 分支  未 进入、 并且  C45相关 函数  为空、 因此 c45       匹配存在问题。

    1.是否可以  检查  您的 MDIO 是否  在  bitbang/manua 中运行?  

      是的、 我 认为  应该  检查一下。

    2.DaVinci_mdiobb_read_c45   函数   在  PHY 设备  初始化时是否被调用?

      未 调用。

    3.是否可以  插入      设备  启动的启动日志?  (   使用 "插入"->"代码"粘贴日志)

      我 会        先根据上述的想法检查一下,  如果 有  任何 问题, 我 会 回复 并 附上  日志。

     问题   如下:

    1. 如何  检查  Bitbang/manua 模式
    2. 0806       发展 环境上的情况是一样的吗?  由于  算法的 限制、 我们 最终  使用了 0806的 环境。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ranxi、您好!

    如何  检查  bitbang/manua 模式

    一种检查方法是在 davinci_mdio 驱动程序中添加 print 语句、查看 data->manual_mode 是否为 true。

    另一种检查方法是探测电路板上的 MDIO 时钟信号、以查看时钟信号是否不是连续信号。 print 语句的第一种方法可能更为简单、因为可以快速检查是否已配置位拆/手动模式。

    0806       开发 环境中的情形是否相同?  由于  算法的 限制、 我们 最终  使用了 0806的 环境。

    您能解释一下"0806"是什么意思吗?

    -道林

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

    尊敬的 Daolin:

    检查的一种方法是在 davinci_MDIO 驱动程序中添加 print 语句、以查看 data->manual_mode 是否为真。

    我之前打印过此值、发现在 C45注册过程中、回调函数为 null。 我跟踪了这个函数的注册过程。

    [  0.187079] Davinci_MDIO 8000f00.MDIO:== data->manual_mode =0

    您能解释一下"0806"是什么意思吗?

    TI-PROCESSOR-SDK-LINUX-am62axx-EVM-08.06.00.45。

    Ranxi Ren

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

    Ranxi、您好!

    0806       开发 环境中的情形是否相同?   由于 算法 限制、 我们 最终  使用了 0806的 环境。
    ti-processor-sdk-linux-am62axx-evm-08.06.00.45。

    Linux SDK 08.06.00.45使用 Linux 内核5.10、MDIO 勘误表的权变措施(MDIO Bitbang/Manual 模式)首先应用于该 Linux 内核版本、因此应该已经应用于 SDK 08.06.00.45

    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/commit/drivers/net/ethernet/ti/davinci_mdio.c?h=ti-linux-5.10.y&id=7fc3c8b9ad3952915b3bbba748f4d32a3622d325 

    [报价 userid="566281" url="~/support/processors-group/processors/f/processors-forum/1451214/c45-phy-support-on-am62a/5573560 #5573560"][0.187079]  davinci_mDIO 8000f00.mDIO:== data->manual_mode =0

    根据此输出、您的 MDIO 配置似乎未处于手动模式、这是读取 C45寄存器时的问题(即使 davinci_mdiobb_read_c45运行)。 您能否检查 socdata->manual_mode 是否也为0? (请参阅以下链接)

    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/net/ethernet/ti/davinci_mdio.c?h=ti-linux-5.10.y&id=7fc3c8b9ad3952915b3bbba748f4d32a3622d325#n550 

    -道林

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

    大家好、Daolin:

    您能否检查 sockdata->manual_mode 是否也是0? (请参阅下面的链接)

    [ 0.198956] Davinci_MDIO 8000f00.MDIO:=== soc_match_data->data->manual_mode
    [ 0.198971] Davinci_MDIO 8000f00.MDIO:== data->manual_mode =0

    现在的问题出在 soc_device_match 函数的返回值上。

    Ranxi Ren

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

    嗨道林、

    我已经解决了这个问题。 我不知道为什么 TI 没有在 davinci_mdio.c 文件中添加 AM62AX 的匹配。

    修改如下:

    问题如下:

    1.如果是,我想知道为什么它没有添加?

    2.为什么驱动程序初始化有问题?

    Ranxi Ren

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

    Ranxi、您好!

    我已解决此问题。 我不确定 TI 为什么没有在 davinci_mdio.c 文件中添加 AM62AX 的匹配项。[/QUOT]

    很高兴听到您已解决此问题!

    1. 如果是、我想知道为什么没有添加?

    我的理解是、MDIO 权变措施于2022年实施、当时 AM62Ax 尚未发布(2023年初发布)、因此可能根本未包含、因为 soc 本身不可用。

    我注意到、即使在最新的内核版本(ti-linux-6.6-y 或 SDK 10.0)中、AM62Ax 也 未添加到 k3_mdio_socinfo[]。 根据这一点和您的发现、AM62Ax MDIO 似乎始终在没有 MDIO 位拆/手动模式的情况下运行。 这已经正常运行、没有任何问题、因为 AM62Ax 本身没有 MDIO 损坏勘误表(AM62x 和 AM64x 有此勘误表)。  

    但是、您发现的 k3_mdio_socinfo 中缺少的 AM62Ax 是由于尝试读取第45条寄存器而暴露的、这 似乎需要 MDIO 位拆/手动模式。 我将执行步骤以在 k3_mdio_socinfo 中添加 AM62Ax、从而了解更多 SDK 版本。

    2. 为什么驱动程序初始化出现问题?[/QUOT]

    要澄清一点、您是否想了解 NXP  TJA110 PHY 驱动程序或 Davinci_MDIO 驱动程序? 我看到了 NXP PHY 驱动程序的屏幕截图、因此如果您谈论的是该驱动程序的某个问题、我将无法提供太多帮助、因为这是 TI 不支持的部分。 您可以考虑直接联系 NXP 进行 驱动程序初始化。

    -道林

    [/quote]