U-Boot中ARM协处理器CP15的操作分析
来源:互联网 发布:远东电缆营销网络 编辑:程序博客网 时间:2024/04/30 11:29
在U-boot的启动文件start.S 文件中遇到了操作协处理器cp15的几个指令用来关闭cache和MMU,具体怎么做的还要看一下这个协处理的各个寄存器的功能。
具体可以查看《ARM ® Cortex ® -A9 Technical Reference Manual》文档
寄存器操作
MCR ARM寄存器到协处理器寄存器的数据传送
MRC 协处理器寄存器到ARM寄存器的数据传送
注:MCR指令和MRC指令只能在处理器模式为系统模式时执行,在用户模式下执行MCR指令和MRC指令将会触发未定义指令的异常中断。
MCR{cond} coproc,opcode1,CRd,CRn,CRm{,opcode2}
MRC{cond} coproc,opcode1,CRd,CRn,CRm{,opcode2}
coproc: 指令操作的协处理器名.标准名为pn,n,为0~15
opcode1:协处理器的特定操作码. 对于CP15寄存器来说,opcode1永远为0,不为0时,操作结果不可预知
CRd:作为目标寄存器的协处理器寄存器
CRn:存放第1个操作数的协处理器寄存器
CRm: 存放第2个操作数的协处理器寄存器(用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为C0)
opcode2: 可选的协处理器特定操作码(用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为0)
CP15 的寄存器列表
寄存器编号
基本作用
在 MMU 中的作用
在 PU 中的作用
0
ID 编码(只读)
ID 编码和 cache 类型
1
控制位(可读写)
各种控制位
2
存储保护和控制
地址转换表基地址
Cachability 的控制位
3
存储保护和控制
域访问控制位
Bufferablity 控制位
4
存储保护和控制
保留
保 留
5
存储保护和控制
内存失效状态
访问权限控制位
6
存储保护和控制
内存失效地址
保护区域控制
7
高速缓存和写缓存
高速缓存和写缓存控制
8
存储保护和控制
TLB 控制
保 留
9
高速缓存和写缓存
高速缓存锁定
10
存储保护和控制
TLB 锁定
保 留
11
保留
12
保留
13
进程标识符
进程标识符
14
保留
15
因不同设计而异
因不同设计而异
因不同设计而异
对于AMR7之后的处理器,其主标示符编码格式如下 :
30 24
23 20
19 16
15 4
3 0
由生产商确定
产品子编号
ARM 体系版本号
产品主编号
处理器版本号
位
说 明
位 [3: 0]
生产商定义的处理器版本号
位 [15: 4]
生产商定义的产品主编号
其中最高 4 位即位 [15:12] 可能的取值为0x0~0x7 但不能是 0x0 或 0x7
因为:
0x0表示 ARM7之前的处理器
0x7 表示ARM7处理器
位 [19: 16]
ARM 体系的版本号,可能的取值如 下:
0x1 ARM 体系版本 4
0x2 ARM 体系版本 4T
0x3 ARM 体系版本 5
0x4 ARM 体系版本 5T
0x5 ARM 体系版本 5TE
其他 由 ARM 公司保留将来使用
位 [23: 20]
生产商定义的产品子编号。当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不 同的高速缓存的大小等
位 [31: 24]
生产厂商的编号,现在已经定义的有以下值:
0x41 =A ARM 公司
0x44 =D Digital Equipment 公司
0x69 =I intel 公司
31 29
28 25
24
23 12
11 0
000
属性字段
S
数据 cache 相关属性
指令cache 相关属性
位
含义
位 [28: 25]
主要用于定义对于写回类型的cache的一些属性
位 [24]
定义系统中的数据 cache 和指令 cache 是分开的还是统一的:
0 系统的数据 cache 和指令 cache 是统一的;
1 系统的数据 cache 和指令 cache 是分开的
位 [23: 12]
定义数据 cache 的相关属性
如果位 [24] 为 0 ,本字段定义整个cache 的属性
位 [31: 24]
定义指令 cache 的相关属性
如果位 [24] 为 0 ,本字段定义整个cache 的属性
- 控制字段位 [28 : 25] 的含义
cache 类型标识符寄存器的控制字段位 [28 : 25]:
编 码
cache 类型
cache 内容清除方法
cache 内容锁定方法
0b0000
写通类型
不需要内容清除
不支持内容锁定
0b0001
写回类型
数据块读取
不支持内容锁定
0b0010
写回类型
由寄存器 C7 定义
不支持内容锁定
0b0110
写回类型
由寄存器 C7 定义
支持格式 A
0b0111
写回类型
由寄存器 C7 定义
支持格式 B
- 控制字段位 [23 : 12] 及控制字段位 [11 : 0] 含义
11 9
8 6
5 3
2
1 0
000
cache 容量
cache 相联特性
M
块大小
其中bits[1:0]含义如下:编 码
cache 块大小
0b00
2 个 字( 8 字节)
0b01
4 个 字( 16 字节)
0b10
8 个 字( 32 字节)
0b11
16 个 字( 64 字节)
其中bits[5:3]含义如下:编 码
M=0 时含义
M=1 时含义
0b000
1 路 相联(直接映射)
没有 cache
0b001
2 路 相联
3 路 相联
0b010
4 路 相联
6 路 相联
0b011
8 路 相联
12 路 相联
0b100
16 路 相联
24 路 相联
0b101
32 路 相联
48 路 相联
0b110
64 路 相联
96 路 相联
0b111
128 路相联
192 路相联
其中bits[8:6]含义如下:编 码
M=0 时含义
M=1时含义
0b000
0.5KB
0.75 KB
0b001
1 KB
1.5 KB
0b010
2 KB
3 KB
0b011
4 KB
6 KB
0b100
8 KB
12 KB
0b101
16 KB
24 KB
0b110
32 KB
48 nbsp;KB
0b111
64 KB
96 KB
- 禁止或使能MMU以及其他与存储系统相关的功能
- 配置存储系统以及ARM处理器中的相关部分的工作
C1中的控制位
含义
M(bit[0])
0 :禁止 MMU 或者 PU
1 :使能 MMU 或者 PU
如果系统中没有MMU及PU,读取时该位返回0,写入时忽略该位
A(bit[1])
0 :禁止地址对齐检查
1 :使能地址对齐检查
C(bit[2])
当数据cache和指令cache分开时,本控制位禁止/使能数据cache。当数据cache和指令cache统一时,该控制位禁止/使能整个cache。
0 :禁止数据 / 整个 cache
1 :使能数据 / 整个 cache
如果系统中不含cache,读取时该位返回0.写入时忽略
当系统中不能禁止cache 时,读取时返回1.写入时忽略
W(bit[3])
0 :禁止写缓冲
1 :使能写缓冲
如果系统中不含写缓冲时,读取时该位返回0.写入时忽略
当系统中不能禁止写缓冲时,读取时返回1.写入时忽略
P(bit[4])
对于向前兼容26位地址的ARM处理器,本控制位控制PROG32控制信号
0 :异常中断处理程序进入 32 位地址模式
1 :异常中断处理程序进入26 位地址模式
如果本系统中不支持向前兼容26位地址,读取该位时返回1,写入时忽略
D(bit[5])
对于向前兼容26位地址的ARM处理器,本控制位控制DATA32控制信号
0 :禁止 26 位地址异常检查
1 :使能 26 位地址异常检查
如果本系统中不支持向前兼容26位地址,读取该位时返回1,写入时忽略
L(bit[6])
对于ARMv3及以前的版本,本控制位可以控制处理器的中止模型
0 :选择早期中止模型
1 :选择后期中止模型
B(bit[7])
对于存储系统同时支持big-endian和little-endian的ARM系统,本控制位配置系统的存储模式
0 : little endian
1 : big endian
对于只支持little-endian的系统,读取时该位返回0,写入时忽略
对于只支持big-endian的系统,读取时该位返回1,写入时忽略
S(bit[8])
在基于 MMU 的存储系统中,本位用作系统保护
R(bit[9])
在基于 MMU 的存储系统中,本位用作 ROM 保护
F(bit[10])
由生产商定义
Z(bit[11])
对于支持跳转预测的ARM系统,本控制位禁止/使能跳转预测功能
0 :禁止跳转预测功能
1 :使能跳转预测功能
对于不支持跳转预测的ARM系统,读取该位时返回0,写入时忽略
I(bit[12])
当数据cache和指令cache是分开的,本控制位禁止/使能指令cache
0 :禁止指令 cache
1 :使能指令 cache
如果系统中使用统一的指令cache和数据cache或者系统中不含cache,读取该位时返回0,写入时忽略。当系统中的指令cache不能禁止时,读取时该位返回1,写入时忽略
V(bit[13])
对于支持高端异常向量表的系统,本控制位控制向量表的位置
0 :选择低端异常中断向量 0x0~0x1c
1 :选择高端异常中断向量0xffff0000~ 0xffff001c
对于不支持高端异常向量表的系统,读取时该位返回0,写入时忽略
PR(bit[14])
如果系统中的cache的淘汰算法可以选择的话,本控制位选择淘汰算法
0 :常规的 cache 淘汰算法,如随机淘汰
1 :预测性淘汰算法,如round-robin 淘汰算法
如果系统中cache的淘汰算法不可选择,写入该位时忽略。读取该位时,根据其淘汰算法是否可以比较简单地预测最坏情况返回0或者1
L4(bit[15])
对于ARM版本5及以上的版本,本控制位可以提供兼容以前的ARM版本的功能
0 :保持 ARMv5 以上版本的正常功能
1 :将 ARMv5 以上版本与以前版本处理器 兼容,不根据跳转地址的 bit[0] 进行 ARM 指令和 Thumb 状态切换: bit[0] 等于 0 表示 ARM 指令,等于 1 表示 Thumb 指令
Bits[31:16])
这些位保留将来使用,应为UNP/SBZP
3.CP15 的寄存器 C2
C2寄存器的别名:Translation table base (TTB) register
C2寄存器用来保存页表的基地址,即一级映射描述符表的基地址。其编码格如下所示:
31 0
一级映射描述符表的基地址(物理地址)
CP15 中的寄存器 C3 定义了 ARM 处理器的 16 个域的访问权限。
31 0
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
10:保留状态(我们最好不要填写该值,以免引起不能确定的问题)
11:当前级别下,对该内存区域的访问都不进行权限检查。 这时 AP位无效
MRC p15, 0, <Rd>, c5, c0, 0 访问数据失效状态寄存器
MRC p15, 0, <Rd>, c5, c0, 1 访问指令状态失效寄存器
编码格式如下所示:
31 9
8
7 4
3 0
UNP/SBZP
0
域标识
状态标识
其中,域标识bit[7:4]表示存放引起存储访问失效的存储访问所属的域。
状态标识 bit[3:0] 表示放引起存储访问失效的存储访问类型,该字段含义如下表所示(优先级由上到下递减)。
引起访问失效的原因
状态标识
域标识
C6
终 端异常( Terminal Exception )
0b0010
无 效
生 产商定义
中 断向量访问异常( Vector Exception)
0b0000
无 效
有 效
地 址对齐
0b00x1
无 效
有 效
一 级页表访问失效
0b1100
无 效
有 效
二 级页表访问失效
0b1110
有 效
有 效
基 于段的地址变换失效
0b0101
无 效
有 效
基 于页的地址变换失效
0b0111
有 效
有 效
基 于段的存储访问中域控制失效
0b1001
有 效
有 效
基 于页的存储访问中域控制失效
0b1101
有 效
有 效
基 于段的存储访问中访问权限控制失效
0b1111
有 效
有 效
基 于页的存储访问中访问权限控制失效
0b0100
有 效
有 效
基 于段的 cache 预 取时外部存储系统失效
0b0110
有 效
有 效
基 于页的 cache 预 取时外部存储系统失效
0b1000
有 效
有 效
基 于段的非 cache 预 取时外部存储系统失效
0b1010
有 效
有 效
CP15 中的寄存器 C6 是失效地址寄存器,其中保存了引起存储访问失效的地址,分为数据失效地址寄存器和指令失效地址寄存器
MRC p15, 0, <Rd>, c6, c0, 0 访问数据失效地址寄存器
MRC p15, 0, <Rd>, c6, c0, 2 访问指令失效地址寄存器
编码格式如下所示:
31 0
失效地址(虚拟地址)
系统协处理器CP15的寄存器C8就是清除TLB内容的相关操作。它是一个只写的寄存器。
MCR p15,0,Rd,c8,CRm,opcode_2
Rd中为要写入C8寄存器的内容,CRm和opcode_2的不同组合决定指令执行的不同操作。
指令
Rd
含义
MCR p15, 0, Rd, c8, c5, 0
0
使无效整个指令TLB
MCR p15, 0, Rd, c8, c5, 1
虚拟地址
使无效指令TLB中的单个地址变换条目
MCR p15, 0, Rd, c8, c6, 0
0
使无效整个数据TLB
MCR p15, 0, Rd, c8, c6, 1
虚拟地址
使无效数据TLB中的单个地址变换条目
MCR p15, 0, <Rd>, c8, c7, 0
0
使无效整个数据和指令TLB
MCR p15, 0, <Rd>, c8, c7, 1
虚拟地址
使无效数据和指令TLB中的单个地址变换条目
MCR p15, 0, <Rd>, c12, c0, 0 ;Rd中存放要修改的异常向量基地址
31 5
4 0
异常向量基地址
Reserve
CP15中的寄存器C13用于快速上下文切换。其编码格式如下所示。
31 2524 0PID0访问寄存器C13的指令格式如下所示。
MCR p15, 0,<Rd>,<c13>,c0,0
MRC P15, 0,<Rd>,<c13>,c0,0
其中, 在读操作时,结果中位[31::25]返回PID,其他位 的数值是不可以预知的。写操作将设置PID的值。
当PID的值为0时,MVA = VA | (0(PID)<<25),MVA=VA,相当于禁止了FCSE。系统复位后PID即为0.
当PID的值不为0时,相当于使能了FCSE。
- U-Boot中ARM协处理器CP15的操作分析
- ARM处理器中CP15协处理器的寄存器1376698090
- ARM处理器的协处理器CP15/CP14
- ARM CP15协处理器
- ARM CP15协处理器
- ARM协处理器CP15
- ARM CP15协处理器
- ARM CP15协处理器
- ARM CP15协处理器
- ARM CP15协处理器
- u-boot-1.1.6中关于ARM920T协处理器操作的分析
- u-boot-1.1.6中关于ARM920T协处理器操作的分析
- [转] ARM处理器中CP15协处理器的寄存器
- 访问ARM处理器的CP15
- arm 协处理器cp14 cp15
- arm - cp14, cp15 协处理器
- ARM CP15协处理器说明
- ARM CP15协处理器说明
- 欢迎使用CSDN-markdown编辑器
- 利用CTabCtrl控件在一个对话框切换多个其他的对话框
- 地图显示----地图显示
- c++11之单例模式
- 百亿互金平台技术栈大起底
- U-Boot中ARM协处理器CP15的操作分析
- Spring思维导图,让Spring不再难懂(ioc篇)
- 6. 树--二叉搜索树
- 7.4在东软
- linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
- spring集成mongodb总结
- c++中常见的转义序列
- opencv3.0 批量对图像进行处理(C++版)
- java中static关键字