public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v9 00/17] media: rkvdec: Add support for VDPU381 and VDPU383
@ 2026-01-20 22:20 Detlev Casanova
  2026-01-20 22:20 ` [PATCH v9 01/17] media: uapi: HEVC: Add v4l2_ctrl_hevc_ext_sps_[ls]t_rps controls Detlev Casanova
                   ` (16 more replies)
  0 siblings, 17 replies; 21+ messages in thread
From: Detlev Casanova @ 2026-01-20 22:20 UTC (permalink / raw)
  To: linux-kernel
  Cc: Mauro Carvalho Chehab, Detlev Casanova, Ezequiel Garcia,
	Heiko Stuebner, Daniel Almeida, Jonathan Corbet, Ricardo Ribalda,
	Hans Verkuil, Yunke Cao, Hans de Goede, Laurent Pinchart,
	Nicolas Dufresne, Pavan Bobba, Sakari Ailus, James Cowgill,
	linux-media, linux-rockchip, linux-arm-kernel, kernel,
	Jonas Karlman, Diederik de Haas

hese variants are found respectively in the RK3588 and RK3576 SoCs.
This patch only adds support for H264 and H265 in both variants.

As there is a considerable part of the code that can be shared with the
already supported rkvdec decoder driver, the support for these variants
is added here rather than writing a new driver.

This patch set uses the newly introduced hevc_ext_sps_[ls]t_rps v4l2
controls for HEVC.
Therefore, a patched version of userpace tools is needed for HEVC
support (added for GStreamer[1] and in an early stage for FFmpeg[2]).

The DTS changes can be found in another patch set[3]

[1]: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9355
[2]: https://gitlab.collabora.com/detlev/ffmpeg
[3]: https://lore.kernel.org/all/20251020212009.8852-1-detlev.casanova@collabora.com/

Changes since v8:
 - Fix function stack frame size being too big with clang and some config
 - Move cabac tables declarations in their own header
 - Add vdpu38x_h264_ctrl_descs to allow levels up to 6.0 on vdpu381 and vdpu383
 - Fix small alignment issue

Changes since v7:
 - Be more consistent with reg names format (reg<num:03>_<name>)
 - Re-add sps validation in start(), skipping it would let userspace
   configure the driver to do buffer overflows
 - Move watchdog configuration to a common function
 - Use div_u64() to allow building for 32 bits architectures
 - Do not try to program extended rps if it was not set

Changes since v6:
 - Remove coded_fmts capabilities
 - Remove inexistant V4L2_HEVC kconfig dependency
 - Add missing rkvdec registers
 - Fix memcpy sizes
 - Remove non-necessary name and style changes
 - Use common get_image_fmt
 - Do not validate sps in start()
 - Remove unused variable
 - Change named_regs to has_single_reg_region
 - Compared to v6, I didn't use a union for the ref addr and flags
   registers, as I find the flat struct more readable.

Changes since v5:
- Extract multicore management in separate commit
- Move variant specific functions to an ops struct
- Fix a typo and "h264" -> "hevc" copy/paste mistakes
- Move RKVDEC_*_PIXELS to rkvdec.h
- Drop VDPU383_*_PIXELS, use the the RKVDEC ones instead
- Change RKVDEC_1080P_PIXELS value to 1920 * 1088
- Long and short term ref sets extend controls:
  - Add them in visl traces
  - Reword documentation to specify SPS extension and use
  - Mention Vulkan Video API similarity
  - Specify behavior for empty array values
  - Reorder struct fields to ensure fixed compiled size
  - Remove the mention of V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag

Changes since v4:
 - Add basic ext_sps_[ls]t_rps validation (flags only)
 - Add missing copyright in new common files
 - Rename num_coded_fmts, rcb_num, clk_count
 - Avoid allocating RCB config when not needed
 - Merge rkvdec_config into rkvdec_variant
 - Keep rkvdec_hevc_get_image_fmt per variant

Changes since v3:
 - Rebased on latest next (ea299a216426) + HEVC support for rk3399

Changes since v2:
 - Rebased on Kwiboo's HEVC support for rk3399
 - Include hevc_ext_sps_[ls]t_rps v4l2 controls commits
 - Remove empty lines at end of files
 - Rename RKVDEC2_ALLOC_* to RKVDEC_ALLOC_*
 - Set min_with and min_height to 64
 - Remove vdpu38x_fill_pixfmt_mp() function
 - Handle userspace not supporting hevc_ext_sps_[ls]t_rps
 - Make all config structs static const

Changes since v1:
 - Add parsing of the short and long term ref frame sets from the new v4l2
   controls
 - Add RPS cache to avoid parsing the same data again
 - Fix HEVC pixel formats selection
 - Fix multiple indentation errors

Detlev Casanova (17):
  media: uapi: HEVC: Add v4l2_ctrl_hevc_ext_sps_[ls]t_rps controls
  media: v4l2-ctrls: Add hevc_ext_sps_[ls]t_rps controls
  media: visl: Add HEVC short and long term RPS sets
  media: rkvdec: Switch to using structs instead of writel
  media: rkvdec: Move cabac tables to their own source file
  media: rkvdec: Use structs to represent the HW RPS
  media: rkvdec: Move h264 functions to common file
  media: rkvdec: Move hevc functions to common file
  media: rkvdec: Add variant specific coded formats list
  media: rkvdec: Add RCB and SRAM support
  media: rkvdec: Support per-variant interrupt handler
  media: rkvdec: Enable all clocks without naming them
  media: rkvdec: Disable multicore support
  media: rkvdec: Add H264 support for the VDPU381 variant
  media: rkvdec: Add H264 support for the VDPU383 variant
  media: rkvdec: Add HEVC support for the VDPU381 variant
  media: rkvdec: Add HEVC support for the VDPU383 variant

 .../media/v4l/ext-ctrls-codec-stateless.rst   | 120 +++
 .../media/v4l/videodev2.h.rst.exceptions      |   2 +
 .../media/v4l/vidioc-queryctrl.rst            |  12 +
 .../media/platform/rockchip/rkvdec/Makefile   |  14 +-
 .../{rkvdec-hevc-data.c => rkvdec-cabac.c}    | 506 +++++++++-
 .../platform/rockchip/rkvdec/rkvdec-cabac.h   |  21 +
 .../rockchip/rkvdec/rkvdec-h264-common.c      | 258 +++++
 .../rockchip/rkvdec/rkvdec-h264-common.h      |  85 ++
 .../platform/rockchip/rkvdec/rkvdec-h264.c    | 893 ++----------------
 .../rockchip/rkvdec/rkvdec-hevc-common.c      | 511 ++++++++++
 .../rockchip/rkvdec/rkvdec-hevc-common.h      | 107 +++
 .../platform/rockchip/rkvdec/rkvdec-hevc.c    | 282 +-----
 .../platform/rockchip/rkvdec/rkvdec-rcb.c     | 179 ++++
 .../platform/rockchip/rkvdec/rkvdec-rcb.h     |  29 +
 .../platform/rockchip/rkvdec/rkvdec-regs.h    | 586 ++++++++----
 .../rockchip/rkvdec/rkvdec-vdpu381-h264.c     | 469 +++++++++
 .../rockchip/rkvdec/rkvdec-vdpu381-hevc.c     | 639 +++++++++++++
 .../rockchip/rkvdec/rkvdec-vdpu381-regs.h     | 430 +++++++++
 .../rockchip/rkvdec/rkvdec-vdpu383-h264.c     | 538 +++++++++++
 .../rockchip/rkvdec/rkvdec-vdpu383-hevc.c     | 652 +++++++++++++
 .../rockchip/rkvdec/rkvdec-vdpu383-regs.h     | 281 ++++++
 .../platform/rockchip/rkvdec/rkvdec-vp9.c     | 232 ++---
 .../media/platform/rockchip/rkvdec/rkvdec.c   | 633 +++++++++++--
 .../media/platform/rockchip/rkvdec/rkvdec.h   |  50 +-
 drivers/media/test-drivers/visl/visl-dec.c    |   7 +
 drivers/media/test-drivers/visl/visl-dec.h    |   3 +
 .../media/test-drivers/visl/visl-trace-hevc.h |  59 ++
 drivers/media/v4l2-core/v4l2-ctrls-core.c     |  28 +
 drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  10 +
 include/uapi/linux/v4l2-controls.h            |  61 ++
 include/uapi/linux/videodev2.h                |   2 +
 31 files changed, 6235 insertions(+), 1464 deletions(-)
 rename drivers/media/platform/rockchip/rkvdec/{rkvdec-hevc-data.c => rkvdec-cabac.c} (86%)
 create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-cabac.h
 create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-h264-common.c
 create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-h264-common.h
 create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-hevc-common.c
 create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-hevc-common.h
 create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-rcb.c
 create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-rcb.h
 create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu381-h264.c
 create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu381-hevc.c
 create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu381-regs.h
 create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu383-h264.c
 create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu383-hevc.c
 create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu383-regs.h

-- 
2.52.0


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2026-01-21 23:04 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-20 22:20 [PATCH v9 00/17] media: rkvdec: Add support for VDPU381 and VDPU383 Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 01/17] media: uapi: HEVC: Add v4l2_ctrl_hevc_ext_sps_[ls]t_rps controls Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 02/17] media: v4l2-ctrls: Add hevc_ext_sps_[ls]t_rps controls Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 03/17] media: visl: Add HEVC short and long term RPS sets Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 04/17] media: rkvdec: Switch to using structs instead of writel Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 05/17] media: rkvdec: Move cabac tables to their own source file Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 06/17] media: rkvdec: Use structs to represent the HW RPS Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 07/17] media: rkvdec: Move h264 functions to common file Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 08/17] media: rkvdec: Move hevc " Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 09/17] media: rkvdec: Add variant specific coded formats list Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 10/17] media: rkvdec: Add RCB and SRAM support Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 11/17] media: rkvdec: Support per-variant interrupt handler Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 12/17] media: rkvdec: Enable all clocks without naming them Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 13/17] media: rkvdec: Disable multicore support Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 14/17] media: rkvdec: Add H264 support for the VDPU381 variant Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 15/17] media: rkvdec: Add H264 support for the VDPU383 variant Detlev Casanova
2026-01-21 14:27   ` kernel test robot
2026-01-21 14:46     ` Nicolas Dufresne
2026-01-21 23:04       ` Nathan Chancellor
2026-01-20 22:20 ` [PATCH v9 16/17] media: rkvdec: Add HEVC support for the VDPU381 variant Detlev Casanova
2026-01-20 22:20 ` [PATCH v9 17/17] media: rkvdec: Add HEVC support for the VDPU383 variant Detlev Casanova

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox