Skip to content

Commit a9d5350

Browse files
Li Huangrkhuangtao
authored andcommitted
video/rockchip: rga2: Use dma_sync_single_for_device to flush cache
Signed-off-by: Li Huang <putin.li@rock-chips.com> Change-Id: I551ce3bc8b8440d9a8681981a19b61bb541be30c
1 parent 1ab3415 commit a9d5350

4 files changed

Lines changed: 27 additions & 56 deletions

File tree

drivers/video/rockchip/rga2/RGA2_API.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,31 @@
22
#ifndef __RGA_API_H__
33
#define __RGA_API_H__
44

5+
#include <linux/miscdevice.h>
6+
#include <linux/wakelock.h>
7+
58
#include "rga2_reg_info.h"
69
#include "rga2.h"
710

11+
struct rga2_drvdata_t {
12+
struct miscdevice miscdev;
13+
struct device *dev;
14+
void *rga_base;
15+
int irq;
16+
17+
struct delayed_work power_off_work;
18+
struct wake_lock wake_lock;
19+
void (*rga_irq_callback)(int rga_retval);
20+
21+
struct clk *aclk_rga2;
22+
struct clk *hclk_rga2;
23+
struct clk *pd_rga2;
24+
struct clk *clk_rga2;
25+
26+
struct ion_client *ion_client;
27+
char version[16];
28+
};
29+
830
#define ENABLE 1
931
#define DISABLE 0
1032

drivers/video/rockchip/rga2/rga2_drv.c

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -91,25 +91,6 @@ int RGA2_INT_FLAG;
9191
rga2_session rga2_session_global;
9292
long (*rga2_ioctl_kernel_p)(struct rga_req *);
9393

94-
struct rga2_drvdata_t {
95-
struct miscdevice miscdev;
96-
struct device *dev;
97-
void *rga_base;
98-
int irq;
99-
100-
struct delayed_work power_off_work;
101-
struct wake_lock wake_lock;
102-
void (*rga_irq_callback)(int rga_retval);
103-
104-
struct clk *aclk_rga2;
105-
struct clk *hclk_rga2;
106-
struct clk *pd_rga2;
107-
struct clk *clk_rga2;
108-
109-
struct ion_client * ion_client;
110-
char version[16];
111-
};
112-
11394
struct rga2_drvdata_t *rga2_drvdata;
11495
struct rga2_service_info rga2_service;
11596
struct rga2_mmu_buf_t rga2_mmu_buf;

drivers/video/rockchip/rga2/rga2_mmu_info.c

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -40,51 +40,16 @@ extern struct rga2_mmu_buf_t rga2_mmu_buf;
4040

4141
void rga2_dma_flush_range(void *pstart, void *pend)
4242
{
43-
#ifdef CONFIG_ARM
44-
dmac_flush_range(pstart, pend);
45-
outer_flush_range(virt_to_phys(pstart), virt_to_phys(pend));
46-
#elif defined(CONFIG_ARM64)
47-
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)
48-
__dma_flush_area(pstart, pend - pstart);
49-
#else
50-
__dma_flush_range(pstart, pend);
51-
#endif
52-
#endif
43+
dma_sync_single_for_device(rga2_drvdata->dev, virt_to_phys(pstart), pend - pstart, DMA_TO_DEVICE);
5344
}
5445

5546
static void rga2_dma_flush_page(struct page *page)
5647
{
5748
phys_addr_t paddr;
58-
void *virt;
5949

6050
paddr = page_to_phys(page);
61-
#ifdef CONFIG_ARM
62-
if (PageHighMem(page)) {
63-
#ifdef CONFIG_HIGHMEM
64-
if (cache_is_vipt_nonaliasing()) {
65-
virt = kmap_atomic(page);
66-
dmac_flush_range(virt, virt + PAGE_SIZE);
67-
kunmap_atomic(virt);
68-
} else {
69-
virt = kmap_high_get(page);
70-
dmac_flush_range(virt, virt + PAGE_SIZE);
71-
kunmap_high(page);
72-
}
73-
#endif
74-
} else {
75-
virt = page_address(page);
76-
dmac_flush_range(virt, virt + PAGE_SIZE);
77-
}
7851

79-
outer_flush_range(paddr, paddr + PAGE_SIZE);
80-
#elif defined(CONFIG_ARM64)
81-
virt = page_address(page);
82-
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)
83-
__dma_flush_area(virt, PAGE_SIZE);
84-
#else
85-
__dma_flush_range(virt, virt + PAGE_SIZE);
86-
#endif
87-
#endif
52+
dma_sync_single_for_device(rga2_drvdata->dev, paddr, PAGE_SIZE, DMA_TO_DEVICE);
8853
}
8954

9055
#if 0
@@ -620,6 +585,7 @@ static int rga2_mmu_info_BitBlt_mode(struct rga2_reg *reg, struct rga2_req *req)
620585
(rga2_mmu_buf.front & (rga2_mmu_buf.size - 1));
621586
MMU_Base_phys = rga2_mmu_buf.buf +
622587
(rga2_mmu_buf.front & (rga2_mmu_buf.size - 1));
588+
623589
mutex_unlock(&rga2_service.lock);
624590
if (Src0MemSize) {
625591
if (req->sg_src0) {

drivers/video/rockchip/rga2/rga2_mmu_info.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#define __RGA_MMU_INFO_H__
44

55
#include "rga2.h"
6+
#include "RGA2_API.h"
67

78
#ifndef MIN
89
#define MIN(X, Y) ((X)<(Y)?(X):(Y))
@@ -12,6 +13,7 @@
1213
#define MAX(X, Y) ((X)>(Y)?(X):(Y))
1314
#endif
1415

16+
extern struct rga2_drvdata_t *rga2_drvdata;
1517

1618
int rga2_set_mmu_info(struct rga2_reg *reg, struct rga2_req *req);
1719
void rga2_dma_flush_range(void *pstart, void *pend);

0 commit comments

Comments
 (0)