mbox series

[v10,00/15] media: mtk-vcodec: support for M8192 decoder

Message ID 20220426100828.13429-1-yunfei.dong@mediatek.com (mailing list archive)
Headers show
Series media: mtk-vcodec: support for M8192 decoder | expand

Message

Yunfei Dong April 26, 2022, 10:08 a.m. UTC
This series adds support for mt8192 h264/vp8/vp9 decoder drivers. Firstly, refactor
power/clock/interrupt interfaces for mt8192 is lat and core architecture.

Secondly, add new functions to get frame buffer size and resolution according
to decoder capability from scp side. Then add callback function to get/put
capture buffer in order to enable lat and core decoder in parallel, need to
adjust GStreamer at the same time. 

Then add to support MT21C compressed mode and fix v4l2-compliance fail.

Next, extract H264 request api driver to let mt8183 and mt8192 use the same
code, and adds mt8192 frame based h264 driver for stateless decoder.

Lastly, add vp8 and vp9 stateless decoder drivers.

Patches 1 refactor power/clock/interrupt interface.
Patches 2~4 get frame buffer size and resolution according to decoder capability.
Patches 5 set capture queue bytesused.
Patches 6 adjust GStreamer.
Patch 7~11 add to support MT21C compressed mode and fix v4l2-compliance fail.
patch 12 record capture queue format type.
Patch 13~14 extract h264 driver and add mt8192 frame based driver for h264 decoder.
Patch 15~16 add vp8 and vp9 stateless decoder drivers.
Patch 17 prevent kernel crash when rmmod mtk-vcodec-dec.ko
---
changes compared with v9:
- fix kernel robot build fail for patch 16
changes compared with v8:
- fix vp9 build error
- fix kernel-doc fail
changes compared with v7:
- adjust GStreamer, separate src buffer done with v4l2_ctrl_request_complete for patch 6.
- remove v4l2_m2m_set_dst_buffered.
- add new patch to set each plane bytesused in buf prepare for patch 5.
- using upstream interface to update vp9 prob tables for patch 16.
- fix maintainer comments.
- test the driver with chrome VD and GStreamer(H264/VP9/VP8/AV1).
changes compared with v6:
- rebase to the latest media stage and fix conficts
- fix memcpy to memcpy_fromio or memcpy_toio
- fix h264 crash when test field bitstream
changes compared with v5:
- fix vp9 comments for patch 15
- fix vp8 comments for patch 14.
- fix comments for patch 12.
- fix build errors.
changes compared with v4:
- fix checkpatch.pl fail.
- fix kernel-doc fail.
- rebase to the latest media codec driver.
changes compared with v3:
- remove enum mtk_chip for patch 2.
- add vp8 stateless decoder drivers for patch 14.
- add vp9 stateless decoder drivers for patch 15.
changes compared with v2:
- add new patch 11 to record capture queue format type.
- separate patch 4 according to tzung-bi's suggestion.
- re-write commit message for patch 5 according to tzung-bi's suggestion.
changes compared with v1:
- rewrite commit message for patch 12.
- rewrite cover-letter message.
---
Yunfei Dong (17):
  media: mediatek: vcodec: Add vdec enable/disable hardware helpers
  media: mediatek: vcodec: Using firmware type to separate different
    firmware architecture
  media: mediatek: vcodec: get capture queue buffer size from scp
  media: mediatek: vcodec: Read max resolution from dec_capability
  media: mediatek: vcodec: set each plane bytesused in buf prepare
  media: mediatek: vcodec: Refactor get and put capture buffer flow
  media: mediatek: vcodec: Refactor supported vdec formats and
    framesizes
  media: mediatek: vcodec: Getting supported decoder format types
  media: mediatek: vcodec: Add format to support MT21C
  media: mediatek: vcodec: disable vp8 4K capability
  media: mediatek: vcodec: Fix v4l2-compliance fail
  media: mediatek: vcodec: record capture queue format type
  media: mediatek: vcodec: Extract H264 common code
  media: mediatek: vcodec: support stateless H.264 decoding for mt8192
  media: mediatek: vcodec: support stateless VP8 decoding
  media: mediatek: vcodec: support stateless VP9 decoding
  media: mediatek: vcodec: prevent kernel crash when rmmod
    mtk-vcodec-dec.ko

 .../media/platform/mediatek/vcodec/Makefile   |    4 +
 .../platform/mediatek/vcodec/mtk_vcodec_dec.c |   62 +-
 .../mediatek/vcodec/mtk_vcodec_dec_drv.c      |    8 +-
 .../mediatek/vcodec/mtk_vcodec_dec_pm.c       |  166 +-
 .../mediatek/vcodec/mtk_vcodec_dec_pm.h       |    6 +-
 .../mediatek/vcodec/mtk_vcodec_dec_stateful.c |   19 +-
 .../vcodec/mtk_vcodec_dec_stateless.c         |  257 ++-
 .../platform/mediatek/vcodec/mtk_vcodec_drv.h |   41 +-
 .../mediatek/vcodec/mtk_vcodec_enc_drv.c      |    5 -
 .../platform/mediatek/vcodec/mtk_vcodec_fw.c  |    6 +
 .../platform/mediatek/vcodec/mtk_vcodec_fw.h  |    1 +
 .../vcodec/vdec/vdec_h264_req_common.c        |  310 +++
 .../vcodec/vdec/vdec_h264_req_common.h        |  274 +++
 .../mediatek/vcodec/vdec/vdec_h264_req_if.c   |  438 +---
 .../vcodec/vdec/vdec_h264_req_multi_if.c      |  626 +++++
 .../mediatek/vcodec/vdec/vdec_vp8_req_if.c    |  437 ++++
 .../vcodec/vdec/vdec_vp9_req_lat_if.c         | 2031 +++++++++++++++++
 .../platform/mediatek/vcodec/vdec_drv_if.c    |   37 +-
 .../platform/mediatek/vcodec/vdec_drv_if.h    |    3 +
 .../platform/mediatek/vcodec/vdec_ipi_msg.h   |   36 +
 .../platform/mediatek/vcodec/vdec_msg_queue.c |    2 +
 .../platform/mediatek/vcodec/vdec_msg_queue.h |    2 +
 .../platform/mediatek/vcodec/vdec_vpu_if.c    |   53 +-
 .../platform/mediatek/vcodec/vdec_vpu_if.h    |   15 +
 .../platform/mediatek/vcodec/venc_vpu_if.c    |    2 +-
 include/linux/remoteproc/mtk_scp.h            |    2 +
 26 files changed, 4242 insertions(+), 601 deletions(-)
 create mode 100644 drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.c
 create mode 100644 drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.h
 create mode 100644 drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
 create mode 100644 drivers/media/platform/mediatek/vcodec/vdec/vdec_vp8_req_if.c
 create mode 100644 drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c

Comments

Hans Verkuil April 29, 2022, 9:44 a.m. UTC | #1
Hi Yunfei,

On 26/04/2022 12:08, Yunfei Dong wrote:
> This series adds support for mt8192 h264/vp8/vp9 decoder drivers. Firstly, refactor
> power/clock/interrupt interfaces for mt8192 is lat and core architecture.
> 
> Secondly, add new functions to get frame buffer size and resolution according
> to decoder capability from scp side. Then add callback function to get/put
> capture buffer in order to enable lat and core decoder in parallel, need to
> adjust GStreamer at the same time. 
> 
> Then add to support MT21C compressed mode and fix v4l2-compliance fail.
> 
> Next, extract H264 request api driver to let mt8183 and mt8192 use the same
> code, and adds mt8192 frame based h264 driver for stateless decoder.
> 
> Lastly, add vp8 and vp9 stateless decoder drivers.
> 
> Patches 1 refactor power/clock/interrupt interface.
> Patches 2~4 get frame buffer size and resolution according to decoder capability.
> Patches 5 set capture queue bytesused.
> Patches 6 adjust GStreamer.
> Patch 7~11 add to support MT21C compressed mode and fix v4l2-compliance fail.
> patch 12 record capture queue format type.
> Patch 13~14 extract h264 driver and add mt8192 frame based driver for h264 decoder.
> Patch 15~16 add vp8 and vp9 stateless decoder drivers.
> Patch 17 prevent kernel crash when rmmod mtk-vcodec-dec.ko

I'm getting loads of sparse and smatch warnings/errors:

SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.c:20:28: warning: incorrect type in argument 1 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.c:176:21: warning: incorrect type in argument 1 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.c:179:21: warning: incorrect type in argument 1 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c:463:26: warning: incorrect type in argument 1 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c:647:60: warning: incorrect type in argument 2 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c:723:30: warning: incorrect type in argument 1 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c:740:48: warning: incorrect type in argument 2 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:1995:44: warning: incorrect type in argument 2 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:532:34: warning: incorrect type in argument 2 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:673:40: warning: incorrect type in argument 2 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:674:48: warning: incorrect type in argument 2 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:675:45: warning: incorrect type in argument 2 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:678:37: warning: incorrect type in argument 2 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:684:21: warning: incorrect type in argument 1 (different address spaces)
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:1912:45: warning: Using plain integer as NULL pointer
SPARSE:/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:1924:44: warning: incorrect type in argument 2 (different address spaces)


smatch: ERRORS
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:1192 vdec_vp9_slice_map_counts_eob_coef() error: buffer overflow 'counts->coef_probs[i][j][k]->band_0'
3 <= 5
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:1194 vdec_vp9_slice_map_counts_eob_coef() error: buffer overflow 'counts->eob_branch[i][j][k]->band_0'
3 <= 5
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:1196 vdec_vp9_slice_map_counts_eob_coef() error: buffer overflow 'counts->coef_probs[i][j][k]->band_0'
3 <= 5
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c:2018 vdec_vp9_slice_core_decode() error: we previously assumed 'pfc' could be null (see line 1963)
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c:
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c:700 vdec_h264_slice_single_decode() warn: unsigned 'nal_start_idx' is never less than zero.

And also one compile warning when compiling on a 32 bit platform (i.e. arm or i686):

In file included from /home/hans/work/build/media-git/include/linux/kernel.h:29,
                 from /home/hans/work/build/media-git/include/linux/cpumask.h:10,
                 from /home/hans/work/build/media-git/include/linux/mm_types_task.h:14,
                 from /home/hans/work/build/media-git/include/linux/mm_types.h:5,
                 from /home/hans/work/build/media-git/include/linux/buildid.h:5,
                 from /home/hans/work/build/media-git/include/linux/module.h:14,
                 from /home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c:7:
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c: In function 'vdec_h264_slice_single_decode':
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c:684:76: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  684 |                          inst->ctx->decoded_frame_cnt, y_fb_dma, c_fb_dma, (u64)fb);
      |                                                                            ^
/home/hans/work/build/media-git/include/linux/printk.h:418:33: note: in definition of macro 'printk_index_wrap'
  418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
      |                                 ^~~~~~~~~~~
/home/hans/work/build/media-git/include/linux/printk.h:132:17: note: in expansion of macro 'printk'
  132 |                 printk(fmt, ##__VA_ARGS__);             \
      |                 ^~~~~~
/home/hans/work/build/media-git/include/linux/printk.h:576:9: note: in expansion of macro 'no_printk'
  576 |         no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
      |         ^~~~~~~~~
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/../mtk_vcodec_util.h:45:9: note: in expansion of macro 'pr_debug'
   45 |         pr_debug("[MTK_VCODEC][%d]: " fmt "\n",                 \
      |         ^~~~~~~~
/home/hans/work/build/media-git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c:683:9: note: in expansion of macro 'mtk_vcodec_debug'
  683 |         mtk_vcodec_debug(inst, "+ [%d] FB y_dma=%llx c_dma=%llx va=0x%llx",
      |         ^~~~~~~~~~~~~~~~

Regards,

	Hans

> ---
> changes compared with v9:
> - fix kernel robot build fail for patch 16
> changes compared with v8:
> - fix vp9 build error
> - fix kernel-doc fail
> changes compared with v7:
> - adjust GStreamer, separate src buffer done with v4l2_ctrl_request_complete for patch 6.
> - remove v4l2_m2m_set_dst_buffered.
> - add new patch to set each plane bytesused in buf prepare for patch 5.
> - using upstream interface to update vp9 prob tables for patch 16.
> - fix maintainer comments.
> - test the driver with chrome VD and GStreamer(H264/VP9/VP8/AV1).
> changes compared with v6:
> - rebase to the latest media stage and fix conficts
> - fix memcpy to memcpy_fromio or memcpy_toio
> - fix h264 crash when test field bitstream
> changes compared with v5:
> - fix vp9 comments for patch 15
> - fix vp8 comments for patch 14.
> - fix comments for patch 12.
> - fix build errors.
> changes compared with v4:
> - fix checkpatch.pl fail.
> - fix kernel-doc fail.
> - rebase to the latest media codec driver.
> changes compared with v3:
> - remove enum mtk_chip for patch 2.
> - add vp8 stateless decoder drivers for patch 14.
> - add vp9 stateless decoder drivers for patch 15.
> changes compared with v2:
> - add new patch 11 to record capture queue format type.
> - separate patch 4 according to tzung-bi's suggestion.
> - re-write commit message for patch 5 according to tzung-bi's suggestion.
> changes compared with v1:
> - rewrite commit message for patch 12.
> - rewrite cover-letter message.
> ---
> Yunfei Dong (17):
>   media: mediatek: vcodec: Add vdec enable/disable hardware helpers
>   media: mediatek: vcodec: Using firmware type to separate different
>     firmware architecture
>   media: mediatek: vcodec: get capture queue buffer size from scp
>   media: mediatek: vcodec: Read max resolution from dec_capability
>   media: mediatek: vcodec: set each plane bytesused in buf prepare
>   media: mediatek: vcodec: Refactor get and put capture buffer flow
>   media: mediatek: vcodec: Refactor supported vdec formats and
>     framesizes
>   media: mediatek: vcodec: Getting supported decoder format types
>   media: mediatek: vcodec: Add format to support MT21C
>   media: mediatek: vcodec: disable vp8 4K capability
>   media: mediatek: vcodec: Fix v4l2-compliance fail
>   media: mediatek: vcodec: record capture queue format type
>   media: mediatek: vcodec: Extract H264 common code
>   media: mediatek: vcodec: support stateless H.264 decoding for mt8192
>   media: mediatek: vcodec: support stateless VP8 decoding
>   media: mediatek: vcodec: support stateless VP9 decoding
>   media: mediatek: vcodec: prevent kernel crash when rmmod
>     mtk-vcodec-dec.ko
> 
>  .../media/platform/mediatek/vcodec/Makefile   |    4 +
>  .../platform/mediatek/vcodec/mtk_vcodec_dec.c |   62 +-
>  .../mediatek/vcodec/mtk_vcodec_dec_drv.c      |    8 +-
>  .../mediatek/vcodec/mtk_vcodec_dec_pm.c       |  166 +-
>  .../mediatek/vcodec/mtk_vcodec_dec_pm.h       |    6 +-
>  .../mediatek/vcodec/mtk_vcodec_dec_stateful.c |   19 +-
>  .../vcodec/mtk_vcodec_dec_stateless.c         |  257 ++-
>  .../platform/mediatek/vcodec/mtk_vcodec_drv.h |   41 +-
>  .../mediatek/vcodec/mtk_vcodec_enc_drv.c      |    5 -
>  .../platform/mediatek/vcodec/mtk_vcodec_fw.c  |    6 +
>  .../platform/mediatek/vcodec/mtk_vcodec_fw.h  |    1 +
>  .../vcodec/vdec/vdec_h264_req_common.c        |  310 +++
>  .../vcodec/vdec/vdec_h264_req_common.h        |  274 +++
>  .../mediatek/vcodec/vdec/vdec_h264_req_if.c   |  438 +---
>  .../vcodec/vdec/vdec_h264_req_multi_if.c      |  626 +++++
>  .../mediatek/vcodec/vdec/vdec_vp8_req_if.c    |  437 ++++
>  .../vcodec/vdec/vdec_vp9_req_lat_if.c         | 2031 +++++++++++++++++
>  .../platform/mediatek/vcodec/vdec_drv_if.c    |   37 +-
>  .../platform/mediatek/vcodec/vdec_drv_if.h    |    3 +
>  .../platform/mediatek/vcodec/vdec_ipi_msg.h   |   36 +
>  .../platform/mediatek/vcodec/vdec_msg_queue.c |    2 +
>  .../platform/mediatek/vcodec/vdec_msg_queue.h |    2 +
>  .../platform/mediatek/vcodec/vdec_vpu_if.c    |   53 +-
>  .../platform/mediatek/vcodec/vdec_vpu_if.h    |   15 +
>  .../platform/mediatek/vcodec/venc_vpu_if.c    |    2 +-
>  include/linux/remoteproc/mtk_scp.h            |    2 +
>  26 files changed, 4242 insertions(+), 601 deletions(-)
>  create mode 100644 drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.c
>  create mode 100644 drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.h
>  create mode 100644 drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
>  create mode 100644 drivers/media/platform/mediatek/vcodec/vdec/vdec_vp8_req_if.c
>  create mode 100644 drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
>
Yunfei Dong May 6, 2022, 9:26 a.m. UTC | #2
Hi Hans,

Thanks for your suggestion.

I will fix below check fails in patch v11.

Best Regards,
Yunfei Dong
On Fri, 2022-04-29 at 11:44 +0200, Hans Verkuil wrote:
> Hi Yunfei,
> 
> On 26/04/2022 12:08, Yunfei Dong wrote:
> > This series adds support for mt8192 h264/vp8/vp9 decoder drivers.
> > Firstly, refactor
> > power/clock/interrupt interfaces for mt8192 is lat and core
> > architecture.
> > 
> > Secondly, add new functions to get frame buffer size and resolution
> > according
> > to decoder capability from scp side. Then add callback function to
> > get/put
> > capture buffer in order to enable lat and core decoder in parallel,
> > need to
> > adjust GStreamer at the same time. 
> > 
> > Then add to support MT21C compressed mode and fix v4l2-compliance
> > fail.
> > 
> > Next, extract H264 request api driver to let mt8183 and mt8192 use
> > the same
> > code, and adds mt8192 frame based h264 driver for stateless
> > decoder.
> > 
> > Lastly, add vp8 and vp9 stateless decoder drivers.
> > 
> > Patches 1 refactor power/clock/interrupt interface.
> > Patches 2~4 get frame buffer size and resolution according to
> > decoder capability.
> > Patches 5 set capture queue bytesused.
> > Patches 6 adjust GStreamer.
> > Patch 7~11 add to support MT21C compressed mode and fix v4l2-
> > compliance fail.
> > patch 12 record capture queue format type.
> > Patch 13~14 extract h264 driver and add mt8192 frame based driver
> > for h264 decoder.
> > Patch 15~16 add vp8 and vp9 stateless decoder drivers.
> > Patch 17 prevent kernel crash when rmmod mtk-vcodec-dec.ko
> 
> I'm getting loads of sparse and smatch warnings/errors:
> 
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.
> c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.
> c:20:28: warning: incorrect type in argument 1 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.
> c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.
> c:176:21: warning: incorrect type in argument 1 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.
> c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.
> c:179:21: warning: incorrect type in argument 1 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c:463:26: warning: incorrect type in argument 1 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c:647:60: warning: incorrect type in argument 2 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c:723:30: warning: incorrect type in argument 1 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c:740:48: warning: incorrect type in argument 2 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :1995:44: warning: incorrect type in argument 2 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :532:34: warning: incorrect type in argument 2 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :673:40: warning: incorrect type in argument 2 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :674:48: warning: incorrect type in argument 2 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :675:45: warning: incorrect type in argument 2 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :678:37: warning: incorrect type in argument 2 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :684:21: warning: incorrect type in argument 1 (different address
> spaces)
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :1912:45: warning: Using plain integer as NULL pointer
> SPARSE:/home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :1924:44: warning: incorrect type in argument 2 (different address
> spaces)
> 
> 
> smatch: ERRORS
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :1192 vdec_vp9_slice_map_counts_eob_coef() error: buffer overflow
> 'counts->coef_probs[i][j][k]->band_0'
> 3 <= 5
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :1194 vdec_vp9_slice_map_counts_eob_coef() error: buffer overflow
> 'counts->eob_branch[i][j][k]->band_0'
> 3 <= 5
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :1196 vdec_vp9_slice_map_counts_eob_coef() error: buffer overflow
> 'counts->coef_probs[i][j][k]->band_0'
> 3 <= 5
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> :2018 vdec_vp9_slice_core_decode() error: we previously assumed 'pfc'
> could be null (see line 1963)
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c:
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c:700 vdec_h264_slice_single_decode() warn: unsigned
> 'nal_start_idx' is never less than zero.
> 
> And also one compile warning when compiling on a 32 bit platform
> (i.e. arm or i686):
> 
> In file included from /home/hans/work/build/media-
> git/include/linux/kernel.h:29,
>                  from /home/hans/work/build/media-
> git/include/linux/cpumask.h:10,
>                  from /home/hans/work/build/media-
> git/include/linux/mm_types_task.h:14,
>                  from /home/hans/work/build/media-
> git/include/linux/mm_types.h:5,
>                  from /home/hans/work/build/media-
> git/include/linux/buildid.h:5,
>                  from /home/hans/work/build/media-
> git/include/linux/module.h:14,
>                  from /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c:7:
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c: In function 'vdec_h264_slice_single_decode':
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c:684:76: warning: cast from pointer to integer of different size
> [-Wpointer-to-int-cast]
>   684 |                          inst->ctx->decoded_frame_cnt,
> y_fb_dma, c_fb_dma, (u64)fb);
>       |                                                              
>               ^
> /home/hans/work/build/media-git/include/linux/printk.h:418:33: note:
> in definition of macro 'printk_index_wrap'
>   418 |                 _p_func(_fmt,
> ##__VA_ARGS__);                           \
>       |                                 ^~~~~~~~~~~
> /home/hans/work/build/media-git/include/linux/printk.h:132:17: note:
> in expansion of macro 'printk'
>   132 |                 printk(fmt, ##__VA_ARGS__);             \
>       |                 ^~~~~~
> /home/hans/work/build/media-git/include/linux/printk.h:576:9: note:
> in expansion of macro 'no_printk'
>   576 |         no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
>       |         ^~~~~~~~~
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/../mtk_vcodec_util.h:
> 45:9: note: in expansion of macro 'pr_debug'
>    45 |         pr_debug("[MTK_VCODEC][%d]: " fmt
> "\n",                 \
>       |         ^~~~~~~~
> /home/hans/work/build/media-
> git/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i
> f.c:683:9: note: in expansion of macro 'mtk_vcodec_debug'
>   683 |         mtk_vcodec_debug(inst, "+ [%d] FB y_dma=%llx
> c_dma=%llx va=0x%llx",
>       |         ^~~~~~~~~~~~~~~~
> 
> Regards,
> 
> 	Hans
> 
> > ---
> > changes compared with v9:
> > - fix kernel robot build fail for patch 16
> > changes compared with v8:
> > - fix vp9 build error
> > - fix kernel-doc fail
> > changes compared with v7:
> > - adjust GStreamer, separate src buffer done with
> > v4l2_ctrl_request_complete for patch 6.
> > - remove v4l2_m2m_set_dst_buffered.
> > - add new patch to set each plane bytesused in buf prepare for
> > patch 5.
> > - using upstream interface to update vp9 prob tables for patch 16.
> > - fix maintainer comments.
> > - test the driver with chrome VD and GStreamer(H264/VP9/VP8/AV1).
> > changes compared with v6:
> > - rebase to the latest media stage and fix conficts
> > - fix memcpy to memcpy_fromio or memcpy_toio
> > - fix h264 crash when test field bitstream
> > changes compared with v5:
> > - fix vp9 comments for patch 15
> > - fix vp8 comments for patch 14.
> > - fix comments for patch 12.
> > - fix build errors.
> > changes compared with v4:
> > - fix checkpatch.pl fail.
> > - fix kernel-doc fail.
> > - rebase to the latest media codec driver.
> > changes compared with v3:
> > - remove enum mtk_chip for patch 2.
> > - add vp8 stateless decoder drivers for patch 14.
> > - add vp9 stateless decoder drivers for patch 15.
> > changes compared with v2:
> > - add new patch 11 to record capture queue format type.
> > - separate patch 4 according to tzung-bi's suggestion.
> > - re-write commit message for patch 5 according to tzung-bi's
> > suggestion.
> > changes compared with v1:
> > - rewrite commit message for patch 12.
> > - rewrite cover-letter message.
> > ---
> > Yunfei Dong (17):
> >   media: mediatek: vcodec: Add vdec enable/disable hardware helpers
> >   media: mediatek: vcodec: Using firmware type to separate
> > different
> >     firmware architecture
> >   media: mediatek: vcodec: get capture queue buffer size from scp
> >   media: mediatek: vcodec: Read max resolution from dec_capability
> >   media: mediatek: vcodec: set each plane bytesused in buf prepare
> >   media: mediatek: vcodec: Refactor get and put capture buffer flow
> >   media: mediatek: vcodec: Refactor supported vdec formats and
> >     framesizes
> >   media: mediatek: vcodec: Getting supported decoder format types
> >   media: mediatek: vcodec: Add format to support MT21C
> >   media: mediatek: vcodec: disable vp8 4K capability
> >   media: mediatek: vcodec: Fix v4l2-compliance fail
> >   media: mediatek: vcodec: record capture queue format type
> >   media: mediatek: vcodec: Extract H264 common code
> >   media: mediatek: vcodec: support stateless H.264 decoding for
> > mt8192
> >   media: mediatek: vcodec: support stateless VP8 decoding
> >   media: mediatek: vcodec: support stateless VP9 decoding
> >   media: mediatek: vcodec: prevent kernel crash when rmmod
> >     mtk-vcodec-dec.ko
> > 
> >  .../media/platform/mediatek/vcodec/Makefile   |    4 +
> >  .../platform/mediatek/vcodec/mtk_vcodec_dec.c |   62 +-
> >  .../mediatek/vcodec/mtk_vcodec_dec_drv.c      |    8 +-
> >  .../mediatek/vcodec/mtk_vcodec_dec_pm.c       |  166 +-
> >  .../mediatek/vcodec/mtk_vcodec_dec_pm.h       |    6 +-
> >  .../mediatek/vcodec/mtk_vcodec_dec_stateful.c |   19 +-
> >  .../vcodec/mtk_vcodec_dec_stateless.c         |  257 ++-
> >  .../platform/mediatek/vcodec/mtk_vcodec_drv.h |   41 +-
> >  .../mediatek/vcodec/mtk_vcodec_enc_drv.c      |    5 -
> >  .../platform/mediatek/vcodec/mtk_vcodec_fw.c  |    6 +
> >  .../platform/mediatek/vcodec/mtk_vcodec_fw.h  |    1 +
> >  .../vcodec/vdec/vdec_h264_req_common.c        |  310 +++
> >  .../vcodec/vdec/vdec_h264_req_common.h        |  274 +++
> >  .../mediatek/vcodec/vdec/vdec_h264_req_if.c   |  438 +---
> >  .../vcodec/vdec/vdec_h264_req_multi_if.c      |  626 +++++
> >  .../mediatek/vcodec/vdec/vdec_vp8_req_if.c    |  437 ++++
> >  .../vcodec/vdec/vdec_vp9_req_lat_if.c         | 2031
> > +++++++++++++++++
> >  .../platform/mediatek/vcodec/vdec_drv_if.c    |   37 +-
> >  .../platform/mediatek/vcodec/vdec_drv_if.h    |    3 +
> >  .../platform/mediatek/vcodec/vdec_ipi_msg.h   |   36 +
> >  .../platform/mediatek/vcodec/vdec_msg_queue.c |    2 +
> >  .../platform/mediatek/vcodec/vdec_msg_queue.h |    2 +
> >  .../platform/mediatek/vcodec/vdec_vpu_if.c    |   53 +-
> >  .../platform/mediatek/vcodec/vdec_vpu_if.h    |   15 +
> >  .../platform/mediatek/vcodec/venc_vpu_if.c    |    2 +-
> >  include/linux/remoteproc/mtk_scp.h            |    2 +
> >  26 files changed, 4242 insertions(+), 601 deletions(-)
> >  create mode 100644
> > drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.c
> >  create mode 100644
> > drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_common.h
> >  create mode 100644
> > drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.
> > c
> >  create mode 100644
> > drivers/media/platform/mediatek/vcodec/vdec/vdec_vp8_req_if.c
> >  create mode 100644
> > drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
> > 
> 
>