6410提供有三个频率APLL,MPLL,EPLL,来分别来实现不同的频率要求。其中每种参数都有对应的MDIV,PDIV,SDIV(EPLL还需KDIV)等参数来改变输出频率。APLL/MPLL在输入频率为12M时复位分别有400M和133M的输出,输出配置公式是Fout=MDIV*Fin/(PDIV<<SDIV)。
1,打开Uboot中smdk6410.h,使能#define CONFIG_CLK_666_133_66
通过不同的DIV参数,配置不同的Startup_HCLK,这个频率直接影响DDR的初始化时序。
2,打开Kernel中clock.c,补充667MHZ分频寄存器设置表
static const u32 s3c_cpu_clk_tab_667MHz[][6] =
{
{667*MHZ, 266 *MHZ, 266, 3, 0, 1},
{266*MHZ, 266 *MHZ, 266, 3, 1, 1},
{133*MHZ, 266 *MHZ, 266, 3, 3, 1},
#ifdef USE_DVFS_AL1_LEVEL
{133*MHZ, 133 *MHZ, 266, 1, 3, 3},
#endif
{ 66*MHZ, 133 *MHZ, 266, 1, 7, 3},
};
3,打开Kernel中s3c64xx-dvfs.c,改动三项
3.1,补充提供667MHZ的ARM核电压VCC_ARM和INT电压VCC_INT设置
/* frequency, Mathced VDD ARM voltage , Matched VDD INT*/
{667000, 1200, 1200, 0},
3.2,补充电源管理667MHZ频率变换设置:
static unsigned char transition_state_667MHz[][2] =
{
{1, 0},
{2, 0},
{3, 1},
#ifdef USE_DVFS_AL1_LEVEL
{4, 2},
{4, 3},
#else
{3, 2},
#endif
};
3.3,补充频率变换时667MHZ频率索引:
static struct cpufreq_frequency_table freq_table_667MHz[] =
{
{0, 667*KHZ_T},
{1, 266*KHZ_T},
{2, 133*KHZ_T},
#ifdef USE_DVFS_AL1_LEVEL
{3, 133*KHZ_T},
{4, 66*KHZ_T},
{5, CPUFREQ_TABLE_END},
#else
{3, 66*KHZ_T},
{4, CPUFREQ_TABLE_END},
#endif
};//跟寄存器设置有对应关系
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/zhandoushi1982/archive/2009/11/16/4813972.aspx