claude-noether 117ee76762 Phase 3 FINAL close: structural stall confirmed across 10 iterations
Janet structural review + 4 more diagnostic iters (7-10) revealed:
- HW reads reg197_cabactbl_base, reg161/163, and prob bases
  unconditionally for VP9 (BSP works because its kernel skips fd=0;
  mainline writes raw IOVAs so 0 = IOMMU fault)
- Prob content does NOT matter for stall (zero-byte scratch and
  legacy-format priv_tbl.probs hang identically)
- Struct size gaps (60-byte unwritten tail in vp9_param) match HEVC's
  layout and aren't the cause

Final hypothesis space:
1. BSP-specific kernel init we're missing (cache config / AXI QoS)
2. vdpu381 mode-2 reserved but never validated by Casanova
3. Prob buffer needs VP9-specific INITIALIZATION (not just any pointer)

All 3 require structural rework, not register tuning. Per Janet
PIVOT verdict, recommend Option A: pivot to AV1 on vdpu383 (Casanova
ships it complete in v7.0; 1-2 days port).

Branch boltzmann:~/src/linux-rockchip:vp9-enablement-iter1 head
3d7ffae30626 — 7 commits, 1620 LoC, compiles clean, VP9F enumerates
on /dev/video1, HW does not decode.

Ampere recovery to sibling-campaign close:
  sudo cp ~/vp9-iter1-backup/rockchip-vdec.ko.sibling-campaign-close \
    /lib/modules/$(uname -r)/kernel/drivers/media/platform/rockchip/rkvdec/
  sudo depmod -a && sudo modprobe -r rockchip-vdec && sudo modprobe rockchip-vdec

Campaign closes at "structural impossibility identified", with
substantial substrate preserved for future Collabora coordination or
RE work.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 06:21:30 +00:00

ampere-vp9-enablement

Stand-alone port + upstream-targeting work to enable VP9 hardware decode on Rockchip RK3588's rkvdec (vdpu381 register layout).

Status (2026-05-17 ~01:00)

Upstream RK3588 mainline rkvdec (Casanova v7.0 series, landed in Linux 7.0) supports H.264 + HEVC only. VP9 is on Collabora's stated roadmap but no WIP series has been posted to linux-media as of this campaign open. The legacy rkvdec-vp9.c (RK3399 / vdpu341 hardware) is feature-complete at 1042 lines but its register-config logic does not translate directly to vdpu381.

This campaign:

  1. Ports VP9 enablement to vdpu381 register layout (new file rkvdec-vdpu381-vp9.c)
  2. Registers VP9 V4L2 controls in vdpu38x_vp9_ctrl_descs[]
  3. Adds VP9 fmt to vdpu381_coded_fmts[] with the new ops
  4. Verifies bit-perfect HW vs SW decode (per feedback_compare_hw_against_sw_reference)
  5. Proposes upstream via linux-media

Sibling campaign: ampere-kernel-decoders closed at HEVC bit-perfect (kernel-agent#14 + #15 are the prerequisite kernel fixes).

Scope (out of)

  • VP9 on RK3399 (works via legacy rkvdec-vp9.c already in mainline)
  • VP9 on hantro (hantro decoder on RK3588 doesn't expose VP9; this campaign targets rkvdec)
  • AV1 on RK3588 (separate work; AV1 is on hantro fdc70000 already + per Collabora)
  • VP8 (already works via hantro)
  • HEVC (closed in ampere-kernel-decoders)

Process

8-phase loop (per ~/.claude/CLAUDE.md). All commits via claude-noether identity. Patches will be RFC-quality and routed via kernel-agent once ready.

S
Description
VP9 HW decode enablement on RK3588 rkvdec/vdpu381 — upstream-aligned port
Readme 78 KiB
Languages
Markdown 100%