Since rga is a dma-coherent device, we have to use drm bus
device to call sync api.
Change-Id: Ia12062293fabba083c8ab9c4f7457e3167807bb9
Signed-off-by: Jacob Chen <jacob2.chen@rock-chips.com>
-static void rga_dma_flush_range(void *ptr, int size)
-{
-#ifdef CONFIG_ARM
- dmac_flush_range(ptr, ptr + size);
- outer_flush_range(virt_to_phys(ptr), virt_to_phys(ptr + size));
-#elif defined CONFIG_ARM64
- __dma_flush_range(ptr, ptr + size);
-#endif
-}
-
static inline void rga_write(struct rockchip_rga *rga, u32 reg, u32 value)
{
writel(value, rga->regs + reg);
static inline void rga_write(struct rockchip_rga *rga, u32 reg, u32 value)
{
writel(value, rga->regs + reg);
dest[reg >> 2] = mmu_ctrl;
}
dest[reg >> 2] = mmu_ctrl;
}
- rga_dma_flush_range(cmdlist_pool_virt, cmdlist_cnt * RGA_CMDLIST_SIZE);
+ dma_sync_single_for_device(runqueue->drm_dev->dev,
+ virt_to_phys(cmdlist_pool_virt),
+ PAGE_SIZE, DMA_TO_DEVICE);
runqueue->cmdlist_dma_attrs = cmdlist_dma_attrs;
runqueue->cmdlist_pool_virt = cmdlist_pool_virt;
runqueue->cmdlist_dma_attrs = cmdlist_dma_attrs;
runqueue->cmdlist_pool_virt = cmdlist_pool_virt;
- rga_dma_flush_range(pages, 32 * 1024);
+ dma_sync_single_for_device(rga->drm_dev->dev, virt_to_phys(pages),
+ 8 * PAGE_SIZE, DMA_TO_DEVICE);
+ runqueue->drm_dev = drm_dev;
runqueue->dev = rga->dev;
init_completion(&runqueue->complete);
runqueue->dev = rga->dev;
init_completion(&runqueue->complete);
{
struct rockchip_drm_file_private *file_priv = file->driver_priv;
struct rockchip_drm_rga_private *rga_priv;
{
struct rockchip_drm_file_private *file_priv = file->driver_priv;
struct rockchip_drm_rga_private *rga_priv;
+ struct rockchip_rga *rga;
+
+ rga = dev_get_drvdata(dev);
+ rga->drm_dev = drm_dev;
rga_priv = kzalloc(sizeof(*rga_priv), GFP_KERNEL);
if (!rga_priv)
rga_priv = kzalloc(sizeof(*rga_priv), GFP_KERNEL);
if (!rga_priv)
struct rga_runqueue_node {
struct list_head list;
struct rga_runqueue_node {
struct list_head list;
+ struct drm_device *drm_dev;
struct device *dev;
pid_t pid;
struct drm_file *file;
struct device *dev;
pid_t pid;
struct drm_file *file;