您尚未登录。

楼主 # 2024-10-21 07:56:03

LB_YJY
会员
注册时间: 2024-08-01
已发帖子: 5
积分: 35

这个函数我我如何调用?csi_dcache_clean_invalid_range()

原厂和技术大佬们:
        我看了网上的一些说明,和代码的一些注释,对该函数一知半解,关于csi_dcache_clean_invalid_range((phy_addr_t)(ptr_t)addr, size)
文件路径 bsp\artinchip\sys\d21x\include\core_rv64.h 我想知道是在什么时间来调用此函数,不调用会有问题吗?
开发包里很多使用对齐大容量内存时,都调用了该函数,厂家能讲讲吗?

离线

#1 2024-10-22 09:01:57

AICxia
会员
注册时间: 2024-08-12
已发帖子: 15
积分: 135

Re: 这个函数我我如何调用?csi_dcache_clean_invalid_range()

CPU 和 DMA 设备之间的交互需要手工操作 Cache,例如:
发送方向:CPU 写数据到内存,为了确保数据全部写入到了内存需要 Clean Cache(只会 Clean 有过写操作的 Cache, Dirty 置位),然后才能启动 DMA 设备从内存读数据。
接收方向:DMA 设备写入数据到内存,为了确保 CPU 能读到最新的数据需要先 Invalid Cache (清除所有已加载的 Cache, Valid 置位),然后才能启动 CPU 从内存读数据。

csi_dcache_clean_invalid_range()  =  Clean Cache + Invalid Cache,这个操作的主要目的是用于数据方向不明确的情况下的一个 Cache 同步动作。但是通常也可以当成 Clean Cache 操作来使用。

另外 Cache 的基本操作单位为 CacheLine,我们 64bit CPU 的 CacheLine 为 64 字节, 32bit CPU 的 CacheLine 为 32 字节。在操作 Cache 时起始地址和长度都必须 CacheLine 对齐。

Cache 参考文档:
https://cloud.tencent.com.cn/developer/article/2315608

离线

楼主 #2 2024-10-23 07:42:24

LB_YJY
会员
注册时间: 2024-08-01
已发帖子: 5
积分: 35

Re: 这个函数我我如何调用?csi_dcache_clean_invalid_range()

非常感谢!您的支持是我最大的动力!

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn