Re: [PATCH 1/2] mtk-vcodec: convert driver to use the new vb2_queue dev field

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 07/11/2016 05:48 AM, tiffany lin wrote:
> 
> reviewed-by: Tiffany Lin <tiffany.lin@xxxxxxxxxxxx>
> 
> 
> May I know why and how we use struct device *alloc_devs[] in queue_setup
> callback function?

That's only needed if the hardware has to allocate each plane buffer from a
different memory bank. That's important for the exynos4 SoCs. All other devices
just need a single device struct which you set in the vb2_queue dev field.

The alloc_devs array is prefilled with that dev pointer and drivers can override
it here is they need to (as mentioned, currently only exynos4 needs that).

Regards,

	Hans

> 
> 
> best regards,
> Tiffany
> 
> On Fri, 2016-07-08 at 21:11 +0200, Hans Verkuil wrote:
>> From: Hans Verkuil <hans.verkuil@xxxxxxxxx>
>>
>> The patch dropping the vb2_dma_contig_init_ctx() and _cleanup_ctx()
>> functions was already applied before this driver was added. So convert
>> this driver as well.
>>
>> Signed-off-by: Hans Verkuil <hans.verkuil@xxxxxxxxx>
>> ---
>>  drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h     |  3 ---
>>  drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c     | 13 ++++++-------
>>  drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c | 12 ------------
>>  3 files changed, 6 insertions(+), 22 deletions(-)
>>
>> diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h
>> index 78eee50..94f0a42 100644
>> --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h
>> +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h
>> @@ -265,8 +265,6 @@ struct mtk_vcodec_ctx {
>>   * @m2m_dev_enc: m2m device for encoder.
>>   * @plat_dev: platform device
>>   * @vpu_plat_dev: mtk vpu platform device
>> - * @alloc_ctx: VB2 allocator context
>> - *	       (for allocations without kernel mapping).
>>   * @ctx_list: list of struct mtk_vcodec_ctx
>>   * @irqlock: protect data access by irq handler and work thread
>>   * @curr_ctx: The context that is waiting for codec hardware
>> @@ -299,7 +297,6 @@ struct mtk_vcodec_dev {
>>  	struct v4l2_m2m_dev *m2m_dev_enc;
>>  	struct platform_device *plat_dev;
>>  	struct platform_device *vpu_plat_dev;
>> -	struct vb2_alloc_ctx *alloc_ctx;
>>  	struct list_head ctx_list;
>>  	spinlock_t irqlock;
>>  	struct mtk_vcodec_ctx *curr_ctx;
>> diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c
>> index 6e72d73..6dcae0a 100644
>> --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c
>> +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c
>> @@ -693,7 +693,8 @@ const struct v4l2_ioctl_ops mtk_venc_ioctl_ops = {
>>  static int vb2ops_venc_queue_setup(struct vb2_queue *vq,
>>  				   unsigned int *nbuffers,
>>  				   unsigned int *nplanes,
>> -				   unsigned int sizes[], void *alloc_ctxs[])
>> +				   unsigned int sizes[],
>> +				   struct device *alloc_devs[])
>>  {
>>  	struct mtk_vcodec_ctx *ctx = vb2_get_drv_priv(vq);
>>  	struct mtk_q_data *q_data;
>> @@ -705,17 +706,13 @@ static int vb2ops_venc_queue_setup(struct vb2_queue *vq,
>>  		return -EINVAL;
>>  
>>  	if (*nplanes) {
>> -		for (i = 0; i < *nplanes; i++) {
>> +		for (i = 0; i < *nplanes; i++)
>>  			if (sizes[i] < q_data->sizeimage[i])
>>  				return -EINVAL;
>> -			alloc_ctxs[i] = ctx->dev->alloc_ctx;
>> -		}
>>  	} else {
>>  		*nplanes = q_data->fmt->num_planes;
>> -		for (i = 0; i < *nplanes; i++) {
>> +		for (i = 0; i < *nplanes; i++)
>>  			sizes[i] = q_data->sizeimage[i];
>> -			alloc_ctxs[i] = ctx->dev->alloc_ctx;
>> -		}
>>  	}
>>  
>>  	return 0;
>> @@ -1249,6 +1246,7 @@ int mtk_vcodec_enc_queue_init(void *priv, struct vb2_queue *src_vq,
>>  	src_vq->mem_ops		= &vb2_dma_contig_memops;
>>  	src_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
>>  	src_vq->lock		= &ctx->dev->dev_mutex;
>> +	src_vq->dev		= &ctx->dev->plat_dev->dev;
>>  
>>  	ret = vb2_queue_init(src_vq);
>>  	if (ret)
>> @@ -1262,6 +1260,7 @@ int mtk_vcodec_enc_queue_init(void *priv, struct vb2_queue *src_vq,
>>  	dst_vq->mem_ops		= &vb2_dma_contig_memops;
>>  	dst_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
>>  	dst_vq->lock		= &ctx->dev->dev_mutex;
>> +	dst_vq->dev		= &ctx->dev->plat_dev->dev;
>>  
>>  	return vb2_queue_init(dst_vq);
>>  }
>> diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c
>> index 06105e9..9c10cc2 100644
>> --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c
>> +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c
>> @@ -357,14 +357,6 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
>>  	dev->vfd_enc = vfd_enc;
>>  	platform_set_drvdata(pdev, dev);
>>  
>> -	dev->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev);
>> -	if (IS_ERR((__force void *)dev->alloc_ctx)) {
>> -		mtk_v4l2_err("Failed to alloc vb2 dma context 0");
>> -		ret = PTR_ERR((__force void *)dev->alloc_ctx);
>> -		dev->alloc_ctx = NULL;
>> -		goto err_vb2_ctx_init;
>> -	}
>> -
>>  	dev->m2m_dev_enc = v4l2_m2m_init(&mtk_venc_m2m_ops);
>>  	if (IS_ERR((__force void *)dev->m2m_dev_enc)) {
>>  		mtk_v4l2_err("Failed to init mem2mem enc device");
>> @@ -401,8 +393,6 @@ err_enc_reg:
>>  err_event_workq:
>>  	v4l2_m2m_release(dev->m2m_dev_enc);
>>  err_enc_mem_init:
>> -	vb2_dma_contig_cleanup_ctx(dev->alloc_ctx);
>> -err_vb2_ctx_init:
>>  	video_unregister_device(vfd_enc);
>>  err_enc_alloc:
>>  	v4l2_device_unregister(&dev->v4l2_dev);
>> @@ -426,8 +416,6 @@ static int mtk_vcodec_enc_remove(struct platform_device *pdev)
>>  	destroy_workqueue(dev->encode_workqueue);
>>  	if (dev->m2m_dev_enc)
>>  		v4l2_m2m_release(dev->m2m_dev_enc);
>> -	if (dev->alloc_ctx)
>> -		vb2_dma_contig_cleanup_ctx(dev->alloc_ctx);
>>  
>>  	if (dev->vfd_enc)
>>  		video_unregister_device(dev->vfd_enc);
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux