X系列DDR频率配置简要说明

DDR频率配置简要说明

1. 适用目的

本文档用于指导客户完成两件事:

1. 在 U-Boot 中配置 DDR 频率;

2. 在系统启动后确认 DDR 频率是否真正生效。

本文档尽量不依赖具体芯片平台,适合作为客户侧通用操作指引。


2. 需要关注的配置项

在 U-Boot 的 DDR 配置中,通常需要关注以下三个宏:

• CONFIG_SYS_MPLL_FREQ:DDR 所使用的 PLL 源频率;

• CONFIG_SYS_MEM_FREQ:系统期望的 DDR 工作频率;

• CONFIG_:具体 DDR 颗粒参数表使用的频率,如CONFIG_X2600M_DDR2_MEM_FREQ(以下均以此示例参数进行介绍)

• 注意:CONFIG_

路径:u-boot/include/ddr/chips-v2/X2600N_DDR3_128M_COMPATIBLE_PARAM.h
  #ifndef CONFIG_X2600N_DDR3_MEM_FREQ
  #define CONFIG_X2600N_DDR3_MEM_FREQ CONFIG_SYS_MEM_FREQ
  #endif

路径:u-boot/include/ddr/chips-v2/X2600M_DDR2_64M_COMPATIBLE_PARAM.h
  #ifndef CONFIG_X2600M_DDR2_MEM_FREQ
  #define CONFIG_X2600M_DDR2_MEM_FREQ CONFIG_SYS_MEM_FREQ
  #endif

路径:u-boot/include/configs/x2600_ddr.h
#ifdef CONFIG_DDR_TYPE_DDR2

        #define CONFIG_X2600M_DDR2
        #define CONFIG_X2600M_DDR2_MEM_FREQ             600000000


        #define CONFIG_DDR2_KGD_CONFIG               0x1
        #define CONFIG_DDR2_KGD_MR0_DLL_RST          0x1
        #define CONFIG_DDR2_KGD_MR0_PD               0x0                                                                                                                                                    
        #define CONFIG_DDR2_KGD_MR1_DLL_EN           0x0
        #define CONFIG_DDR2_KGD_MR1_DIC              0x0
        #define CONFIG_DDR2_KGD_MR1_RTT_NOM          0x0
        #define CONFIG_DDR2_KGD_MR1_OCD              0x0
        #define CONFIG_DDR2_KGD_MR2_DCC_EN           0x0
#endif

对于x2600N来说,只需要关注CONFIG_SYS_MEM_FREQ和CONFIG_SYS_MPLL_FREQ就好,而x2600M需要同时关注CONFIG_SYS_MEM_FREQ、CONFIG_SYS_MPLL_FREQ和如CONFIG_X2600M_DDR2_MEM_FREQ。

对于单颗 DDR 的项目,建议按以下原则配置:

• CONFIG_SYS_MEM_FREQ 与 CONFIG_X2600M_DDR2_MEM_FREQ 保持一致;

• CONFIG_SYS_MPLL_FREQ 应为目标 DDR 频率的整数倍;

• 同时还需满足平台代码允许的分频范围(1-16)。

可简单理解为:

CONFIG_SYS_MPLL_FREQ / CONFIG_SYS_MEM_FREQ = 整数
CONFIG_SYS_MPLL_FREQ / CONFIG_X2600M_DDR2_MEM_FREQ = 整数

示例:

CONFIG_SYS_MPLL_FREQ = 1600000000
CONFIG_SYS_MEM_FREQ = 320000000
CONFIG_X2600M_DDR2_MEM_FREQ = 320000000

此时:

1600000000 / 320000000 = 5

这是常见的合法配置方式。


3. 在哪里修改 U-Boot 配置

3.1 板级配置头文件

通常位于:

u-boot/include/configs/

这里一般配置:

• CONFIG_SYS_MPLL_FREQ

• CONFIG_SYS_MEM_FREQ

示例:

#define CONFIG_SYS_MPLL_FREQ        1600000000
#define CONFIG_SYS_MEM_FREQ         320000000

3.2 DDR 颗粒配置头文件

通常位于:

u-boot/include/configs/

这里一般配置具体颗粒频率,例如:

#define CONFIG_X2600M_DDR2_MEM_FREQ    320000000

建议将其与 CONFIG_SYS_MEM_FREQ 保持一致。


4. 推荐操作步骤

步骤 1:确定目标 DDR 频率

例如希望 DDR 运行在 320MHz。

步骤 2:修改板级头文件

在 u-boot/include/configs/ 中设置:

#define CONFIG_SYS_MPLL_FREQ        1600000000
#define CONFIG_SYS_MEM_FREQ         320000000

步骤 3:修改 DDR 颗粒头文件

在 u-boot/include/configs/ 中设置,对于没有定义颗粒频率的,只需修改CONFIG_SYS_MEM_FREQ即可

#define CONFIG_X2600M_DDR2_MEM_FREQ  320000000

步骤 4:清理并重新编译 U-Boot

修改 DDR 配置后,建议清理 U-Boot 中间产物再重新编译,避免旧参数残留导致配置未生效。


5. 如何确认 DDR 频率是否生效

仅修改头文件并不代表 DDR 频率一定已经生效,最终应以运行时结果为准。

方法 1:查看启动串口日志

很多平台在启动时会打印时钟信息,例如:

[    0.000000] x2600 Clock Power Management Unit init!
[    0.000000] =========== x2600 clocks: =============
[    0.000000]  apll     = 1152000000 , mpll     = 1600000000, ddr = 320000000

其中:

• ddr = 320000000

表示当前 DDR 时钟频率约为 320MHz。

方法 2:通过 clk 调试接口确认

先挂载 debugfs:

mount -t debugfs none /mnt

再读取 DDR 时钟:

cat /mnt/clk/gate_ddr/clk_rate

示例输出:

320000000

表示当前 DDR 实际运行频率为 320MHz。


6. 如何判断是否真正成功

如果以下两项一致:

1. 串口打印中的 ddr = xxx

2. cat /mnt/clk/gate_ddr/clk_rate 的输出值

则可认为当前 DDR 频率已经真正生效。

例如:

• 串口打印:ddr = 320000000

• clk_rate 输出:320000000

则说明 DDR 当前实际工作在 320MHz。


7. FAQ

Q1:最终看哪个频率才算生效?

答: 以运行时结果为准,即:

• 串口日志中的 DDR 频率打印;

• clk_rate 接口读出的 DDR 时钟值。

Q2:为什么改了头文件,运行结果还是旧值?

答: 常见原因有:

• U-Boot 中间产物未清理;

• DDR 参数文件未重新生成;

• CONFIG_SYS_MEM_FREQ 与 CONFIG_ 未保持一致;

• CONFIG_SYS_MPLL_FREQ 不是目标频率的整数倍。

Q3:客户配置 DDR 频率时最简单的原则是什么?

答: 直接按以下原则处理即可:

• 目标频率先确定;

• CONFIG_SYS_MEM_FREQ = 目标频率;

• CONFIG_;

• CONFIG_SYS_MPLL_FREQ = 目标频率 × 整数倍。


8. 常用命令汇总

挂载调试接口:

mount -t debugfs none /mnt

读取 DDR 时钟:

cat /mnt/clk/gate_ddr/clk_rate

9. 结论

DDR 频率配置建议按以下方式处理:

• 在 u-boot/include/configs/ 中配置:

• CONFIG_SYS_MPLL_FREQ

• CONFIG_SYS_MEM_FREQ

• 在 u-boot/include/configs/ 中配置:

• CONFIG_

• 保证 CONFIG_SYS_MPLL_FREQ 是目标 DDR 频率的整数倍;

• 保证 CONFIG_SYS_MEM_FREQ 与颗粒配置频率一致;

• 启动后通过串口日志和 clk_rate 接口确认是否真正生效。


评论交流 (共 0 条)