Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 84ac0f09 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab
Browse files

[media] omap3isp: stat: Store sg table in ispstat_buffer



The driver stores the IOMMU mapped iovm struct pointer in the buffer
structure but only needs the iovm sg table. Store the sg table instead
to prepare the migration to the DMA API.

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: default avatarSakari Ailus <sakari.ailus@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent cbde9e9d
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -183,8 +183,8 @@ static void isp_stat_buf_sync_for_device(struct ispstat *stat,
	if (ISP_STAT_USES_DMAENGINE(stat))
		return;

	dma_sync_sg_for_device(stat->isp->dev, buf->iovm->sgt->sgl,
			       buf->iovm->sgt->nents, DMA_FROM_DEVICE);
	dma_sync_sg_for_device(stat->isp->dev, buf->sgt->sgl,
			       buf->sgt->nents, DMA_FROM_DEVICE);
}

static void isp_stat_buf_sync_for_cpu(struct ispstat *stat,
@@ -193,8 +193,8 @@ static void isp_stat_buf_sync_for_cpu(struct ispstat *stat,
	if (ISP_STAT_USES_DMAENGINE(stat))
		return;

	dma_sync_sg_for_cpu(stat->isp->dev, buf->iovm->sgt->sgl,
			    buf->iovm->sgt->nents, DMA_FROM_DEVICE);
	dma_sync_sg_for_cpu(stat->isp->dev, buf->sgt->sgl,
			    buf->sgt->nents, DMA_FROM_DEVICE);
}

static void isp_stat_buf_clear(struct ispstat *stat)
@@ -363,10 +363,9 @@ static void isp_stat_bufs_free(struct ispstat *stat)
		if (!ISP_STAT_USES_DMAENGINE(stat)) {
			if (IS_ERR_OR_NULL((void *)buf->dma_addr))
				continue;
			if (buf->iovm)
				dma_unmap_sg(isp->dev, buf->iovm->sgt->sgl,
					     buf->iovm->sgt->nents,
					     DMA_FROM_DEVICE);
			if (buf->sgt)
				dma_unmap_sg(isp->dev, buf->sgt->sgl,
					     buf->sgt->nents, DMA_FROM_DEVICE);
			omap_iommu_vfree(isp->domain, isp->dev, buf->dma_addr);
		} else {
			if (!buf->virt_addr)
@@ -374,7 +373,7 @@ static void isp_stat_bufs_free(struct ispstat *stat)
			dma_free_coherent(stat->isp->dev, stat->buf_alloc_size,
					  buf->virt_addr, buf->dma_addr);
		}
		buf->iovm = NULL;
		buf->sgt = NULL;
		buf->dma_addr = 0;
		buf->virt_addr = NULL;
		buf->empty = 1;
@@ -407,7 +406,7 @@ static int isp_stat_bufs_alloc_iommu(struct ispstat *stat,
			DMA_FROM_DEVICE))
		return -ENOMEM;

	buf->iovm = iovm;
	buf->sgt = iovm->sgt;
	buf->virt_addr = omap_da_to_va(stat->isp->dev, buf->dma_addr);

	return 0;
+1 −1
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@
struct ispstat;

struct ispstat_buffer {
	struct iovm_struct *iovm;
	const struct sg_table *sgt;
	void *virt_addr;
	dma_addr_t dma_addr;
	struct timespec ts;