栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

AMD IOMMU与Linux (2) -- IVRS及AMD IOMMU硬件初始化

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

AMD IOMMU与Linux (2) -- IVRS及AMD IOMMU硬件初始化

1. I/O Virtualization ACPI table [1]

AMD IOMMU的ACPI数据结构,这里只列出一个大概

IVRS (I/O Virtualization Reporting Struct)

        -> 48-byte header

        -> IVDB:IVHD (I/O Virtualizaiton Hardware Definition) -- info about IOMMU and devices

                Types 10h, 11h, 40h, IVHD是关于IOMMU与downstream设备的信息

        -> IVDB:IVMD (I/O Virtualizaiton Memory Definition, optional) -- special memory constraints

                Types 20h, 21h, 22h, IVMD是相关设备的memory信息

Header:

 IVHD:

        Flags: PPR,PreF, Coherenet, Iotbl, Isoc, ResPassPW, PassPW, HtTunEn (AMD IOMMU独有)

        IOMMU info: UnitID, MSInum (AMD IOMMU独有)

        IOMMU feature: HATS, GATS, MSInumPPR, PASmax, GASup, GLXSup, GTSup, XTSup, ...                                    etc. (AMD IOMMU独有)

IVHD Device Entry: (4 or 8 bytes)

 DTE settings: Lint0/1Pass, SysMtg[1:0], NMIPass, EIntPass, INITPass (AMD IOMMU独有)

IVMD:

2. drivers/iommu/amd/init.c

注释一下上篇的AMD IOMMU硬件初始化函数

                early_amd_iommu_init (case IOMMU_IVRS_DETECTED) : 

                解析(parse) IVRS

                early_enable_iommus (case IOMMU_ACPI_FINISHED):

                enable IOMMUs, 主要是针对cmd/event buffer, ga(guest trans)/xt (32 bit APIC dest ID), DT (device table)等的设置 

                register_syscore_ops/amd_iommu_init_pci/enable_iommus_v2 (case IOMMU_ENABLED)

                        amd_iommu_init_pci ->

                                iommu_init_pci: 

                                根据IOMMU PCI CFG,EFRSup (IOMMU Extended Feature Register),设置IOTLB, GT, PPR, V2, GA log, 等变量

                                amd_iommu_init_api ->

                                        amd_iommu_init_dma_ops : 

                                        设置变量swiotlb (0 pt/sme me mask or 1)me: memory encryption

                                        bus_set_iommu: 

                                        设置amd_iommu_ops

                                init_device_table_dma : 

                                使能DTE.V/TV

                                iommu_flush_all_caches :

                                flush the caches of all IOMMUs, 包括DTE,  IRT, TLB (pages)

                                enable_iommus_v2: 

                                对于ppr, gt (guest trans)

                amd_iommu_enable_interrupts (case IOMMU_PCI_INIT)

3. summary

AMD IOMMU硬件的初始化,首先要解析IVRS表,得到IOMMUs, 及其下属devices的相关信息,根据这些信息,建立数据结构,使能IOMMUs。

根据Cfg space中的Capability以及EFRSup (extended feature register),  设置相应变量,以供后续使用

amd_iommu_ops是amd iommu driver的具体实现

设置DET中的V, TV是允许DMA remapping功能起作用

Reference:

【1】

AMD I/O Virtualization Technology (IOMMU) Specification, 48882

[2] IOMMU(三)-初始化 - 云+社区 - 腾讯云 (tencent.com)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/680141.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号