All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Benjamin Gaignard <benjamin.gaignard@collabora.com>
Cc: oe-kbuild-all@lists.linux.dev
Subject: Re: [PATCH v6 10/13] media: verisilicon: Add Rockchip AV1 decoder
Date: Wed, 12 Apr 2023 21:58:26 +0800	[thread overview]
Message-ID: <202304122121.TO87cAxT-lkp@intel.com> (raw)
In-Reply-To: <20230412115652.403949-11-benjamin.gaignard@collabora.com>

Hi Benjamin,

kernel test robot noticed the following build errors:

[auto build test ERROR on next-20230412]
[cannot apply to media-tree/master rockchip/for-next pza/reset/next pza/imx-drm/next v6.3-rc6 v6.3-rc5 v6.3-rc4 linus/master v6.3-rc6]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Benjamin-Gaignard/dt-bindings-media-rockchip-vpu-Add-rk3588-vpu-compatible/20230412-195930
patch link:    https://lore.kernel.org/r/20230412115652.403949-11-benjamin.gaignard%40collabora.com
patch subject: [PATCH v6 10/13] media: verisilicon: Add Rockchip AV1 decoder
config: sh-allmodconfig (https://download.01.org/0day-ci/archive/20230412/202304122121.TO87cAxT-lkp@intel.com/config)
compiler: sh4-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/d2d48cc4d559f8d9dccfeb858d13a47ed54e517a
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Benjamin-Gaignard/dt-bindings-media-rockchip-vpu-Add-rk3588-vpu-compatible/20230412-195930
        git checkout d2d48cc4d559f8d9dccfeb858d13a47ed54e517a
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=sh olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=sh SHELL=/bin/bash drivers/media/platform/verisilicon/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202304122121.TO87cAxT-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

   In file included from drivers/media/platform/verisilicon/hantro.h:28,
                    from drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:9:
   drivers/media/platform/verisilicon/hantro_hw.h:274:34: error: field 'frame_type' has incomplete type
     274 |         enum v4l2_av1_frame_type frame_type;
         |                                  ^~~~~~~~~~
   drivers/media/platform/verisilicon/hantro_hw.h:277:25: error: 'V4L2_AV1_TOTAL_REFS_PER_FRAME' undeclared here (not in a function)
     277 |         u32 order_hints[V4L2_AV1_TOTAL_REFS_PER_FRAME];
         |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c: In function 'rockchip_vpu981_get_frame_index':
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:116:27: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     116 |         int i, idx = frame->ref_frame_idx[ref];
         |                           ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:121:26: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     121 |         timestamp = frame->reference_frame_ts[idx];
         |                          ^~
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:110:72: warning: parameter 'ref' set but not used [-Wunused-but-set-parameter]
     110 | static int rockchip_vpu981_get_frame_index(struct hantro_ctx *ctx, int ref)
         |                                                                    ~~~~^~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c: In function 'rockchip_vpu981_av1_dec_frame_ref':
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:157:53: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     157 |                 av1_dec->frame_refs[i].width = frame->frame_width_minus_1 + 1;
         |                                                     ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:158:54: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     158 |                 av1_dec->frame_refs[i].height = frame->frame_height_minus_1 + 1;
         |                                                      ^~
   In file included from include/vdso/const.h:5,
                    from include/linux/const.h:4,
                    from include/uapi/linux/kernel.h:6,
                    from include/linux/cache.h:5,
                    from include/linux/time.h:5,
                    from include/linux/videodev2.h:59,
                    from include/media/videobuf2-v4l2.h:15,
                    from include/media/v4l2-mem2mem.h:16,
                    from drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:8:
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:159:68: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     159 |                 av1_dec->frame_refs[i].mi_cols = DIV_ROUND_UP(frame->frame_width_minus_1 + 1, 8);
         |                                                                    ^~
   include/uapi/linux/const.h:34:40: note: in definition of macro '__KERNEL_DIV_ROUND_UP'
      34 | #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
         |                                        ^
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:159:50: note: in expansion of macro 'DIV_ROUND_UP'
     159 |                 av1_dec->frame_refs[i].mi_cols = DIV_ROUND_UP(frame->frame_width_minus_1 + 1, 8);
         |                                                  ^~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:160:68: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     160 |                 av1_dec->frame_refs[i].mi_rows = DIV_ROUND_UP(frame->frame_height_minus_1 + 1, 8);
         |                                                                    ^~
   include/uapi/linux/const.h:34:40: note: in definition of macro '__KERNEL_DIV_ROUND_UP'
      34 | #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
         |                                        ^
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:160:50: note: in expansion of macro 'DIV_ROUND_UP'
     160 |                 av1_dec->frame_refs[i].mi_rows = DIV_ROUND_UP(frame->frame_height_minus_1 + 1, 8);
         |                                                  ^~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:162:58: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     162 |                 av1_dec->frame_refs[i].frame_type = frame->frame_type;
         |                                                          ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:163:58: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     163 |                 av1_dec->frame_refs[i].order_hint = frame->order_hint;
         |                                                          ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:168:70: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     168 |                         av1_dec->frame_refs[i].order_hints[j] = frame->order_hints[j];
         |                                                                      ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c: In function 'rockchip_vpu981_av1_dec_clean_refs':
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:201:41: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     201 |                         if (ctrls->frame->reference_frame_ts[ref] == timestamp)
         |                                         ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c: In function 'rockchip_vpu981_av1_dec_tiles_reallocate':
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:260:66: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_tile_group_entry'
     260 |         unsigned int num_tile_cols = 1 << ctrls->tile_group_entry->tile_col;
         |                                                                  ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:261:49: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     261 |         unsigned int height = ALIGN(ctrls->frame->frame_height_minus_1 + 1, 64);
         |                                                 ^~
   include/uapi/linux/const.h:32:44: note: in definition of macro '__ALIGN_KERNEL_MASK'
      32 | #define __ALIGN_KERNEL_MASK(x, mask)    (((x) + (mask)) & ~(mask))
         |                                            ^
   include/linux/align.h:8:33: note: in expansion of macro '__ALIGN_KERNEL'
       8 | #define ALIGN(x, a)             __ALIGN_KERNEL((x), (a))
         |                                 ^~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:261:31: note: in expansion of macro 'ALIGN'
     261 |         unsigned int height = ALIGN(ctrls->frame->frame_height_minus_1 + 1, 64);
         |                               ^~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:261:49: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     261 |         unsigned int height = ALIGN(ctrls->frame->frame_height_minus_1 + 1, 64);
         |                                                 ^~
   include/uapi/linux/const.h:32:50: note: in definition of macro '__ALIGN_KERNEL_MASK'
      32 | #define __ALIGN_KERNEL_MASK(x, mask)    (((x) + (mask)) & ~(mask))
         |                                                  ^~~~
   include/linux/align.h:8:33: note: in expansion of macro '__ALIGN_KERNEL'
       8 | #define ALIGN(x, a)             __ALIGN_KERNEL((x), (a))
         |                                 ^~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:261:31: note: in expansion of macro 'ALIGN'
     261 |         unsigned int height = ALIGN(ctrls->frame->frame_height_minus_1 + 1, 64);
         |                               ^~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:261:49: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     261 |         unsigned int height = ALIGN(ctrls->frame->frame_height_minus_1 + 1, 64);
         |                                                 ^~
   include/uapi/linux/const.h:32:61: note: in definition of macro '__ALIGN_KERNEL_MASK'
      32 | #define __ALIGN_KERNEL_MASK(x, mask)    (((x) + (mask)) & ~(mask))
         |                                                             ^~~~
   include/linux/align.h:8:33: note: in expansion of macro '__ALIGN_KERNEL'
       8 | #define ALIGN(x, a)             __ALIGN_KERNEL((x), (a))
         |                                 ^~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:261:31: note: in expansion of macro 'ALIGN'
     261 |         unsigned int height = ALIGN(ctrls->frame->frame_height_minus_1 + 1, 64);
         |                               ^~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c: At top level:
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:320:6: warning: no previous prototype for 'rockchip_vpu981_av1_dec_exit' [-Wmissing-prototypes]
     320 | void rockchip_vpu981_av1_dec_exit(struct hantro_ctx *ctx)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:356:5: warning: no previous prototype for 'rockchip_vpu981_av1_dec_init' [-Wmissing-prototypes]
     356 | int rockchip_vpu981_av1_dec_init(struct hantro_ctx *ctx)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c: In function 'rockchip_vpu981_av1_dec_prepare_run':
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:413:48: error: 'V4L2_CID_STATELESS_AV1_SEQUENCE' undeclared (first use in this function); did you mean 'V4L2_CID_STATELESS_MPEG2_SEQUENCE'?
     413 |         ctrls->sequence = hantro_get_ctrl(ctx, V4L2_CID_STATELESS_AV1_SEQUENCE);
         |                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                                                V4L2_CID_STATELESS_MPEG2_SEQUENCE
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:413:48: note: each undeclared identifier is reported only once for each function it appears in
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:418:34: error: 'V4L2_CID_STATELESS_AV1_TILE_GROUP_ENTRY' undeclared (first use in this function)
     418 |             hantro_get_ctrl(ctx, V4L2_CID_STATELESS_AV1_TILE_GROUP_ENTRY);
         |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:422:45: error: 'V4L2_CID_STATELESS_AV1_FRAME' undeclared (first use in this function); did you mean 'V4L2_CID_STATELESS_VP9_FRAME'?
     422 |         ctrls->frame = hantro_get_ctrl(ctx, V4L2_CID_STATELESS_AV1_FRAME);
         |                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                                             V4L2_CID_STATELESS_VP9_FRAME
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:427:34: error: 'V4L2_CID_STATELESS_AV1_FILM_GRAIN' undeclared (first use in this function); did you mean 'V4L2_CID_STATELESS_VP9_FRAME'?
     427 |             hantro_get_ctrl(ctx, V4L2_CID_STATELESS_AV1_FILM_GRAIN);
         |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                                  V4L2_CID_STATELESS_VP9_FRAME
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c: In function 'rockchip_vpu981_av1_dec_set_global_model':
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:500:57: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     500 |         const struct v4l2_av1_global_motion *gm = &frame->global_motion;
         |                                                         ^~
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:506:41: error: 'V4L2_AV1_REFS_PER_FRAME' undeclared (first use in this function)
     506 |         for (ref_frame = 0; ref_frame < V4L2_AV1_REFS_PER_FRAME; ++ref_frame) {
         |                                         ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:512:43: error: invalid use of undefined type 'const struct v4l2_av1_global_motion'
     512 |                                         gm->params[V4L2_AV1_REF_LAST_FRAME + ref_frame][3];
         |                                           ^~
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:512:52: error: 'V4L2_AV1_REF_LAST_FRAME' undeclared (first use in this function)
     512 |                                         gm->params[V4L2_AV1_REF_LAST_FRAME + ref_frame][3];
         |                                                    ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:515:43: error: invalid use of undefined type 'const struct v4l2_av1_global_motion'
     515 |                                         gm->params[V4L2_AV1_REF_LAST_FRAME + ref_frame][2];
         |                                           ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:518:43: error: invalid use of undefined type 'const struct v4l2_av1_global_motion'
     518 |                                         gm->params[V4L2_AV1_REF_LAST_FRAME + ref_frame][i];
         |                                           ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:522:23: error: invalid use of undefined type 'const struct v4l2_av1_global_motion'
     522 |                 if (gm->type[V4L2_AV1_REF_LAST_FRAME + ref_frame] <= V4L2_AV1_WARP_MODEL_AFFINE)
         |                       ^~
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:522:70: error: 'V4L2_AV1_WARP_MODEL_AFFINE' undeclared (first use in this function)
     522 |                 if (gm->type[V4L2_AV1_REF_LAST_FRAME + ref_frame] <= V4L2_AV1_WARP_MODEL_AFFINE)
         |                                                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:523:69: error: invalid use of undefined type 'const struct v4l2_av1_global_motion'
     523 |                         rockchip_vpu981_av1_dec_get_shear_params(&gm->params[V4L2_AV1_REF_LAST_FRAME + ref_frame][0],
         |                                                                     ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c: In function 'rockchip_vpu981_av1_dec_set_tile_info':
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:556:67: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     556 |         const struct v4l2_av1_tile_info *tile_info = &ctrls->frame->tile_info;
         |                                                                   ^~
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:560:22: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     560 |             tile_info->context_update_tile_id / tile_info->tile_cols;
         |                      ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:560:58: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     560 |             tile_info->context_update_tile_id / tile_info->tile_cols;
         |                                                          ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:562:22: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     562 |             tile_info->context_update_tile_id % tile_info->tile_cols;
         |                      ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:562:58: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     562 |             tile_info->context_update_tile_id % tile_info->tile_cols;
         |                                                          ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:564:41: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     564 |             context_update_x * tile_info->tile_rows + context_update_y;
         |                                         ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:571:42: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     571 |         for (tile0 = 0; tile0 < tile_info->tile_cols; tile0++) {
         |                                          ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:572:50: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     572 |                 for (tile1 = 0; tile1 < tile_info->tile_rows; tile1++) {
         |                                                  ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:573:56: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     573 |                         int tile_id = tile1 * tile_info->tile_cols + tile0;
         |                                                        ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:576:38: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     576 |                             tile_info->height_in_sbs_minus_1[tile1] + 1;
         |                                      ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:577:43: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     577 |                         u32 x0 = tile_info->width_in_sbs_minus_1[tile0] + 1;
         |                                           ^~
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:590:44: error: invalid use of undefined type 'struct v4l2_ctrl_av1_tile_group_entry'
     590 |                         start = group_entry[tile_id].tile_offset - group_entry[0].tile_offset;
         |                                            ^
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:590:53: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_tile_group_entry'
     590 |                         start = group_entry[tile_id].tile_offset - group_entry[0].tile_offset;
         |                                                     ^
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:590:79: error: invalid use of undefined type 'struct v4l2_ctrl_av1_tile_group_entry'
     590 |                         start = group_entry[tile_id].tile_offset - group_entry[0].tile_offset;
         |                                                                               ^
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:590:82: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_tile_group_entry'
     590 |                         start = group_entry[tile_id].tile_offset - group_entry[0].tile_offset;
         |                                                                                  ^
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:597:50: error: invalid use of undefined type 'struct v4l2_ctrl_av1_tile_group_entry'
     597 |                         end = start + group_entry[tile_id].tile_size;
         |                                                  ^
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:597:59: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_tile_group_entry'
     597 |                         end = start + group_entry[tile_id].tile_size;
         |                                                           ^
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:608:39: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     608 |                          !!((tile_info->tile_cols > 1) || (tile_info->tile_rows > 1)));
         |                                       ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:608:69: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     608 |                          !!((tile_info->tile_cols > 1) || (tile_info->tile_rows > 1)));
         |                                                                     ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:609:63: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     609 |         hantro_reg_write(vpu, &av1_num_tile_cols_8k, tile_info->tile_cols);
         |                                                               ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:610:63: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     610 |         hantro_reg_write(vpu, &av1_num_tile_rows_8k, tile_info->tile_rows);
         |                                                               ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:614:52: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     614 |         if (rockchip_vpu981_av1_tile_log2(tile_info->tile_cols) ||
         |                                                    ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:615:52: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     615 |             rockchip_vpu981_av1_tile_log2(tile_info->tile_rows))
         |                                                    ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:616:72: error: invalid use of undefined type 'const struct v4l2_av1_tile_info'
     616 |                 hantro_reg_write(vpu, &av1_dec_tile_size_mag, tile_info->tile_size_bytes - 1);
         |                                                                        ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c: In function 'rockchip_vpu981_av1_dec_get_dist':
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:628:35: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_sequence'
     628 |         int bits = ctrls->sequence->order_hint_bits - 1;
         |                                   ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:631:29: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_sequence'
     631 |         if (!ctrls->sequence->order_hint_bits)
         |                             ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c: In function 'rockchip_vpu981_av1_dec_set_frame_sign_bias':
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:649:22: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_sequence'
     649 |         if (!sequence->order_hint_bits || IS_INTRA(frame->frame_type)) {
         |                      ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:649:57: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     649 |         if (!sequence->order_hint_bits || IS_INTRA(frame->frame_type)) {
         |                                                         ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:44:26: note: in definition of macro 'IS_INTRA'
      44 | #define IS_INTRA(type) ((type == V4L2_AV1_KEY_FRAME) || (type == V4L2_AV1_INTRA_ONLY_FRAME))
         |                          ^~~~
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:44:34: error: 'V4L2_AV1_KEY_FRAME' undeclared (first use in this function)
      44 | #define IS_INTRA(type) ((type == V4L2_AV1_KEY_FRAME) || (type == V4L2_AV1_INTRA_ONLY_FRAME))
         |                                  ^~~~~~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:649:43: note: in expansion of macro 'IS_INTRA'
     649 |         if (!sequence->order_hint_bits || IS_INTRA(frame->frame_type)) {
         |                                           ^~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:649:57: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     649 |         if (!sequence->order_hint_bits || IS_INTRA(frame->frame_type)) {
         |                                                         ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:44:58: note: in definition of macro 'IS_INTRA'
      44 | #define IS_INTRA(type) ((type == V4L2_AV1_KEY_FRAME) || (type == V4L2_AV1_INTRA_ONLY_FRAME))
         |                                                          ^~~~
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:44:66: error: 'V4L2_AV1_INTRA_ONLY_FRAME' undeclared (first use in this function)
      44 | #define IS_INTRA(type) ((type == V4L2_AV1_KEY_FRAME) || (type == V4L2_AV1_INTRA_ONLY_FRAME))
         |                                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:649:43: note: in expansion of macro 'IS_INTRA'
     649 |         if (!sequence->order_hint_bits || IS_INTRA(frame->frame_type)) {
         |                                           ^~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:661:67: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     661 |                                                              frame->order_hint);
         |                                                                   ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c: In function 'rockchip_vpu981_av1_dec_set_ref':
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:679:30: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     679 |         int cur_width = frame->frame_width_minus_1 + 1;
         |                              ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:680:31: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     680 |         int cur_height = frame->frame_height_minus_1 + 1;
         |                               ^~
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:668:70: warning: parameter 'idx' set but not used [-Wunused-but-set-parameter]
     668 | rockchip_vpu981_av1_dec_set_ref(struct hantro_ctx *ctx, int ref, int idx,
         |                                                                  ~~~~^~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c: In function 'rockchip_vpu981_av1_dec_set_segmentation':
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:784:57: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     784 |         const struct v4l2_av1_segmentation *seg = &frame->segmentation;
         |                                                         ^~
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:785:20: error: 'V4L2_AV1_MAX_SEGMENTS' undeclared (first use in this function)
     785 |         u32 segval[V4L2_AV1_MAX_SEGMENTS][V4L2_AV1_SEG_LVL_MAX] = { 0 };
         |                    ^~~~~~~~~~~~~~~~~~~~~
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:785:43: error: 'V4L2_AV1_SEG_LVL_MAX' undeclared (first use in this function); did you mean 'V4L2_VP9_SEG_LVL_MAX'?
     785 |         u32 segval[V4L2_AV1_MAX_SEGMENTS][V4L2_AV1_SEG_LVL_MAX] = { 0 };
         |                                           ^~~~~~~~~~~~~~~~~~~~
         |                                           V4L2_VP9_SEG_LVL_MAX
>> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:789:19: error: invalid use of undefined type 'const struct v4l2_av1_segmentation'
     789 |         if (!!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_ENABLED) &&
         |                   ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:789:29: error: 'V4L2_AV1_SEGMENTATION_FLAG_ENABLED' undeclared (first use in this function); did you mean 'V4L2_VP9_SEGMENTATION_FLAG_ENABLED'?
     789 |         if (!!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_ENABLED) &&
         |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                             V4L2_VP9_SEGMENTATION_FLAG_ENABLED
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:790:18: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     790 |             frame->primary_ref_frame < V4L2_AV1_REFS_PER_FRAME) {
         |                  ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:790:40: error: 'V4L2_AV1_REFS_PER_FRAME' undeclared (first use in this function)
     790 |             frame->primary_ref_frame < V4L2_AV1_REFS_PER_FRAME) {
         |                                        ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:791:69: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     791 |                 int idx = rockchip_vpu981_get_frame_index(ctx, frame->primary_ref_frame);
         |                                                                     ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:808:32: error: invalid use of undefined type 'const struct v4l2_av1_segmentation'
     808 |                          !!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_TEMPORAL_UPDATE));
         |                                ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:808:42: error: 'V4L2_AV1_SEGMENTATION_FLAG_TEMPORAL_UPDATE' undeclared (first use in this function); did you mean 'V4L2_VP9_SEGMENTATION_FLAG_TEMPORAL_UPDATE'?
     808 |                          !!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_TEMPORAL_UPDATE));
         |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                                          V4L2_VP9_SEGMENTATION_FLAG_TEMPORAL_UPDATE
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:810:32: error: invalid use of undefined type 'const struct v4l2_av1_segmentation'
     810 |                          !!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_UPDATE_MAP));
         |                                ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:810:42: error: 'V4L2_AV1_SEGMENTATION_FLAG_UPDATE_MAP' undeclared (first use in this function); did you mean 'V4L2_VP9_SEGMENTATION_FLAG_UPDATE_MAP'?
     810 |                          !!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_UPDATE_MAP));
         |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                                          V4L2_VP9_SEGMENTATION_FLAG_UPDATE_MAP
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:812:32: error: invalid use of undefined type 'const struct v4l2_av1_segmentation'
     812 |                          !!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_ENABLED));
         |                                ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:815:34: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     815 |                          !!(frame->flags & V4L2_AV1_FRAME_FLAG_ERROR_RESILIENT_MODE));
         |                                  ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:815:44: error: 'V4L2_AV1_FRAME_FLAG_ERROR_RESILIENT_MODE' undeclared (first use in this function); did you mean 'V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT'?
     815 |                          !!(frame->flags & V4L2_AV1_FRAME_FLAG_ERROR_RESILIENT_MODE));
         |                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                                            V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:817:27: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     817 |         if (IS_INTRA(frame->frame_type) ||
         |                           ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:44:26: note: in definition of macro 'IS_INTRA'
      44 | #define IS_INTRA(type) ((type == V4L2_AV1_KEY_FRAME) || (type == V4L2_AV1_INTRA_ONLY_FRAME))
         |                          ^~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:44:34: error: 'V4L2_AV1_KEY_FRAME' undeclared (first use in this function)
      44 | #define IS_INTRA(type) ((type == V4L2_AV1_KEY_FRAME) || (type == V4L2_AV1_INTRA_ONLY_FRAME))
         |                                  ^~~~~~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:817:13: note: in expansion of macro 'IS_INTRA'
     817 |         if (IS_INTRA(frame->frame_type) ||
         |             ^~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:817:27: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     817 |         if (IS_INTRA(frame->frame_type) ||
         |                           ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:44:58: note: in definition of macro 'IS_INTRA'
      44 | #define IS_INTRA(type) ((type == V4L2_AV1_KEY_FRAME) || (type == V4L2_AV1_INTRA_ONLY_FRAME))
         |                                                          ^~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:44:66: error: 'V4L2_AV1_INTRA_ONLY_FRAME' undeclared (first use in this function)
      44 | #define IS_INTRA(type) ((type == V4L2_AV1_KEY_FRAME) || (type == V4L2_AV1_INTRA_ONLY_FRAME))
         |                                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:817:13: note: in expansion of macro 'IS_INTRA'
     817 |         if (IS_INTRA(frame->frame_type) ||
         |             ^~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:818:21: error: invalid use of undefined type 'const struct v4l2_ctrl_av1_frame'
     818 |             !!(frame->flags & V4L2_AV1_FRAME_FLAG_ERROR_RESILIENT_MODE)) {
         |                     ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:822:16: error: invalid use of undefined type 'const struct v4l2_av1_segmentation'
     822 |         if (seg->flags & V4L2_AV1_SEGMENTATION_FLAG_ENABLED) {
         |                ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:826:32: error: invalid use of undefined type 'const struct v4l2_av1_segmentation'
     826 |                         if (seg->feature_enabled[s] &
         |                                ^~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:827:29: error: implicit declaration of function 'V4L2_AV1_SEGMENT_FEATURE_ENABLED'; did you mean 'V4L2_VP9_SEGMENT_FEATURE_ENABLED'? [-Werror=implicit-function-declaration]
     827 |                             V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_Q)) {
         |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                             V4L2_VP9_SEGMENT_FEATURE_ENABLED
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:827:62: error: 'V4L2_AV1_SEG_LVL_ALT_Q' undeclared (first use in this function); did you mean 'V4L2_VP9_SEG_LVL_ALT_Q'?
     827 |                             V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_Q)) {
         |                                                              ^~~~~~~~~~~~~~~~~~~~~~
         |                                                              V4L2_VP9_SEG_LVL_ALT_Q
   In file included from include/linux/kernel.h:27,
                    from include/linux/videodev2.h:60:
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:829:50: error: invalid use of undefined type 'const struct v4l2_av1_segmentation'
     829 |                                     clamp(abs(seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_Q]),
         |                                                  ^~
   include/linux/minmax.h:20:28: note: in definition of macro '__typecheck'
      20 |         (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
         |                            ^
   include/linux/minmax.h:111:28: note: in expansion of macro '__careful_clamp'
     111 | #define clamp(val, lo, hi) __careful_clamp(val, lo, hi)
         |                            ^~~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:829:37: note: in expansion of macro 'clamp'
     829 |                                     clamp(abs(seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_Q]),
         |                                     ^~~~~
   include/linux/math.h:143:17: note: in expansion of macro '__abs_choose_expr'
     143 | #define abs(x)  __abs_choose_expr(x, long long,                         \
         |                 ^~~~~~~~~~~~~~~~~
   drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:829:43: note: in expansion of macro 'abs'
     829 |                                     clamp(abs(seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_Q]),
         |                                           ^~~


vim +116 drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c

    43	
  > 44	#define IS_INTRA(type) ((type == V4L2_AV1_KEY_FRAME) || (type == V4L2_AV1_INTRA_ONLY_FRAME))
    45	
    46	#define LST_BUF_IDX (V4L2_AV1_REF_LAST_FRAME - V4L2_AV1_REF_LAST_FRAME)
    47	#define LST2_BUF_IDX (V4L2_AV1_REF_LAST2_FRAME - V4L2_AV1_REF_LAST_FRAME)
    48	#define LST3_BUF_IDX (V4L2_AV1_REF_LAST3_FRAME - V4L2_AV1_REF_LAST_FRAME)
    49	#define GLD_BUF_IDX (V4L2_AV1_REF_GOLDEN_FRAME - V4L2_AV1_REF_LAST_FRAME)
    50	#define BWD_BUF_IDX (V4L2_AV1_REF_BWDREF_FRAME - V4L2_AV1_REF_LAST_FRAME)
    51	#define ALT2_BUF_IDX (V4L2_AV1_REF_ALTREF2_FRAME - V4L2_AV1_REF_LAST_FRAME)
    52	#define ALT_BUF_IDX (V4L2_AV1_REF_ALTREF_FRAME - V4L2_AV1_REF_LAST_FRAME)
    53	
    54	#define DIV_LUT_PREC_BITS 14
    55	#define DIV_LUT_BITS 8
    56	#define DIV_LUT_NUM BIT(DIV_LUT_BITS)
    57	#define WARP_PARAM_REDUCE_BITS 6
    58	#define WARPEDMODEL_PREC_BITS 16
    59	
    60	#define AV1_DIV_ROUND_UP_POW2(value, n)			\
    61	({							\
    62		typeof(n) _n  = n;				\
    63		typeof(value) _value = value;			\
    64		(_value + (BIT(_n) >> 1)) >> _n;		\
    65	})
    66	
    67	#define AV1_DIV_ROUND_UP_POW2_SIGNED(value, n)				\
    68	({									\
    69		typeof(n) _n_  = n;						\
    70		typeof(value) _value_ = value;					\
    71		(((_value_) < 0) ? -AV1_DIV_ROUND_UP_POW2(-(_value_), (_n_))	\
    72			: AV1_DIV_ROUND_UP_POW2((_value_), (_n_)));		\
    73	})
    74	
    75	struct rockchip_av1_film_grain {
    76		u8 scaling_lut_y[256];
    77		u8 scaling_lut_cb[256];
    78		u8 scaling_lut_cr[256];
    79		s16 cropped_luma_grain_block[4096];
    80		s16 cropped_chroma_grain_block[1024 * 2];
    81	};
    82	
    83	static const short div_lut[DIV_LUT_NUM + 1] = {
    84		16384, 16320, 16257, 16194, 16132, 16070, 16009, 15948, 15888, 15828, 15768,
    85		15709, 15650, 15592, 15534, 15477, 15420, 15364, 15308, 15252, 15197, 15142,
    86		15087, 15033, 14980, 14926, 14873, 14821, 14769, 14717, 14665, 14614, 14564,
    87		14513, 14463, 14413, 14364, 14315, 14266, 14218, 14170, 14122, 14075, 14028,
    88		13981, 13935, 13888, 13843, 13797, 13752, 13707, 13662, 13618, 13574, 13530,
    89		13487, 13443, 13400, 13358, 13315, 13273, 13231, 13190, 13148, 13107, 13066,
    90		13026, 12985, 12945, 12906, 12866, 12827, 12788, 12749, 12710, 12672, 12633,
    91		12596, 12558, 12520, 12483, 12446, 12409, 12373, 12336, 12300, 12264, 12228,
    92		12193, 12157, 12122, 12087, 12053, 12018, 11984, 11950, 11916, 11882, 11848,
    93		11815, 11782, 11749, 11716, 11683, 11651, 11619, 11586, 11555, 11523, 11491,
    94		11460, 11429, 11398, 11367, 11336, 11305, 11275, 11245, 11215, 11185, 11155,
    95		11125, 11096, 11067, 11038, 11009, 10980, 10951, 10923, 10894, 10866, 10838,
    96		10810, 10782, 10755, 10727, 10700, 10673, 10645, 10618, 10592, 10565, 10538,
    97		10512, 10486, 10460, 10434, 10408, 10382, 10356, 10331, 10305, 10280, 10255,
    98		10230, 10205, 10180, 10156, 10131, 10107, 10082, 10058, 10034, 10010, 9986,
    99		9963,  9939,  9916,  9892,  9869,  9846,  9823,  9800,  9777,  9754,  9732,
   100		9709,  9687,  9664,  9642,  9620,  9598,  9576,  9554,  9533,  9511,  9489,
   101		9468,  9447,  9425,  9404,  9383,  9362,  9341,  9321,  9300,  9279,  9259,
   102		9239,  9218,  9198,  9178,  9158,  9138,  9118,  9098,  9079,  9059,  9039,
   103		9020,  9001,  8981,  8962,  8943,  8924,  8905,  8886,  8867,  8849,  8830,
   104		8812,  8793,  8775,  8756,  8738,  8720,  8702,  8684,  8666,  8648,  8630,
   105		8613,  8595,  8577,  8560,  8542,  8525,  8508,  8490,  8473,  8456,  8439,
   106		8422,  8405,  8389,  8372,  8355,  8339,  8322,  8306,  8289,  8273,  8257,
   107		8240,  8224,  8208,  8192,
   108	};
   109	
 > 110	static int rockchip_vpu981_get_frame_index(struct hantro_ctx *ctx, int ref)
   111	{
   112		struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
   113		struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
   114		const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
   115		u64 timestamp;
 > 116		int i, idx = frame->ref_frame_idx[ref];
   117	
   118		if (idx >= V4L2_AV1_TOTAL_REFS_PER_FRAME || idx < 0)
   119			return AV1_INVALID_IDX;
   120	
   121		timestamp = frame->reference_frame_ts[idx];
   122		for (i = 0; i < AV1_MAX_FRAME_BUF_COUNT; i++) {
   123			if (!av1_dec->frame_refs[i].used)
   124				continue;
   125			if (av1_dec->frame_refs[i].timestamp == timestamp)
   126				return i;
   127		}
   128	
   129		return AV1_INVALID_IDX;
   130	}
   131	
   132	static int rockchip_vpu981_get_order_hint(struct hantro_ctx *ctx, int ref)
   133	{
   134		struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
   135		int idx = rockchip_vpu981_get_frame_index(ctx, ref);
   136	
   137		if (idx != AV1_INVALID_IDX)
   138			return av1_dec->frame_refs[idx].order_hint;
   139	
   140		return 0;
   141	}
   142	
   143	static int rockchip_vpu981_av1_dec_frame_ref(struct hantro_ctx *ctx,
   144						     u64 timestamp)
   145	{
   146		struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
   147		struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
   148		const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
   149		int i;
   150	
   151		for (i = 0; i < AV1_MAX_FRAME_BUF_COUNT; i++) {
   152			int j;
   153	
   154			if (av1_dec->frame_refs[i].used)
   155				continue;
   156	
   157			av1_dec->frame_refs[i].width = frame->frame_width_minus_1 + 1;
   158			av1_dec->frame_refs[i].height = frame->frame_height_minus_1 + 1;
   159			av1_dec->frame_refs[i].mi_cols = DIV_ROUND_UP(frame->frame_width_minus_1 + 1, 8);
   160			av1_dec->frame_refs[i].mi_rows = DIV_ROUND_UP(frame->frame_height_minus_1 + 1, 8);
   161			av1_dec->frame_refs[i].timestamp = timestamp;
   162			av1_dec->frame_refs[i].frame_type = frame->frame_type;
   163			av1_dec->frame_refs[i].order_hint = frame->order_hint;
   164			if (!av1_dec->frame_refs[i].vb2_ref)
   165				av1_dec->frame_refs[i].vb2_ref = hantro_get_dst_buf(ctx);
   166	
   167			for (j = 0; j < V4L2_AV1_TOTAL_REFS_PER_FRAME; j++)
   168				av1_dec->frame_refs[i].order_hints[j] = frame->order_hints[j];
   169			av1_dec->frame_refs[i].used = true;
   170			av1_dec->current_frame_index = i;
   171	
   172			return i;
   173		}
   174	
   175		return AV1_INVALID_IDX;
   176	}
   177	
   178	static void rockchip_vpu981_av1_dec_frame_unref(struct hantro_ctx *ctx, int idx)
   179	{
   180		struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
   181	
   182		if (idx >= 0)
   183			av1_dec->frame_refs[idx].used = false;
   184	}
   185	
   186	static void rockchip_vpu981_av1_dec_clean_refs(struct hantro_ctx *ctx)
   187	{
   188		struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
   189		struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
   190	
   191		int ref, idx;
   192	
   193		for (idx = 0; idx < AV1_MAX_FRAME_BUF_COUNT; idx++) {
   194			u64 timestamp = av1_dec->frame_refs[idx].timestamp;
   195			bool used = false;
   196	
   197			if (!av1_dec->frame_refs[idx].used)
   198				continue;
   199	
   200			for (ref = 0; ref < V4L2_AV1_TOTAL_REFS_PER_FRAME; ref++) {
   201				if (ctrls->frame->reference_frame_ts[ref] == timestamp)
   202					used = true;
   203			}
   204	
   205			if (!used)
   206				rockchip_vpu981_av1_dec_frame_unref(ctx, idx);
   207		}
   208	}
   209	
   210	static size_t rockchip_vpu981_av1_dec_luma_size(struct hantro_ctx *ctx)
   211	{
   212		return ctx->dst_fmt.width * ctx->dst_fmt.height * ctx->bit_depth / 8;
   213	}
   214	
   215	static size_t rockchip_vpu981_av1_dec_chroma_size(struct hantro_ctx *ctx)
   216	{
   217		size_t cr_offset = rockchip_vpu981_av1_dec_luma_size(ctx);
   218	
   219		return ALIGN((cr_offset * 3) / 2, 64);
   220	}
   221	
   222	static void rockchip_vpu981_av1_dec_tiles_free(struct hantro_ctx *ctx)
   223	{
   224		struct hantro_dev *vpu = ctx->dev;
   225		struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
   226	
   227		if (av1_dec->db_data_col.cpu)
   228			dma_free_coherent(vpu->dev, av1_dec->db_data_col.size,
   229					  av1_dec->db_data_col.cpu,
   230					  av1_dec->db_data_col.dma);
   231		av1_dec->db_data_col.cpu = NULL;
   232	
   233		if (av1_dec->db_ctrl_col.cpu)
   234			dma_free_coherent(vpu->dev, av1_dec->db_ctrl_col.size,
   235					  av1_dec->db_ctrl_col.cpu,
   236					  av1_dec->db_ctrl_col.dma);
   237		av1_dec->db_ctrl_col.cpu = NULL;
   238	
   239		if (av1_dec->cdef_col.cpu)
   240			dma_free_coherent(vpu->dev, av1_dec->cdef_col.size,
   241					  av1_dec->cdef_col.cpu, av1_dec->cdef_col.dma);
   242		av1_dec->cdef_col.cpu = NULL;
   243	
   244		if (av1_dec->sr_col.cpu)
   245			dma_free_coherent(vpu->dev, av1_dec->sr_col.size,
   246					  av1_dec->sr_col.cpu, av1_dec->sr_col.dma);
   247		av1_dec->sr_col.cpu = NULL;
   248	
   249		if (av1_dec->lr_col.cpu)
   250			dma_free_coherent(vpu->dev, av1_dec->lr_col.size,
   251					  av1_dec->lr_col.cpu, av1_dec->lr_col.dma);
   252		av1_dec->lr_col.cpu = NULL;
   253	}
   254	
   255	static int rockchip_vpu981_av1_dec_tiles_reallocate(struct hantro_ctx *ctx)
   256	{
   257		struct hantro_dev *vpu = ctx->dev;
   258		struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
   259		struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
 > 260		unsigned int num_tile_cols = 1 << ctrls->tile_group_entry->tile_col;
   261		unsigned int height = ALIGN(ctrls->frame->frame_height_minus_1 + 1, 64);
   262		unsigned int height_in_sb = height / 64;
   263		unsigned int stripe_num = ((height + 8) + 63) / 64;
   264		size_t size;
   265	
   266		if (av1_dec->db_data_col.size >=
   267		    ALIGN(height * 12 * ctx->bit_depth / 8, 128) * num_tile_cols)
   268			return 0;
   269	
   270		rockchip_vpu981_av1_dec_tiles_free(ctx);
   271	
   272		size = ALIGN(height * 12 * ctx->bit_depth / 8, 128) * num_tile_cols;
   273		av1_dec->db_data_col.cpu = dma_alloc_coherent(vpu->dev, size,
   274							      &av1_dec->db_data_col.dma,
   275							      GFP_KERNEL);
   276		if (!av1_dec->db_data_col.cpu)
   277			goto buffer_allocation_error;
   278		av1_dec->db_data_col.size = size;
   279	
   280		size = ALIGN(height * 2 * 16 / 4, 128) * num_tile_cols;
   281		av1_dec->db_ctrl_col.cpu = dma_alloc_coherent(vpu->dev, size,
   282							      &av1_dec->db_ctrl_col.dma,
   283							      GFP_KERNEL);
   284		if (!av1_dec->db_ctrl_col.cpu)
   285			goto buffer_allocation_error;
   286		av1_dec->db_ctrl_col.size = size;
   287	
   288		size = ALIGN(height_in_sb * 44 * ctx->bit_depth * 16 / 8, 128) * num_tile_cols;
   289		av1_dec->cdef_col.cpu = dma_alloc_coherent(vpu->dev, size,
   290							   &av1_dec->cdef_col.dma,
   291							   GFP_KERNEL);
   292		if (!av1_dec->cdef_col.cpu)
   293			goto buffer_allocation_error;
   294		av1_dec->cdef_col.size = size;
   295	
   296		size = ALIGN(height_in_sb * (3040 + 1280), 128) * num_tile_cols;
   297		av1_dec->sr_col.cpu = dma_alloc_coherent(vpu->dev, size,
   298							 &av1_dec->sr_col.dma,
   299							 GFP_KERNEL);
   300		if (!av1_dec->sr_col.cpu)
   301			goto buffer_allocation_error;
   302		av1_dec->sr_col.size = size;
   303	
   304		size = ALIGN(stripe_num * 1536 * ctx->bit_depth / 8, 128) * num_tile_cols;
   305		av1_dec->lr_col.cpu = dma_alloc_coherent(vpu->dev, size,
   306							 &av1_dec->lr_col.dma,
   307							 GFP_KERNEL);
   308		if (!av1_dec->lr_col.cpu)
   309			goto buffer_allocation_error;
   310		av1_dec->lr_col.size = size;
   311	
   312		av1_dec->num_tile_cols_allocated = num_tile_cols;
   313		return 0;
   314	
   315	buffer_allocation_error:
   316		rockchip_vpu981_av1_dec_tiles_free(ctx);
   317		return -ENOMEM;
   318	}
   319	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

  reply	other threads:[~2023-04-12 13:59 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-12 11:56 [PATCH v6 00/13] AV1 stateless decoder for RK3588 Benjamin Gaignard
2023-04-12 11:56 ` Benjamin Gaignard
2023-04-12 11:56 ` Benjamin Gaignard
2023-04-12 11:56 ` [PATCH v6 01/13] dt-bindings: media: rockchip-vpu: Add rk3588 vpu compatible Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56 ` [PATCH v6 02/13] media: AV1: Make sure that bit depth in correctly initialize Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 14:29   ` kernel test robot
2023-04-13  9:16   ` AngeloGioacchino Del Regno
2023-04-13  9:16     ` AngeloGioacchino Del Regno
2023-04-13  9:16     ` AngeloGioacchino Del Regno
2023-04-12 11:56 ` [PATCH v6 03/13] v4l2-common: Add support for fractional bpp Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56 ` [PATCH v6 04/13] media: Add NV15_4L4 pixel format Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56 ` [PATCH v6 05/13] media: verisilicon: Get bit depth for V4L2_PIX_FMT_NV15_4L4 Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-13  9:16   ` AngeloGioacchino Del Regno
2023-04-13  9:16     ` AngeloGioacchino Del Regno
2023-04-13  9:16     ` AngeloGioacchino Del Regno
2023-04-12 11:56 ` [PATCH v6 06/13] media: verisilicon: Add AV1 decoder mode and controls Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-13  9:16   ` AngeloGioacchino Del Regno
2023-04-13  9:16     ` AngeloGioacchino Del Regno
2023-04-13  9:16     ` AngeloGioacchino Del Regno
2023-04-12 11:56 ` [PATCH v6 07/13] media: verisilicon: Check AV1 bitstreams bit depth Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-13  9:16   ` AngeloGioacchino Del Regno
2023-04-13  9:16     ` AngeloGioacchino Del Regno
2023-04-13  9:16     ` AngeloGioacchino Del Regno
2023-04-12 11:56 ` [PATCH v6 08/13] media: verisilicon: Compute motion vectors size for AV1 frames Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-13  9:15   ` AngeloGioacchino Del Regno
2023-04-13  9:15     ` AngeloGioacchino Del Regno
2023-04-13  9:15     ` AngeloGioacchino Del Regno
2023-04-12 11:56 ` [PATCH v6 09/13] media: verisilicon: Add AV1 entropy helpers Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-13  9:15   ` AngeloGioacchino Del Regno
2023-04-13  9:15     ` AngeloGioacchino Del Regno
2023-04-13  9:15     ` AngeloGioacchino Del Regno
2023-04-12 11:56 ` [PATCH v6 10/13] media: verisilicon: Add Rockchip AV1 decoder Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 13:58   ` kernel test robot [this message]
2023-04-13  9:16   ` AngeloGioacchino Del Regno
2023-04-13  9:16     ` AngeloGioacchino Del Regno
2023-04-13  9:16     ` AngeloGioacchino Del Regno
2023-04-12 11:56 ` [PATCH v6 11/13] media: verisilicon: Add film grain feature to AV1 driver Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56 ` [PATCH v6 12/13] media: verisilicon: Enable AV1 decoder on rk3588 Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 12:43   ` Hans Verkuil
2023-04-12 12:43     ` Hans Verkuil
2023-04-12 12:43     ` Hans Verkuil
2023-04-12 15:50     ` Nicolas Dufresne
2023-04-12 15:50       ` Nicolas Dufresne
2023-04-12 15:50       ` Nicolas Dufresne
2023-04-12 16:12       ` Benjamin Gaignard
2023-04-12 16:12         ` Benjamin Gaignard
2023-04-12 16:12         ` Benjamin Gaignard
2023-04-12 11:56 ` [PATCH v6 13/13] media: verisilicon: Conditionally ignore native formats Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard
2023-04-12 11:56   ` Benjamin Gaignard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202304122121.TO87cAxT-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=benjamin.gaignard@collabora.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.