[PATCH v5 0/4] media: rockchip: Add JPEG decoder driver
From: Sascha Hauer <s.hauer@pengutronix.de>
Date: 2026-09-25 11:45:55
Also in:
linux-devicetree, linux-media, linux-rockchip, lkml
This series adds support for the Rockchip JPEG decoder hardware. The JPEG decoder is an in-house IP which is integrated into various Rockchip SoCs. The driver is tested on a RK3588 board but reportedly works on RK3568 as well. An earlier version of this driver was posted as part of the Hantro driver [1]. That turned out to be the wrong abstraction, so it was split up into a series with the Hantro fixes [2] and this series with a standalone driver, which started over at v1. [1] https://lore.kernel.org/r/20260819-rk3588-jpegdec-v1-0-33d74cdf369c@pengutronix.de (local) [2] https://lore.kernel.org/r/20260824-rk3588-jpegdec-v1-0-180a30a2852d@pengutronix.de (local) Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> --- Changes in v5: - Keep the device until both the binding and the last file handle are gone, devres freed it under an open file - Let a job still running in rkjpegd_remove() finish and start no more, close() waited forever - Reset the block after a job that ended in error - Reset the block after a frame that left SOFT_RST_RDY clear - Skip trailing padding of any length when looking for the EOI, 63 bytes of padding hid the marker, and search only the entropy coded data - Annotate the DMA side buffer as little-endian - Return -EINVAL from enum_framesizes() for an unsupported format - Drop most of the in-function comments - Drop the review note on rkjpegd_remove(), the code is fixed instead - Bound the Huffman value copy by the table length parsed at queue time - Fall back to the standard Huffman tables for frames without a DHT - Resume decoding on V4L2_DEC_CMD_START after a drain or resolution change - Do not re-arm a drain that already completed - Report no resolution change for a corrupt frame past the first one - Send no EOS event for the LAST buffer of a resolution change - Correct the IRQ clear and Huffman table set comments - Keep a resolution change out of the mem2mem drain state, a STOP sent before the capture queue was restarted ended the stream at once - Look for a mid-stream resolution change only in device_run(), buf_queue() raced the interrupt handler for the capture buffer - Set the field on every capture buffer and the sequence on every LAST buffer the driver returns itself - Report the first resolution after CREATE_BUFS on the OUTPUT queue too - Report the capture colorimetry from the OUTPUT format rather than echoing what userspace passed, and stop S_FMT(CAPTURE) changing the OUTPUT format - Refuse RGB coded frames, Adobe APP14 transform 0, instead of decoding them as YCbCr - Drop the 4:4:0 mode, the JPEG parser never lets such a frame through - Depend on V4L_MEM2MEM_DRIVERS - Correct the downstream clock rate in the rk356x DT commit message - Serialise V4L2_DEC_CMD_STOP/START with the job completion, a drain racing the last job's interrupt never finished - Forget a drain that STREAMOFF(CAPTURE) aborted, a later resolution change re-armed it - Bracket CPU reads of imported coded buffers with dma_buf_begin_cpu_access() - Wait for a running job when probe fails after registering the video device - Add an SPDX line to the Makefile - Link to v4: https://lore.kernel.org/r/20260918-rockchip-jpegdec-v4-0-0dd97df47abb@pengutronix.de (local) Changes in v4: - Set and read the source change flags under fmt_lock - Check the runtime PM state in the interrupt handler - Use dma-buf CPU access around the grayscale chroma fill - Update the review notes in the driver patch - Link to v3: https://lore.kernel.org/r/20260914-rockchip-jpegdec-v3-0-3583c376d0d2@pengutronix.de (local) Changes in v3: - Rename binding to rockchip,rk3568-jpegd.yaml to match the compatible - Link the earlier Hantro based series in the cover letter - Enable clocks from the runtime PM callbacks, use pm_ptr() - Protect capture format and crop with a mutex - Clear bytesused on capture buffers returned without a picture - Revert padding the capture buffer to the MCU width, it broke 4:1:1 - Add notes on review questions to the driver patch - Link to v2: https://lore.kernel.org/r/20260825-rockchip-jpegdec-v2-0-86af859a3266@pengutronix.de (local) Changes in v2: - rename clocks from aclk/hclk to axi/ahb - Add missing Signed-off-by - Fix suspend/resume path - Pad the capture buffer to the mode's MCU width, not to a macroblock - Reject a frame header picture size outside the supported range - Set the capture payload at decode time, not at queue time - Trim comments in the driver - Link to v1: https://lore.kernel.org/r/20260824-rockchip-jpegdec-v1-0-8011822bf500@pengutronix.de (local) --- Sascha Hauer (4): media: dt-bindings: Add Rockchip JPEG decoder media: rockchip: Add JPEG decoder driver arm64: dts: rockchip: rk3588: Add JPEG decoder node arm64: dts: rockchip: rk356x: Add JPEG decoder node .../bindings/media/rockchip,rk3568-jpegd.yaml | 92 + MAINTAINERS | 9 + arch/arm64/boot/dts/rockchip/rk356x-base.dtsi | 22 + arch/arm64/boot/dts/rockchip/rk3588-base.dtsi | 24 + drivers/media/platform/rockchip/Kconfig | 1 + drivers/media/platform/rockchip/Makefile | 1 + drivers/media/platform/rockchip/rkjpegd/Kconfig | 16 + drivers/media/platform/rockchip/rkjpegd/Makefile | 4 + .../rockchip/rkjpegd/rkjpegd-vdpu720-regs.h | 235 ++ drivers/media/platform/rockchip/rkjpegd/rkjpegd.c | 2536 ++++++++++++++++++++ 10 files changed, 2940 insertions(+) --- base-commit: 93f51579e7df248780214094418f205253383cc5 change-id: 20260821-rockchip-jpegdec-0d6880cf656c Best regards, -- Sascha Hauer [off-list ref]