前言
相比J5芯片,J6引入了SMMU单元模块,用来地址转译;
概述
System Memory Management Unit(SMMU)系统内存管理单元,是I/O device与总线之间的地址转换桥。部分I/O device存在地址线位宽的限制,只能访问低地址内存。为了使I/O device能够访问高地址内存,需要有一个地址转换元件,将低地址转换成高地址。此外,在虚拟化环境下,VM中持有地址为IPA(Intermediate Physical Address,中间物理地址),I/O device无法直接使用IPA获取正确的数据,而是需要将其转换为实际的PA(Physical Address,物理地址)。SMMU能够帮助存在地址线限制的I/O device访问高地址内存;在虚拟化情况下,将I/O device的IPA转换成实际的PA,使其正确访问内存中的数据;同时,SMMU能够实现不同I/O device之间的地址隔离。
SMMU与MMU功能类似,通过提前创建页表,建立IOVA(I/O Virtual Address,I/O虚拟地址)与PA,或IPA与PA之间的映射关系,以实现地址转换。I/O device利用IOVA替代PA进行内存访问,SMMU将IOVA转换成PA,实现高地址内存访问。虚拟化情况下,I/O device利用IPA进行内存访问,SMMU将IPA转换成PA(如果同时建立IOVA与IPA和IPA与PA之间的映射关系,SMMU将I/O device的IOVA经过两个阶段的翻译,获取最终的PA),实现正确内存的访问。此外,SMMU为每个I/O device分配SID,为其单独建立页表,实现不同I/O device之间隔离操作,防止出现地址踩踏。

SMMU基本概念
SMMU功能与MMU功能类似,将IO设备的DMA地址请求(IOVA)转化为系统总线地址(PA),实现地址映射(可以将不连续的物理地址映射到连续的IOVA)、属性转换、权限检查(读写等)等功能,实现不同设备的DMA地址空间隔离。映射的最小粒度为4K。

SMMU硬件位置
SMMU(system mmu),是I/O device与总线之间的地址转换桥,它在系统的位置如下图:IO device访问数据不一定借助DMA。

SMMU的作用
SMMU有两个主要的作用,一个是通过地址映射,使得离散的物理地址映射成连续的虚拟地址,这样设备就可利用DMA直接进行访问,此时配置到DMA控制器的地址变为IOVA,所以对于DMA控制器来说,地址也是连续的;另一个作用是虚拟化,SMMU实现DMA的地址隔离与转换,将guest OS使用的IPA地址映射到PA,实现连续内存的分配。


SMMU的翻译类型
SMMU支持两个stage的翻译:stage1(IOVASMMU支持两个stage的翻译:stage1(IOVA-->IPA)和stage2(IPAIPA)和stage2(IPA-->PA),其中stage2地址翻译主要负责虚拟化。
SMMU支持只配置stage1、只配置stage2、都配置和都不配置。
都不配置情况下:IOVA=PA;
都配置情况下:IOVA都配置情况下:IOVA-->IPAIPA-->PA;
只配置stage1情况下:IOVA只配置stage1情况下:IOVA-->IPA=PA;
只配置stage2情况下:IOVA=IPA只配置stage2情况下:IOVA=IPA-->PA;

SMMU的使用
在VIO场景上,所有图像加速IP都接入了SMMU硬件单元,软件在使用buffer address之前,都会先行映射,然后再设置给IP;同一块buffer address在两个IP上的smmu映射,映射的地址基本上是不相同的;另外在一些IP读写越界上,SMMU起到了很好的保护作用;总体而已,J6加入SMMU,提升了系统的稳定性;