首页 > 其他分享 >DMA一致性映射使用

DMA一致性映射使用

时间:2024-03-24 18:24:02浏览次数:29  
标签:DMA phys 映射 dma virt dev 一致性 buf size

DMA映射可参考:https://www.cnblogs.com/lethe1203/p/18092749

 

reserved_memory方式

1、定义保留内存的节点,由设备节点使用
test_device_reserved: pmu_noc@0xe8000000 {
            compatible = "shared-dma-pool";
            reg = <0x0 0xe8000000 0x0 0x800000>;
            reusable;
        };

&test_device {
    status = "okay";
    memory-region = <&test_device_reserved>;
};
  2、驱动probe中初始化reserved_mem,即提取memory-region信息绑定设备
ret = of_reserved_mem_device_init(&pdev->dev);
或
struct device_node *np = pdev->dev.of_node;
ret = of_reserved_mem_device_init_by_idx(&pdev->dev, np, 0);

 

3、驱动中申请设备内存使用
dma_set_mask(&dev->dev, DMA_BIT_MASK(64)); // 可以访问64bit

buf->virt = NULL;    // 申请成功后得到的虚拟地址
buf->phys = 0;    // 成功后phys值为设备树填写的物理地址
buf->size = size;    // 要申请的长度
buf->dev = dev;
buf->virt = dma_alloc_coherent(dev, buf->size, &buf->phys, GFP_KERNEL);

... ... 
dma_free_coherent(buf->dev, buf->size, buf->virt, buf->phys);

 

SMMU方式

使用smmu方式需要硬件上多一个TBU 例如:GPU需要一致性映射一块内存,不使用预留内存方式的话,就需要给GPU一块专属的TBU 此时需要协同smmu工程师协同调试。此时直接使用:
dma_set_mask(dev, DMA_BIT_MASK(64));
virt = dma_alloc_coherent(dev, size, phys, GFP_KERNEL);

... ... 
dma_free_coherent(buf->dev, buf->size, buf->virt, buf->phys);
得到的phys便是kernel看到的地址,virt表示GPU设备看到的地址

标签:DMA,phys,映射,dma,virt,dev,一致性,buf,size
From: https://www.cnblogs.com/lethe1203/p/18092762

相关文章

  • DMA映射
    参考资料:https://elinux.org/images/3/32/Pinchart--mastering_the_dma_and_iommu_apis.pdf《宋宝华:Linux设备驱动开发详解》 VA和PA的相互转换:系统启动时,MMU便会建立映射表,将DRAM物理地址和虚拟地址进行映射,在linux内核中,可以使用下面的函数完成VA和PA的转换#definevir......
  • MySQL 与 Redis 如何实现最终一致性的四种方案
    背景缓存是软件开发中一个非常有用的概念,数据库缓存更是在项目中必然会遇到的场景。而缓存一致性的保证,针对不同的要求,选择恰到好处的一致性方案。缓存是什么存储的速度是有区别的。缓存就是把低速存储的结果,临时保存在高速存储的技术。如图所示,金字塔上层的存储,可以作为下......
  • DMA cache一致性
    本节内容参考《宋宝华:Linux设备驱动开发详解》 cache和DMA本身似乎是两个毫无关联的事物。cache被用作CPU针对内存的缓存,利用程序的空间局部性和时间局部性原理,达到较高的命中率,从而避免CPU每次都必须要与相对慢速的内存交互数据来提高数据的访问速率。DMA可以作为内存与外设之......
  • dw_axi_dmac简介
    参考资料:https://blog.csdn.net/as480133937/article/details/104927922【ARMAMBAAXI入门2-AXI协议中的BURST】AXI3/4协议_axi3协议-CSDN博客【注】:关于dw_axi_dmac的理解是我个人理解,无法保证理解的正确性 基本概念:DMA:全称directmemoryaccess,即直接存储......
  • 金三银四面试题(二):数据库缓存的数据一致性
    这也是一道非常经典的面试题。可以查到它在很多面经中都出现过。还有一个比较的具体问法其实是:如何保证MySQL和Redis的数据一致性?什么是数据一致性例如将Redis用作MySQL数据的缓存时,由于数据在MySQL中的变更,导致Redis中的缓存数据与实际数据不一致的情况。这种不一致可能......
  • c++ stl 之映射—— map 详解
     map是stl的一个关联容器,名叫“映射”,何为“映射”?其实就是一个数组,但有了数组何必还需映射,这是一个高深的问题。目录一、map简介         1.空间复杂度    2.时间复杂度     3.“键”的类型二、 map用法     1.声明  ......
  • CF1615F LEGOndary Grandmaster
    CF1615FLEGOndaryGrandmaster计数好题,转换条件+转化贡献+组合数首先题目的操作没有什么好的性质,考虑一个经典的trick,将奇数位置上的数字取反,于是题目的操作变成\(01\rightarrow10\)或\(10\rightarrow01\)。这个操作的性质就是序列中\(1\)的总数不变,并且操作可以抽象......
  • Podman能够替代Docker吗
    导读:参考:ExploringPodman:AMoreSecureDockerAlternative作者:MarinBezhanov网址:https://betterstack.com/community/guides/scaling-docker/podman-vs-docker/该随笔为文章部分摘要和学习笔记架构区别Docker属于CS架构(client-server),Podman利用了无守护架构(daemonless......
  • 地址映射
    MMU的相关概念可参考:https://www.cnblogs.com/lethe1203/p/18064515Linux驱动开发在某些情况也会直接操作寄存器 MMU主要完成的功能:1、完成虚拟空间到物理空间的映射2、内存保护,设置存储器的访问权限,设置虚拟存储空间的缓冲特性对于32位的处理器来说,虚拟地址范围为:2^32=4......
  • cookie一致性
    非跨域cookie一致性解决请求拦截器importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttppServletResponse;importorg.springframework.web.servlet.HandlerInterceptor;@ComponentpublicclassCustomIntercepto......