当前位置: 首页 > news >正文

Linux Mem -- AArch64 MTE功能Tag寄存器

目录

1 前言  

2 Tag相关寄存器

 2.1 Mtu_tag_addr_ctl

 2.2 Mtu_tag_addr_base

 2.3 Mtu_tag_addr_shutter{2:0}

3 mtu_tag_addr*寄存器代码设定


1 前言  

     如前文《The MTE stores and checks in real hardware》提到为了将memory tag保存到内存,需要对MTSX中的tag相关寄存器进行编程,以保证MTSX能够根据请求的物理地址来决定tag地址。本文参考Documentation – Arm Developer

2 Tag相关寄存器

        使能MTE功能前,必须编程MTSX中地址产生寄存器和系统中相关内存控制器。MTSX根据请求的物理地址来决定tag地址,通过此读取此tag地址的memory tag 和对应虚拟地址中的address tag进行比较。MTSX需要被编程的寄存器如下:

        a.mtu_tag_addr_ctl

        b.mtu_tag_addr_base

        c.mtu_tag_addrshutter{0-2}

 2.1 Mtu_tag_addr_ctl

        该寄存器用来指示使用那种内存映射方式。从端(MTXS的下游)可能使用连续的内存映射,而serves端可能是非连续的方式在CI-700 。因此,MTSX能够使用各种传输模式用于映射系统地址和下游从端的内存地址。内存映射的方式决定了MTSX用于传输地址的映射结构。MTSX支持5种内存映射方式,定义在por_mtu_tag_addr_ctl寄存器中。

映射方式

Por_mtu

_tag_ad

dr_ctl.me

mory_map

_mode_e

ncoding

描述

Pass-through

0b000

系统地址映射直接到下游从段,没有任何转换

PDD 传输

0b001

使用PDD内存映射。

Alternate传输

0b010

使用flat(非转换)和 PDD 两种方式混合的内存映射方式。

Mutil sockets的Alternate传输

0b011

和alternate传输的映射模式相同。然而如果MTSX收到超过4TB的地址,则将丢弃掉超过4TB的高位。这种模式时,MTSX不能区分0x700 0000 0000 和0x300 0000 0000。因此,系统需要阻止这种访问。

0映射模式

0b100

---

        如下是PDD内存映射示例,MTSX能够转换成到一个连续的映射地址使用PDD映射:

如下是Alternate传输映射模式示例:

Mutilple sockets的Alternate传输映射模式实例:

0映射模式实例:

 2.2 Mtu_tag_addr_base

        Mtu_tag_addr_base寄存器用于表示tag 空间在本地内存的起始物理地址,如下图显示:

如下是DRAM中tag区域的约束条件:

        a.tag区域不能与数据区域交错,tag区域必须在DRAM数据区域的上面。

        b.tag的物理地址空间不能映射为多个区域

例如,PDD映射模式时,不允许tag区域一部分映射在2GB-4GB、另一部分映射到43GB-64GB。

 2.3 Mtu_tag_addr_shutter{2:0}

        为了确认正确的DRAM地址,必须正确的对mtu_tag_addr_shutter{2:0}寄存器进行编程以删除地址位,必须移除的地址位是基于SCG的HN-Fs和SNs数量。

如下图。这些寄存器允许移除bit [51] - bit[6]范围内最多7bit的物理地址位。要对这些寄存器进行编程,您必须设置每个单独的地址位的移位行为,如下图所示。

如上图示,可以配置address shutter寄存器配置为:

        a.直通PA bit[n]没有改变

        b.偏移bit[n+1]和bit[n+7]任意物理bit到bit[n]位置

如下图显示物理地址范围bit[12] - bit[6]移除bit[10]和bit[7]的shutter寄存器编程:

 基于SCG的HN-Fs和SNs的联合支持情况图:

3 mtu_tag_addr*寄存器代码设定

        AArch64 MTE功能的allocation tag存放在mtu_tag_addr_base寄存器指向的内存中,mtu_tag_addr_base这个寄存器在哪里设置?

关于por_mtu_addr_*寄存器设置:

        a.Por_mtu_addr_*类寄存器说明中:针对此寄存器的设置需要在设备的首次非配置的访问前完成。

        b.以MTK平台为例,在preloader阶段(preloader/platform/mtxxx/src/core/booker.c)设置MMU是有根据MTE使能情况进行por_mt_addr*寄存器进行设置。在接近内存物理起始地址的地方,预留 dram_size >> 5 的内存空间,将此空间物理地址设置到寄存器por_mtu_addr_base做为 alloction tag的存储空间。另外需要注意:预留的该段内存设置nomap属性,在内核阶段时不会对该段内存进行虚拟映射。

相关文章:

  • CanMV的刷新比Openmv强
  • Apollo 9.0 参考线生成器 -- ReferenceLineProvider
  • vite创建的react18的@路径提示配置
  • 鸿蒙开发:熟知@BuilderParam装饰器
  • 太速科技-616-基于6U VPX XCVU9P+XCZU7EV的双FMC信号处理板卡
  • Oracle VirtualBox虚拟机软件中安装ubuntu
  • Redission看门狗
  • STM32的HAL库开发---OLED
  • 如何通过5G和边缘计算提升工业远程运维效能?
  • MySQL版本选择与安装
  • java笔试基础
  • 【C++文件读写操作】IO流读文件[程序和文件必须在同一文件夹]
  • DeepSeek R1本地部署教程
  • QT之error: LNK2038: 检测到“RuntimeLibrary”的不匹配项
  • Python函数返回值250214
  • 图数据库Neo4j面试内容整理-属性(Property)
  • DeepSeek是如何通过“蒸馏”技术打造自己的AI模型
  • Django中实现简单易用的分页工具
  • CTFSHOW-WEB入门-PHP特性109-115
  • 参数捕获与分析
  • 哪家网站做旅游攻略好/精准引流怎么推广
  • 直播类网站开发/百度网站排名查询工具
  • 网站建设服务好公司/站长工具seo客户端
  • 科技公司内蒙古网站制作/线上引流线下推广方案
  • 查找人网站 优帮云/百度关键词搜索排名多少钱
  • 阿里云ecs做淘客网站/品牌网络营销策划书