我目前正在尝试向 i.MX7D 板上的 U-Boot 添加一些最小的
电源管理功能,但我无法让该板从 WFI 唤醒,即使我禁用了 LPM(因此核心应该保留在运行模式)。我不需要实际的中断处理程序,所以我在 CPSR 中屏蔽了 IRQ。
作为最小的测试用例,我向 U-Boot 添加了执行以下操作的代码:
- 将 GPC_LPCR_A7_BSC.LPM0 和 LPM1 设置为 00(运行模式下的 WFI)
- 将 GPC_LPCR_A7_BSC.IRQ_SRC_A7_WUP、IRQ_SRC_C0、IRQ_SRC_C1 设置为 000(使用 IRQ 触发器 - 如果我理解正确,我不必在此配置中设置 GIC?)
- 取消屏蔽 GPC_IMR*_CORE0_A7 中的所有 IRQ
- DSB+WFI
我已经检查过 GPC_ISR*_A7 中有挂起的 IRQ,但是 WFI 仍然“永远”挂起核心;即使 GPR IRQ 设置为始终挂起且未屏蔽,内核也不会保持清醒状态。此行为是 100% 一致的。
使用调试器,我可以停止然后继续 CPU;这也将使执行在 WFI 之后按预期继续执行(直到下一个 WFI,它将再次挂起)。我发现没有调试探针就无法触发唤醒。
到目前为止,我已经尝试了以下 U-Boot 版本,结果相同:
- 基于 Mainline 的 U-Boot 2020.10
- u-boot-imx 2016.03
你对我可能遗漏的东西有什么建议吗?