查看64位多核 MIPS 异常和中断结构的源代码
←
64位多核 MIPS 异常和中断结构
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
=== 正常运行模式下例外入口 === ==== MIPS64 R1 情形 ==== MIPS 设计时固定了四大类例外的入口,正常运行情形下(非初始化情形,BEV=0): <source lang=bash> TLB Refill 时,PC 的值为 0xFFFF FFFF 8000 0000,对应物理地址 0x00 处,访问的数据会进入 Cache (32 bit address space) xTLB Refill 时,PC 的值为 0xFFFF FFFF 8000 0080,对应物理地址 0x80 处,访问的数据会进入 Cache (64 bit address space) Cache Error 时,PC 的值为 0xFFFF FFFF a000 0100,对应物理地址 0x100 处,访问的数据不会进入 Cache 其它例外时,PC 的值为 0xFFFF FFFF 8000 0180,对应物理地址 0x180 处,访问的数据会进入 Cache </source> MIPS64 通常是用 xTLB Refill 例外入口,为 0xFFFF FFFF 8000 0080,其处理程序的体积最大为 0x80 字节(MIPS32 为 0x8000 0000,容量为 0x80 字节),loongson 2E 比较特殊,他的入口只用了 32 位地址空间的,始终为 0xFFFF FFFF 8000 0000 Cache Error 例外,因为 Cache 已不能相信,因此只能使用不走 Cache 的虚拟地址 0xFFFF FFFF a000 0100 置入 PC 中。其处理程序的体积最大为 0x80 字节 其它例外,入口在 0xFFFF FFFF 8000 0180,MIPS 的其他例外都进入此入口,由软件根据寄存器中的通用例外类型,进入到对应的处理函数。其处理程序的体积一般不超过 0x80 字节 <br><br> ==== Cavium Octeon (MIPS64 R2) 情形 ==== 对于像 Cavium Octeon 这类多核处理器,他有 16 个 CPU 核,在一些特殊应用环境下(比如其中 1 个核跑一个 Linux 作为控制面,其他 15 个核,每个核只跑一个应用作为数据面),不同的核就需要不同的例外入口基地址。为了这个原因,MIPS 在 MIPS64 R2 里引入了 CP0_EBase 寄存器,用于存放例外入口的基地址。 MIPS64 R2 规定,CP0_EBase 只在 CP0_STATUS[BEV]=0 时,即在正常运行时有效,BEV=1 的上电启动状态,例外的基地址还是原来的地址。 CP0_EBase 的默认值为 0x8000 0000,32bit 的值在 64bit 下,高位自动扩展: 0xFFFF FFFF 8000 0000,这样就能和 MIPS64 R1 兼容,即使用户无视这个寄存器,原系统也能在 R2 上正常运行。 有了 CP0_EBase 后,不同的核就可以有自己的例外入口,这样就可以各自跑自己的系统,甚至只跑一个应用。 因此在 MIPS64 R2 下,BEV = 0 时只规定四个固定例外入口的偏移: <source lang=bash> TLB Refill 时,偏移为 0x00 (32 bit address space) xTLB Refill 时,偏移为 0x80 (64 bit address space) Cache Error 时,偏移为 0x100 其它例外时,偏移为 0x180 </source> 实际的入口为 0xFFFF FFFF 0000 0000 + (cp0_ebase & 0x3FFF F000) Cavium Octeon 上 Bootloader 将异常的基地址设为 0xFFFF FFFF 8000 1000 <br><br>
返回到
64位多核 MIPS 异常和中断结构
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面