[PATCH v2 4/5] v4l: vsp1: Add API to map and unmap DRM buffers through the VSP
Kieran Bingham
kieran.bingham+renesas at ideasonboard.com
Mon May 22 11:52:37 UTC 2017
Hi Laurent,
On 17/05/17 00:20, Laurent Pinchart wrote:
> The display buffers must be mapped for DMA through the device that
> performs memory access. Expose an API to map and unmap memory through
> the VSP device to be used by the DU.
>
> As all the buffers allocated by the DU driver are coherent, we can skip
> cache handling when mapping and unmapping them. This will need to be
> revisited when support for non-coherent buffers will be added to the DU
> driver.
Thankyou for the patch
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas at ideasonboard.com>
With the small nitpick fixed:
Reviewed-by: Kieran Bingham <kieran.bingham+renesas at ideasonboard.com>
> ---
> drivers/media/platform/vsp1/vsp1_drm.c | 25 +++++++++++++++++++++++++
> include/media/vsp1.h | 3 +++
> 2 files changed, 28 insertions(+)
>
> diff --git a/drivers/media/platform/vsp1/vsp1_drm.c b/drivers/media/platform/vsp1/vsp1_drm.c
> index 9d235e830f5a..c809c2aadca0 100644
> --- a/drivers/media/platform/vsp1/vsp1_drm.c
> +++ b/drivers/media/platform/vsp1/vsp1_drm.c
> @@ -12,9 +12,11 @@
> */
>
> #include <linux/device.h>
> +#include <linux/dma-mapping.h>
> #include <linux/slab.h>
>
> #include <media/media-entity.h>
> +#include <media/rcar-fcp.h>
This header isn't used here.
(Presumably it was before you cached the fcp dev as the vsp1->bus_master).
I'll fix this while applying locally. No need to resend.
> #include <media/v4l2-subdev.h>
> #include <media/vsp1.h>
>
> @@ -524,6 +526,29 @@ void vsp1_du_atomic_flush(struct device *dev)
> }
> EXPORT_SYMBOL_GPL(vsp1_du_atomic_flush);
>
> +int vsp1_du_map_sg(struct device *dev, struct sg_table *sgt)
> +{
> + struct vsp1_device *vsp1 = dev_get_drvdata(dev);
> +
> + /*
> + * As all the buffers allocated by the DU driver are coherent, we can
> + * skip cache sync. This will need to be revisited when support for
> + * non-coherent buffers will be added to the DU driver.
> + */
> + return dma_map_sg_attrs(vsp1->bus_master, sgt->sgl, sgt->nents,
> + DMA_TO_DEVICE, DMA_ATTR_SKIP_CPU_SYNC);
> +}
> +EXPORT_SYMBOL_GPL(vsp1_du_map_sg);
> +
> +void vsp1_du_unmap_sg(struct device *dev, struct sg_table *sgt)
> +{
> + struct vsp1_device *vsp1 = dev_get_drvdata(dev);
> +
> + dma_unmap_sg_attrs(vsp1->bus_master, sgt->sgl, sgt->nents,
> + DMA_TO_DEVICE, DMA_ATTR_SKIP_CPU_SYNC);
> +}
> +EXPORT_SYMBOL_GPL(vsp1_du_unmap_sg);
> +
> /* -----------------------------------------------------------------------------
> * Initialization
> */
> diff --git a/include/media/vsp1.h b/include/media/vsp1.h
> index 38aac554dbba..6aa630c9f7af 100644
> --- a/include/media/vsp1.h
> +++ b/include/media/vsp1.h
> @@ -13,6 +13,7 @@
> #ifndef __MEDIA_VSP1_H__
> #define __MEDIA_VSP1_H__
>
> +#include <linux/scatterlist.h>
> #include <linux/types.h>
> #include <linux/videodev2.h>
>
> @@ -46,5 +47,7 @@ void vsp1_du_atomic_begin(struct device *dev);
> int vsp1_du_atomic_update(struct device *dev, unsigned int rpf,
> const struct vsp1_du_atomic_config *cfg);
> void vsp1_du_atomic_flush(struct device *dev);
> +int vsp1_du_map_sg(struct device *dev, struct sg_table *sgt);
> +void vsp1_du_unmap_sg(struct device *dev, struct sg_table *sgt);
>
> #endif /* __MEDIA_VSP1_H__ */
>
More information about the dri-devel
mailing list