当前位置:首页 > 我的书籍 > 正文内容

换个角度说IOMMU,这个角度有点冷。

Peirre3年前 (2022-07-10)我的书籍353

说起来,AMD系列处理器的功能不低于INTEL处理器,内含集成电路的规模比INTEL同档的CPU处理器多得多。没有什么简化。所以一直是军工产品。

唯一的缺点就是耗能很多。相对INTEL处理器来说,新一代的INTEL节能会替代它。所以两家处理器公司互有比拼。

IOMMU 是内存管理单元,说起来就是内存管理器的入口地址片段。也就是一些寄存器。保留CPU处理直接访问地址以外的地址,可以访问计算机所有,包含外设,还是直接性的访问。

就是访问外部存储单元的时候会有些分析,说白了,内存再多,也要一点点的被直接缓存和缓冲。也就是说片段转换。

IOMMU的地址段表现,就是一片地址段。

可以用MOV等指令直接访问,可以改写IOMMU内存片的内容改变系统结构。

表示方法就是 IOMMU(base地址)+offset 位移地址,另外这个地址在amd公司的处理中,这段地址是固定的。

和MSR等指令的寻址作用一样。表示方式不同,也可以通过设置可用设置寄存器来设置。

现简单说明一下地址表示方法:

IOMMU MMIO 寄存器
IOMMU 控制内存图表用于IOMMU低基址寄存器,和IOMMU高基址寄存器,访问不大于64位。访问对齐。
控制寄存器的结构
注:如果 EventLogRun 字位是 1 并且EventLen和EventBase发生改变后IOMMU不能使用。

MMIO 寄存器指定系统物理地址和事件记录长度。

 63    60  59     56  55  52 51       32 31            12 11          0
+---------+----------+------+-----------+----------------+-------------+
|   保留  | EventLen | 保留 | EvenBase  |   EventBase    |     保留    |
+---------+----------+------+-----------+----------------+-------------+

字节      描述
++++++++++++++++++++++++++++++++++++++++++++++++++
[63:60]   保留
[59:56]   EventLen:事件记录长度,读写,恢复1000B.事件记录指定长度是2进制,最小尺寸4K,变量1000b两边保留。
          0000b - 0111b = 保留
          1000b = 256 进入点 (4K字节)
          1001b = 512 进入点 (8K字节)
          1111b = 32768 进入点 (512K字节)
[55:52]   保留
[51:12]   EventBase: 事件记录基地址,读写,恢复 00_0000_0000h,指定字节[51:12],基地址必须对齐4K字节。
[11:0]    保留

IOMMU寄存器控制标志:
63        44 43 42 41 40 39 38 37 36   34 33 32 31 30 29 28 27   25 24 32 22 21       18 17 16 15 14 13 12 11 10  9  8  7    5  4  3  2  1  0
+-----------+--+--+--+--+--+-----+-------+-----+--+--+--+----------+--+--+--+-----------+--+--+--+--+--+--+--+--+--+--+-------+--+--+--+--+--+
|    保留   | D| P| B| M| P|  P  |   D   |  D  |  D  | G| G| GAMEn | S| S| S|     CRW   | G| G| P| P| P| C| I| C| R| P|   I   | C| E| E| H| I|
|           | o| p| l| a| p|  r  |   e   |  u  |  u  | A| A|       | m| i| m|           | A| T| P| p| P| m| s| o| e| a|   n   | o| v| v| i| o|
|           | m| r| k| r| r|  i  |   v   |  a  |  a  | I| L|       | i| f| i|           | E| E| R| r| R| d| o| h| s| s|   v   | m| e| e| T| m|
|           | a| A| S| c| i|  v  |   T   |  E  |  l  | n| o|       | F| W| F|           | n| n| E| I| L| B| c| e| P| s|   T   | W| n| n| u| m|
|           | i| u| t| E| v|  A  |   b   |  v  |  P  | t| g|       | L| B| E|           |  |  | n| n| o| u|  | r| a| P|   i   | a| t| t| n| u|
|           | n| t| o| n| A|  b  |   l   |  e  |  p  | E| E|       | o| d| n|           |  |  |  | t| g| f|  | e| s| W|   m   | i| I| L| E| E|
|           | I| o| p|  | b|  r  |   S   |  n  |  r  | n| n|       | g| i|  |           |  |  |  | E| E| E|  | n| s|  |   e   | t| n| o| n| n|
|           | D| R| M|  | r|  t  |   e   |  t  |  L  |  |  |       | E| s|  |           |  |  |  | n| n| n|  | t| P|  |   O   | I| t| g|  |  |
|           | P| s| r|  | t|  E  |   g   |  L  |  o  |  |  |       | n|  |  |           |  |  |  |  |  |  |  |  | W|  |   u   | n| E| E|  |  |
|           | N| p| k|  | E|  n  |   E   |  o  |  g  |  |  |       |  |  |  |           |  |  |  |  |  |  |  |  |  |  |   t   | t| n| n|  |  |
|           | E| A| E|  | n|     |   n   |  g  |  E  |  |  |       |  |  |  |           |  |  |  |  |  |  |  |  |  |  |       |  |  |  |  |  |
|           |  | o| n|  |  |     |       |  E  |  n  |  |  |       |  |  |  |           |  |  |  |  |  |  |  |  |  |  |       |  |  |  |  |  | 
|           |  | n|  |  |  |     |       |  n  |     |  |  |       |  |  |  |           |  |  |  |  |  |  |  |  |  |  |       |  |  |  |  |  | 
+-----------+--+--+--+--+--+-----+-------+-----+-----+--+--+-------+--+--+--+-----------+--+--+--+--+--+--+--+--+--+--+-------+--+--+--+--+--+

[63:44]    保留
[43]       DomainIDPNE: 保留
[42]       PprAutoRspAon: 外设页请求自动报告,常开特性开关。读写,复位0b。
           0 = PPR 自动报告,常开特性关闭。
           1 = 开启 PPR 自动报告常开特性设置这位段和[PprAutoRspEn]
           当[MMIO 位移 0030h]的[PprAutoRespSup] = 0,这字段保留。
[41]       BlkStopMrkEn: 块停止标记消息特性开茁壮成长,读写,复位1b。
           特性支持默认开启。
           当[MMIO 位移 0030h]的[BlkStopMrkSup] = 0,这位段保留。
[40]       MarcEn: 内存地址线路和控制特性开关。读写,复位0b.
           0 = MARC 关闭
           1 = MARC 开启
           当[MMIO 位移 0030h]的[MarcSup] = 00b 时这位段保留。
[39]       PprAAutoRspEn: 外设页请求自动报告特性开关。读写,复位0b。
           0 = PPR 自动报告关闭。
           1 = PPR 自动报告,如果支持,开启。
           当[MMIO 位移 0030h]的[PprAutoRespSup] = 0,这位段保留。
[38:37]    PrivAbrtEn: 取消特权开关,读写,复位:00b
           00b = IOMMU 将中止任何访问请求到超级来宾页。当PMR位在PCIe TLP前缀标志没权(用户模式)请求。
           01b = IOMMU 将中止任何访问请求到超级来宾页,忽视PMR位设置。
           10b-11b = 保留
           当[MMIO 位移 0030h]的[USSup] = 0,这位段被保留。
[36:34]    DevTblSegEn: 设备表段开关,读写,复位000b.
           000b = 设备表没段。
           001b = 设备表除2段
           010b = 设备表除4段
           011b = 设备表除8段
           100b-111b = 保留
           注: [MMIO 位移 0030h]的[DevTblSegSup] = 00b,这位段保留,这位段必段不大于DevTblSegSup的设置值。
[33:32]    DualEventLogEn: 双事件记录开关,读写,复位00b.
           00b = 用默认事件记录缓冲。
           01b = 用后备缓冲
           10b = 自动切换缓冲到当前活动缓冲。
           11b = 保留
           注:如果字位溢出缓冲切换设置事件记录,当[MMIO 位移 0030h]的[DuaalEventLogSup] = 00b,这位段保留。
[31:30]    DualPprLogEn: 双外设页请求记录开关,读写,复位0b
           00b = 用默认外设页请求记录。
           01b = 用后备外设页请求记灵。
           10b = 自动切换当然活动记录
           11b = 保留
           注: 如果有溢出,记录切换会错。
               如果自动开启,[MMIO 位移 0018h]设置1,[PprLogEn]必须设置10b
           当[MMIO 位移 0030h]的[DualPPRLogSup]=00h,这位段保留。
[29]       GAIntEn: 来宾虚拟APIC中断开关,读写,复位0b
           0 = 当[MMIO 位移 2020h]的[GALogInt]从0变1时,没中断信号。
           1 = 当[MMIO 位移 2020h]的[GALogInt]从0变1时,有中断信号。
           当[MMIO 位移 0030h]的[GASup]=0时,写这位段中止。
[28]       GALogEn: 来宾虚拟 APIC GA 记录开关.读写.复位0b。
           1 = 开启 GA 记录。
           0 = 关闭来宾APIC虚拟中断请求记录。
           当[MMIO 位移 0030h]的[GASup]=0时,写这位段中止。
[27:25]    GAMEn: 来宾虚拟APIC模式开关。读写中,复位0b,这段指定高级中断状态,尺寸为IRTE。
           000b = 中断向量表定义使用IRTE
           001b = 虚拟中断向量表定义来宾虚拟APIC,被APM2指定,使用IRTE。
           010b-101b = 保留变量,处理为 GAMEn = 000b
           当[MMIO 位移 0030h]的[GASup]=0时,写这位段中止。
[24]       SmiFLogEn: SMI 过滤记灵开关,读写,复位0b,定义IOMMU中的SMI过滤记录到SMI中断块。
           0 = SMI 中断块不被SMI过滤记录。
           1 = SMI 中断块被SMI过滤记录在IOMMU事件记录中。
           注:SMI过滤被SmiFLogEn控制事件记录建立。
           SA,SE,IG和SupIOPF字位操作通过地图过滤中断独立处理。
           当[MMIO 位移 0030h]的[SmiFSup]=0b,SmiFEn 被硬件中止,只读值为0b。
[23]       SlfWBdis: 自写环关闭。
[22]       SmiFEn: SMI 过滤开关,定义很多IOMMU的中断和句柄。
           0 = SMI 中断不修改的通过。
           1 = SMI 中断和控制块被SMI寄存器过滤
           SmiFLogEn使用SMI块中断报告IOMMU事件记录。
           当[MMIO 位移 0030h]的[SmiFSup]=0b,SmiFEn 被硬件中止,只读值为0b。
[21:18]    CRW: 读,输出,复位0h,保留,未来特性。
           软件注意:软件可以安全写入0h到这位,但读中止。
[17]       GAEn: 来宾虚拟 APIC 开关,读写,复位 0b.
           0 = 来宾虚拟APIC特性在虚拟设备中断不可用。
           1 = 设备中断升级使用来宾虚拟APIC根节表进DTE,传递处理。当[MMIO 位移 0030]的[GASup]=0时,写字位中止。
[16]       GTEn: 来宾转换开关,读写,复位0b。
           0 = 来宾转换关闭
           1 = 来宾转换可以被外设编程DTE。当来宾转换启用,错误的词义改变,当[MMIO 位移 0030h]的[GTSup]=0时,写到这字位中止。
[15]       PPREn: 外设页请求处理开关,读写,复位 0b。
           1 = 外设页请求在处理。
           0 = PPR 请求在处理一个错误的请求。当[MMIO 位移 0030h]的[PPRSup]=0时。
[14]       PprIntEn: 外设页请求中断开关,读写,复位0b。
           1 = 当中断信号[MMIO 位移 2020h]的[PPRLogInt]=1b时,用[Capability 位移 10h]的[MsiNumPPR]。
           0 = 当中断没有信号,[MMIO 位移 0030h]的[PPRSup]=0时,[MMIO 位移 2020h]的[PPRLogInt]=1 时,写字位中止。
[13]       PPRLogEn: 周边页请求记录开关,读写,复位0b。
           1 = PPR 记录基地址寄存器[MMIO 位移 0038h]设置和外围页请求事件是写外围页请求记录。IommuEn也被设置。写1b到[MMIO 位移 2020h]的[PPRLogRun]=1b无效。
           0 = 外设页请求记录未启用,外设页请求不可用,当外设页请求记录未启用或[MMIO 位移 0030h]的[PPRSup]=0.
           当IommuEn=1b 和 PPREn=1b时,如果软件写[PPRLogEn]为1b,那么IOMMU清除 PPRLogOverflow字和设置PPRLogRun位进IOMMU结构寄存器[MMIO 位移 2020h].如果入点可用,IOMMU现在能写新的入点到事件记录。
           注: 当[MMIO 位移 0030h]的[PPRSup]=0时,写中止。
           软件注意: 软件能读[MMIO 位移 2020h]的[PPRLogRun]检查外设结构页请求记录写在IOMMU中。
           注: 外设页请求记录和事件记录是独立的。
           软件注意: PPRLog 基地址寄存器[MMIO 位移 2030h]在IOMMU PPRLog 尾部寄存器[MMIO 位移 2038h]必须在事件记录前设置启用。
[12]       CmdBufEn: 命令缓冲开关,读写,复位0b。
           1 = 开始或复位命令缓冲处理。当CmdBufEn=1b 和 IommuEn=1b时,IOMMU开始得到命令和[IOMMU 位移 2020h]的[CmdBufRun]设置到1b,置1b时CmdBufRun没效。
           0 = 半命令缓冲处理,写0b到IOMMU得到新命令预收完成,IOMMU停止收到命令在读时和事件指定之后。
           注:有[MMIO 位移 2020h结构表],关于检测命令缓冲处理。
               写事件记录控制在EventLogEn上。
[11]       Isoc: 同步,读写,复位0b.这字位控制结构同步HyperTransport读请求包中,当IOMMU发出 I/O 页表读和HyperTransport链时。
           1 = 请求包同步频道
           0 = 请求包用于标准频道
           注:固件平台将设置这字位为1b为同步处理频道
[10]       Coherent:耦合,读写,复位 1b,这字位控制结构的HyperTransport读请求包的耦合,当IOMMU发出 I/O 页表读和HyperTransport链驱动表读时。
           1 = 处理器的驱动表请求是窥探型
           0 = 处理器的驱动表请求不是窥探型
[9]        ResPassPW: 报告写发送通过,读写,复位0b。这控制结构ResPassPW在HyperTransport读请求包IOMMU发出驱动表读HyperTransport连接中。
           1 = 报告请求包通过发送
           0 = 报告请求包不通过发送
[8]        PassPW: 发送写通过,读写,复位0b,这字节,当IOMMU发出 I/O页表读和驱动表读为HyperTransport技术链接时控制 HyperTransport技术的PassPW 读请求包
           1 = 请求包通过发送
           0 = 请求包没通过发送
[7:5]      InvTimeOut: 超时错误,读写,复位000b,字位段指定超时为IOTLB错误请求。
           000b 没超时      001b 1ms
           010b 10ms        011b 100ms
           100b 1sec        101b 10sec
           110b 100sec      111b 保留
[4]        ComWaitIntEn:完成等待中断开关,读写,复位0b.
           1 = 一个中断事件在[MMIO 位移 2020h]的[ComWaitInt]=1,使用[Capability 位移 10]的[MsiNum]
[3]        EventIntEn: 事件中断开关,读写,复位0b
           1 = 一个中断事件在[MMIO 位移 2020h]的[EventLogInt]=1或 [MMIO 位移 2020h]的[EventOverflow]=1时使用[Capability 位移 10]的[MsiNum] 
[2]        EventLogEn: 事件记录开关,读写,复位0b
           1 = 事件记录基地址寄存器[MMIO 位移 0010h]被设置,当EventLogEn被设置,所有的写事件检测。
           0 = 事件记录关闭,事件记录不能使用。
[1]        HtTunEn: HyperTransport 技术支持开关,读写,复位0b
           1 = IOMMU接收HyperTranSport技术转换。
           0 = IOMMU不接收HyperTransport技术转换。           
[0]        IommuEn IOMMU 开关,读写,复位 0b
           1 = IOMMU 启用,所有的转换为IOMMU处理。基地址表寄存器位移 0000h 处必须在软件使用前设置。
           0 = IOMMU 关闭,不转换为映射IOMMU转换处理,关闭后,IOMMU 读出没有命令和建立,没有事件记录进入点。

这是寄存器的表示方法,因为网站一直在推广,很多资料的确没有实际的收入。但是的确有些价值和在不同时间段内必须公示。对科技的一种促进吧。

了不了解是个人意向问题。因为这些资料只是相对公开。个人有所得,但是一点点的做出来还是要有时间。

这个资料的文件别名是《AMD I/O Virtualization Technology (IOMMU)Specification》AMD 输入/输出 虚拟技术 白皮书

简单的说明一下用法。IOMMU基地址要计算出来,根据各个主板的结构。计算出总线的全地址。然后加一个偏移量。

偏移量的字节或单词,就是内存到总线,到外设的设置。有些寄存器可以反复输入输出,有些寄存器可以只读或访问。

还有的寄存器是计算机开机设定,用户,超管等是改写不了的。有些寄存器改写后重启硬件才有效,所以比较难完全掌握。

所以只熟悉一部分,再了解其它部分,一通百通。说穿就是内存分配格式,和控制内容和作用。有助记符也好也坏。

叫法和INTEL处理器不一样,说法和角度不同。但是寄存器大体相同。要相互了解,不过AMD的简明一点,INTEL的详细一点。

网上有很多IOMMU文章没有说什么具体的内容,我也只报告这么多,英文翻译要时间,不是一两天,只能做做停停,慢慢深入了解。

有些字面的隐晦会尽量深入浅出。先留底,以后再拼接。网络资料,在我的眼中看似浮云,很多有用的资料并不长久,资料用时方恨少。

关站什么的都很常见,也有支不付出的站长,资料很多,但是并没在网络中保留,大雁留痕,并没什么保留,只有片段。

意思理解很快,做一篇篇文章有点花时间,不交不留,各自发展。

                                                                                    by Editor Y.Pierre 欢迎回信nantz@163.com

01.png

分享给朋友:

相关文章

VBoxManage 命令行使用(转)

原文地址:http://cnjun939.blog.163.com/blog/static/78144538201251474311135/由于最近需研究virtualbox,看好看到上面的网址有,只...

来点达芬奇手稿,看看当时发生了什么。【读书记录】

来点达芬奇手稿,看看当时发生了什么。【读书记录】

达芬奇笔记列奥纳多.达.芬奇,各方面集成的天才大师。这些是他的原创手稿。在这里,一起探索大师头脑深处的秘密。都是以前的未解之迷。这辆车靠近火绳钩枪尾部的部分被设定为a,当火绳钩枪的尾部向后移动时,这部...

走入社会十年过后的第二个十年。

接http://nantz.top/zblog/index.php/9.html从学校出来已经有十年了,公司经营创收基本持平,销售并不容易。老板的所得比员工低,或持平。在鸿高数字技术的我有两条路选择,...

Blend书籍和感想。

Blend书籍和感想。

最近买了几本书 《Blender3D动画角色创作》《VR-Blender物理仿真与游戏特效开发设计》《Blender权威指南》《Blender大师》快速的读了一遍,加上自己的实际操作,谈谈对Blend...

这两天忙活,提交一个nrf 单片机的资料。

这两天忙活,提交一个nrf 单片机的资料。

在此处公布一个英文版无线射频51系列单片机资料,型号为nrf24LE1,智能小车,键盘,鼠标上都有使用这个芯片,用途很广。资料下载:nRF24LE1-F16Q48-R_Nordic.pdf简介:是一块...

nRF无线SOC单片机原理与高级应用一书读后感。

nRF无线SOC单片机原理与高级应用一书读后感。

这两天买了一本书内容是介绍nRF单片机的。说实话这本书出来好几年了。我的单片机也买了两年。以前已经看完英文资料,因为英文的理解会不太准确,读得慢,每次阅读次数不多。所以还是买了这本书。这本书读起来不吃...