cavium octeon 处理器启动总线Bootbus 简介:
韩大卫@吉林师范大学
Boot-bus(启动总线)是cavium octeon处理器的一种用于启动系统的硬件. CPU通过boot bus和非易失性设备相连, 比如NOR/NAND flash, CF卡, ROM等, 这些设备可以作为CPU的初始化引导地址. Boot bus总线协议是灵活的, 所以可以接口很多不同类型的设备.
cavium octeon CN63XX处理器有10个核心(core), 一般使用core 0 来启动linux, 用来管理系统, 实现控制平面. core1-9作为数据平面的处理, 没有操作系统, 循环执行报文处理的逻辑程序. Cavium octeon处理器启动操作系统时依赖的机制就是Bootbus.
以Octeon CN63XX 处理器: Big-endian Bootbus 包括:
8位片选32位地址/数据线可编程的8/16位数据宽度: 8位情况下, Boot_AD<31:24> 为数据总线16位情况下, Boot_AD<31:24> 为数据总线的最高位字节, Boot_AD<23:16> 为最低位字节.
DMA: 两个多字节DMA(MWDMA) DMARQ/DMACK 信号.
Bootbus总线通过8个片选信号配置8个区域. 每个区域/片选 有不同的总线配置和时钟参数.
当CN63XX 自启动时, bootbus 必须在片选0上提供初始化指令来引导芯片.
/*注: 关于bootbus片选信号: 通过配置bootbus寄存器, 使能某一个区域的片选后, 便可将这个区域内的设备的地址映射到内存里, 通过访问内存的方式实现IO操作, 同时不影响bootbus上其他区域内的设备的工作, 此”片选” 信号仅仅是为了使能这个区域, 操作这个区域内的设备. 比如bootbus区域0上挂载了Nor Flash, 区域2上挂载了FPGA, bootbus默认使能区域0, 从Nor FLash上读取uboot和linux内核. 那么当使能bootbus 区域2后, 便可以将bootbus 区域2的地址映射到内存中(根据配置的基地址和长度), 那么在用户空间操作此内存时, 即实现了操作FPGA的寄存器. 但是同时, Nor FLash的工作是正常的, Nor FLash在用户空间的地址是不被自动覆盖的. */
Boot bus硬件包含了2 个本地的, 128字节的cache区域. 当没有设备连接到bootbus时, 这些cache区域必须被用来服务于core-boot和debug-exception的向量.
本地cache也可加速Bootbus 常用访问区域的读操作.Boot bus 占用了CN63xx 4G的物理地址空间, 从0x1 0000 0000 0000 到 0x1 0000 ffff ffff.
NOTE:CN63xx内核(core) 将它们从0x0 0000 1000 0000到0x0 0000 1fff ffff的物理地址转化为CN63xx的Boot bus的物理地址:0x1 0000 1000 0000 到 0x1 0000 1fff ffff.
bootbus物理地址有两个异常向量:异常向量地址1 : 0x1 0000 1fc0 0000 在所有的复位,软复位和不可屏蔽的中断(NMI)异常后, 一个核心向量到这个物理地址.
地址2: 0x1 0000 1fc0 0480如果EJTAG TAP 寄存器域ECR[ProbEn] 没置1, 在所有调试异常后,一个核心向量到这个物理地址.
在一定条件下, 其他核异常也可被向量到boot bus地址. 其他异常向量可通过核的配置而被避免, 但是上面异常的向量地址不能通过配置核而避免.boot bus区域的复位配置必须用于当CN63xx 的自启动时作为核心复位向量在此被使用. 当复位后, 总线区域0 是唯一可用的区域, 并且有最大长度; 映射CN63xx 物理地址0x1 0000 1fc0 0000 到引导地址 0x0 的在片选0 连接的设备上; 这表示当CN63xx自启动时, 连接到片选0 信号线上的设备必须含有CN63xx的引导代码, 从引导地址0开始. 当CN63xx 自启动时, 核心0 立即执行这些代码.
关于具体说明请参考cavinum network octeon CN63xx/66xx.