Other Parts Discussed in Thread: AM62P
部件号: AM62P
您好、
我们 Toradex 正在集成 TI 内核 6.18、当 TI SCI 电源域下存在可唤醒的子设备(通过 SDIO 连接的 WiFi)时、AM62P 将面临暂停/恢复崩溃。
子设备调用时 device_init_wakeup()、内核 PM 内核传播 wakeup_path 到父 TI SCI 域设备(例如 sdhci 主机)。 由于设置了 TI SCI 域 GENPD_FLAG_ACTIVE_WAKEUP、因此 genpd_finish_suspend() 需要提前返回并跳过 genpd_sync_power_off()。 否 put_device 发送到 TIFS、域的 genpd 状态保持为 On。
TIFS 不知道这种唤醒安排、因为 set_device_constraint 仅 device_may_wakeup() 在 TI SCI 域器件本身上为 true 时触发、而不是在子域上触发。 无论如何、TIFS 都会在深度睡眠期间关闭硬件。
在恢复时、由于域的 genpd 状态为 on、因此不 get_device 发出 no。 然后、驱动程序访问断电域的寄存器、导致同步外部中止:
AXI bus error, ESR 0x96000010
这似乎被 0b5fe1c4ab3c 暴露(“pmdomain:TI-sci:根据硬件状态设置 PD 开/关状态“)。 在此之前、域的状态已初始化为关闭、因此 get_device 无论唤醒路径旁路如何、始终在恢复时发出。
我们已向 LKML 提交了一个补丁、该补丁 .resume 向 TI SCI pmdomain 驱动程序添加了一个挂钩。 它向 TIFS 查询实际硬件状态、并 get_device 在 genpd 认为域已打开但 TIFS 已关闭时与重新同步。 这会在不触碰暂挂路径或 TIFS 本身的情况下侧推不同步。
LKML 链接: https://lore.kernel.org/all/20260427074808.3244226-2-ivitro@gmail.com/
我们感谢 TI 在以下两点方面提供帮助:
- 此分析是否正确?
- TI 能否支持并查看建议的补丁?
谢谢、
Vitor Soares