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

2023-05-16

介绍AMD IOMMU driver基于IVRS的硬件初始化情况

1. I/O Virtualization ACPI table

2. drivers/iommu/amd/init.c

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)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AMD IOMMU与Linux (2) -- IVRS及AMD IOMMU硬件初始化 的相关文章

  • PCB Layout软件分析对比(AD、Pads、Allegro)

    PCB Layout软件分析对比 xff08 AD Pads Allegro xff09 国内的EDA软件市场几乎被三家瓜分 xff0c 分别是Altium Cadence Mentor xff0c 也是我们这次主要分析和比较的软件 除此之
  • 【leetcode学习笔记】leecode是什么?

    在csdn上看到leecode是第二次了 xff0c 之前一直不知道是什么 xff1f 今天在学习linux系统如何将文本登录界面转换为图像登录界面的时候 xff08 出现了运行startx后 xff0c ubuntu密码正确也进不去系统的
  • 相机内参详解

    相机内参详解 以下是一些个人在工作中对相机内参的学习和理解 首先要了解一下数码相机的大致成像原理 1 光聚焦在CCD或CMOS上 2 CCD或CMOS完成光 电转换 3 A D将模拟信号转换成数字信号 4 最后由DSP将数字信号转换成数码图
  • java8使用积累

    1 将List lt T gt 数组转换为String并用逗号隔开 String join 34 34 List 2 idea自动补全代码教程 xff1a https www cnblogs com HF Made p 11417225 h
  • 【java】手动分页工具类

    最近小编遇到一个很绕的问题 xff0c 无法使用mybatis自带的分页插件对符合条件的数据进行分页 xff0c 故收集了一个自动分页的工具类 xff1a public static lt T gt List lt T gt getPage
  • redis 使用bitMap实现统计系统在线用户数量

    BitMap xff0c 简单来说 xff0c 其实也就是 byte 数组 xff0c 用二进制表示 xff0c 一个bit的值 xff0c 或者是0 xff0c 或者是1 xff1b 也就是说一个bit能存储的最多信息是2 它用一个bit
  • xml与实体之间的转换

    在对接一些第三方接口的时候往往需要涉及到一些对xml文件的处理 xff0c 小编今天主要总结一下JavaBean与xml文件之间互相转换的探索与实例 使用JAXB技术实现xml与实体之间的转换 1 是什么 xff1a JAXB xff08
  • SVN中trunk、branch、tag区别

    虽然一直都在用svn作项目管理 xff0c 但是一直都是傻傻的分不清主干 分支 今天小编就来详细介绍一下 xff1a branch 分支 xff1a 版本控制系统的一个特性就是能够把各种修改分离出来放在开发品的一个分割线上 这条线就被称为分
  • win10下如何解决VC++MSDEV.EXE的0xc0000142错误

    最近小编在学习时用到了vC 43 43 这个软件 xff0c 但是一直无法正常启动 小编的电脑是从win10家庭版升级到了win10企业版的 xff0c 之前并没有出现过什么异样 xff0c 直到最近软件无法正常打开 xff0c 从网上搜得
  • windows下获取文件上传路径报错:java.io.FileNotFoundException: (文件名、目录名或卷标语法不正确。)

    小编今天在java编程中使用fastdfs实现文件上传功能的时候 xff0c 获取windows文件路径时报错 xff1a java io FileNotFoundException 文件名 目录名或卷标语法不正确 原因分析 xff1a 出
  • qrcode(一)

    1 二维码概念 二维码又称QR Code xff0c QR全称Quick Response xff0c 是一个近几年来移动设备上超流行的一种编码方式 是用某种特定的几何图形按一定规律在平面 xff08 二维方向上 xff09 分布的黑白相间
  • zk服务启动报错:Unexpected exception exiting abnormally java.io.eofexception

    解决方案 xff1a 找到zoo conf中配置的dataDir和dataLogDir路径 然后删除两个文件夹下的version 2文件夹 重启服务 xff0c 问题解决
  • mybatis中useGeneratedKeys和keyProperty的作用

    背景 xff1a 最近在看队友的代码 xff0c 发现个问题 xff0c 后觉是自己out了 在做关联表插入操作时 xff0c 需要根据主表的 主键id作详情表的属性值 xff0c 最笨的方法就是 xff0c 先插入主表 xff0c 然后通
  • Linux基础命令---tracepath追踪路由

    tracepath tracepath 指令可以追踪数据到达目标主机的路由信息 xff0c 同时还能够发现MTU值 它跟踪路径到目的地 xff0c 沿着这条路径发现MTU 它使用UDP端口或一些随机端口 它类似于Traceroute xff
  • 如何将dockerhub与github关联

    本文目录 如何将dockerhub账户与github相关联如何在dockerhub中利用github上的Dockfile进行auto build dockerhub具有Create Automated Build xff0c 也就是说 xf
  • 网络文件夹目前是以其他用户名和密码进行映射的——映射盘更换登录用户名问题

    引言 最近在使用局域网内的映射盘来共享文件 xff0c 这样比通过外网来上传和下载文件的速度快很多 xff0c 但是对于安全问 题我们不得不去考虑权限问题 xff0c 就是我们需要分配不同的用户名和密码来区分权限 xff0c 有的用户名只能
  • 一直听说“不忘初心”,今天才知道真正内涵!

    古语有云 xff1a 不忘初心 xff0c 方得始终 什么是初心 xff1f 1912年春天 xff0c 哈佛大学教授桑塔亚纳正站在课堂上给学生们上课 xff0c 突然 xff0c 一只知更鸟飞落在教室的窗台上 xff0c 欢叫不停 桑塔亚
  • 年终总结——旧的收获与新的开始

    引言 收获本身分为俩部分 xff0c 一个就是旧经历的收获 xff0c 另外就是新路程的规划 概述 旧的一年已然逝去 xff0c 那我们是否颗粒归仓 xff1b 新的一年即将开始 xff0c 我们是否规划好新的旅程 内容 颗粒归仓 从没有思
  • Android、Java,关于交通部808协议、905协议、794协议等部标协议、出租车协议、网约车协议、网约车智能终端、出租车智能终端的简要说明

    作为一名有5年车辆网Android智能终端开发经验的入行人 xff0c 今天跟大家分享一下我在车辆网这一领域的经历和技术 说实话 xff0c 刚接触协议的时候 xff0c 我感觉很懵逼 xff0c 这哪里是Androi开发 xff0c 简直
  • 嵌入式linux和用stm32进行的嵌入式开发这两者之间有什么关联性吗?

    基于STM32的开发属于微控制器开发领域 xff0c 主要开发工具是keil或IAR xff0c 这种开发更准确的说法是单片机开发或者硬件开发 xff1b 而招聘里所说的嵌入式开发 xff0c 开发环境是基于Linux操作系统 xff0c

随机推荐

  • 【YOLOv4】详细讲解全过程

    目录 1 YoloV4核心基础内容 1 1 网络结构可视化 1 2 网络结构图 1 3 核心基础内容 1 3 1 输入端创新 xff08 1 xff09 Mosaic数据增强 1 3 2 BackBone创新 xff08 1 xff09 C
  • 【Cmake】在Windows下用Cmake构建C++工程项目——cmake 的 helloworld——1

    参考资料 xff1a Cmake 实践 Cmake Practice Cjacker Cmake 实践 xff0c 是在Linux系统环境下讲解的 xff0c 有些地方在Windows下看不到该有的效果 xff0c 而且第一节因为给出的代码
  • OpenCV矩阵cv::Mat通道和位深的整理(CV_8UC1,CV_16UC1,CV_32FC1等等)

    一 数据类型说明 矩阵数据类型 CV lt bit depth gt S U F C lt number of channels gt 1bit depth 比特数 代表8bit 16bit 32bit 64bit2S U F S 代表 s
  • github如何修改repository(仓库)名字

    首先登录你的github 查看你的仓库目录页 xff0c 点击你需要更改的仓库 进入此仓库管理页面 xff0c 点击Settings 进入到设置页面 xff0c 如果你是想要更改名称的话 xff0c 直接在这里改 xff0c 然后点击Ren
  • ROS中tf树,frame未连接的问题。

    今天调节双舵轮的AGV xff0c 一开始无法导航 xff0c 由于学生有些忙 xff0c 没做urdf 我就直接发布静态坐标变换 xff0c odom到basefootprint是里程计自己编写 xff0c 问题是加了laser base
  • The POM for xxxx is missing, no dependency information available

    很久以前用Maven的时候基本都是一个工程 xff0c 后来感觉太落伍了 xff0c 就根据geoserver源码开始分模块对功能进行优化 后来有个新来的同事也碰到了这个问题 xff0c 我就给他解决一下 xff0c 顺便把以前的心得记录一
  • 无人机开发-介绍Mavlink协议的消息组成、如何看懂繁杂的mavlink官网介绍、简单介绍地面站与飞控的通讯流程

    这篇博客主要介绍了mavlink的消息组成和如何看懂繁杂的mavlink官网介绍以及简单介绍了下地面站与飞控的通讯流程 前面已经提到了在mavlink消息帧里最重要的两个东西 xff0c 一个是msgid xff1b 一个是payload
  • 无人机开发-介绍MAVLink代码的大概结构

    可以看到 xff0c 里面有多个文件夹和几个头文件 pixhawk xff0c ardupilotmega xff08 apm xff09 xff0c matrixpilot这类的文件夹里都是各个飞控自己定义的mavlink消息类型 xff
  • 无人机开发-图传技术浅析

    2016年 xff0c 是中国无人机市场的元年 xff0c 无人机能够一跃进入大众视野 xff0c 并迅速在大众市场火热发展 xff0c 是很多人始料未及的 从刚开始的空中摄录 xff0c 到后来的实时摄录 xff0c 方便的无人机图传功能
  • Ubuntu18.04安装ROS+gazebo9+PIX4仿真

    本文仅作安装过程记录之用 1 安装ros Ubuntu18 04选择ROS Melodic 教程网址 xff1a http wiki ros org cn melodic Installation Ubuntu 1 1配置 Ubuntu 软
  • PX4+gazebo仿真给无人机添加摄像头

    1 启动仿真 xff1a cd到Firmware文件夹 xff0c 执行以下代码 roslaunch px4 mavros posix sitl launch 如果启动过程卡住或者很慢 xff0c 下载该链接的压缩包https bitbuc
  • 最全Pycharm教程(10)——Pycharm调试器总篇

    如果觉得这篇文章对您有所启发 xff0c 欢迎关注我的公众号 xff0c 我会尽可能积极和大家交流 xff0c 谢谢 最全Pycharm教程 xff08 1 xff09 定制外观 最全Pycharm教程 xff08 2 xff09 代码风格
  • 关于嵌入式

    学习方向 首先要学习下基础课程单片机 xff0c 汇编和C语言等等 xff0c 然后再学习嵌入式 xff0c 如果说你要想水平高的话 xff0c 最好学习下操作系统 xff0c 数据结构 xff0c 算法及一些硬件方面的知识等等 看你是想在
  • make_unique的使用

    关于make unique的构造及使用例程 xff0c MSDN的讲解非常详细 xff08 https msdn microsoft com zh cn library dn439780 aspx xff09 使用过程中 xff0c 我的理
  • C#学习记录——C#编写串口程序

    因为电气自动化专业出差太多 xff0c 考虑学点其他的看能不能实现转行 xff0c 也没太清晰的路线 xff0c 看网上好多推荐电气自动化转C 上位机开发的 xff0c 也抽时间学习了解下C xff0c 因为非软件专业 xff0c 对计算机
  • the working directory ‘XXX’ does not exist

    积累点滴 今天在idea上重新建了一个项目 xff0c 结果一运行就报了 the working directory XXX does not exist 的错误 明明上一个项目都运行好好的 xff0c 怎么新建一个就出问题了呢 xff1f
  • Git 子模块(Submodule)

    提示 xff1a Git 子模块 Submodule 操作 文章目录 一 Git 子模块 Submodule 是什么 xff1f 二 使用步骤1 创建子仓库2 clone 带有子仓库的git项目 三 子仓库代码的修改和更新 一 Git 子模
  • Java Web项目开发项目经验总结

    一 学会如何读一个JavaWeb项目源代码 步骤 xff1a 表结构 gt web xml gt mvc gt db gt spring ioc gt log gt 代码 1 先了解项目数据库的表结构 xff0c 这个方面是最容易忘记的 x
  • React + TS + Mobx 示例

    一 创建项目 方式一 xff1a create react app todo React ts demo scripts version 61 react scripts ts cd todo React ts demo npm start
  • AMD IOMMU与Linux (2) -- IVRS及AMD IOMMU硬件初始化

    介绍AMD IOMMU driver基于IVRS的硬件初始化情况 1 I O Virtualization ACPI table 2 drivers iommu amd init c 1 I O Virtualization ACPI ta