Chinaunix首页 | 论坛 | 博客
  • 博客访问: 196067
  • 博文数量: 30
  • 博客积分: 1571
  • 博客等级: 上尉
  • 技术积分: 363
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-28 11:42
文章分类

全部博文(30)

文章存档

2012年(6)

2011年(11)

2010年(13)

我的朋友

分类: LINUX

2010-04-22 10:26:23

    6410的DRAM controller可以挂两个DDR,CS0对应 0x50000000~0x5fffffff的地址空间,CS1对应 0x60000000 ~ 0x6fffffff。也就是两个256M的空间。

    相对于一片256M的设置,6410部分的不同的设置主要有:
        1、P1MEMCFG 的 Active chips要设为 2 chips([22:21]=01);
        2、除了P1_chip_0_cfg外还需要设置P1_chip_1_cfg。P1_chip_0_cfg 设的 0x150f0,P1_chip_1_cfg 设的 0x160f0。能跑,但这两个寄存器如何设置我还是没弄明白。
        3、在设置完6410的寄存器后,通过P1_DIRECTCMD配置初始化DDR的时候,不要忘了把CS1的内存也要初始化一下。相应的P1_DIRECTCMD的Chip number[21:20]应该为 01。

    u-boot里面的修改:
        1、将CONFIG_NR_DRAM_BANKS设置为2。
        2、板子的初始化文件中的 dram_init 中再加一个bank的初始化
             #if  CONFIG_NR_DRAM_BANKS == 2
                 gd->bd->bi_dram[1].start = PHYS_SDRAM_2;
                 gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE;
             #endif

    kernel部分来不用修改的,但启动完了以后发现可用内存少了128M。内核启动开始的时候,显示了
        Truncating RAM at 60000000-6fffffff to -67ffffff (vmalloc region overlap).
    找了一下这句提示,在 arch/arm/mm/mmu.c里面。发现的 VMALLOC_MIN 在作怪。
        static unsigned long __initdata vmalloc_reserve = SZ_128M;
        #define VMALLOC_MIN    (void *)(VMALLOC_END - vmalloc_reserve)
    vmalloc_reserve可以通过内核参数vmalloc=size修改,详见early_vmalloc函数。我在这直接改成SZ_16M了。
阅读(2101) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-05-04 09:08:38

你好。看你在整6410,想请教个6410在新版本uboot的问题。您能帮下忙吗。谢谢。我的邮箱 embedmobile AT gmail.com