您好!
如何修改im8QM的A72核的CNTFRQ_el0的值,目前是8000000, 想改为16M,
谢谢!
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
需要区分两件事:
如果你的目标是让 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 ,单独改寄存器值不会改变硬件频率,反而会破坏系统时间基准。