In order to reuse these bitmaps, move this process to
struct hantro_h264_dec_hw_ctx. This will be used by
the Rockchip VDPU2 H.264 driver.

Signed-off-by: Ezequiel Garcia <[email protected]>
---
 .../staging/media/hantro/hantro_g1_h264_dec.c   | 17 ++---------------
 drivers/staging/media/hantro/hantro_h264.c      | 13 +++++++++++++
 drivers/staging/media/hantro/hantro_hw.h        |  4 ++++
 3 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/media/hantro/hantro_g1_h264_dec.c 
b/drivers/staging/media/hantro/hantro_g1_h264_dec.c
index 2aa37baad0c3..6faacfc44c7c 100644
--- a/drivers/staging/media/hantro/hantro_g1_h264_dec.c
+++ b/drivers/staging/media/hantro/hantro_g1_h264_dec.c
@@ -129,25 +129,12 @@ static void set_ref(struct hantro_ctx *ctx)
        struct v4l2_h264_dpb_entry *dpb = ctx->h264_dec.dpb;
        const u8 *b0_reflist, *b1_reflist, *p_reflist;
        struct hantro_dev *vpu = ctx->dev;
-       u32 dpb_longterm = 0;
-       u32 dpb_valid = 0;
        int reg_num;
        u32 reg;
        int i;
 
-       /*
-        * Set up bit maps of valid and long term DPBs.
-        * NOTE: The bits are reversed, i.e. MSb is DPB 0.
-        */
-       for (i = 0; i < HANTRO_H264_DPB_SIZE; ++i) {
-               if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE)
-                       dpb_valid |= BIT(HANTRO_H264_DPB_SIZE - 1 - i);
-
-               if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM)
-                       dpb_longterm |= BIT(HANTRO_H264_DPB_SIZE - 1 - i);
-       }
-       vdpu_write_relaxed(vpu, dpb_valid << 16, G1_REG_VALID_REF);
-       vdpu_write_relaxed(vpu, dpb_longterm << 16, G1_REG_LT_REF);
+       vdpu_write_relaxed(vpu, ctx->h264_dec.dpb_valid, G1_REG_VALID_REF);
+       vdpu_write_relaxed(vpu, ctx->h264_dec.dpb_longterm, G1_REG_LT_REF);
 
        /*
         * Set up reference frame picture numbers.
diff --git a/drivers/staging/media/hantro/hantro_h264.c 
b/drivers/staging/media/hantro/hantro_h264.c
index ed6eaf11d96f..6d72136760e7 100644
--- a/drivers/staging/media/hantro/hantro_h264.c
+++ b/drivers/staging/media/hantro/hantro_h264.c
@@ -229,12 +229,25 @@ static void prepare_table(struct hantro_ctx *ctx)
        const struct v4l2_ctrl_h264_decode_params *dec_param = ctrls->decode;
        struct hantro_h264_dec_priv_tbl *tbl = ctx->h264_dec.priv.cpu;
        const struct v4l2_h264_dpb_entry *dpb = ctx->h264_dec.dpb;
+       u32 dpb_longterm = 0;
+       u32 dpb_valid = 0;
        int i;
 
        for (i = 0; i < HANTRO_H264_DPB_SIZE; ++i) {
                tbl->poc[i * 2] = dpb[i].top_field_order_cnt;
                tbl->poc[i * 2 + 1] = dpb[i].bottom_field_order_cnt;
+
+               /*
+                * Set up bit maps of valid and long term DPBs.
+                * NOTE: The bits are reversed, i.e. MSb is DPB 0.
+                */
+               if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE)
+                       dpb_valid |= BIT(HANTRO_H264_DPB_SIZE - 1 - i);
+               if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM)
+                       dpb_longterm |= BIT(HANTRO_H264_DPB_SIZE - 1 - i);
        }
+       ctx->h264_dec.dpb_valid = dpb_valid << 16;
+       ctx->h264_dec.dpb_longterm = dpb_longterm << 16;
 
        tbl->poc[32] = dec_param->top_field_order_cnt;
        tbl->poc[33] = dec_param->bottom_field_order_cnt;
diff --git a/drivers/staging/media/hantro/hantro_hw.h 
b/drivers/staging/media/hantro/hantro_hw.h
index 5dcf65805396..ce678fedaad6 100644
--- a/drivers/staging/media/hantro/hantro_hw.h
+++ b/drivers/staging/media/hantro/hantro_hw.h
@@ -89,12 +89,16 @@ struct hantro_h264_dec_reflists {
  * @dpb:       DPB
  * @reflists:  P/B0/B1 reflists
  * @ctrls:     V4L2 controls attached to a run
+ * @dpb_longterm: DPB long-term
+ * @dpb_valid:   DPB valid
  */
 struct hantro_h264_dec_hw_ctx {
        struct hantro_aux_buf priv;
        struct v4l2_h264_dpb_entry dpb[HANTRO_H264_DPB_SIZE];
        struct hantro_h264_dec_reflists reflists;
        struct hantro_h264_dec_ctrls ctrls;
+       u32 dpb_longterm;
+       u32 dpb_valid;
 };
 
 /**
-- 
2.30.0

Reply via email to