<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/rk3588-and-rk3576-video-decoders-support-merged-in-the-upstream-linux-kernel-ozansvsni" -->

---
title: RK3588 and RK3576 video decoders support merged in the...
description: Support for Rockchip&#x27;s VDPU381 and VDPU383 video decoders (found on RK3588 and RK3576 SoCs) has been merged into the upstream Linux kernel, enabling mainline...
canonical: https://daily.dev/posts/rk3588-and-rk3576-video-decoders-support-merged-in-the-upstream-linux-kernel-ozansvsni
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: RK3588 and RK3576 video decoders support merged in the upstream Linux Kernel | daily.dev
og:description: Support for Rockchip&#x27;s VDPU381 and VDPU383 video decoders (found on RK3588 and RK3576 SoCs) has been merged into the upstream Linux kernel, enabling mainline...
og:url: https://daily.dev/posts/rk3588-and-rk3576-video-decoders-support-merged-in-the-upstream-linux-kernel-ozansvsni
og:image: https://api.daily.dev/og/posts/ozAnSvsNI.png
og:image:alt: RK3588 and RK3576 video decoders support merged in the upstream Linux Kernel
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# RK3588 and RK3576 video decoders support merged in the upstream Linux Kernel

**[Collabora Blog](https://daily.dev/sources/collabora)** · 6 min read · 0 upvotes · 0 comments

## Summary

Support for Rockchip's VDPU381 and VDPU383 video decoders (found on RK3588 and RK3576 SoCs) has been merged into the upstream Linux kernel, enabling mainline H.264 and HEVC hardware decoding. Key engineering highlights include: a fix for IOMMU state loss after decoder reset (mappings are now explicitly restored), new V4L2 stateless HEVC UAPI controls for explicit Reference Picture Set (RPS) programming aligned with the Vulkan Video Decode API, and a struct-based register programming approach that enforces deterministic write ordering. GStreamer 1.28 has been updated to support the new controls. Multi-core decoding for RK3588's dual VDPU381 cores is actively in development but not yet upstreamed.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.collabora.com/news-and-blog/news-and-events/rk3588-and-rk3576-video-decoders-support-merged-in-the-upstream-linux-kernel.html>

## Questions this post answers

### Why does the Rockchip VDPU381/VDPU383 decoder lose IOMMU mappings after a reset and how is it fixed in the Linux kernel driver?

The VDPU381/383 embeds its IOMMU core inside the decoder itself, so a decoder reset (triggered on decoding errors) also resets the IOMMU, clearing all address mappings the driver had programmed. The kernel's cached view of those mappings remained valid while the hardware had lost them, causing failed memory accesses. The fix restores mappings after reset by programming an empty IOMMU domain and then reprogramming the default domain, without modifying the IOMMU driver.

_Developers working on Rockchip media drivers track upstream patches like this on daily.dev._

### What new V4L2 HEVC UAPI controls were added for Rockchip VDPU381/383 and why are they needed?

Two new V4L2 stateless HEVC UAPI controls were added to expose explicit Reference Picture Set (RPS) programming, split into short-term and long-term RPS tables. Unlike VeriSilicon decoders, Rockchip decoders cannot derive RPS from SPS data alone and have no skip method to bypass it. The data structures mirror Vulkan Video Decode API descriptions to keep Linux media APIs consistent with the broader decode ecosystem.

_Linux multimedia developers keeping up with V4L2 UAPI changes find relevant patches surfaced on daily.dev._

### Why does the Rockchip VDPU381/383 Linux driver use C structs for register programming instead of writel() calls or regmap?

The hardware requires every register to be written explicitly — even those matching default values — because skipping writes can leave the decoder in an inconsistent internal state. Write order also matters; correct values in the wrong sequence break decoding. Struct-based programming guarantees a complete, deterministically ordered register image via a memcpy-style write. Regmap was also ruled out because future multi-core support needs registers not bound to a specific core address.

_Engineers writing Linux device drivers for media hardware find architecture decisions like this discussed on daily.dev._

## Similar posts on daily.dev

- [Decoding with Rockchip at Kernel Recipes 2026](https://daily.dev/posts/decoding-with-rockchip-at-kernel-recipes-2026-gisa2vyfl) · Collabora Blog · 0 upvotes · 0 comments
- [New Rockchip RKCIF & RKVDEC HEVC Media Drivers For Linux 6.19](https://daily.dev/posts/new-rockchip-rkcif-rkvdec-hevc-media-drivers-for-linux-6-19-89ndcuhji) · Phoronix · 0 upvotes · 0 comments
- [Same-day upstream Linux support for Snapdragon 8 Elite Gen 5 mobile platform](https://daily.dev/posts/same-day-upstream-linux-support-for-snapdragon-8-elite-gen-5-mobile-platform-n15n6x3tw) · Hacker News · 2 upvotes · 1 comments
- [Reverse-engineering brings RK3576 NPU support to open-source Rocket driver for mainline Linux](https://daily.dev/posts/reverse-engineering-brings-rk3576-npu-support-to-open-source-rocket-driver-for-mainline-linux-t083hlhhd) · CNX Software · 0 upvotes · 0 comments
- [Apple Video Decode Driver Posted For Upstream Linux Kernel Review](https://daily.dev/posts/apple-video-decode-driver-posted-for-upstream-linux-kernel-review-pfockg6ep) · Phoronix · 0 upvotes · 0 comments

---

Tags: [#linux](https://daily.dev/tags/linux)

[View this post on daily.dev](https://daily.dev/posts/rk3588-and-rk3576-video-decoders-support-merged-in-the-upstream-linux-kernel-ozansvsni)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"RK3588 and RK3576 video decoders support merged in the upstream Linux Kernel","url":"https://daily.dev/posts/rk3588-and-rk3576-video-decoders-support-merged-in-the-upstream-linux-kernel-ozansvsni","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/rk3588-and-rk3576-video-decoders-support-merged-in-the-upstream-linux-kernel-ozansvsni"},"datePublished":"2026-08-11T08:57:26.125Z","dateModified":"2026-08-11T09:44:45.552Z","description":"Support for Rockchip's VDPU381 and VDPU383 video decoders (found on RK3588 and RK3576 SoCs) has been merged into the upstream Linux kernel, enabling mainline...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/0e3dc1fcecb685e342e7ca0626565c0b?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/0e3dc1fcecb685e342e7ca0626565c0b?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Collabora Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Collabora Blog","logo":"https://media.daily.dev/image/upload/s--ZGZ0FjqS--/f_auto,q_auto/v1786438306/logos/collabora?_a=BAMAMicg0","url":"https://daily.dev/sources/collabora"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/rk3588-and-rk3576-video-decoders-support-merged-in-the-upstream-linux-kernel-ozansvsni","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"linux","timeRequired":"PT6M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Collabora Blog","item":"https://daily.dev/sources/collabora"},{"@type":"ListItem","position":3,"name":"RK3588 and RK3576 video decoders support merged in the upstream Linux Kernel"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/rk3588-and-rk3576-video-decoders-support-merged-in-the-upstream-linux-kernel-ozansvsni#faq","mainEntity":[{"@type":"Question","name":"Why does the Rockchip VDPU381/VDPU383 decoder lose IOMMU mappings after a reset and how is it fixed in the Linux kernel driver?","acceptedAnswer":{"@type":"Answer","text":"The VDPU381/383 embeds its IOMMU core inside the decoder itself, so a decoder reset (triggered on decoding errors) also resets the IOMMU, clearing all address mappings the driver had programmed. The kernel's cached view of those mappings remained valid while the hardware had lost them, causing failed memory accesses. The fix restores mappings after reset by programming an empty IOMMU domain and then reprogramming the default domain, without modifying the IOMMU driver. Developers working on Rockchip media drivers track upstream patches like this on daily.dev."}},{"@type":"Question","name":"What new V4L2 HEVC UAPI controls were added for Rockchip VDPU381/383 and why are they needed?","acceptedAnswer":{"@type":"Answer","text":"Two new V4L2 stateless HEVC UAPI controls were added to expose explicit Reference Picture Set (RPS) programming, split into short-term and long-term RPS tables. Unlike VeriSilicon decoders, Rockchip decoders cannot derive RPS from SPS data alone and have no skip method to bypass it. The data structures mirror Vulkan Video Decode API descriptions to keep Linux media APIs consistent with the broader decode ecosystem. Linux multimedia developers keeping up with V4L2 UAPI changes find relevant patches surfaced on daily.dev."}},{"@type":"Question","name":"Why does the Rockchip VDPU381/383 Linux driver use C structs for register programming instead of writel() calls or regmap?","acceptedAnswer":{"@type":"Answer","text":"The hardware requires every register to be written explicitly — even those matching default values — because skipping writes can leave the decoder in an inconsistent internal state. Write order also matters; correct values in the wrong sequence break decoding. Struct-based programming guarantees a complete, deterministically ordered register image via a memcpy-style write. Regmap was also ruled out because future multi-core support needs registers not bound to a specific core address. Engineers writing Linux device drivers for media hardware find architecture decisions like this discussed on daily.dev."}}]}
```

