Commit 712b617e authored by Marek Szyprowski's avatar Marek Szyprowski Committed by Sylwester Nawrocki

media: set proper max seg size for devices on Exynos SoCs

All multimedia devices found on Exynos SoCs support only contiguous
buffers, so set DMA max segment size to DMA_BIT_MASK(32) to let memory
allocator to correctly create contiguous memory mappings.
Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
parent 3f033969
...@@ -1124,6 +1124,7 @@ static int gsc_probe(struct platform_device *pdev) ...@@ -1124,6 +1124,7 @@ static int gsc_probe(struct platform_device *pdev)
goto err_m2m; goto err_m2m;
/* Initialize continious memory allocator */ /* Initialize continious memory allocator */
vb2_dma_contig_set_max_seg_size(dev, DMA_BIT_MASK(32));
gsc->alloc_ctx = vb2_dma_contig_init_ctx(dev); gsc->alloc_ctx = vb2_dma_contig_init_ctx(dev);
if (IS_ERR(gsc->alloc_ctx)) { if (IS_ERR(gsc->alloc_ctx)) {
ret = PTR_ERR(gsc->alloc_ctx); ret = PTR_ERR(gsc->alloc_ctx);
...@@ -1153,6 +1154,7 @@ static int gsc_remove(struct platform_device *pdev) ...@@ -1153,6 +1154,7 @@ static int gsc_remove(struct platform_device *pdev)
v4l2_device_unregister(&gsc->v4l2_dev); v4l2_device_unregister(&gsc->v4l2_dev);
vb2_dma_contig_cleanup_ctx(gsc->alloc_ctx); vb2_dma_contig_cleanup_ctx(gsc->alloc_ctx);
vb2_dma_contig_clear_max_seg_size(&pdev->dev);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
gsc_clk_put(gsc); gsc_clk_put(gsc);
......
...@@ -1019,6 +1019,7 @@ static int fimc_probe(struct platform_device *pdev) ...@@ -1019,6 +1019,7 @@ static int fimc_probe(struct platform_device *pdev)
} }
/* Initialize contiguous memory allocator */ /* Initialize contiguous memory allocator */
vb2_dma_contig_set_max_seg_size(dev, DMA_BIT_MASK(32));
fimc->alloc_ctx = vb2_dma_contig_init_ctx(dev); fimc->alloc_ctx = vb2_dma_contig_init_ctx(dev);
if (IS_ERR(fimc->alloc_ctx)) { if (IS_ERR(fimc->alloc_ctx)) {
ret = PTR_ERR(fimc->alloc_ctx); ret = PTR_ERR(fimc->alloc_ctx);
...@@ -1124,6 +1125,7 @@ static int fimc_remove(struct platform_device *pdev) ...@@ -1124,6 +1125,7 @@ static int fimc_remove(struct platform_device *pdev)
fimc_unregister_capture_subdev(fimc); fimc_unregister_capture_subdev(fimc);
vb2_dma_contig_cleanup_ctx(fimc->alloc_ctx); vb2_dma_contig_cleanup_ctx(fimc->alloc_ctx);
vb2_dma_contig_clear_max_seg_size(&pdev->dev);
clk_disable(fimc->clock[CLK_BUS]); clk_disable(fimc->clock[CLK_BUS]);
fimc_clk_put(fimc); fimc_clk_put(fimc);
......
...@@ -847,6 +847,7 @@ static int fimc_is_probe(struct platform_device *pdev) ...@@ -847,6 +847,7 @@ static int fimc_is_probe(struct platform_device *pdev)
if (ret < 0) if (ret < 0)
goto err_pm; goto err_pm;
vb2_dma_contig_set_max_seg_size(dev, DMA_BIT_MASK(32));
is->alloc_ctx = vb2_dma_contig_init_ctx(dev); is->alloc_ctx = vb2_dma_contig_init_ctx(dev);
if (IS_ERR(is->alloc_ctx)) { if (IS_ERR(is->alloc_ctx)) {
ret = PTR_ERR(is->alloc_ctx); ret = PTR_ERR(is->alloc_ctx);
...@@ -940,6 +941,7 @@ static int fimc_is_remove(struct platform_device *pdev) ...@@ -940,6 +941,7 @@ static int fimc_is_remove(struct platform_device *pdev)
free_irq(is->irq, is); free_irq(is->irq, is);
fimc_is_unregister_subdevs(is); fimc_is_unregister_subdevs(is);
vb2_dma_contig_cleanup_ctx(is->alloc_ctx); vb2_dma_contig_cleanup_ctx(is->alloc_ctx);
vb2_dma_contig_clear_max_seg_size(dev);
fimc_is_put_clocks(is); fimc_is_put_clocks(is);
fimc_is_debugfs_remove(is); fimc_is_debugfs_remove(is);
release_firmware(is->fw.f_w); release_firmware(is->fw.f_w);
......
...@@ -1551,6 +1551,7 @@ static int fimc_lite_probe(struct platform_device *pdev) ...@@ -1551,6 +1551,7 @@ static int fimc_lite_probe(struct platform_device *pdev)
goto err_sd; goto err_sd;
} }
vb2_dma_contig_set_max_seg_size(dev, DMA_BIT_MASK(32));
fimc->alloc_ctx = vb2_dma_contig_init_ctx(dev); fimc->alloc_ctx = vb2_dma_contig_init_ctx(dev);
if (IS_ERR(fimc->alloc_ctx)) { if (IS_ERR(fimc->alloc_ctx)) {
ret = PTR_ERR(fimc->alloc_ctx); ret = PTR_ERR(fimc->alloc_ctx);
...@@ -1652,6 +1653,7 @@ static int fimc_lite_remove(struct platform_device *pdev) ...@@ -1652,6 +1653,7 @@ static int fimc_lite_remove(struct platform_device *pdev)
pm_runtime_set_suspended(dev); pm_runtime_set_suspended(dev);
fimc_lite_unregister_capture_subdev(fimc); fimc_lite_unregister_capture_subdev(fimc);
vb2_dma_contig_cleanup_ctx(fimc->alloc_ctx); vb2_dma_contig_cleanup_ctx(fimc->alloc_ctx);
vb2_dma_contig_clear_max_seg_size(dev);
fimc_lite_clk_put(fimc); fimc_lite_clk_put(fimc);
dev_info(dev, "Driver unloaded\n"); dev_info(dev, "Driver unloaded\n");
......
...@@ -681,6 +681,7 @@ static int g2d_probe(struct platform_device *pdev) ...@@ -681,6 +681,7 @@ static int g2d_probe(struct platform_device *pdev)
goto put_clk_gate; goto put_clk_gate;
} }
vb2_dma_contig_set_max_seg_size(&pdev->dev, DMA_BIT_MASK(32));
dev->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev); dev->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev);
if (IS_ERR(dev->alloc_ctx)) { if (IS_ERR(dev->alloc_ctx)) {
ret = PTR_ERR(dev->alloc_ctx); ret = PTR_ERR(dev->alloc_ctx);
...@@ -757,6 +758,7 @@ static int g2d_remove(struct platform_device *pdev) ...@@ -757,6 +758,7 @@ static int g2d_remove(struct platform_device *pdev)
video_unregister_device(dev->vfd); video_unregister_device(dev->vfd);
v4l2_device_unregister(&dev->v4l2_dev); v4l2_device_unregister(&dev->v4l2_dev);
vb2_dma_contig_cleanup_ctx(dev->alloc_ctx); vb2_dma_contig_cleanup_ctx(dev->alloc_ctx);
vb2_dma_contig_clear_max_seg_size(&pdev->dev);
clk_unprepare(dev->gate); clk_unprepare(dev->gate);
clk_put(dev->gate); clk_put(dev->gate);
clk_unprepare(dev->clk); clk_unprepare(dev->clk);
......
...@@ -2843,6 +2843,7 @@ static int s5p_jpeg_probe(struct platform_device *pdev) ...@@ -2843,6 +2843,7 @@ static int s5p_jpeg_probe(struct platform_device *pdev)
goto device_register_rollback; goto device_register_rollback;
} }
vb2_dma_contig_set_max_seg_size(&pdev->dev, DMA_BIT_MASK(32));
jpeg->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev); jpeg->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev);
if (IS_ERR(jpeg->alloc_ctx)) { if (IS_ERR(jpeg->alloc_ctx)) {
v4l2_err(&jpeg->v4l2_dev, "Failed to init memory allocator\n"); v4l2_err(&jpeg->v4l2_dev, "Failed to init memory allocator\n");
...@@ -2942,6 +2943,7 @@ static int s5p_jpeg_remove(struct platform_device *pdev) ...@@ -2942,6 +2943,7 @@ static int s5p_jpeg_remove(struct platform_device *pdev)
video_unregister_device(jpeg->vfd_decoder); video_unregister_device(jpeg->vfd_decoder);
video_unregister_device(jpeg->vfd_encoder); video_unregister_device(jpeg->vfd_encoder);
vb2_dma_contig_cleanup_ctx(jpeg->alloc_ctx); vb2_dma_contig_cleanup_ctx(jpeg->alloc_ctx);
vb2_dma_contig_clear_max_seg_size(&pdev->dev);
v4l2_m2m_release(jpeg->m2m_dev); v4l2_m2m_release(jpeg->m2m_dev);
v4l2_device_unregister(&jpeg->v4l2_dev); v4l2_device_unregister(&jpeg->v4l2_dev);
......
...@@ -1175,11 +1175,13 @@ static int s5p_mfc_probe(struct platform_device *pdev) ...@@ -1175,11 +1175,13 @@ static int s5p_mfc_probe(struct platform_device *pdev)
} }
} }
vb2_dma_contig_set_max_seg_size(dev->mem_dev_l, DMA_BIT_MASK(32));
dev->alloc_ctx[0] = vb2_dma_contig_init_ctx(dev->mem_dev_l); dev->alloc_ctx[0] = vb2_dma_contig_init_ctx(dev->mem_dev_l);
if (IS_ERR(dev->alloc_ctx[0])) { if (IS_ERR(dev->alloc_ctx[0])) {
ret = PTR_ERR(dev->alloc_ctx[0]); ret = PTR_ERR(dev->alloc_ctx[0]);
goto err_res; goto err_res;
} }
vb2_dma_contig_set_max_seg_size(dev->mem_dev_r, DMA_BIT_MASK(32));
dev->alloc_ctx[1] = vb2_dma_contig_init_ctx(dev->mem_dev_r); dev->alloc_ctx[1] = vb2_dma_contig_init_ctx(dev->mem_dev_r);
if (IS_ERR(dev->alloc_ctx[1])) { if (IS_ERR(dev->alloc_ctx[1])) {
ret = PTR_ERR(dev->alloc_ctx[1]); ret = PTR_ERR(dev->alloc_ctx[1]);
...@@ -1307,6 +1309,8 @@ static int s5p_mfc_remove(struct platform_device *pdev) ...@@ -1307,6 +1309,8 @@ static int s5p_mfc_remove(struct platform_device *pdev)
s5p_mfc_release_firmware(dev); s5p_mfc_release_firmware(dev);
vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[0]); vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[0]);
vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[1]); vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[1]);
vb2_dma_contig_clear_max_seg_size(dev->mem_dev_l);
vb2_dma_contig_clear_max_seg_size(dev->mem_dev_r);
if (pdev->dev.of_node) { if (pdev->dev.of_node) {
put_device(dev->mem_dev_l); put_device(dev->mem_dev_l);
put_device(dev->mem_dev_r); put_device(dev->mem_dev_r);
......
...@@ -80,6 +80,7 @@ int mxr_acquire_video(struct mxr_device *mdev, ...@@ -80,6 +80,7 @@ int mxr_acquire_video(struct mxr_device *mdev,
goto fail; goto fail;
} }
vb2_dma_contig_set_max_seg_size(mdev->dev, DMA_BIT_MASK(32));
mdev->alloc_ctx = vb2_dma_contig_init_ctx(mdev->dev); mdev->alloc_ctx = vb2_dma_contig_init_ctx(mdev->dev);
if (IS_ERR(mdev->alloc_ctx)) { if (IS_ERR(mdev->alloc_ctx)) {
mxr_err(mdev, "could not acquire vb2 allocator\n"); mxr_err(mdev, "could not acquire vb2 allocator\n");
...@@ -152,6 +153,7 @@ void mxr_release_video(struct mxr_device *mdev) ...@@ -152,6 +153,7 @@ void mxr_release_video(struct mxr_device *mdev)
kfree(mdev->output[i]); kfree(mdev->output[i]);
vb2_dma_contig_cleanup_ctx(mdev->alloc_ctx); vb2_dma_contig_cleanup_ctx(mdev->alloc_ctx);
vb2_dma_contig_clear_max_seg_size(mdev->dev);
v4l2_device_unregister(&mdev->v4l2_dev); v4l2_device_unregister(&mdev->v4l2_dev);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment