你好,游客 登录 注册 搜索
背景:
阅读新闻

6410平台上配置Linux的DDR参数

[日期:2009-11-29] 来源:CSDN  作者:张成 [字体: ]

前段时间为了解决一个从128M升级到256M的DDR问题,搞的是焦头烂额。最后在别人讨论的情况下终于试出来了正确结果,下来还得自己总结下。

自己的硬件平台才采用的是6410的DMC1即32位的DRAM控制器,两个16位128M的DDR的地址线是共在一起连在6410的16根地址线上,数据线是并在一起成32位连在6410上,其它控制脚对应接上。软件之前写入128M运行OK,改成256M出现页面分配错误导致fatal error而死机。最后发觉是少改了一个地方。
综合起来有以下三个地方要确认:

1,UBOOT中的smdk6410.h
#define MEMORY_BASE_ADDRESS  0x50000000
....
#define CONFIG_NR_DRAM_BANKS 1    /* we have 2 bank of DRAM *///rico 1016
#define PHYS_SDRAM_1  MEMORY_BASE_ADDRESS /* SDRAM Bank #1 */
#define PHYS_SDRAM_1_SIZE 0x10000000 /* 256MB *///rico  for DDR size
首先只用了DMC1一个BANK,其次SDRAM的大小要改成256M。

2,UBOOT中的smdk6410.h
#define DMC1_MEM_CFG  ((1<<30)+(0<<21)+(0<<18)+(2<<15)+(0<<14)+(0<<13)+(0<<7)+(0<<6)+(3<<3)+(2<<0))
#define DMC1_MEM_CFG2  ((1<<11)+(3<<8)+(1<<6)+(0<<4)+(0<<2)+(1<<0))
#define DMC1_CHIP0_CFG  ((1<<16)+(
0x50<<8)+(0xF0<<0))
#define DMC_DDR_32_CFG  0x0
DDR的时序参数照规格书确认即可。此处说明的是DDR初始化时要写入DDR控制器的几个寄存器参数,包括位宽,片选要求等等。我之前导致死机的错误在于片选有错误,所以改成256M后导致页面地址寻址错误。

3,Kernel中的.config

可以用vi .config进入。保证CONFIG_SMDK6410_RAMSIZE_256M打开,替换掉CONFIG_SMDK6410_RAMSIZE_128M即可。体现在arch\arm\mach-s3c6400\include\mach\Memory.h:
#ifdef CONFIG_SMDK6410_RAMSIZE_256M
#define PHYS_SIZE       (256 * 1024 * 1024)
#else
#define PHYS_SIZE       (128 * 1024 * 1024)

linux
相关资讯       Linux知识 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款