media: hantro: Simplify buffer helpers
authorEzequiel Garcia <ezequiel@collabora.com>
Tue, 3 Sep 2019 18:17:09 +0000 (15:17 -0300)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Tue, 1 Oct 2019 20:01:56 +0000 (17:01 -0300)
Modify hantro_get_ref() and hantro_h264_get_ref_buf() helpers
to return the buffer DMA address, this makes the code simpler
and at the same time will allow easier enablement of the
post-processing feature.

Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/staging/media/hantro/hantro.h
drivers/staging/media/hantro/hantro_drv.c
drivers/staging/media/hantro/hantro_g1_h264_dec.c
drivers/staging/media/hantro/hantro_g1_mpeg2_dec.c
drivers/staging/media/hantro/hantro_g1_vp8_dec.c
drivers/staging/media/hantro/hantro_h264.c
drivers/staging/media/hantro/hantro_hw.h
drivers/staging/media/hantro/rk3399_vpu_hw_mpeg2_dec.c
drivers/staging/media/hantro/rk3399_vpu_hw_vp8_dec.c

index c151133b8c86fcdf7447c2fc723c1558dcb38dc2..deb90ae37859a6a362d6f245758f83c63cca7bb6 100644 (file)
@@ -367,7 +367,7 @@ static inline void hantro_reg_write(struct hantro_dev *vpu,
 bool hantro_is_encoder_ctx(const struct hantro_ctx *ctx);
 
 void *hantro_get_ctrl(struct hantro_ctx *ctx, u32 id);
-dma_addr_t hantro_get_ref(struct vb2_queue *q, u64 ts);
+dma_addr_t hantro_get_ref(struct hantro_ctx *ctx, u64 ts);
 
 static inline struct vb2_v4l2_buffer *
 hantro_get_src_buf(struct hantro_ctx *ctx)
index 23569299977b40e8cf20b3d898e38c09378ee21e..26108c96b674bfbdce793f606670150b43b9818a 100644 (file)
@@ -43,8 +43,9 @@ void *hantro_get_ctrl(struct hantro_ctx *ctx, u32 id)
        return ctrl ? ctrl->p_cur.p : NULL;
 }
 
-dma_addr_t hantro_get_ref(struct vb2_queue *q, u64 ts)
+dma_addr_t hantro_get_ref(struct hantro_ctx *ctx, u64 ts)
 {
+       struct vb2_queue *q = v4l2_m2m_get_dst_vq(ctx->fh.m2m_ctx);
        struct vb2_buffer *buf;
        int index;
 
index d42c4004fe35f0cc5212dd93172d6f9cf9fae825..29130946dea4ca8d656d7c7b43a1f4b782e8e69c 100644 (file)
@@ -220,10 +220,9 @@ static void set_ref(struct hantro_ctx *ctx)
 
        /* Set up addresses of DPB buffers. */
        for (i = 0; i < HANTRO_H264_DPB_SIZE; i++) {
-               struct vb2_buffer *buf =  hantro_h264_get_ref_buf(ctx, i);
+               dma_addr_t dma_addr = hantro_h264_get_ref_buf(ctx, i);
 
-               vdpu_write_relaxed(vpu, vb2_dma_contig_plane_dma_addr(buf, 0),
-                                  G1_REG_ADDR_REF(i));
+               vdpu_write_relaxed(vpu, dma_addr, G1_REG_ADDR_REF(i));
        }
 }
 
index 314a72208812d6103277dd2ec3267b2aad9424c9..f3bf67d8a289a2e6141e0446848f602226460a35 100644 (file)
@@ -105,17 +105,14 @@ hantro_g1_mpeg2_dec_set_buffers(struct hantro_dev *vpu, struct hantro_ctx *ctx,
 {
        dma_addr_t forward_addr = 0, backward_addr = 0;
        dma_addr_t current_addr, addr;
-       struct vb2_queue *vq;
-
-       vq = v4l2_m2m_get_dst_vq(ctx->fh.m2m_ctx);
 
        switch (picture->picture_coding_type) {
        case V4L2_MPEG2_PICTURE_CODING_TYPE_B:
-               backward_addr = hantro_get_ref(vq,
+               backward_addr = hantro_get_ref(ctx,
                                               slice_params->backward_ref_ts);
                /* fall-through */
        case V4L2_MPEG2_PICTURE_CODING_TYPE_P:
-               forward_addr = hantro_get_ref(vq,
+               forward_addr = hantro_get_ref(ctx,
                                              slice_params->forward_ref_ts);
        }
 
index e9d3361ed3851a729bb9823789fc66d8836152b2..cad18094fee0298fa186d41309935c1ec7bef151 100644 (file)
@@ -370,19 +370,18 @@ static void cfg_tap(struct hantro_ctx *ctx,
 static void cfg_ref(struct hantro_ctx *ctx,
                    const struct v4l2_ctrl_vp8_frame_header *hdr)
 {
-       struct vb2_queue *cap_q = &ctx->fh.m2m_ctx->cap_q_ctx.q;
        struct hantro_dev *vpu = ctx->dev;
        struct vb2_v4l2_buffer *vb2_dst;
        dma_addr_t ref;
 
        vb2_dst = hantro_get_dst_buf(ctx);
 
-       ref = hantro_get_ref(cap_q, hdr->last_frame_ts);
+       ref = hantro_get_ref(ctx, hdr->last_frame_ts);
        if (!ref)
                ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0);
        vdpu_write_relaxed(vpu, ref, G1_REG_ADDR_REF(0));
 
-       ref = hantro_get_ref(cap_q, hdr->golden_frame_ts);
+       ref = hantro_get_ref(ctx, hdr->golden_frame_ts);
        WARN_ON(!ref && hdr->golden_frame_ts);
        if (!ref)
                ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0);
@@ -390,7 +389,7 @@ static void cfg_ref(struct hantro_ctx *ctx,
                ref |= G1_REG_ADDR_REF_TOPC_E;
        vdpu_write_relaxed(vpu, ref, G1_REG_ADDR_REF(4));
 
-       ref = hantro_get_ref(cap_q, hdr->alt_frame_ts);
+       ref = hantro_get_ref(ctx, hdr->alt_frame_ts);
        WARN_ON(!ref && hdr->alt_frame_ts);
        if (!ref)
                ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0);
index 0d758e0c0f997df857dc69881228117c74105ee6..2227b4e1206751d9384bb3174dd648f4606ebd21 100644 (file)
@@ -537,22 +537,18 @@ static void update_dpb(struct hantro_ctx *ctx)
        }
 }
 
-struct vb2_buffer *hantro_h264_get_ref_buf(struct hantro_ctx *ctx,
-                                          unsigned int dpb_idx)
+dma_addr_t hantro_h264_get_ref_buf(struct hantro_ctx *ctx,
+                                  unsigned int dpb_idx)
 {
-       struct vb2_queue *cap_q = &ctx->fh.m2m_ctx->cap_q_ctx.q;
        struct v4l2_h264_dpb_entry *dpb = ctx->h264_dec.dpb;
-       struct vb2_buffer *buf;
-       int buf_idx = -1;
+       dma_addr_t dma_addr = 0;
 
        if (dpb[dpb_idx].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE)
-               buf_idx = vb2_find_timestamp(cap_q,
-                                            dpb[dpb_idx].reference_ts, 0);
+               dma_addr = hantro_get_ref(ctx, dpb[dpb_idx].reference_ts);
 
-       if (buf_idx >= 0) {
-               buf = vb2_get_buffer(cap_q, buf_idx);
-       } else {
+       if (!dma_addr) {
                struct vb2_v4l2_buffer *dst_buf;
+               struct vb2_buffer *buf;
 
                /*
                 * If a DPB entry is unused or invalid, address of current
@@ -560,9 +556,10 @@ struct vb2_buffer *hantro_h264_get_ref_buf(struct hantro_ctx *ctx,
                 */
                dst_buf = hantro_get_dst_buf(ctx);
                buf = &dst_buf->vb2_buf;
+               dma_addr = vb2_dma_contig_plane_dma_addr(buf, 0);
        }
 
-       return buf;
+       return dma_addr;
 }
 
 int hantro_h264_dec_prepare_run(struct hantro_ctx *ctx)
index 2fab655bf09890163b4f0b0c49607eea6bdd079d..69b88f4d3fb3028bbb1fe65286c0cab0aa040451 100644 (file)
@@ -158,8 +158,8 @@ void rk3399_vpu_jpeg_enc_run(struct hantro_ctx *ctx);
 int hantro_jpeg_enc_init(struct hantro_ctx *ctx);
 void hantro_jpeg_enc_exit(struct hantro_ctx *ctx);
 
-struct vb2_buffer *hantro_h264_get_ref_buf(struct hantro_ctx *ctx,
-                                          unsigned int dpb_idx);
+dma_addr_t hantro_h264_get_ref_buf(struct hantro_ctx *ctx,
+                                  unsigned int dpb_idx);
 int hantro_h264_dec_prepare_run(struct hantro_ctx *ctx);
 void hantro_g1_h264_dec_run(struct hantro_ctx *ctx);
 int hantro_h264_dec_init(struct hantro_ctx *ctx);
index 263ec81f209bfbb68430c30e7cff73ceb8dfbf86..b40d2cdf832f181d6410f0e4577760661801c344 100644 (file)
@@ -107,17 +107,14 @@ rk3399_vpu_mpeg2_dec_set_buffers(struct hantro_dev *vpu,
 {
        dma_addr_t forward_addr = 0, backward_addr = 0;
        dma_addr_t current_addr, addr;
-       struct vb2_queue *vq;
-
-       vq = v4l2_m2m_get_dst_vq(ctx->fh.m2m_ctx);
 
        switch (picture->picture_coding_type) {
        case V4L2_MPEG2_PICTURE_CODING_TYPE_B:
-               backward_addr = hantro_get_ref(vq,
+               backward_addr = hantro_get_ref(ctx,
                                               slice_params->backward_ref_ts);
                /* fall-through */
        case V4L2_MPEG2_PICTURE_CODING_TYPE_P:
-               forward_addr = hantro_get_ref(vq,
+               forward_addr = hantro_get_ref(ctx,
                                              slice_params->forward_ref_ts);
        }
 
index 7d32a0283d9330b1d3bb52b260666cda37a4a301..76d7ed3fd69ae742161af11a63a3fa289510ffd5 100644 (file)
@@ -449,18 +449,16 @@ static void cfg_ref(struct hantro_ctx *ctx,
 {
        struct hantro_dev *vpu = ctx->dev;
        struct vb2_v4l2_buffer *vb2_dst;
-       struct vb2_queue *cap_q;
        dma_addr_t ref;
 
-       cap_q = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE);
        vb2_dst = hantro_get_dst_buf(ctx);
 
-       ref = hantro_get_ref(cap_q, hdr->last_frame_ts);
+       ref = hantro_get_ref(ctx, hdr->last_frame_ts);
        if (!ref)
                ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0);
        vdpu_write_relaxed(vpu, ref, VDPU_REG_VP8_ADDR_REF0);
 
-       ref = hantro_get_ref(cap_q, hdr->golden_frame_ts);
+       ref = hantro_get_ref(ctx, hdr->golden_frame_ts);
        WARN_ON(!ref && hdr->golden_frame_ts);
        if (!ref)
                ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0);
@@ -468,7 +466,7 @@ static void cfg_ref(struct hantro_ctx *ctx,
                ref |= VDPU_REG_VP8_GREF_SIGN_BIAS;
        vdpu_write_relaxed(vpu, ref, VDPU_REG_VP8_ADDR_REF2_5(2));
 
-       ref = hantro_get_ref(cap_q, hdr->alt_frame_ts);
+       ref = hantro_get_ref(ctx, hdr->alt_frame_ts);
        WARN_ON(!ref && hdr->alt_frame_ts);
        if (!ref)
                ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0);