【ARM Coresight 系列文章 2.3 - Coresight 寄存器】

文章目录

  • Coresight 寄存器介绍
    • 1.1 ITCTRL,integration mode control register
    • 1.2 CLAIM寄存器
    • 1.3 DEVAFF(Device Affinity Registers)
    • 1.4 LSR and LAR
    • 1.5 AUTHSTATUS(Authentication Status Register)

Coresight 寄存器介绍

Coresight 对于每个 coresight 组件,规定了一些寄存器,这些寄存器的偏移是固定的,这些寄存器有的是必须存在的。但是有的,可以不实现该寄存器功能。

Coresight 架构,对于 Coresight 的组件,定义了若干个固定的寄存器。第一个寄存器的偏移从 0xF00 开始,直到0xFFC。以下是寄存器列表
在这里插入图片描述
以上的寄存器的地址,在coresight的组件中,是不能当作其他功能使用的。如果该寄存器,在该组件没有实现,那么该寄存器地址要保留,读取要返回0,写被忽略(read must return zero, and writes must be ignored),而不能当作其他功能使用。

对于coresight的组件,占用1个4k或者整数倍的4k空间的memory空间。而 coresight 的寄存器,处于组件占用空间的最后一个4K空间的最后一部分。

寄存器分为两部分:

  • device-specific registers:组件自定义寄存器,从0x000-0xeff。coresight组件利用这些寄存器,实现该组件的功能。

  • coresight management registers: coresight 固定的寄存器,从0xf00-0xfff。这部分寄存器的功能是固定的。

1.1 ITCTRL,integration mode control register

工作模式寄存器。
在这里插入图片描述
对于每个 CoreSight 组件,可以工作在两种模式下:

  • functional mode
  • integration mode

两种模式的区别,在于对coresight组件的寄存器的访问,是否会引发寄存器相应的功能。

integration mode 是用来topology detection的。当一个debugger连接到一个soc后,此时debugger是不知道soc内部有哪些coresight组件的。因此就需要通过查询,来得知soc中有哪些coresight组件的。而查询,就是通过访问coresight组件的寄存器来实现的。此时soc还不知道组件是什么组件,因此也就不知道组件的寄存器是有什么功能。因此此时是不能随意对组件的寄存器进行访问的。

为了使访问的过程中,不影响组件的功能,就可以让组件工作在integration mode下,此时访问组件的寄存器,不会引发寄存器相应的功能。待debugger查询完毕后,获取到soc中各个coresight组件的信息后,再将组件的模式切换为 functional mode。

复位后,组件必须工作在 functional mode下。因此外部 debugger对组件查询完毕后,可以直接对组件进行复位,这样所有的组件就恢复到了function mode了。

1.2 CLAIM寄存器

这个寄存器是一个32位的不可见寄存器。只能通过访问 CLAIMCLRCLAIMSET 这两个寄存器,来设置或者获取该寄存器的值。

该寄存器,可以用来表示该组件的状态。这个是由实现来定义的,比如可以规定,该寄存器的最低位,表示最近该寄存器被读取过,第1位,表示最近该寄存器被写过。

CLAIMCLR寄存器
在这里插入图片描述

CLAIMSET寄存器
在这里插入图片描述

1.3 DEVAFF(Device Affinity Registers)

组件关联功能寄存器。
有时候,组件需要和其他组件,联合起来工作,这样,就需要指示该组件是和另外的什么组件进行关联,就可以用这寄存器。

比如一个 ETM,追踪一个 core 的 trace 信息,那么这个寄存器,就保存core的 MPIDR 寄存器信息,这样debugger就可以通过 DEVAFF 寄存器,得知这个ETM是关联的哪一个core。

在这里插入图片描述

1.4 LSR and LAR

在这里插入图片描述
对于coresight组件的寄存器,ARM定义了如下两类访问:

  • 系统寄存器访问:通过MSR,MRS指令(aarch64),MCR,MRC指令(aarch32)
  • external debug接口访问:DAP访问,或者是 memory-mapped访问,也就是软件通过load store访问

对coresight组件寄存器的访问,是有权限要求的。对于系统寄存器访问和 memory-mapped访问,ARM 定义了 software lock 这个权限限制。当 software lock 有效的时候,软件是不能访问coresight组件寄存器的。

software lock的目的,是为了防止软件意外的修改coresight组件的寄存器,从而修改当前系统状态,或者获取一些不该获取的信息。可以用来防黑客。

software lock 提供了两个寄存器,一个是LAR,一个是LSR。LAR是用来设置software lock状态,而LSR是保存当前的software lock的状态。

往LAR写入0xc5acce55,software lock 状态切换为unlock, software 可以正常访问coresight组件的寄存器,写入其他值,software lock状态切换为lock,software不可以正常访问coresight组件的寄存器(实现自定义)。

对于DAP访问,software lock 是没有用的。因为要通过DAP访问,是必须要debugger连接芯片的。
所以 coresight 组件要能够区分,当前的访问是 DAP 访问,还是非 DAP 访问。

1.5 AUTHSTATUS(Authentication Status Register)

debug 可以分为 non-invasiveinvasive
non-invasive 就是 self-hosted,而 invasive 就是 external debug

实际中,可以根据不同的应用需求,可能会需要支持debug,但是也可能需要支持debug中的一种,也有可能不需要支持debug功能。因此考虑到这些需求,ARM定义了认证接口。

认证接口总共包括4个,这 4 个接口是每个 coresight 组件要实现的。这些接口是 debug功能的总开关。

InterfaceDescription
DBGENinvasive debug enable
SPIDENsecure invasive debug enable
SPNIDENsecure non-invasive debug enable
NIDENnon-invasive debug enable

而这个 authentication status 寄存器,就是保存了这4个接口信号的状态。
在这里插入图片描述

  • DBGEN 使能的时候,NIDEN被忽略,即 NIDEN被认为是使能。
  • SPIDEN使能的时候,SPNIDEN被忽略,即SPNIDEN被认为是使能。

推荐阅读
https://aijishu.com/a/1060000000119741

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/23527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构训练营学习笔记:5-3接口高可用

序 架构决定系统质量上限,代码决定系统质量下限,本节课串一下常见应对措施的框架,细节不太多,侧重对于技术本质有深入了解。 接口高可用整体框架 雪崩效应:请求量超过系统处理能力后导致系统性能螺旋快速下降 链式…

STM32CubeMx之FreeRTOS的中断优先级+配置

编译运行即可 例如我编写的是一个灯亮500ms 一个等200ms的亮灭 如果他们的优先级是同等的,那么任务都可以实现,时间片会自动切换 但是如果亮500ms的灯 任务优先级更高 还用HALdelay的话 就会让任务二饿死,从而就会只看到任务一的内容 解…

回归预测 | MATLAB实现SO-CNN-BiGRU蛇群算法优化卷积双向门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现SO-CNN-BiGRU蛇群算法优化卷积双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现SO-CNN-BiGRU蛇群算法优化卷积双向门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现SO-CNN-BiGRU蛇群算法…

Cilium系列-13-启用XDP加速及Cilium性能调优总结

系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于: 启用本地路由(Native Routing)完全替换 KubeProx…

什么是微服务

微服务的架构特征: 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责自治:团队独立、技术独立、数据独立,独立部署和交付面向服务:服务提供统一标准的接口&#xff0…

九、pig安装

1.上传pig包 2.解压文件 3.改名 4.赋权 5.配置环境变量 export PIG_HOME/usr/local/pig export PATH$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$HBASE_HOME/bin:$SQOOP_HOME/bin:$PIG_HOME/bin 6.测试

开发运营监控

DevOps 监控使管理员能够实时了解生产环境中的元素,并有助于确保应用程序平稳运行,同时提供最高的业务价值,对于采用 DevOps 文化和方法的公司来说,这一点至关重要。 什么是开发运营监控 DevOps 通过持续开发、集成、测试、监控…

使用JProfiler进入JVM分析

要评测JVM,必须将JProfiler的评测代理加载到JVM中。这可以通过两种不同的方式发生:在启动脚本中指定-agentpath VM参数,或者使用attach API将代理加载到已经运行的JVM中。 JProfiler支持这两种模式。添加VM参数是评测的首选方式,集…

Maven项目中Lifecycle和Plugins下的install的区别

在Maven中,如果你的web和service在不同的模块下,如果直接用用tomcat插件运行web层,那么运行时会报错 Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.5.2:install (default-cli) on project springboot: The pack…

常用SQL语句总结

SQL语句 文章目录 SQL语句1 SQL语句简介2 DQL(数据查询语句)3 DML(数据操纵语句)4 DDL(数据定义语句)5 DCL(数据控制语句)6 TCL(事务控制语句) 1 SQL语句简介…

nginx网站服务

nginx:是一个高性能,轻量级web软件 1、稳定性高(没有Aapache稳定) 2、资源消耗比较低,体现在处理http请求的并发能力很高,单台物理服务器可以处理到3万-5万个请求 稳定:一般在企业中为了保持…

SpringBoot+AOP+Redission实战分布式锁

文章目录 前言一、Redission是什么?二、使用场景三、代码实战1.项目结构2.类图3.maven依赖4.yml5.config6.annotation7.aop8.model9.service 四、单元测试总结 前言 在集群环境下非单体应用存在的问题:JVM锁只能控制本地资源的访问,无法控制…

javaAPI(二):String、StringBuffer、StringBuilder

String、StringBuffer、StringBuilder的异同? String:不可变字符序列;底层结构使用char[]存储; StringBuffer:可变字符序列;线程安全的,效率低;底层结构使用char[]存储; …

快速搭建单机RocketMQ服务(开发环境)

一、什么是RocketMQ ​ RocketMQ是阿里巴巴开源的一个消息中间件,在阿里内部历经了双十一等很多高并发场景的考验,能够处理亿万级别的消息。2016年开源后捐赠给Apache,现在是Apache的一个顶级项目。 早期阿里使用ActiveMQ&#xff0c…

ClickHouse(十一):Clickhouse MergeTree系列表引擎 - MergeTree(1)

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…

分治法、回溯法与动态规划

算法思想比较 回溯法:有“通用解题法”之称,用它可以系统地搜索问题的所有解。回溯法是按照深度优先搜索(DFS)的策略,从根结点出发深度探索解空间树分治法:将一个难以直接解决的大问题,分割成一些规模较小的相同问题&…

《Java-SE-第二十九章》之Synchronized原理与JUC常用类

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页:KC老衲爱尼姑的博客主页 博主的github,平常所写代码皆在于此 共勉:talk is cheap, show me the code 作者是爪哇岛的新手,水平很有限&…

Java基础面试题3

Java基础面试题 1:https://cloud.fynote.com/share/d/qPGzAVr5 2:https://cloud.fynote.com/share/d/MPG9AVsAG 3:https://cloud.fynote.com/share/d/qPGHKVsM 一、JavaWeb专题 1.HTTP响应码有哪些 1、1xx(临时响应&#xf…

wonderful-sql 作业

Sql 作业 作业1: 答: create table Employee (Id integer not null, Name varchar(32) , Salary integer, departmentId integer, primary key (Id) );create table Department( Id integer primary key, Name varchar(30) not null );insert into emp…

Linux:在使用UEFI固件的计算机上内核是如何被启动的

前言 启动计算机通常不是一件难事:按下电源键,稍等片刻,你就能看到一个登录界面,再输入正确的密码,就可以开启一天的网上冲浪之旅了。 但偶尔这件事没那么顺利,有时候迎接你的不是熟悉的登录界面&#xf…