SMMU架构手册之Address Size(2)

1. 输入Address Size和虚拟Address Size

        架构上SMMU输入地址size为64bit。如果client设备输出一个小于64bit,或在client设备和SMMU输入之间的中间size小于64bit,小于64bit的地址会被转化为64bit SMMU输入地址。这种转换不是本文档的范围。

        ARMv8.0 和 ARMv8.1在AArch64上支持最大49bit,这意味着49bit地址要符号扩展为64bit地址。ARMv8.2支持最大53bit VA或49bit,这意味着53bit或49bit也要符号扩展为64bit地址。AArch64配置的stage1 转换内容有可配的达到最大的输入VA范围(通过TTB0和TTB1转换)。

        术语VAS表示SMMU实现的VA size。当SMMU_IDR5.VAX=0表示49bit。当SMMU_IDR5.VAX=1表示53bit。

NOTE:在SMMUv3.0上SMMU_IDR5.VAX保留,因此VAS一般为49bit。

        如果VAS地址的高位为SMMU的符号扩展,stage1高转换表TTB1被选择。如果应用要求同时使用TTB0和TTB1,系统设计必须发送至少端到端的地址,通过与SMMU连接的设备地址寄存器,从输入的MSB产生符号扩展。

        AArch32配置的stage1转换内容有32bit。在这种情况下,输入地址的bits[31:0]直接用着VA。若输入地址的高32位非全0,产生转换fault。从输入高bit[31:n]中的TxSZ域用来选择TTB0或TTB1。

        若VA[addrtop: N-1]不相同,对输入范围的N个重要位的stage1 AArch64转换表的输入范围检查失败。

(1)当TBI不使用时,AddrTop=63;

(2)当TBI使能时,AddrTop=55,意味着VA[63:56]忽略。

        当使能TBI,只有VA[55:N-1]必须相同,VA[63:56]为了转换目的需要符号扩展VA[55]位。

NOTE: TBI配置是CD的一部分,因此当stage1转换被使能。当stage1 bypass和disable,CD不会使用且TBI也会disable。

        术语UAS表示从client设备发送给SMMU的地址有效bit的数目。

(1)若57<=UAS<=64,TBI有意义,因为VA[63:56]可能不同于VA[55:VAS-1]。如果不相同,TBI决定是否产生转换fault;

(2)若VAS<=UAS<=57,TBI无意义,输入符号扩展意味着VA[63:56]不能与VA[55]不一样;

(3)若UAS<=VAS,若转换表范围被T0SZ或T1SZ配置(若UAS=49),小于需要的地址大小,范围检查会失败。stage1转换表的最大配置覆盖所有输入地址。

        对于AArch64,stage1转换表TTB0和TTB1从最高位来选择。最高地址位当TBI=0时由VA[63]决定,当TBI=1由VA[55]位决定。因此,从client设备的地址size小于或等于VAS,需要0扩展到64位,着意味着VA[63]=VA[55]=0,TTB1不会被选择。

        如果对外设编程的64bit地址的任何高位不适用于SMMU的符号检查逻辑,是否被截断,在SMMU软件不能依赖于编程错误来产生转换fault。若系统要求这种检查,软件必须检查DMA地址的有效性。

        所有输入的地址位没有修改的记录到SMMU fault event中。

2. 地址对齐检查

        SMMU架构不会检查传入的地址的对齐。

NOTE: 对于PE,对齐检查基于访问的size。这种语义不会直接应用于client设备访问。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值