OMAP3 ISP: Set DMA segment size

Message ID 1426719343-13027-1-git-send-email-tim.nordell@logicpd.com (mailing list archive)
State Superseded, archived
Delegated to: Laurent Pinchart
Headers

Commit Message

Tim Nordell March 18, 2015, 10:55 p.m. UTC
  When utilizing userptr buffers for output from the CCDC, the
DMA subsystem maps buffers into the virtual address space.
However, the DMA subsystem also has a configurable parameter
for what the largest segment to allocate is out of the virtual
address space as well.

Since we need contiguous buffers for the memory space from the
OMAP3 ISP's vantage point, we need to configure the segments
to be at least as large as the largest buffer we expect.

Signed-off-by: Tim Nordell <tim.nordell@logicpd.com>
---
 drivers/media/platform/omap3isp/isp.c | 8 ++++++++
 1 file changed, 8 insertions(+)
  

Patch

diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c
index ead2d0d..ab95fd1 100644
--- a/drivers/media/platform/omap3isp/isp.c
+++ b/drivers/media/platform/omap3isp/isp.c
@@ -2170,6 +2170,14 @@  static int isp_attach_iommu(struct isp_device *isp)
 		goto error;
 	}
 
+	isp->dev->dma_parms = devm_kzalloc(isp->dev,
+		sizeof(*isp->dev->dma_parms), GFP_KERNEL);
+	ret = dma_set_max_seg_size(isp->dev, SZ_32M);
+	if (ret < 0) {
+		dev_err(isp->dev, "failed to set max segment size for dma\n");
+		goto error;
+	}
+
 	return 0;
 
 error: