From 565f193b8a2fd6c844c994ca5e0db9929fd90276 Mon Sep 17 00:00:00 2001 From: "keke.li" Date: Wed, 26 Sep 2018 13:51:54 +0800 Subject: [PATCH] gdc: Sync the gdc dma buffer PD#173042: gdc: Sync the gdc dma buffer Change-Id: Id4f70c2379ab82519e3b3eeb780f8db17b4deeaf Signed-off-by: Keke Li --- drivers/amlogic/media/gdc/app/gdc_module.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/drivers/amlogic/media/gdc/app/gdc_module.c b/drivers/amlogic/media/gdc/app/gdc_module.c index 7e6fe1b..7e9ad5f 100644 --- a/drivers/amlogic/media/gdc/app/gdc_module.c +++ b/drivers/amlogic/media/gdc/app/gdc_module.c @@ -249,6 +249,30 @@ static long meson_gdc_set_input_addr(uint32_t start_addr, return 0; } +static void meson_gdc_dma_flush(struct device *dev, + dma_addr_t addr, + size_t size) +{ + if (dev == NULL) { + LOG(LOG_ERR, "Error input param"); + return; + } + + dma_sync_single_for_device(dev, addr, size, DMA_TO_DEVICE); +} + +static void meson_gdc_cache_flush(struct device *dev, + dma_addr_t addr, + size_t size) +{ + if (dev == NULL) { + LOG(LOG_ERR, "Error input param"); + return; + } + + dma_sync_single_for_cpu(dev, addr, size, DMA_FROM_DEVICE); +} + static long meson_gdc_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { @@ -346,6 +370,10 @@ static long meson_gdc_ioctl(struct file *file, unsigned int cmd, gs->fh = fh; mutex_lock(&fh->gdev->d_mutext); + meson_gdc_dma_flush(&fh->gdev->pdev->dev, + fh->i_paddr, fh->i_len); + meson_gdc_dma_flush(&fh->gdev->pdev->dev, + fh->c_paddr, fh->c_len); ret = gdc_run(gs); if (ret < 0) LOG(LOG_ERR, "gdc process failed ret = %ld\n", ret); @@ -356,6 +384,8 @@ static long meson_gdc_ioctl(struct file *file, unsigned int cmd, LOG(LOG_ERR, "gdc timeout\n"); gdc_stop(gs); + meson_gdc_cache_flush(&fh->gdev->pdev->dev, + fh->o_paddr, fh->o_len); mutex_unlock(&fh->gdev->d_mutext); break; case GDC_REQUEST_BUFF: -- 2.7.4