Part Number:AM5748
勘误表文档:https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_DSP_sprz429m.pdf
描述了错误:i940
在连续运行几百天后(具体持续时间取决于主输入时钟 SYS_CLK1 频率,请参阅下表中的持续时间示例),MPU COUNTER_REALTIME 将在 0xBB8000000000 处饱和,并且不再产生中断。
除了系统复位之外,无法复位计数器。
请提供解决方案。
Cherry Zhou:
勘误表文档:https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_DSP_sprz429m.pdf
页面:94
描述了避免和解决所述问题的可能方法。
解决方案
1) 通过要求用户定期在饱和时间之前的某个时间对系统执行复位/重启来避免此问题。
2) 启用系统看门狗复位,使其在问题发生后过期,从而恢复正常。
3) 在需要连续运行的系统中使用 GP 计时器,而不是 COUNTER_REALTIME。
对于在 COUNTER_REALTIME 过期前无法复位的系统,唯一的办法是改为使用 GP 计时器。
可应用于 6.3 Linux AM57xx SDK 的 4.19 内核修补程序的上游反向端口:
https://patchwork.kernel.org/project/linux-omap/list/?series=512953
以上链接中将时钟源切换到 GP 计时器所需的所有 4 个修补程序的 zip:
4.19-counter_realtime_backport.zip
5.4 内核反向端口:
https://patchwork.kernel.org/project/linux-omap/patch/20210602104625.6079-1-tony@atomide.com/
https://patchwork.kernel.org/project/linux-omap/patch/20210602104625.6079-2-tony@atomide.com/
https://patchwork.kernel.org/project/linux-omap/patch/20210602104625.6079-3-tony@atomide.com/
https://patchwork.kernel.org/project/linux-omap/patch/20210602104625.6079-4-tony@atomide.com/
5.10 内核反向端口:
http://lkml.iu.edu/hypermail/linux/kernel/2105.2/00585.html
http://lkml.iu.edu/hypermail/linux/kernel/2105.2/00586.html
注意:现在,我们从 COUNTER_REALTIME 切换到 GP 计时器,可以解决勘误表中 COUNTER_REALTIME 不再初始化的问题。
因此,一个快速高效读取计时器读数的常用解决方案:
Uint32 nowl = 0, nowu = 0;
asm volatile("mrrc p15, 1, %0, %1, c14" : "=r"(nowl), "=r"(nowu));
不再是可用的解决方案,因为默认系统时钟不再可用,这将返回一个无效指令。