lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250930040348.3702923-1-h.dewangan@samsung.com>
Date: Tue, 30 Sep 2025 09:33:19 +0530
From: Himanshu Dewangan <h.dewangan@...sung.com>
To: mchehab@...nel.org, robh@...nel.org, krzk+dt@...nel.org,
	conor+dt@...nel.org, sumit.semwal@...aro.org, christian.koenig@....com,
	alim.akhtar@...sung.com, manjun@...sung.com, nagaraju.s@...sung.com,
	ih0206.lee@...sung.com, jehyung.lee@...sung.com
Cc: linux-arm-kernel@...ts.infradead.org, linux-media@...r.kernel.org,
	devicetree@...r.kernel.org, linux-samsung-soc@...r.kernel.org,
	linux-kernel@...r.kernel.org, dri-devel@...ts.freedesktop.org,
	linaro-mm-sig@...ts.linaro.org, Himanshu Dewangan <h.dewangan@...sung.com>
Subject: [PATCH 00/29] media: codec: add new Samsung Exynos-MFC driver

Exynos MFC new driver upstream proposal
+++++++++++++++++++++++++++++++++++++++

The s5p-mfc driver in the kernel is quite outdated and has not kept up with the hardware advances of the MFC IP. 
Going forward, we want to provide support for all the later versions of MFC in open source (both mobile and
ExynosAuto would be supported by Samsung)

We (Samsung) would like to propose a new driver for the latest generation of Samsung MFC (Multi-Format Codec) hardware. 
Although the kernel already contains a Samsung MFC driver (drivers/media/platform/s5p-mfc/), the newer hardware 
diverges significantly from the previous generations, in features supported, register interface and in system integration. 
This has necessitated a new driver, rather than updating the existing one. 


Current driver vs targetted driver comparison
+++++++++++++++++++++++++++++++++++++++++++++

Target Feature 
Current mainline : Simple V4L2/ VB2 interface based encoder/ decoder
New proposed driver: Dual core support, NAL-q support, LLC, Coredump, performance
measurement, plugin driver architecture, hardware manager(meerkat), DRM/OTF,
Resource manager, bandwidth compression, New Pixel formats (NV12N,  YV12, P010,
SBWC,  RGB family), 10 bit support, HDR support, Prio and RR Process Scheduler support, 

Register map	
Current mainline : Fixed register layout, compatible across s5p variants
New proposed driver: Completely redesigned register set, incompatible with old layout

Command model
Current mainline : Mailbox-style command queue
New proposed driver: Ring-buffer command queue with different signaling

Memory management
Current mainline : CMA-backed contiguous buffers, ION legacy
New proposed driver: dma-heap / scatter-gather buffers with strict alignment rules

Firmware
Current mainline : Supports up to Firmware v12, Legacy binary format, loaded via shared mechanism	
New proposed driver: New firmware format, different protocol for control messages. Support Firmware v13 onwards

DT bindings	
Current mainline : Single clock + reset, simple PM	
New proposed driver: Multiple clocks, reset domains, runtime PM dependencies

Error handling	
Current mainline : Simple IRQ error flags
New proposed driver: Detailed error codes, recovery sequences required

Code impact
Current mainline :~8k LOC, minimal conditionals
New proposed driver: ~65KLOC with full features


Plan for supporting latest MFC (Best balance between code clarity and long-term kernel health, while still respecting ABI and legacy users.)
1	We propose a new driver (exynos-mfc) for the latest generation of Samsung MFC (Multi-Format Codec) hardware. 
2	MFC FW V6 to V12 will be supported by existing mainline (s5p-mfc) and later versions by Exynos-mfc driver
3	The existing MFC driver will remain available for older SoC’s and will not be broken. The new driver will only bind
	to new compatible strings in DT, avoiding regressions for legacy hardware. Samsung will take responsibility for 
	maintaining both drivers until the old one can be formally marked as “legacy.”
4	Keep it buildable for old SoCs but clearly say new SoCs should use the new driver.
5	VIDEO_SAMSUNG_S5P_MFC and VIDEO_EXYNOS_MFC will both be supported for an agreed time
6	Long term Support for new driver  - commitment from Samsung
7	The hardware has diverged to the point where conditionally supporting both in one codebase is worse for long-term kernel health
8	Splitting keeps the code clean, testable, and reviewable, while ensuring legacy users aren’t broken due to user space ABI  guarantees.
	This seems more clean and easier approach Both can coexist without code spaghetti.

Features and description supported
++++++++++++++++++++++++++++++++++

1	MFC driver registration	Probe functionality and video nodes registration
2	MFC driver open & close support	MFC firmware loading,  "ls" & "cat" on the video nodes  and udev rules on the video nodes
3	H264 decoding	H264 decoding support - HW supported profiles & levels (YUV420 Semi-Planar, 8-bit, min/max resolution)
4	HEVC decoding	HEVC decoding support - HW supported profiles & levels (YUV420 Semi-Planar, 8-bit, min/max resolution)
5	VP8 decoding	VP8 decoding support - HW supported profiles & levels (YUV420 Semi-Planar, 8-bit, min/max resolution)
6	VP9 decoding	VP9 decoding support - HW supported profiles & levels (YUV420 Semi-Planar, 8-bit, min/max resolution)
7	AV1 decoding	AV1 decoding support - HW supported profiles & levels (YUV420 Semi-Planar, 8-bit, min/max resolution)
8	H264 encoding	H264 encoding support - Basic encoding (YUV420 Semi-Planar, 8-bit, min/max resolution)
9	HEVC encoding	HEVC encoding support - Basic encoding (YUV420 Semi-Planar, 8-bit, min/max resolution)
10	VP8 encoding	VP8 encoding support - Basic encoding (YUV420 Semi-Planar, 8-bit, min/max resolution)
11	VP9 encoding	VP9 encoding support - Basic encoding (YUV420 Semi-Planar, 8-bit, min/max resolution)
12	Debug fs support		Debug fs to control the MFC functionalities
13	Debug log support		Debug logs to get on the dmesg prompt for debug purpose
14	Debug SFR dump support		MFC SFR dumps during failures
15	NAL Queue mode control		NAL Queue mode support
16	Batch mode control		Batch mode support
17	HW supported YUV formats	YUV 420, 422, 444 (planar, semi-planar) formats support as per MFC HW specification
18	HW supported RGB formats	RGB format support as per MFC HW specification
19	Multi instance decoding/encoding	Multi instance decoding/encoding
20	Suspend and resume		Suspend and resume support
21	Runtime suspend and resume	Runtime suspend and resume support
22	Priority decoding (decoders)	Priority decoding support
23	Frame delay configuration (decoders)	Frame delay configuration support
24	Error handling and conceal control (decoders)	HW/Platform limitations should be gracefully exited and,
							bit stream errors should be reported or concealed with warning indication
25	Reference frame control (encoders)	Reference frame control support
26	SPS/PPS control (encoders)	SPS/PPS control support
27	Loop filter control (encoders)	Loop filter control support
28	B frame support (encoders)	B frame support
29	GOP control (encoders)		GOP control support
30	Frame rate control (encoders)	Frame rate control support

Features to be  supported in 2026
+++++++++++++++++++++++++++++++++

31	Bit rate control (encoders)		Bit rate control support
32	QP control (encoders)			QP control support
33	I/IDR control (encoders)		I/IDR control support
34	Scalable control (encoders)		Scalable control support
35	ROI control (encoders)			ROI control support
36	Multi slice control (encoders)		Multi slice control support
37	Profile/Level control (encoders)	Profile/Level control support
38	Padding control (encoders)		Padding control support
39	Aspect ratio control (encoders)		Aspect ratio control support
40	Buffer full handling (encoders)		Buffer full handling support
41	SBWC					SBWC bandwidth compression support
42	10-bit support				10-bit support as per MFC HW specification
43	Secure signed FW support		Security signed FW support
44	Secure playback				DRM content playback for decoders
45	HDR Support (decoders)			HDR metadata support
46	Dynamic resolution change		Dynamic resolution change support

Nagaraju Siddineni (29):
  dt-bindings: media: mfc: Add Exynos MFC devicetree binding
  arm64: dts: mfc: Add MFC device tree for Auto V920 SoC
  media: mfc: Add MFC driver data structures and debugging macros
  media: mfc: Add full register map and bit definitions for MFC hardware
  media: mfc: Add MFC driver header files and core utilities
  media: mfc: Add MFC core hardware register and debugfs APIs
  media: mfc: Add MFC core command, hwlock, ISR and run functionalities
  media: mfc: Add Exynos‑MFC driver probe support
  media: mfc: Add bus‑devfreq, QoS, multi‑view and control
    infrastructure
  media: mfc: Add buffer‑queue and IOVMM support
  media: mfc: Add rate‑calculation framework and memory utilities
  media: mfc: Introduce QoS support and instance context handling
  media: mfc: Add decoder core sync functions
  media: mfc: Add buffer‑control framework
  media: mfc: Add decoder resource‑management (RM) support and
    load‑balancing
  media: mfc: Enhance HW‑lock handling, scheduling and error recovery
  media: mfc: Add VB2 decoder support
  media: mfc: Add V4L2 decoder driver
  media: mfc: Add QoS, Butler workqueue, and priority‑based scheduling
  media: mfc: Add H264 decoder support
  media: mfc: Add multi‑codec support & QoS improvements
  media: mfc: Add H.264 encoder support with buffer and QoS improvements
  media: mfc: Add encoder parameters, ROI & QoS support
  media: mfc: Add encoder VB2 support to driver
  media: mfc: Add encoder v4l2 driver interface
  media: mfc: Add full encoder support
  media: mfc: Add H.264 encoder support
  media: mfc: Add AVC, VP8, VP9, and HEVC encoding support
  media: mfc: Hardware‑accelerated encoding support

 .../bindings/media/samsung,exynos-mfc.yaml    |   77 +
 MAINTAINERS                                   |   10 +
 .../dts/exynos/exynosautov920-evt2-mfc.dtsi   |  630 +++
 .../arm64/boot/dts/exynos/exynosautov920.dtsi |    1 +
 drivers/media/platform/samsung/Kconfig        |    7 +
 drivers/media/platform/samsung/Makefile       |    1 +
 .../media/platform/samsung/exynos-mfc/Kconfig |   34 +
 .../platform/samsung/exynos-mfc/Makefile      |   26 +
 .../samsung/exynos-mfc/base/mfc_buf.c         |  765 +++
 .../samsung/exynos-mfc/base/mfc_buf.h         |   43 +
 .../samsung/exynos-mfc/base/mfc_common.h      |  444 ++
 .../samsung/exynos-mfc/base/mfc_data_struct.h | 2014 +++++++
 .../samsung/exynos-mfc/base/mfc_debug.h       |  247 +
 .../samsung/exynos-mfc/base/mfc_format.h      |  316 ++
 .../samsung/exynos-mfc/base/mfc_macros.h      |   95 +
 .../samsung/exynos-mfc/base/mfc_media.h       |  554 ++
 .../samsung/exynos-mfc/base/mfc_mem.c         |  995 ++++
 .../samsung/exynos-mfc/base/mfc_mem.h         |  155 +
 .../samsung/exynos-mfc/base/mfc_qos.c         | 1070 ++++
 .../samsung/exynos-mfc/base/mfc_qos.h         |   99 +
 .../samsung/exynos-mfc/base/mfc_queue.c       |  966 ++++
 .../samsung/exynos-mfc/base/mfc_queue.h       |  158 +
 .../exynos-mfc/base/mfc_rate_calculate.c      |  640 +++
 .../exynos-mfc/base/mfc_rate_calculate.h      |  106 +
 .../samsung/exynos-mfc/base/mfc_regs.h        |   58 +
 .../samsung/exynos-mfc/base/mfc_regs_mfc.h    | 1002 ++++
 .../samsung/exynos-mfc/base/mfc_sched.h       |   30 +
 .../samsung/exynos-mfc/base/mfc_utils.c       |  401 ++
 .../samsung/exynos-mfc/base/mfc_utils.h       |  481 ++
 .../media/platform/samsung/exynos-mfc/mfc.c   | 1366 +++++
 .../platform/samsung/exynos-mfc/mfc_core.c    |  703 +++
 .../samsung/exynos-mfc/mfc_core_buf_ctrl.c    |  543 ++
 .../samsung/exynos-mfc/mfc_core_cmd.c         |  576 ++
 .../samsung/exynos-mfc/mfc_core_cmd.h         |   41 +
 .../samsung/exynos-mfc/mfc_core_enc_param.c   | 1463 ++++++
 .../samsung/exynos-mfc/mfc_core_enc_param.h   |   23 +
 .../samsung/exynos-mfc/mfc_core_hw_reg_api.c  |  122 +
 .../samsung/exynos-mfc/mfc_core_hw_reg_api.h  |  144 +
 .../samsung/exynos-mfc/mfc_core_hwlock.c      |  761 +++
 .../samsung/exynos-mfc/mfc_core_hwlock.h      |   80 +
 .../samsung/exynos-mfc/mfc_core_intlock.c     |   98 +
 .../samsung/exynos-mfc/mfc_core_intlock.h     |   20 +
 .../samsung/exynos-mfc/mfc_core_isr.c         | 2104 ++++++++
 .../samsung/exynos-mfc/mfc_core_isr.h         |   25 +
 .../samsung/exynos-mfc/mfc_core_ops.c         |  813 +++
 .../samsung/exynos-mfc/mfc_core_ops.h         |   16 +
 .../platform/samsung/exynos-mfc/mfc_core_pm.c |  209 +
 .../platform/samsung/exynos-mfc/mfc_core_pm.h |   33 +
 .../samsung/exynos-mfc/mfc_core_reg_api.c     |  597 +++
 .../samsung/exynos-mfc/mfc_core_reg_api.h     |  380 ++
 .../samsung/exynos-mfc/mfc_core_run.c         |  541 ++
 .../samsung/exynos-mfc/mfc_core_run.h         |   35 +
 .../samsung/exynos-mfc/mfc_core_sched_prio.c  |  431 ++
 .../samsung/exynos-mfc/mfc_core_sync.c        |  423 ++
 .../samsung/exynos-mfc/mfc_core_sync.h        |   34 +
 .../samsung/exynos-mfc/mfc_ctx_ctrl.c         | 1469 ++++++
 .../platform/samsung/exynos-mfc/mfc_debugfs.c |  248 +
 .../platform/samsung/exynos-mfc/mfc_debugfs.h |   20 +
 .../samsung/exynos-mfc/mfc_dec_v4l2.c         | 1739 +++++++
 .../samsung/exynos-mfc/mfc_dec_v4l2.h         |   20 +
 .../platform/samsung/exynos-mfc/mfc_dec_vb2.c |  394 ++
 .../platform/samsung/exynos-mfc/mfc_dec_vb2.h |   19 +
 .../samsung/exynos-mfc/mfc_enc_v4l2.c         | 4614 +++++++++++++++++
 .../samsung/exynos-mfc/mfc_enc_v4l2.h         |   20 +
 .../platform/samsung/exynos-mfc/mfc_enc_vb2.c |  443 ++
 .../platform/samsung/exynos-mfc/mfc_enc_vb2.h |   19 +
 .../platform/samsung/exynos-mfc/mfc_rm.c      | 2652 ++++++++++
 .../platform/samsung/exynos-mfc/mfc_rm.h      |  110 +
 68 files changed, 34773 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/media/samsung,exynos-mfc.yaml
 create mode 100644 arch/arm64/boot/dts/exynos/exynosautov920-evt2-mfc.dtsi
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/Kconfig
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/Makefile
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_buf.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_buf.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_common.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_data_struct.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_debug.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_format.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_macros.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_media.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_mem.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_mem.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_qos.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_qos.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_queue.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_queue.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_rate_calculate.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_rate_calculate.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_regs.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_regs_mfc.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_sched.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_utils.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/base/mfc_utils.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_buf_ctrl.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_cmd.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_cmd.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_enc_param.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_enc_param.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_hw_reg_api.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_hw_reg_api.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_hwlock.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_hwlock.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_intlock.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_intlock.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_isr.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_isr.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_ops.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_ops.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_pm.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_pm.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_reg_api.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_reg_api.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_run.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_run.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_sched_prio.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_sync.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_core_sync.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_ctx_ctrl.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_debugfs.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_debugfs.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_dec_v4l2.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_dec_v4l2.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_dec_vb2.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_dec_vb2.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_enc_v4l2.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_enc_v4l2.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_enc_vb2.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_enc_vb2.h
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_rm.c
 create mode 100644 drivers/media/platform/samsung/exynos-mfc/mfc_rm.h

-- 
2.34.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ