Bootstrap

理解SMMU基本原理和基本概念

(阅读本文前假设您已经熟悉了MMU工作原理)

什么是SMMU/IOMMU, 有什么作用:

SMMU 有MMU完全一样的能力,当设备以DMA方式工作时,连接在它上面的IOMMU/SMMU可以将设备所使用的地址进行进一步的转换,完全和MMU所作的事情一样

 

 

  1. SMMU如何工作

MMU工作时候需要类似如下的页表转换来支撑,同样SMMU也需要。

 

 

SMMU 页表结构更加的复杂

关键点:

StreamID: device 通过物理线连接到SMMU ,这个StreamID就是用来标识SMMU上连接的设备。想象一个8 ports hub上连接了8个物理设备,这8个设备就可以通过portID来标识,比如port 0代表第一个设备,同理steamID

STE: stream Table Entry,可以理解为SMMU页表转换的第一级索引,每一个streamID代表着一个STE,通过这个STE指向的连接可以找到真正的虚地址==》物理地址转换的页表。假设SMMU上连接着8个具体设备,每个设备都有自己的StreamID,那就有至少8个STE表项。

CD: Context Descriptor, stage 1的页表配置项,它其中的TTB0指向了真正的页表信息,比如PGD, PMD, PTE等,完全和MMU的页表转换原理一样

 

查找过程:

假设stream ID为16的设备发起了DMA操作(如下动作完全自动完成,前提是之前配置好了SMMU中所有的表项):

  1. StreamID=16, 所以从寄存器strtab_base指向的地址中找到偏移为16的STE表项
  2. 该表项中的s1ContexPtr指向了下一级的stage 1转换地址CD(Context Descriptor)
  3. CD中的TTB0指向了一个页表转换的基地址PGD
  4. PGD-àPMD-àPTE 完成了虚拟地址到物理地址的转换(和MMU工作原理一样)

 

注:

  1. 其中引入的VMID, ASID的原因和MMU一样,都是为了在TLB中加于区别,防止cache bouncing
  2. Stage2 的转换原理基本和Stage 1一致,不过没有额外的CD
  3. 由于懒,文中有些图从网上直接扣的,抱歉。如有侵权,请告知

参考:

https://zhuanlan.zhihu.com/p/27026590

ARM® System Memory Management Unit Architecture Specification, SMMU architecture version 3.0 and version 3.1

 

;