棋子 · 2020年05月06日

ARM external debug寄存器的访问

在ARM处理器的内部,实现了若干的external debug(以下简称ED)寄存器,用来实现处理器的external debug功能。

一、ED寄存器访问的条件
对于ED寄存器的访问,是有条件限制的,一般是如下的几个条件。
1.png

  • OFF: core状态是power down还是power up
  • DLK: double lock 状态是lock还是unlock
  • OSLK: os lock状态是lock还是unlock
  • SLK: software lock状态是lock还是unlock

2.png
对于DLK,DLK只会在core要进入power down时需要用到的,因为core进入power down,是需要一个序列的,而这个序列是不能被打断的,也就是在执行这个序列时,外部的debugger是不能对core有影响的。此时debugger不能访问ED寄存器,core的halting也是禁止的。

由OSDLR_EL1寄存器来控制目前DLK的状态。
image.png

在复位之后,这个DLK为0,表示正常情况下,DLK都为0,即double lock是unlock的。只有当core要进入power down时,就需要软件将这一位置1,表示double lock给lock住。此时core完全禁止debugger对ED寄存器的访问,并且core的external debug功能被禁止掉。

3、OSLK
对于OSLK,用来禁止外部的debugger对一些ED寄存器的访问。由OSLSR_EL1寄存器来决定当前的os lock的状态。
image.png
OS lock不会影响PE进入到debug state,但是会影响对debug 寄存器的访问。因此在进入debug state前,还是要将os lock给unlock的。

4、SLK
software lock,用来禁止外部的debugger对一些ED寄存器的写操作,并且让寄存器的读取没有side-effect。

由EDLSR寄存器(ED寄存器)来控制
image.png
5、ED寄存器访问权限
以下是ED寄存器的访问权限的列表:

表中的访问权限,如下表所示,比如RO,就表示只读。
image.png
image.png
从上图可以看出,大多数寄存器当OFF,DLK,OSLK下,是不能访问的,因此有Error,这里的Error体现在APB访问时,APB总线上的PSLVERR信号会拉高,表示访问出现error。

而SLK下,会将很多RW的寄存器变为WO或WI。



推荐阅读

原文首发于骏的世界博客
作者:卢骏.
更多Arm技术相关的文章请关注Arm技术博客极术专栏,每日更新。
推荐阅读
关注数
23384
内容数
892
Arm相关的技术博客,提供最新Arm技术干货,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息