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.

[参考译文] DP83869HM:中断未置为有效

Guru**** 2535150 points


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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1561550/dp83869hm-interrupt-is-not-de-asserting

器件型号:DP83869HM
主题:DP83869 中讨论的其他器件

工具/软件:

大家好!

SoC:Zynq MPSoC (Xilinx /AMD)
MAC 接口:GEM1
PHY 和模式:DP83869 (TI) 和 RGMII 铜缆

中断配置为如下级别触发

&gem1{
PHY 模式=“RGMII-id";“;
状态=“正常“;
phy-handle =<&phy1>;
phy1:PHY@1{
reg =<1>;
兼容=“Ethernet-phy-IEEE802.3-C22";“;
RX-INTERNAL-DELAY-ps =<2000>;
tx-internal-delay-ps =<2000>;
Interrupt-parent =<&GPIO>;
Interrupts =<78 8>;//EMIO 0 用作 INT
};
};

使用“macb ff0c0000.ethernet eth0:PHY [ff0c0000.ethernet-ffffffff:01]驱动程序[TI DP83869](IRQ=52) 配置中断、而 cat /proc/interrupts 中还提供了相应条目。

默认情况下、当未连接电缆时、INT 线路会探测到高电平并读为高电平。 当电缆连接链路接通时、cat /proc/interrupt 中的计数器会增加、并且 INT 线路探测到低电平。 但链路建立后、中断线路保持低电平状态、这会导致虚假中断状态、并使中断被禁用、下面的崩溃。
root@zynqmp-iwg36o:~#[ 1040.510999] irq 52:没有人关心(尝试使用“irqpoll"选项“选项引导选项引导)
[1040.517716] CPU:0 PID:0 Comm:swapper/0 未污染 6.6.40-Xilinx gf2d46953498a #1
[ 1040.525463]硬件名称:xlnx、zynqmp (DT)
[1040.529639]呼叫跟踪:
[1040.532077] dump_backtrace+0x90/0xe8
[1040.535749] SHOW_STACK+0x18/0x24
[1040.539073] dump_stack_lvl+0x48/0x60
[1040.542736] dump_stack+0x18/0x24
[1040.546051]__REPORT_BAD_IRQ+0x38/0x120
[1040.549975] note_interrupt+0x310/0x360
[ 1040.553811] Handle_IRQ_event+0xd8/0xe8
[1040.557648] Handle_fastei_irq+0xb0/0x284
[1040.561745] generic_handle_domain_IRQ+0x2C/0x44
[1040.566371] Zynq_GPIO_irqhandler+0xa0/0x16c
[ 1040.570642] generic_handle_domain_IRQ+0x2C/0x44
[1040.575268] GIC_HANDLE_IRQ+0x6C/0x9C
[1040.578931] CALL_ON_IRQ_STACK+0x24/0x4c
[ 1040.582855] Do_interrupt_handler+0x80/0x84
[1040.587038] el1_interrupt+0x34/0x54
[ 1040.590614] el1h_64_IRQ_HANDLER+0x18/0x24
[1040.594711] el1h_64_IRQ+0x64/0x68
[1040.598114] default_idle_call+0x28/0x3c
[1040.602037] DO_IDLE+0xac/0x100
[1040.605180] CPU_STARTUP_ENTRY+0x34/0x3c
[ 1040.609103] kernel_init+0x0/0x1e0
[1040.612505] arch_post_acpi_Subsys_init+0x0/0x8
[1040.617036] start_kernel+0x504/0x60c
[1040.620699]__PRIMARY_SWITCHED+0xbc/0xc4
[1040.624710]处理程序:
[ 1040.626975][<000000008cd40a2e>] IRQ_DEFAULT_PRIMARY_HANDLER 线程[<00000000054f5eA5>] phy_interrupt
[ 1040.636480 ]禁用 IRQ #52

如何确认是否调用了 PHY 中断处理程序并为中断提供服务(通过向右读取 ISR 寄存器)?
如果手动读取 ISR 寄存器或某个时间后在中断处理程序函数中读取 0x0、其读数为 0x0。

请帮助调试中断为何保持低电平而不是取消置位。

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

    您好、

    通过读取 ISR 寄存器来处理 PHY 中断。 此寄存器将在读取时清零、因此您只能读取一次、并且应在读取寄存器后将中断置为无效。  
    但是、如果寄存器尚未读取 500ms、在用户没有寄存器访问权限的情况下、中断也可以自行清除。 这可能是中断处理程序函数有时读取 0x0 的原因。 最后、一旦中断被触发、新的中断不会路由、直到当前中断被清除。 这可能是中断未置为无效的原因。 如果不断触发新的中断、中断看起来永远不会被清除。  

    您是否尝试过仅启用一个中断事件、看看此事件是否仍然存在?

    此致、
    j

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

    您好 J

    感谢您的答复。

    通过读取 ISR 寄存器来处理 PHY 中断。 此寄存器将在读取时清零、因此您只能读取一次、并且应在读取寄存器后将中断置为无效。
    Bowya:好的。 该寄存器在处理程序函数中被读取一次、如下所示。 因此清除寄存器应该足够了。

    但是、如果寄存器尚未读取 500ms、在用户没有寄存器访问权限的情况下、中断也可以自行清除。 这可能是中断处理程序函数有时读取 0x0 的原因。
    Bowya:如何知道何时不能访问寄存器?  即使具备寄存器访问权限、自清除选项也适用且有效? 在数据表中、它通过引脚选项显示、如果禁用寄存器访问、则选择引脚选项、然后选择 500ms 自清除。

    最后、一旦中断被触发、新的中断不会路由、直到当前中断被清除。 这可能是中断未置为无效的原因。 如果不断触发新的中断、中断看起来永远不会被清除。 您是否尝试过仅启用一个中断事件、看看此事件是否仍然存在?
    Bowya:是的、我也尝试了启用单个中断。  日志和源已附加。 请检查并提供您的 assistance.e2e.ti.com/.../Interrupt.txte2e.ti.com/.../8233.dp83869.c

    此致、

    Bowya

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

    尊敬的 Bowya:  

    Bowya:如何知道何时不存在寄存器访问?  即使具备寄存器访问权限、自清除选项也适用且有效? 在数据表中、它显示通过引脚选项(如果禁用寄存器访问)、然后通过引脚选项 (pin option)、再通过 500ms 自行清除。

    我们在内部讨论了这一点、数据表中的描述会产生误导。 由于没有用于禁用寄存器访问的引脚选项、因此请理解这一点、好像如果中断寄存器没有读取 500ms、中断会自行清除。  

    我看了日志和代码、这是一个有趣的情况。  
    您是否尝试过启用中断引脚、但未启用任何中断屏蔽? 我想知道中断引脚是否仍被置为有效。 如果是、我想检查您的电路板设计以查看是否存在任何硬件问题。  

    此致、
    j

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

    尊敬的 J:

    在不同时启用任何中断屏蔽的情况下、将使中断引脚有效。 手动读取第 6 位和第 12 位时会设置 ISR 寄存器。 以下代码用于不启用任何中断源并附加日志。

    static int dp83869_config_intr(结构 phy_device *phydev)

    INT MICR_STATUS = 0、err;

    if (phydev->interrupts == PHY_INTERRUPT_ENABLED){
    printk(“\n 如果条件在%s\n“、__func__中、则启用 PHy 中断);
    Err = dp83869_ack_interrupt (phydev);
    if (err){
    printk(“\nAlready in interrupt %s\n“、__func__);
    返回错误;
    }

    MICR_STATUS = phy_read (phydev、MII_DP83869_MICR);
    if (MICR_STATUS < 0){
    printk(“\nMICR Null 或小于 0 %s\n“、__func__);
    返回 MICR_STATUS;
    }

    printk(“\nMICR 值默认值:%d、%s\n“、MICR_STATUS、__func__);
    #if 0
    MICR_STATUS |=
    (MII_DP83869_MICR_AN_ERR_INT_EN |
    MII_DP83869_MICR_SPEED_CHNG_INT_EN |
    MII_DP83869_MICR_AutoNeg_COMP_INT_EN |
    MII_DP83869_MICR_LINK_STS_CHNG_INT_EN |
    MII_DP83869_MICR_DUP_MODE_CHNG_INT_EN |
    MII_DP83869_MICR_SLEEP_MODE_CHNG_INT_EN);
    #endif
    MICR_STATUS = 0;

    Err = phy_write (phydev、MII_DP83869_MICR、MICR_STATUS);
    printk(“\nMICR 值:%d、%s\n“、MICR_STATUS、__func__);
    }其他{
    printk(“\nPhy interrupt config_intr else condition in %s:mcr_value:%d\n“、__func__、mcr_status);
    Err = phy_write (phydev、MII_DP83869_MICR、MICR_STATUS);
    if (err)
    返回错误;

    Err = dp83869_ack_interrupt (phydev);
    }

    返回错误;
    }

    e2e.ti.com/.../No_5F00_interrupt_5F00_Masks.txt

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

    尊敬的 Bowya:

    即使禁用屏蔽、寄存器上的中断标志仍将上升。 只有启用了屏蔽的中断才会路由到中断引脚。  

    由于即使没有屏蔽路由到中断引脚、中断引脚也会变为低电平、因此我怀疑在连接电缆时是否存在硬件问题。  

    您能给我发送原理图、让我们看看是否存在任何硬件问题吗? 我向您发送了一个朋友的申请、请随时向我发送原理图消息。  
    此外、您能否检查 INT 引脚的极性? 默认应为低电平有效、但驱动器初始化可能已将其设置为高电平有效。  
    请检查寄存器 14h 位 13。  

    此致、
    j

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

    尊敬的 J:

    我发送了原理图屏幕截图和 GEN_CFG2 寄存器读取服务。 请检查并提供您的建议。

    谢谢您、
    此致、
    Bowya

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

    尊敬的 Bowya:  

    感谢您发送邮件。 我没有注意到原理图上有任何硬件问题。 此外、似乎在中断引脚上正确设置了极性。 我忘记传递 C18h 也是可能导致中断引脚变为低电平的中断屏蔽寄存器。 您能否将 0x0000 写入 C18h 和 12h 并查看是否仍被触发中断引脚? 我怀疑 C18h 中的某个功能会触发中断保持低电平。 此外、当中断发生时、请读取 C19h。 C18h 和 C19h 是光纤的中断寄存器、但根据数据表、C18h 上的中断主要是默认启用的、因此可能会触发这些寄存器上的中断。  

    此致、
    j

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

    尊敬的 J:

    感谢您发送编修。 正如建议的那样、光纤中断配置寄存器也设置为 0x0、MICR 也设置为 0x0。 这也会导致中断引脚置为低电平有效。 另外、在手动读取时、光纤状态寄存器似乎具有 0x4444、并且在多次读取时、这些位也未清除。  已附上日志和代码。
    e2e.ti.com/.../8750.dp83869.ce2e.ti.com/.../No_5F00_int_5F00_MICR_5F00_FICR.txt

    此致、
    Bowya

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

    尊敬的 Bowya:  

    我们尝试在 EVM 上重新创建该问题。 我将由星期五回复您。  

    此致、
    j

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

    尊敬的 Bowya:  

    很遗憾、我无法重新创建此问题。 可以观察到、当所有屏蔽均禁用然后建立链路时、中断引脚保持高电平。 您能否在移除将中断引脚连接到 FPGA 的 0 Ω 电阻器后尝试探测中断引脚?  
    我怀疑 FPGA 可能将引脚拉至低电平、从而导致此问题。  

    此致、
    j

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

    尊敬的 J:

    我将检查并重新使用星期一。

    此致、
    Bowya

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

    尊敬的 Bowya:  

    请让我了解最新信息。  

    此致、
    j

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

    尊敬的 J:

    禁用所有屏蔽后、中断引脚变为低电平、保持低电平、并且即使从中断线路中移除 0 Ω(R242)、也无法建立链路。 请参阅下面的示波器输出。 还会附加日志。

    e2e.ti.com/.../3808.Log.txt

    此致、
    Bowya

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

    尊敬的 Bowya:  

    感谢您隔离 PHY。  
    看起来这是 PHY 问题。  
    一个问题:在 PHY 配置中断之前、信号为何为低电平? 此引脚默认处于断电状态、因此该值应该为高电平。 否则、PHY 将卡在 IEEE 断电模式下。 是否也可以通过将寄存器 0h 的位 11 设置为 0 来清除 IEEE 断电?

    除此之外、如果您有其他器件和额外的电路板、可以在该器件上尝试 ABA 交换吗? 我开始怀疑此器件可能有问题。  

    请告诉我您的想法。  

    此致、
    j

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

    尊敬的 J:

    在配置 MAC 之前、PHYLIB 会配置 PHY 驱动程序、因此当电缆连接时 INT 引脚置为低电平、然后当 PHY 驱动程序配置中断时 INT 引脚置为高电平有效。 如果在整个引导过程中未连接电缆、则电缆始终保持高电平。 BMCR 的位 11 也读取为 0。

    我们没有已知的工作板、但在同一板上、还有两个 DP83869 PHY 和其他 MAC。 我们将进行检查、明天回来。

    设置了几个位的光纤相关中断寄存器对此问题是否有任何作用? 您的 EVK 中是如何实现的?
    如果任何中断屏蔽未启用、则是谁触发了中断? 此外、在 EVK 中、当所有屏蔽均被禁用且电缆已连接时、它是否会将 INT 引脚置为低电平有效?

    此致、
    Bowya

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

    尊敬的 Bowya:  

    与光纤相关的中断寄存器在该问题中不起作用。 在 EVM 中、我看到默认情况下启用了光纤中断屏蔽、但我没有观察到当连接电缆时 INT 引脚变为低电平、此时铜缆中断屏蔽均禁用。  

    我不确定是什么因素在所有中断屏蔽均被禁用时触发 PHY 中的中断。 我观察到、在禁用所有屏蔽并连接电缆时、INT 引脚的预期行为不会变为低电平。 此外、即使 INT 引脚未连接到 MAC、我们仍会看到您的电路板上的 INT 引脚变为低电平。 因此、我认为电路板上的 PHY 可能是有问题的 PHY。 因此、我建议或许我们可以关闭 PHY 以查看此问题是否仍然存在。  

    此致、
    j

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

    尊敬的 J:

    在我们的电路板中、GEM1、GEM2 和 GEM3 还连接到 3 个不同的 DP83869 PHY。 在这一点上、GEM1 和 GEM2 的行为与我们在本页中讨论的类似。 但即使未连接电缆、GEM3 也会触发中断。 这是否仍然可能是 PHY 问题?

    此致、
    Bowya

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

    尊敬的 Bowya:  

    PHY 与 GEM2 断开连接时、GEM2 PHY 是否也表现出相同的行为? 如果是、则可能是 PHY 问题。  

    此致、
    j

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

    尊敬的 J:

    感谢您的答复。 您可以回顾一下我的 DTS 吗?

    此致、
    Bowya

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

    尊敬的 Bowya:  

    您的 DTS 看起来不错。 作为目前的权变措施、您可以选择中断级别为下降沿而不是低电平、以便系统不会因来自 PHY 的恒定中断而崩溃。 否则、我们应尝试解决 PHY 持续将中断置为有效的问题。 您是否进行了 ABA 交换?

    此致、
    j