STE包含每个stream的配置:

  1. 是否使能来之设备的流量;
  2. 是否是stage1转换;
  3. 是否是stage2转换
  4. 哪个数据结构定位到stage1的转换表

若使用stage1,STE使用域STE.S1ContextPtr来指示内存中的一个或多个CD的地址。

CD关联起streamID和stage1转换表基指针(转换VA到IPA),基于stream的配置以及ASID。若使用SubStreamID,多个CD表示多个stage1的转换,每个SubstreamID指向一个。当stage1转换没有使能时SubStreamID指向的事务会被终止。

如果使用stage2,STE包含stage2转换表基指针(将IPA转换为PA)和VMID。如果多个设备都与某个特定的虚拟机相关,这意味着他们共享stage2转换表。多个STE可能都映射到同一个stage2转换表。

NOTE: ARM期望当hypervisor软件存在时,hypervisor管理stream表和stage2转换表。CD和stage1的转换表由guest OS来管理。另外,hypervisor可以充分使用stage1转换来实现自己的内部目的。当不使用hypervisor时,单个OS管理stream表和CD。要了解更多,可查章节3.6。

当事务带SubstreamID时,配置使能substreams,SubstreamID标识了选择stage1转换上下文的CD。在这个配置中,若substreamID没有使用时,行为依赖于STE.S1DSS标志:

  1. 当STE.S1DISS=0b00,所有在事务需要携带SubstreamID,缺少SubstreamID意味着错误。当事务不带SubstreamID会被abort并event会被记录。
  2. 当STE.S1DISS==0b01时,事务不带SubstreamID可被接受且被看作它的配置是stage1 bypass。仅当事务携带SubstreamID时才会使能stage1转换。
  3. 当STE.S1DISS=0B10时,事务不带SubstreamID被接受且使用substream=0的CD。在这个配置下,带SubstreamID=0的事务被abort且event被记录。

CD和STE结构中的ASID和VMID用来tag TLB条目(这些条目是由CD和STE的配置来创建的)。这些tag用来查找和区分不同stream的地址空间的转换,或匹配接收到broadcast TLB操作的无效化项。实现可能使用这些tag来有效的允许不同的stream共享不同的转换表。

图6给出了一个例子,配置中StreamID用来选择线性Stream表中的STE。STE指向stage2的转换表和一个stage1配置的单个CD。然后CD指向stage1的转换表。

图7给出了一个配置中STE指向多个CD。SubstreamID用来选择CD中的一个并且SubstreamID决定一个事务使用哪个stage1转换。

图8给出了一个更复杂的情况,使用多级stream表。两个STE分别指向单个CD,第三个CD指向多级CD表。使用多级,在不需要很大的连续物理表的情况下可以支持多个streams和substream。

即将来的事务处理如下步骤:

(1)如果SMMU全局disable(比如SMMU_CR0.SMMUEN=0),事务会pass through SMMU且无任何地址修改。全局属性,如内存类型或共享型,被应用到SMMU的SMMU_GBPA寄存器。或者SMMU_GBPA寄存器可以被配置为abort所有的事务。

(2)若步骤(1)中的全局bypass没有使用时,

a. STE被定位到;

b. STE使能stage2事务,STE包含stage2的转换表基地址;

c. STE使能stage1事务,CD被定位到。若STE使能stage2转换,从使用stage2转换表中的IPA空间取出CD。否则从PA空间取出CD。

(3)若配置有效,发起转换:

a. 若stage1被配置为转换,CD包含转换表基地址。若STE的stage2被使能时要求进行stage2转换。否则stage1跳过转换,输入地址直接到stage2;

b. 若stage2被配置为转换,STE包含发起nested walked的stage1转换表(若使能),或IPA的正常walk。否则,stage2跳过转换,stage2的输入地址被作为输出地址。

(4)具有有效的配置的事务在转换过程中没有fault时,会有输出的地址(内存属性)。

NOTE: 上述时序描述了非安全stream的路径。若支持两个安全状态时,安全状态的事务也类似,除了SMMU_S_CR0.SMMUEN和SMMU_S_GBPA控制bypass,stage2不支持。

这些步骤要求实现能够缓存数据。章节16.2描述了配置和转换结构的缓存。

此外,event可能发生在处理过程中的多个阶段,以此来阻止进一步处理。若事务不能找到有效的配置或者遇到不支持的类型,它将以abort终止,并event被记录。如果事务进展到转换阶段,fault可能在转换的任一阶段产生。CD和STE特有的配置用来决定事务是否终止或是否stall,暂缓软件fault解决,看章节3.12。

使用VA到IPA或IPA到PA来描述两个阶段转换。

NOTE: 一些涉及到SMMU输入的系统使用BA。术语VA重点表示SMMU的输入,也可能与PE进程的虚拟地址空间一样。

若没有特别说明,转换表和他们的配置域与ARMV80A PE的转换系统一样。

若SMMU没有实现两个阶段的任一阶段,它会配置为固定bypass转换。还有其他的限制,比如,配置一个不存在的stage是无效的。SMMU至少支持一个转换stage。

SMMU架构手册之数据结构和转换流程(2)相关推荐

  1. SMMU架构手册之数据结构和转换流程(3)

    3. 配置和转换的查找 图中 描述了配置查找和转换查找所涉及的相关概念. 正如3.3.2中所描述的,传入的事务首先受配置查找的约束,而SMMU决定怎样开始进行事务的转换.这涉及到找到合适的STE,如果 ...

  2. SMMU架构手册之数据结构和转换流程(1)

    SMMU使用内存中一组数据结构来放置转换数据.寄存器指向初始根结构STE的基地址.STE包含stage2转换表基地址指针,同时也指向stage1的配置结构,该配置结构包含转换表基指针.CD表示stag ...

  3. SMMU架构手册之数据结构和转换流程(4)

    4 事务的属性:incoming,两阶段转换和overrides 除了地址,size和读写属性,传入的事务还可能带有其他属性,如访问类型(例如对于设备,WB-cached普通内存),共性性(如oute ...

  4. SMMU架构手册之HTTU(译)

    HTTU(Hardware Translation Table Udate)即硬件更新转换表. SMMU可以支持硬件更新转换表的AF和dirty状态,该功能可选. 一些PE可能支持HTTU(Hardw ...

  5. SMMU架构手册之Address Size(2)

    1. 输入Address Size和虚拟Address Size 架构上SMMU输入地址size为64bit.如果client设备输出一个小于64bit,或在client设备和SMMU输入之间的中间s ...

  6. SMMU架构手册之中断和通知

    event被记录到event队列,PRI请求和全局error有相关中断来允许异步通知给PE. 实现可能支持MSI中断,该中断以32位数据写一个配置值到配置寄存器中,在GICv3系统中,为GITS_TR ...

  7. SMMU架构手册之stream编号(译)

    每个即将到来的事务有地址.size和属性如READ/WRITE,安全/非安全,共享性,CACHE一致性.若超过一个client device连接到SMMU,这需要使用StreamID来区分不同的来源. ...

  8. SMMU架构手册之Address Size(1)

    在SMMU中需要考虑三种地址size概念,从系统来的输入地址size,中间地址size(IAS),以及输出地址size(OAS). 1. SMMU输入地址size为64bit NOTE: 可以查看章节 ...

  9. 【FFmpeg】使用 FFmpeg 处理音视频格式转换流程 ( 解复用 | 解码 | 帧处理 | 编码 | 复用 )

    FFmpeg 系列文章目录 [FFmpeg]Windows 搭建 FFmpeg 命令行运行环境 [FFmpeg]FFmpeg 相关术语简介 [FFmpeg]FFmpeg 相关术语简介 二 [FFmpe ...

最新文章

  1. 飞书与IAI国际广告奖,协同实现国内营销史上的创新“云终审”
  2. Java处理正则验证手机号-详解
  3. 汉高澳大利亚sinox接口捆绑经典winxp,全面支持unicode跨语言处理
  4. pandas新建dataframe_pandas数据处理
  5. 详解FTP服务完成Linux和WIN10之间的信息传输(实验详解)
  6. JavaScrip有哪些优点
  7. Spring @Transactional实际如何工作?
  8. MacBook 如何通过命令终端进入 U 盘内的目录
  9. leetcode13. 罗马数字转整数
  10. 大数据学习笔记24:利用MR改造Zebra项目
  11. Kubernetes之持久化存储
  12. 快速的mysql导入导出数据(load data和outfile)
  13. 怎么在Linux中telnet服务器,Linux系统下Telnet服务器配置
  14. 阿里巴巴矢量图标库的使用步骤
  15. 网卡5790c linux驱动,(支持所有硬件、无需连接宽带)e驱动 v5.21 WIN7 32bit专版驱动包...
  16. 计算机广告制作专业范围,计算机广告制作专业
  17. Windows系统(tips)
  18. 计算机保存到桌面显示不出来,excel表格在电脑桌面显示不出来是什么原因?
  19. python如何提取奇数_Python 获取奇数和偶数
  20. Java 计算两个日期时间差(天数、时、分、秒、毫秒)

热门文章

  1. 学校铃声Java_java_java多线程抓取铃声多多官网的铃声数据,一直想练习下java多线程抓取数 - phpStudy...
  2. 小学班干部竞选自我介绍PPT模板
  3. Nginx websocket支持配置
  4. 1.架设邮件服务器-概念
  5. php官网源码包下载地址,mysql php nginx 源码包下载地址
  6. 计算机微机组装实训报告,微机组装实训报告_相关文章专题_写写帮文库
  7. UE4 虚幻引擎,场景优化,View Mode视图模式
  8. 安装Steam卡在创建快捷方式
  9. 洪大师 php,中国象棋大师网——洪磊鑫大师象棋系统讲座
  10. 计算机系统是如何实现控制外接设备,计算机I/O接口与系统的连接