CaryStudio

 找回密码
 立即注册
搜索
查看: 2162|回复: 0

【转】解决OpenWRT CC版本,MT7621平台下时钟/时间过快问题

[复制链接]
发表于 2017-12-7 13:36:11 | 显示全部楼层 |阅读模式

请先登录

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 yuki 于 2017-12-7 13:36 编辑

解决OpenWRT CC版本,MT7621平台下时钟/时间过快问题
转载出自:http://m.blog.csdn.net/u011007991/article/details/52872257

前言
前段时间发现自己的7621板子经常出现时间不准的原因,一开始以为是校时服务ntpd出了问题,所以杀死已经存在的进程,手动运行校时程序发现校时是可以成功的,经过很长一段时间观察,后来发现系统所谓的1秒要比实际的1秒快,有一点可以很明显的看出,当sleep 60的时候,大概54秒就结束了,后来发现问题出在CPU频率上。
注:该方法只适用于cc版本的MT7621平台,其他平台或者固件并未验证

解决方法

文件要修改的文件路径为~/chaos_calmer/build_dir/target-mipsel_1004kc+dsp_uClibc-0.9.33.2/linux-ramips_mt7621/linux-3.18.21/arch/mips/ralink/mt7621.c
具体修改代码:注:其中+号之后的行表示新增加的,-号之后的表示需要删除的行
  1.    #define SYSC_REG_CUR_CLK_STS   0x44
  2.    #define CPU_CLK_SEL        (BIT(30) | BIT(31))
  3. +#define MEMC_REG_BASE      0x5000
  4.    #define MT7621_GPIO_MODE_UART1     1
  5.    #define MT7621_GPIO_MODE_I2C       2
  6.    #define MT7621_GPIO_MODE_UART3_MASK    0x3
  7.       int fbdiv = 0;
  8.       u32 clk_sts, syscfg;
  9.       u8 clk_sel = 0, xtal_mode;
  10. -  u32 cpu_clk;
  11. +  u32 cpu_clk, sys_clk;
  12.       if ((rt_sysc_r32(SYSC_REG_CPLL_CLKCFG0) & CPU_CLK_SEL) != 0)
  13.           clk_sel = 1;
  14.           cpu_fdiv = ((clk_sts >> 8) & 0x1F);
  15.           cpu_ffrac = (clk_sts & 0x1F);
  16.           cpu_clk = (500 * cpu_ffrac / cpu_fdiv) * 1000 * 1000;
  17. +  if (((clk_sts >> 16) & 0x7) == 3)
  18. +      sys_clk = cpu_clk / 3;
  19. +  else
  20. +      sys_clk = cpu_clk / 4;
  21.           break;
  22.       case 1:
  23. -  fbdiv = ((rt_sysc_r32(0x648) >> 4) & 0x7F) + 1;
  24. +  fbdiv = ((rt_sysc_r32(MEMC_REG_BASE + 0x648) >> 4) & 0x7F) + 1;
  25.           syscfg = rt_sysc_r32(SYSC_REG_SYSCFG);
  26.           xtal_mode = (syscfg >> 6) & 0x7;
  27.           if(xtal_mode >= 6) { //25Mhz Xtal
  28.           cpu_clk = 25 * fbdiv * 1000 * 1000;
  29.           } else if(xtal_mode >=3) { //40Mhz Xtal
  30.    -      cpu_clk = 40 * fbdiv * 1000 * 1000;
  31.    +      cpu_clk = 20 * fbdiv * 1000 * 1000;
  32.           } else { // 20Mhz Xtal
  33.               cpu_clk = 20 * fbdiv * 1000 * 1000;
  34.           }
  35. +  if (syscfg & BIT(5))
  36. +         sys_clk = cpu_clk / 4;
  37. +  else
  38. +       sys_clk = cpu_clk / 3;
  39.           break;
  40.       }
  41. - cpu_clk = 880000000;
  42. +
  43.       ralink_clk_add("cpu", cpu_clk);
  44.       ralink_clk_add("1e000b00.spi", 50000000);
  45.       ralink_clk_add("1e000c00.uartlite", 50000000);
  46.       ralink_clk_add("1e000d00.uart", 50000000);
  47.    }
复制代码


更多请参考:https://patchwork.ozlabs.org/patch/521053/




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|CaryStudio ( 粤ICP备16022806号 )

GMT+8, 2023-6-8 09:05 , Processed in 0.089306 second(s), 12 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表