免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2634 | 回复: 1
打印 上一主题 下一主题

[BootLoader] 对PPC引导时的疑问,求指导。 [复制链接]

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:57:09C
日期:2016-10-25 16:17:59
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-12 17:02 |只看该作者 |倒序浏览
博文背景:


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。
---------------------------------------------------------------------------------------------------------------------------------------------------------------

假如,我是从nor flash上启动,nor flash的bank0 连接到elbc gpcm br0上。

当ppc发出取0xfffffffc处的指令时,系统只有L2 MMU TLB1的entry0是有效的,并且只能将EA 0xfffff000~0xffffffff地址转换成real addr(物理地址)0xfffff000~0xffffffff,(entry0的reset值)。这个物理地址命中boot windows(0xff80_0000~0xffffffff,共8M,启动时boot window优先级高于CCSR配置空间的)后,根据rcw中boot_loc的配置,这时候是要操作elbc gpcm 的br0,即去br0去预取第一条uboot指令。这时候,我们的地址还是0xfffffffc,而,uboot的存放在nor flash中,这个nor flash的地址是从0xeff80000 ~ 0xec000000(bank0的地址范围)。这个时候,肯定是要使用相对地址(因为已经选中了br0了),取bank0的offset为0x7fffc,即uboot最后4字节的指令。
这里这个地址转换是谁来计算的(从物理地址0xfffffffc到nor flash bank0的地址0xeffffffc)?怎么计算?

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:57:09C
日期:2016-10-25 16:17:59
2 [报告]
发表于 2013-10-12 19:00 |只看该作者
是不是这样的?(手上缺乏原理图,一下说法全是推测)

elbc gpcm br0给了nor flash片选信号后,nor flash接下来回对cpu地址总线和控制总线上的信号做出反应。
至于0xfffffffc为什么对应的是nor flash的最后4个字节,这个要看nor flash 的地址线A0~A25怎么连了,如果A0~A25连着的CPU地址线管脚是地址bit6~bit24,那么这时候,对于nor flash来说,看到的片内地址是0x3fffffc.

应该是这样的吧???
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP