码迷,mamicode.com
首页 > 其他好文 > 详细

uboot移植(十)——移植三星官方uboot(二)

时间:2016-08-10 22:59:01      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:ddr配置修改

通过第一阶段的移植串口2打印了如下信息

SD checksum Error
OK

U-Boot 1.3.4 (Aug  5 2016 - 15:08:57) for SMDKV210

CPU:  S5PV210@1000MHz(OK)
APLL = 1000MHz, HclkMsys = 200MHz, PclkMsys = 100MHz
MPLL = 667MHz, EPLL = 80MHz
HclkDsys = 166MHz, PclkDsys = 83MHz
HclkPsys = 133MHz, PclkPsys = 66MHz
SCLKA2M  = 200MHz
Serial = CLKUART
Board:   SMDKV210
DRAM:     1 GB
Flash:   8 MB
SD/MMC:  unrecognised EXT_CSD structure version 6
unrecognised EXT_CSD structure version 6
Card init fail!
0 MB
NAND:    0 MB
The input address don‘t need a virtual-to-physical translation : 23e9c008
*** Warning - using default environment

In:      serial
Out:     serial
Err:     serial
checking mode for fastboot ...
Hit any key to stop autoboot:  0

no devices available

no devices available
get_format
-------- 0 --------
Wrong Image Format for bootm command
ERROR: can‘t get kernel image!
SMDKV210 #

串口打印信息可知uboot已经成功启动,只是uboot启动第二阶段的配置信息有错误,所以接下来要修改这里额配置信息。

(1)打印时钟信息位置是在cpu/s5pc11x/s5pc110/speed.c中的print_cpuinfo函数中,这个函数的最后打印Serial = CLKUART

(2)Board:  =SMDKV210,在smdkv210single.h中有定义


2:
根据dbinfo打印出来的信息,进行移植

arch_number = 0x00000998   //机器码,正确
env_t       = 0x00000000     //环境变量,正确
boot_params = 0x20000100  //uboot给kernel传参的地址
DRAM bank   = 0x00000000   //第一片DDR
-> start    = 0x20000000  //DDR起始地址,错误,改为0x30000000
-> size     = 0x20000000  //DDR大小,错误  改为0x10000000  256M
DRAM bank   = 0x00000001  //第二片DDR
-> start    = 0x40000000   //DDR 起始地址,正确
-> size     = 0x20000000  //DDR大小 错误,改为0x10000000  256M
ethaddr     = 00:40:5C:26:0A:5B  //MAC地址
ip_addr     = 192.168.0.20  //IP 地址 改为192.168.1.20
baudrate    = 115200 bps  //波特率 正确

2.1:DDR配置信息的更改

(1)从上面的打印信息可以发现,DDR bank 0和1的size值都设置错了,bank 0的起始地址也设置错了

(2)使用md和mw命令测试内存发现2000000和40000000开头的内存都是可以用的,说明代码中DDR初始化部分是正确的,只是size错了而已,更改smdkv210single.h中的配置信息即可

(大概位置在414行  更改DDR bank 0 的起始地址

  476行  DDR的size  )

(3)bank 0的起始地址,因为samsung的开发板配置的DDR是512M的,所以它的内存起始地址必须是从20000000开始,不然放不下,而我们使用的是九鼎的开发板,这里面配置的是256M的内存,所以我们可以选从20000000开头的内存,也可以选择从30000000开头的内存,具体选择哪种取决于自己的软件配置。九鼎移植的uboot配置的是30000000开头的,原因是为了使其和第二片DDR对应的空间连续(40000000开头的)

2.2:DDR地址的配置

目标:将DDR端口0地址配置为30000000开头

(1)DDR参数初始化参数的更改

DDR的初始化代码部分是在lowlevel_init.S中写的,是不用动的,代码部分就是对相应寄存器做相应值的初始化;要动的是配置的值,而uboot为了具有可移植性把配置的值都宏定义在include/configs/xxxx.h中,因此我们只需要去这个配置文件修改对应的值即可以下便是DDR0的初始化信息

#define DMC0_MEMCONFIG_0	0x30F01323  //changed by wbq
#define DMC0_MEMCONFIG_1	0x40F01323	// MemConfig1
#define DMC0_TIMINGA_REF	0x00000618	// TimingAref	7.8us*133MHz=1038(0x40E), 
                                                // 100MHz=780(0x30C), 20MHz=156(0x9C),
                                                // 10MHz=78(0x4E)
#define DMC0_TIMING_ROW		0x28233287	// TimingRow	for @200MHz
#define DMC0_TIMING_DATA	0x23240304	// TimingData	CL=3
#define	DMC0_TIMING_PWR       0x09C80232	// TimingPower

以上是寄存器值的修改相当于是硬件配置部分做了更改,但是我们的软件配置还没有修改;

#define PHYS_SDRAM_1      MEMORY_BASE_ADDRESS /* SDRAM Bank #1 */

这个是我们bdinfo时打印出来的DDR0的起始地址,所以这个宏定义也要改为30000000

(2)虚拟地址映射表的修改

uboot中开启了MMU对内存进行了段式映射,得到一张内存映射表,这个映射只是将2000000开始的(lowlevel_init.S)下面是c0000000-d0000000这段虚拟地址的映射表设置,现在的设置是将这段内存映射到20000000-30000000这段物理地址

	//.set __base,0x200
	.set __base,0x300   //changed  by wbq
	// 256MB for SDRAM with cacheable
	.rept 0xD00 - 0xC00
	FL_SECTION_ENTRY __base,3,0,1,1
	.set __base,__base+1
	.endr

(3)虚拟地址映射函数的修改

#ifdef CONFIG_ENABLE_MMU
#define virt_to_phys(x)	virt_to_phy_smdkc110(x)
#else
#define virt_to_phys(x)	(x)
#endif

当我们开启MMU后,通过virt_to_phy_smdkc110(x)将虚拟地址映射到相应的物理地址

下面是virt_to_phy_smdkc110(x)这个函

ulong virt_to_phy_smdkc110(ulong addr)
{
	if ((0xc0000000 <= addr) && (addr < 0xd0000000))
		//return (addr - 0xc0000000 + 0x20000000);
	return (addr - 0xc0000000 + 0x30000000);  //chenged by wbq
	else
		printf("The input address don‘t need "			"a virtual-to-physical translation : %08lx\n", addr);
	return addr;
}

分析可知就是将c0000000-d0000000之间的地址addr减去一个基地址c0000000加上一个偏移量20000000,得到的就是我们的虚拟地址,我们的内存是从30000000开始的,所以要把20000000改为30000000



uboot移植(十)——移植三星官方uboot(二)

标签:ddr配置修改

原文地址:http://11674570.blog.51cto.com/11664570/1836664

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!