소스 검색

soft_3rdpart: wave511: use dma_sync_single_for_cpu for flush cache

use linux standard-APIs to maintain cache consistency

Signed-off-by: Samin Guo <samin.guo@starfivetech.com>
Samin Guo 11 달 전
부모
커밋
eaf3d5e8ab
1개의 변경된 파일11개의 추가작업 그리고 6개의 파일을 삭제
  1. 11 6
      wave511/code/vdi/linux/driver/vdec.c

+ 11 - 6
wave511/code/vdi/linux/driver/vdec.c

@@ -50,11 +50,12 @@
 #include <linux/kthread.h>
 #include <linux/reset.h>
 #include <asm/io.h>
-#include <soc/sifive/sifive_l2_cache.h>
 #include "../../../vpuapi/vpuconfig.h"
 
 #include "vpu.h"
 
+extern void sifive_ccache_flush_range(phys_addr_t start, size_t len);
+
 //#define ENABLE_DEBUG_MSG
 #ifdef ENABLE_DEBUG_MSG
 #define DPRINTK(args...)        printk(KERN_INFO args);
@@ -87,11 +88,6 @@
 /* if this driver knows the dedicated video memory address */
 //#define VPU_SUPPORT_RESERVED_VIDEO_MEMORY
 
-static void starfive_flush_dcache(unsigned long start, unsigned long len)
-{
-	sifive_l2_flush64_range(start, len);
-}
-
 #define VPU_PLATFORM_DEVICE_NAME "vdec"
 #define VPU_CLK_NAME "vcodec"
 #define VPU_DEV_NAME "vdec"
@@ -476,6 +472,15 @@ static int vpu_freq_init(struct device *dev)
 
 #endif
 
+static void starfive_flush_dcache(phys_addr_t start, size_t len)
+{
+#ifdef ARCH_HAS_SYNC_DMA_FOR_CPU
+	dma_sync_single_for_cpu(vpu_dev, start, len, DMA_FROM_DEVICE);
+#else
+	sifive_ccache_flush_range(start, len);
+#endif
+}
+
 static int vpu_alloc_dma_buffer(vpudrv_buffer_t *vb)
 {
     if (!vb)