PowerPC启动方式总结

1、基础

1.1 CPU地址空间

地址空间(local address map)就是core能够访问到的36bit的地址空间。这个地址空间包括各个功能模块能够访问的地址空间,DDR SDRAM空间以及CCSR地址空间。CPU core是怎么访问SOC上的各个功能模块的?比如eLBC控制器,DDR控制器,PCI控制器等等。通过LAW(Local Access Window)寄存器来配置。每个LAW寄存器将一段地址空间和相应的功能模块连接起来,从core出来的物理地址和各个LAW的地址进行比较,如果在某个LAW指定的地址空间,那么就将这个发送给该LAW指定的功能模块。每个LAW可指定的地址空间大小为4K-32G。

【特别提醒】:LAWBA [BASE_ADDR]域必须和地址空间大小对齐。

 

在这个地址空间中有三段地址是比较特殊的:

A.CCSR的地址空间:这段地址空间只需要通过CCSBAR寄存器来指定起始地址,地址空间大小是固定的1M空间(e500core是1M,e500mc是16M)。

CCSRBAR(Configuration,Control,and Status Registers Base Address Register)的缺省值是0xFF700000。

访问该空间的TLB在设置时,需要将I和G位置1。

B.L2SRAM地址空间

MPC8536E有512K的L2cache,该cache可以配置为SRAM使用,此时需要通过L2CTL[L2SRAM]域来指定L2SRAM的大小,通过L2SRBAR寄存器指定其实地址。

C.缺省的8Mbootrom地址空间

一般SOC会定义8MB的bootrom启动地址空间(0xFF80_0000–0xFFFF_FFFF),在core复位启动访问第一条指令时能够直接访问指定启动设备的地址空间。启动设备可以指定挂在eLBC上的NANDflash,NOR flash,或者指定SD卡/SPIflash。

             

              上述地址空间配置优先级:

              L2SRBAR指定的地址优先于其他方式指定的地址空间;

CCSRBAR指定的地址空间不能和DDR控制器指定的地址空间重复,否则,CPU行为是未定义的;

LAW之间的地址如果重复,则低编码LAW覆盖高编码LAW的地址空间。

1.2 TLB

TLB简单说就是将程序虚拟地址转化为物理地址的一个查找表。TLB使用WIMGE字段来指定所访问地址空间的属性。

在启动的时候,所有L1/L2MMU中的TLBEntry都是无效的,除了TLB1的Entry0,该Entry被赋予以下数值来指定地址空间0(AS0)中的4KB启动地址空间(0xFFFF_F000– 0xFFFF_FFFF)。在U-Boot代码中,这段4K代码被称为bootpage,即cpu/mpc85xx/start.S中的bootpg汇编代码。

e500 core在复位的时候会去0xFFFF_FFFC去读取第一条指令,该指令一般是一条跳转指令,跳转到bootpg的头部去执行。


2、bootfrom NOR flash

一般NOR flash挂接在CPU的eLBC控制器上,通过CS0来片选。要想从NOR flash启动,首先将编译好的512K U-Boot image烧写到NORflash的最后512K中。CPU core启动时会去0xFFFFFFFC处取第一条指令执行,一般是一条跳转指令跳转到bootpage的地方,因为NOR flash是可以字节访问的,随后CPU会顺序执行NOR flash中的代码。

2.1 eLBC

eLBC通过GPCM连接NORflash,通过FCM来连接NAND flash。

BR0/OR0-BR7/OR7指定eLBC8个片选信号所对应的地址空间和属性。CS0连接启动设备,比如从NORflash启动时,NOR flash必须连接到CS0上。从NANDflash启动时,NAND flash必须连接到CS0上。对于既有NOR flash又有NAND flash的单板,并且支持两种启动模式的话,需要CPLD来动态切换CS0片选信号指向启动设备。

当选择从NOR flash启动时,CS0是作为启动片选信号输出,选择的地址和空间由BR0和OR0信息来决定,该寄存器启动值如下,显然访问的是从0 - 0xFFFFFFFF的4G地址空间。该片选信号一直按照此种方式运行直到第一次更改BR0或OR0的值。


在往NOR flash烧写U-Boot程序时,是将512K的image写到flash的最后512K字节,即eff8_0000开始的地方。当core启动时,第一条指令是FFFF_FFFC,实际上读取的就是efff_fffc处的指令(0x4BFF_F004)。

2.2 启动过程

首先一个问题是U-Boot image要烧写到NOR flash的哪个地址?是由CPU和NORflash的硬件连线决定的。同时该地址也决定了U-Boot的CONFIG_SYS_TEXT_BASE的值,该值在config.mk文件中赋值给-Ttext,也就是U-Boot image中text段的起始地址。

3、bootfrom NAND flash

3.1 TEXT_BASE

为什么从NAND启动时,TEXT_BASE设备为0xF8F8_2000。

因为我们需要将4K NAND loader和第二阶段的image合并起来(通过cat命令),然后烧写到NAND flash。启动时FCM会将4KNAND loader拷贝到FCM RAM buffer中,而4KNAND loader和第二阶段image拷贝到L2SRAM中。我配置L2SRAM的地址是0xF8F80000,加上4KNAND loader,加上4k bootpg,所以第二阶段的text段应该在0xF8F82000。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值