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.

[参考译文] AM623:M4F WWDT 回调在首次运行时不触发、在第二次运行时立即回调

Guru**** 2952510 points

Other Parts Discussed in Thread: AM623, AM625

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1637667/am623-m4f-wwdt-callback-not-triggered-on-first-run-immediate-callback-on-second-run

器件型号: AM623
主题中讨论的其他器件: AM625

我们正在通过将 M4F WDT 示例代码集成到 MCU+ SDK 中提供的 IPC 示例中(Cortex‑A53/Linux 和 Cortex‑M4F 之间的 IPC 通信)、在 AM623 上测试 M4F 窗口式看门狗计时器 (WWDT)。
 
观察到的行为:
  • CPU 引导后、在 M4F 固件的首次程序加载和执行时、会发生 WWDT 超时、但不会执行超时处理回调。
  • 在停止、复位和重新加载 M4F 固件后、在第二次执行时、会在 START 后立即执行 WWDT 超时回调。
 
寄存器观察
RTI 寄存器
  • CFG_WDSTATUS
    • 第一次运行: DWWD (bit5) = 0
    • 第二次运行: DWWD (bit5) = 1
ESM 寄存器
第一次运行
  • CFG_STS (0x04100044) = 1
  • CFG_HI (0x0410002C) = 0x00000000
  • CFG_GRP_ERR_GRP_RAW_J_J / STS_J_J (0x04100440 / 0x04100444) = 0x00000000
第二次运行
  • CFG_STS = 0
  • CFG_HI = 0x00000004
  • CFG_GRP_ERR_GRP_RAW_J_J / STS_J_J = 0x00200000
根据这些结果、似乎正在发生 RTI→ESM 通知、并且 ESM 状态在第一次和第二次固件执行之间不同。
问题: 您能否说明此行为的可能原因、特别是 M4F 固件重新加载(通过 Linux Remoteproc)之间的 RTI/ESM 状态持久性或初始化差异是否可以解释第二次运行时立即回调执行?
 
存在许多风险
  • 器件:AM623
  • Cortex‑A53:Linux 正在运行
  • Processor SDK (Linux):11.00.09.04 (2025/04/16)
M4F WWDT 配置
  • 超时:5 秒
  • 窗口大小:100%
  • 反应: GENERATE_NMI

感谢您的帮助。

此致、

Michael

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

    您好、Michael、

    您能否确认您在 M4F 应用程序中使用了 MCU ESM 还是主 ESM?

    Linux dts 文件中是否也启用了相同的 ESM?

    是否可以与 WDT 集成代码共享 M4F 内核 IPC 示例、以便我可以查看软件更改并轻松回复您?

    此致、

    Anil.

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

    您好 Anil、

    我的理解是正在使用 MCU ESM、并且它也在 Linux dts 文件中启用。

    我将通过私人消息向您发送 DTS 文件以及 WDT 集成代码的一部分。  

    如果有任何事情发生在你身上、请告诉我。

    谢谢、我期待您的答复。

    此致、

    Michael

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

    您好 Anil、

    我已通过私人消息向您发送文件。

    如果有任何问题、请告诉我。

    此致、

    Michael

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

    尊敬的 Anil:

    我是 Michael 的同事。 我联系您是因为他暂时离开办公室。
    很抱歉耽误你。 是否有任何更新?  即使只是告诉我这种情况也会有所帮助。
    如果在线程中很难回答,私人聊天也是不错的。

    此致、
    正常

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

    您好 Anil、

    我回到办公室、所以我将再次接管工作。

    您是否有机会查看我通过私人信息提供的内容?

    如果您需要任何其他信息、敬请告知。

    谢谢您、
    Michael

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

    我知道您可能会很忙;但是、我们已经等待了近一个月来更新此问题。

    您能分享一下当前状态吗?

    另外、请告诉我是否需要我们方面提供任何其他信息。

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

    您好、Michael、

    您能否确认是否在内核的设备树中禁用或启用了此字段?

    我在您共享的文件中找不到 MCU ESM 的器件状态。

    &MCU_ESM{
    STATUS =“已禁用“;
    };

    此致、

    Anil.

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

    你好 Anil

    我找不到将此节点设置为“禁用“的任何配置、因此应启用该节点。 它在 Linux 中似乎也能被正确识别。

    为了便于参考、我已通过私人消息共享了完整的 DTS 文件。

    如果您需要任何其他信息、敬请告知。 谢谢你。

    此致、

    Michael

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

    您好 Anil、

    请让我知道进展情况。

    谢谢您、

    Michael

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

    您好、Michael、


    请按照以下步骤禁用 MCU ESM 模块并执行测试:

    在 MCU 器件树源 (DTS) 文件中、当前启用了以下 MCU ESM 模块。 请注释掉以下行:

    /* MCU_ESM:ESM@4100000{
    bootph-pre-ram;
    兼容=“ti、j721e-ESM“;
    REG =<0x00 0x4100000 0x00 0x1000>;
    /*中断源:esm0_cfg、esm0_hi、esm0_low、mrti0 */
    TI、ESM-PINS =<0>、<1>、<2>;
    };*/

    并添加以下内容以禁用 MCU ESM:

    &MCU_ESM{
    STATUS =“已禁用“;
    };

    后续步骤:
    1.对 DTS 文件进行上述更改
    2.重建设备树
    3.将更新后的映像刷新到您的设备
    4.进行测试
    5.分享测试结果。

    此致、

    Anil.

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

    您好 Anil、

    按照您提供的步骤、模块已注释掉并添加了 MCU ESM 禁用代码、但构建器件树时会发生错误。  

    因此、尝试了以下两个构建:

    1. MCU_ESM 模块被注释掉、并构建了器件树
    2. 将 status=“disabled“添加到 MCU_ESM 模块并进行构建

    在上面列出的每种情况下、最初观察到的行为保持不变。

    我将为您提供 1 中使用的每个 DTS 文件。 和 2. 上面的内容以供参考。

    如果您有任何想法、或者需要有关在对建议的 DTS 文件进行两项更改后尝试构建器件树时发生的错误的其他信息、请告诉我。

    谢谢您、

    Michael

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

    您好、 Michael、

    添加状态禁用配置后、您遇到什么错误?

    @BIN,你能在这里帮助吗? 客户需要确保在 MCU 内核侧而不是 Linux 侧启用 MCU ESM。
    他们已将 DTS 文件与 MCU_ESM 配置设置共享。

    我让他们添加 MCU_ESM 禁用配置、但后来他们报告了错误。

    您能帮帮吗?

    他们在私人聊天中分享了 DTS 文件,我可以与你分享。

    Michael、FYI、  我已将您的查询转接到 Linux 专家。

    此致、

    Anil.

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

    要禁用 MCU_ESM、您需要将下面的 dts 补丁应用到 U-Boot(而不是内核)。

    diff -git a/arch/arm/dts/k3-am625-r5-sk.dts b/arch/arm/dts/k3-am625-r5-sk.dts
    索引 513062c4503b.a1b6ebce363f 100644
    -- A/arch/arm/dts/k3-am625-r5-sk.dts                   
    ++ b/arch/arm/dts/k3-am625-r5-sk.dts                   
    @@μ@@ s - 15、3 + 15、7 μ s                   
        ti、sci =<&dm_tifs>;                   
        全部引导;                   
     };
    +
    +&MCU_ESM{                   
    +    status =“disabled“;                   
    +};

    然后、您将在 U-Boot 控制台日志中看到以下消息、但由于我们禁用了 MCU_ESM、可以将其忽略。

    ESM MCU 初始化失败:–19

    禁用 MCU_ESM 后、任何主域 ESM 事件都不会触发 ESM 复位。 如果您仍需要主域 ESM 事件来触发 ESM 复位、请也应用以下 U-Boot 补丁。

    diff -git a/arch/arm/mach-k3/am62x/am625_init.c b/arch/arm/mach-k3/am62x/am625_init.c
    索引 e821de1e1342..bf4201866810 100644
    -- A/arch/arm/mach-k3/am62x/am625_init.c
    ++ b/arch/arm/mach-k3/am62x/am625_init.c
    @@–100、13 +100、14 @@静态 void ctrl_MRR_UNLOCK (void)
        MMR_UNLOCK (PADCFG_MMR1_BASE、1);
     }
                                          
    +#define CTRLMMR_WKUP_RST_CTRL (WKUP_CTRL_MMR0_BASE + 0x18170)
     static __May_unused void ENABLE_MCU_ESM_RESET (void)
     {               
        /*将 CTRLMMR_MCU_RST_CTRL:MCU_ESM_ERROR_RST_EN_Z 设置 为“0“(低电平有效)*/
    -    U32 stat = readl (CTRLMMR_MCU_RST_CTRL);
    +    U32 stat = readl (CTRLMMR_WKUP_RST_CTRL);

        STAT 且= RST_CTRL_ESM_ERROR_RST_EN_Z_MASK;
    -    writel (stat、CTRLMMR_MCU_RST_CTRL);
    +    writel (stat、CTRLMMR_WKUP_RST_CTRL);
     }

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

    嗨 Bin、Anil

    感谢您的帮助。

    mcu_esm 已应用在 U‑Boot DTS 中禁用建议的补丁;但是、最初观察到的行为保持不变。

    作为参考、我将 通过私人消息提供从运行时使用的 dtb 转换而来的 dts 文件。

    如果您发现任何问题或对如何继续有进一步的建议、请告诉我。

    此致、

    Michael

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

    您好:  

    您是否能够检查我发送的文件?  

    如果您有任何反馈、请告诉我。

    谢谢!

    Michael

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

    您好:

    请提供此查询的最新情况。

    谢谢您、

    Michael

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

    您好、 Michael、

    现在、MCU ESM 在 M4F 内核中初始化、而不是在 A53 内核 Linux 中初始化。

    当 WDT 超时发生时、SoC 应复位、或者、如果您注册回调、则应触发回调。

    如果没有发生这种情况、根据上面的 ESM 寄存器 still、以某种方式 ESM 寄存器都是零、WDT 状态也是零、这意味着 WDT 和 ESM 未被初始化。  

    您能否确认 ESM 和 WDT 初始化在第一次运行时是否正确发生?

    您能否分享 M4F WDT 代码、以便我可以在自己这边进行查看?

    此致、

    Anil.

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

    您好 Anil、

    感谢您的响应。

    我将 通过私人消息向您发送整个 IPC_WDT 工程。  

    至于 ESM 和 WDT 初始化、我将确认操作并尽快回复您。

    感谢您的持续支持。

    此致、

    Michael

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

    您好 Anil、

    感谢您的持续支持。

    正在根据 AM62x 技术参考手册以及以下两个线程进行验证和初始化:

    此外、我想提出以下问题:

    1. 关于 WDT/ESM 的初始化过程、您是否可以推荐任何其他参考或资源?

    2. 我们认为、第二次执行是正确的(对应于登记国 (d) 和 (e))。 我将通过私人聊天分享以下注册信息:

      1. CPU 启动后立即使用 ESM 寄存器值(执行前)
      2. 第一个 WDT 超时周期结束后的 RTI 寄存器值
      3. 第一个 WDT 超时周期结束后的 ESM 寄存器值
      4. 在第二个程序加载和启动后立即执行 RTI 寄存器值
      5. 在第二个程序加载和启动后立即执行 ESM 寄存器值

        如上所述、在第一次程序加载 (b/c) 期间、未达到第二次执行期间观察到的状态 (d/e)。

        此外、如果有任何正确操作下 RTI/ESM 的预期寄存器状态参考示例、我将不胜感激地与大家分享这些示例。

    3. 我们认为初始化是正确实现的、因为第二次重新加载和运行程序后可以观察到预期的行为。

      因此、我们希望您能够深入了解在首次执行期间未能实现此正确状态的可能原因。

    感谢您的支持。

    此致、

    Michael

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

    您好、 Michael、

    我可以在今天之前为您的上述查询提供答复。

    此致、

    Anil.