On (22/05/31 17:10), Justin Green wrote: > Set allow_cache_hints to 1 for the vb2_queue source and destination queues > in the mediatek vcodec V4L2 driver. This allows us to allocate buffers > with the V4L2_MEMORY_FLAG_NON_COHERENT set. On Mediatek SoCs, this enables > caching for this memory, which vastly improves performance when being read > from CPU. Read performance for these buffers is in turn important for > detiling MM21 video frames in software. > > This change should be safe from race conditions since videobuf2 already > invalidates or flushes the appropriate cache lines in its prepare() and > finish() methods. > > Tested on a MT8183 SoC. Resulted in both correct detiling and a 10X > speedup. Hi Justin, It seems that something has happened to tabs and code formatting, could you double check and resend? > @@ -929,30 +929,32 @@ int mtk_vcodec_dec_queue_init(void *priv, struct > vb2_queue *src_vq, > > mtk_v4l2_debug(3, "[%d]", ctx->id); > > - src_vq->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; > - src_vq->io_modes = VB2_DMABUF | VB2_MMAP; > - src_vq->drv_priv = ctx; > - src_vq->buf_struct_size = sizeof(struct mtk_video_dec_buf); > - src_vq->ops = ctx->dev->vdec_pdata->vdec_vb2_ops; > - 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; > + src_vq->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; > + src_vq->io_modes = VB2_DMABUF | VB2_MMAP; > + src_vq->drv_priv = ctx; > + src_vq->buf_struct_size = sizeof(struct mtk_video_dec_buf); > + src_vq->ops = ctx->dev->vdec_pdata->vdec_vb2_ops; > + 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; > + src_vq->allow_cache_hints = 1; I guess it should look something like this - src_vq->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; - src_vq->io_modes = VB2_DMABUF | VB2_MMAP; - src_vq->drv_priv = ctx; - src_vq->buf_struct_size = sizeof(struct mtk_video_dec_buf); - src_vq->ops = ctx->dev->vdec_pdata->vdec_vb2_ops; - 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; + src_vq->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; + src_vq->io_modes = VB2_DMABUF | VB2_MMAP; + src_vq->drv_priv = ctx; + src_vq->buf_struct_size = sizeof(struct mtk_video_dec_buf); + src_vq->ops = ctx->dev->vdec_pdata->vdec_vb2_ops; + 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; + src_vq->allow_cache_hints = 1;