2408758_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2408758_zh-CN

2408758_zh-CN

修改im8QM的A72核的CNTFRQ_el0的值

您好!

如何修改im8QM的A72核的CNTFRQ_el0的值,目前是8000000, 想改为16M,

谢谢!


Re: 修改im8QM的A72核的CNTFRQ_el0的值

i.MX8QM 上不建议、也基本不能把 A72 的 CNTFRQ_EL0 对应的真实计数频率从 8 MHz 改成 16 MHz 。原因是: CNTFRQ_EL0 只是让软件“发现”System Counter 频率的寄存器;即使软件能写这个寄存器值,也不会改变硬件 System Counter 的实际频率。

对 i.MX8QM,参考手册里说明 SCU ROM 会启用 System Counter,并给它输入 24 MHz 时钟;System Counter 内部再分频生成 8 MHz 时钟。 相关 clock root 也属于 System Controller Firmware 管理的时钟域,文档显示 SCU_MSLICE0_CLK_ROOT / SCU_MSLICE1_CLK_ROOT 可作为 SYS COUNTER 的 root clock,且 root clock generation 由 SC FW 控制。

所以如果你现在读到:

CNTFRQ_EL0 = 8000000

想改成:

CNTFRQ_EL0 = 16000000

需要区分两件事:

  • 只改 CNTFRQ_EL0 的寄存器值
    这可能让部分软件“以为”timer 是 16 MHz ,但硬件 counter 仍按 8 MHz 跑,会导致时间、调度、延时、profiling 等全部按 2 倍比例出错。
  • 真正把 System Counter 改成 16 MHz
    从我检索到的 i.MX8QM 资料看,System Counter 是 SCU ROM 初始化为 24 MHz / 3 = 8 MHz ,没有公开的寄存器或流程可以把它改成 16 MHz 。 类似 i.MX8 系列讨论中也明确说过,system counter frequency 是硬件固定的, it can't be changed 。

如果你的目标是让 Linux/RTOS 使用正确频率,建议保持 CNTFRQ_EL0 = 8000000 ,并检查 device tree / firmware / bootloader 是否错误覆盖 timer frequency。不要仅为了满足 16 MHz 需求而伪改 CNTFRQ_EL0 ,除非你明确要做一个非真实频率的实验。

结论:i.MX8QM 的 A72 CNTFRQ_EL0 不应从 8 MHz 改为 16 MHz ;真实 System Counter 由 SCU/SCFW 初始化并实际为 8 MHz ,单独改寄存器值不会改变硬件频率,反而会破坏系统时间基准。


Tags (1)
No ratings
Version history
Last update:
2 hours ago
Updated by: