Matrix_Designer 发表于 2010-10-18 23:13:20

s3c2410的主频问题

我使用Skyeye1.3.1,编译linux2.6.20的内核,模拟s3c2410平台。启动时显示:
S3C2410: core 62.400 MHz, memory 62.400 MHz, peripheral 62.400 MHz
怎么显示主频只有62.400 MHz啊,不是应该202.800MZ吗?

请问这是我没配置好吗,该怎么改?谢谢!

nicesteven 发表于 2010-10-19 10:20:30

make menuconfig --->
[] Default all settings
[*] customize kernel settings
[*] customize vendor/user settings
[] customize default vendor/user settings
然後在 kernel configuration 裡可修改 cpu clock frequency

Matrix_Designer 发表于 2010-10-19 13:12:39

原帖由 nicesteven 于 2010-10-19 10:20 发表 http://www.linuxfans.org/bbs/images/common/back.gif
make menuconfig --->
[] Default all settings
[*] customize kernel settings
[*] customize vendor/user settings
[] customize default vendor/user settings
然後在 kernel configuration 裡可修改 cpu clock...

我使用的是2.6.20的内核,s3c2410的默认配置,没看到主频的配置项啊

ksh 发表于 2010-10-20 15:10:31

s3c2410的主频应尬和pll直有关系,在 skyeye中代码的位置如下
arch/arm/mach/skyeye_mach_s3c2410x.c:
155         io.clkpower.locktime = 0x00FFFFFF;
156         //io.clkpower.mpllcon = 0x00070022; /* That is a value mizi required */
157         io.clkpower.mpllcon = 0x0002c080; /* workaround for linux-2.6.10 by ksh */
158         io.clkpower.upllcon = 0x00028080;

应该修改以上的PLL值可以影响2410的主频。

关于PLL和内核主频的关系你可以参考 2410硬件文档的相关章节。

Matrix_Designer 发表于 2010-10-20 16:26:41

回复 4# ksh 的帖子

您好,我按照s3c2410的时钟管理文档,将io.clkpower.mpllcon改为0x0005c080,但是启动后什么都看不到。我按照文档中记录的各种时钟模式,主频稍高的模式就不支持。我现在将io.clkpower.mpllcon该为0x0002c060,主频变成了78.000MHz。更高的主频就没有试成功的了。请问这是怎么回事,为什么s3c2410文档中记录的主频稍高的时钟模式大多不支持?
s3c2410时钟电源管理资料:http://blog.csdn.net/gamblervip/archive/2010/07/18/5744330.aspx

ksh 发表于 2010-10-20 18:11:33

回复 5# Matrix_Designer 的帖子

这个也和内核的代码有关系。不是说你设置手册上的合理的硬件时钟值,内核就可以运行。内核会对时钟的值有些判断, 代码如下[ arch/arm/mach-s3c2410/time.c]:
190               clk = clk_get(NULL, "timers");
191               if (IS_ERR(clk))
192                         panic("failed to get clock for system timer");
193
194               clk_use(clk);
195               clk_enable(clk);
196
197               pclk = clk_get_rate(clk);
198
199               /* configure clock tick */
200
201               timer_usec_ticks = timer_mask_usec_ticks(6, pclk);
202
203               tcfg1 &= ~S3C2410_TCFG1_MUX4_MASK;
204               tcfg1 |= S3C2410_TCFG1_MUX4_DIV2;
205
206               tcfg0 &= ~S3C2410_TCFG_PRESCALER1_MASK;
207               tcfg0 |= ((6 - 1) / 2) << S3C2410_TCFG_PRESCALER1_SHIFT;
208
209               tcnt = (pclk / 6) / HZ;
210         }
211
212         /* timers reload after counting zero, so reduce the count by 1 */
213
214         tcnt--;
215
216         printk("timer tcon=%08lx, tcnt %04lx, tcfg %08lx,%08lx, usec %08lx\n",
217                tcon, tcnt, tcfg0, tcfg1, timer_usec_ticks);
218
219         /* check to see if timer is within 16bit range... */
220         if (tcnt > 0xffff) {
221               panic("setup_timer: HZ is too small, cannot configure timer!");
222               return;
223         }

Matrix_Designer 发表于 2010-10-21 11:56:30

回复 6# ksh 的帖子

谢谢!我将:
/* check to see if timer is within 16bit range... */
         if (tcnt > 0xffff) {
               panic("setup_timer: HZ is too small, cannot configure timer!");
               return;
         }
中的条件改成:
         if (tcnt > 0xffffffff) {
所有的时钟模式都支持了,呵呵
页: [1]
查看完整版本: s3c2410的主频问题