Collabora has announced mainline Linux support for H.264 and H.265 hardware video decoding on Rockchip RK3588 and RK3576 systems-on-chip. This development ends reliance on vendor-specific BSP kernels for these features. The update includes new API controls and fixes for hardware issues.
The Rockchip RK3588 and RK3576 SoCs, along with variants such as the RK3588S and RK3576J, incorporate VDPU381 and VDPU383 video decoders respectively. Until now, hardware decoding of H.264 (AVC) and H.265 (HEVC) formats required the Rockchip BSP kernel. Collabora's recent work introduces upstream Linux support through a 17-patch series that adds decoder functionality, device tree bindings, and nodes.
Key enhancements include new V4L2 HEVC user-space API controls for handling short-term and long-term Reference Picture Sets (RPS). These controls are essential for the VDPU381 and VDPU383 decoders, unlike some others that can bypass them. Userspace applications must now provide complete RPS tables to the kernel. Support for these controls has been added to GStreamer 1.28, with preliminary integration in FFmpeg, and it facilitates compatibility with Vulkan Video Decode. The Virtual Stateless Decoder (visl) driver has also been updated to trace all control parameters.
A notable fix addresses an IOMMU restore problem: since the IOMMU is embedded in the decoders, resets clear address mappings, but the kernel previously treated them as valid. The patch restores cached mappings post-reset, affecting other Rockchip IP blocks like the RGA 2D graphics accelerator.
For register programming, engineers adopted a C struct-based model over ad-hoc writes to ensure all registers are set in the correct order, preventing inconsistencies even with default values. This approach promotes completeness and prepares for multi-core use.
The patches are expected to merge into Linux 7.1, roughly three months after Linux 6.19's February release. Future efforts by Collabora include multi-core decoding on the RK3588, AV1 support for the RK3576, VP9 for the RK3588, and VDPU346 compatibility for RK356X SoCs. A detailed summary is available on the Collabora website.