Thread (8 messages) 8 messages, 4 authors, 2022-05-19

Re: [PATCH v15 3/3] media: platform: mtk-mdp3: add Mediatek MDP3 driver

From: Rex-BC Chen <hidden>
Date: 2022-05-17 11:25:17
Also in: linux-arm-kernel, linux-media, linux-mediatek, lkml

On Thu, 2022-05-12 at 17:23 +0800, Moudy Ho wrote:
quoted hunk ↗ jump to hunk
This patch adds driver for Mediatek's Media Data Path ver.3 (MDP3).
It provides the following functions:
  color transform, format conversion, resize, crop, rotate, flip
  and additional image quality enhancement.

The MDP3 driver is mainly used for Google Chromebook products to
import the new architecture to set the HW settings as shown below:
  User -> V4L2 framework
    -> MDP3 driver -> SCP (setting calculations)
      -> MDP3 driver -> CMDQ (GCE driver) -> HW

Each modules' related operation control is sited in mtk-mdp3-comp.c
Each modules' register table is defined in file with "mdp_reg_"
prefix
GCE related API, operation control  sited in mtk-mdp3-cmdq.c
V4L2 m2m device functions are implemented in mtk-mdp3-m2m.c
Probe, power, suspend/resume, system level functions are defined in
mtk-mdp3-core.c

v4l2-compliance 1.22.1, 32 bits, 32-bit time_t

Compliance test for mtk-mdp3 device /dev/video2:

Driver Info:
	Driver name      : mtk-mdp3
	Card type        : 14001000.mdp3-rdma0
	Bus info         : platform:mtk-mdp3
	Driver version   : 5.18.0
	Capabilities     : 0x84204000
		Video Memory-to-Memory Multiplanar
		Streaming
		Extended Pix Format
		Device Capabilities
	Device Caps      : 0x04204000
		Video Memory-to-Memory Multiplanar
		Streaming
		Extended Pix Format

Required ioctls:
	test VIDIOC_QUERYCAP: OK
	test invalid ioctls: OK

Allow for multiple opens:
	test second /dev/video2 open: OK
	test VIDIOC_QUERYCAP: OK
	test VIDIOC_G/S_PRIORITY: OK
	test for unlimited opens: OK

Debug ioctls:
	test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
	test VIDIOC_LOG_STATUS: OK (Not Supported)

Input ioctls:
	test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
	test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
	test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
	test VIDIOC_ENUMAUDIO: OK (Not Supported)
	test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
	test VIDIOC_G/S_AUDIO: OK (Not Supported)
	Inputs: 0 Audio Inputs: 0 Tuners: 0

Output ioctls:
	test VIDIOC_G/S_MODULATOR: OK (Not Supported)
	test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
	test VIDIOC_ENUMAUDOUT: OK (Not Supported)
	test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
	test VIDIOC_G/S_AUDOUT: OK (Not Supported)
	Outputs: 0 Audio Outputs: 0 Modulators: 0

Input/Output configuration ioctls:
	test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
	test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
	test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
	test VIDIOC_G/S_EDID: OK (Not Supported)

Control ioctls:
	test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
	test VIDIOC_QUERYCTRL: OK
	test VIDIOC_G/S_CTRL: OK
	test VIDIOC_G/S/TRY_EXT_CTRLS: OK
	test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
	test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
	Standard Controls: 4 Private Controls: 0

Format ioctls:
	test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
	test VIDIOC_G/S_PARM: OK (Not Supported)
	test VIDIOC_G_FBUF: OK (Not Supported)
	test VIDIOC_G_FMT: OK
	test VIDIOC_TRY_FMT: OK
	test VIDIOC_S_FMT: OK
	test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
	test Cropping: OK
	test Composing: OK
	test Scaling: OK

Codec ioctls:
	test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
	test VIDIOC_G_ENC_INDEX: OK (Not Supported)
	test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)

Buffer ioctls:
	test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
	test VIDIOC_EXPBUF: OK
	test Requests: OK (Not Supported)
	test TIME32/64: OK

Test input 0:

Streaming ioctls:
	test read/write: OK (Not Supported)
	test blocking wait: OK

	Video Output Multiplanar: Frame #002
	Video Output Multiplanar: Frame #003
	Video Output Multiplanar: Frame #004
	Video Output Multiplanar: Frame #005
	Video Output Multiplanar: Frame #006
	Video Output Multiplanar: Frame #007
	Video Output Multiplanar: Frame #008
	Video Output Multiplanar: Frame #009
	Video Output Multiplanar: Frame #010
	Video Output Multiplanar: Frame #011
	Video Output Multiplanar: Frame #012
	Video Output Multiplanar: Frame #013
	Video Output Multiplanar: Frame #014
	Video Output Multiplanar: Frame #015
	Video Output Multiplanar: Frame #016
	Video Output Multiplanar: Frame #017
	Video Output Multiplanar: Frame #018
	Video Output Multiplanar: Frame #019
	Video Output Multiplanar: Frame #020
	Video Output Multiplanar: Frame #021
	Video Output Multiplanar: Frame #022
	Video Output Multiplanar: Frame #023
	Video Output Multiplanar: Frame #024
	Video Output Multiplanar: Frame #025
	Video Output Multiplanar: Frame #026
	Video Output Multiplanar: Frame #027
	Video Output Multiplanar: Frame #028
	Video Output Multiplanar: Frame #029
	Video Output Multiplanar: Frame #030
	Video Output Multiplanar: Frame #031
	Video Output Multiplanar: Frame #032
	Video Output Multiplanar: Frame #033
	Video Output Multiplanar: Frame #034
	Video Output Multiplanar: Frame #035
	Video Output Multiplanar: Frame #036
	Video Output Multiplanar: Frame #037
	Video Output Multiplanar: Frame #038
	Video Output Multiplanar: Frame #039
	Video Output Multiplanar: Frame #040
	Video Output Multiplanar: Frame #041
	Video Output Multiplanar: Frame #042
	Video Output Multiplanar: Frame #043
	Video Output Multiplanar: Frame #044
	Video Output Multiplanar: Frame #045
	Video Output Multiplanar: Frame #046
	Video Output Multiplanar: Frame #047
	Video Output Multiplanar: Frame #048
	Video Output Multiplanar: Frame #049
	Video Output Multiplanar: Frame #050
	Video Output Multiplanar: Frame #051
	Video Output Multiplanar: Frame #052
	Video Output Multiplanar: Frame #053
	Video Output Multiplanar: Frame #054
	Video Output Multiplanar: Frame #055
	Video Output Multiplanar: Frame #056
	Video Output Multiplanar: Frame #057
	Video Output Multiplanar: Frame #058
	Video Output Multiplanar: Frame #059

	Video Capture Multiplanar: Captured 58 buffers
	test MMAP (no poll): OK

	Video Output Multiplanar: Frame #002 (select)
	Video Output Multiplanar: Frame #003 (select)
	Video Output Multiplanar: Frame #004 (select)
	Video Output Multiplanar: Frame #005 (select)
	Video Output Multiplanar: Frame #006 (select)
	Video Output Multiplanar: Frame #007 (select)
	Video Output Multiplanar: Frame #008 (select)
	Video Output Multiplanar: Frame #009 (select)
	Video Output Multiplanar: Frame #010 (select)
	Video Output Multiplanar: Frame #011 (select)
	Video Output Multiplanar: Frame #012 (select)
	Video Output Multiplanar: Frame #013 (select)
	Video Output Multiplanar: Frame #014 (select)
	Video Output Multiplanar: Frame #015 (select)
	Video Output Multiplanar: Frame #016 (select)
	Video Output Multiplanar: Frame #017 (select)
	Video Output Multiplanar: Frame #018 (select)
	Video Output Multiplanar: Frame #019 (select)
	Video Output Multiplanar: Frame #020 (select)
	Video Output Multiplanar: Frame #021 (select)
	Video Output Multiplanar: Frame #022 (select)
	Video Output Multiplanar: Frame #023 (select)
	Video Output Multiplanar: Frame #024 (select)
	Video Output Multiplanar: Frame #025 (select)
	Video Output Multiplanar: Frame #026 (select)
	Video Output Multiplanar: Frame #027 (select)
	Video Output Multiplanar: Frame #028 (select)
	Video Output Multiplanar: Frame #029 (select)
	Video Output Multiplanar: Frame #030 (select)
	Video Output Multiplanar: Frame #031 (select)
	Video Output Multiplanar: Frame #032 (select)
	Video Output Multiplanar: Frame #033 (select)
	Video Output Multiplanar: Frame #034 (select)
	Video Output Multiplanar: Frame #035 (select)
	Video Output Multiplanar: Frame #036 (select)
	Video Output Multiplanar: Frame #037 (select)
	Video Output Multiplanar: Frame #038 (select)
	Video Output Multiplanar: Frame #039 (select)
	Video Output Multiplanar: Frame #040 (select)
	Video Output Multiplanar: Frame #041 (select)
	Video Output Multiplanar: Frame #042 (select)
	Video Output Multiplanar: Frame #043 (select)
	Video Output Multiplanar: Frame #044 (select)
	Video Output Multiplanar: Frame #045 (select)
	Video Output Multiplanar: Frame #046 (select)
	Video Output Multiplanar: Frame #047 (select)
	Video Output Multiplanar: Frame #048 (select)
	Video Output Multiplanar: Frame #049 (select)
	Video Output Multiplanar: Frame #050 (select)
	Video Output Multiplanar: Frame #051 (select)
	Video Output Multiplanar: Frame #052 (select)
	Video Output Multiplanar: Frame #053 (select)
	Video Output Multiplanar: Frame #054 (select)
	Video Output Multiplanar: Frame #055 (select)
	Video Output Multiplanar: Frame #056 (select)
	Video Output Multiplanar: Frame #057 (select)
	Video Output Multiplanar: Frame #058 (select)
	Video Output Multiplanar: Frame #059 (select)

	Video Capture Multiplanar: Captured 58 buffers
	test MMAP (select): OK

	Video Output Multiplanar: Frame #002 (epoll)
	Video Output Multiplanar: Frame #003 (epoll)
	Video Output Multiplanar: Frame #004 (epoll)
	Video Output Multiplanar: Frame #005 (epoll)
	Video Output Multiplanar: Frame #006 (epoll)
	Video Output Multiplanar: Frame #007 (epoll)
	Video Output Multiplanar: Frame #008 (epoll)
	Video Output Multiplanar: Frame #009 (epoll)
	Video Output Multiplanar: Frame #010 (epoll)
	Video Output Multiplanar: Frame #011 (epoll)
	Video Output Multiplanar: Frame #012 (epoll)
	Video Output Multiplanar: Frame #013 (epoll)
	Video Output Multiplanar: Frame #014 (epoll)
	Video Output Multiplanar: Frame #015 (epoll)
	Video Output Multiplanar: Frame #016 (epoll)
	Video Output Multiplanar: Frame #017 (epoll)
	Video Output Multiplanar: Frame #018 (epoll)
	Video Output Multiplanar: Frame #019 (epoll)
	Video Output Multiplanar: Frame #020 (epoll)
	Video Output Multiplanar: Frame #021 (epoll)
	Video Output Multiplanar: Frame #022 (epoll)
	Video Output Multiplanar: Frame #023 (epoll)
	Video Output Multiplanar: Frame #024 (epoll)
	Video Output Multiplanar: Frame #025 (epoll)
	Video Output Multiplanar: Frame #026 (epoll)
	Video Output Multiplanar: Frame #027 (epoll)
	Video Output Multiplanar: Frame #028 (epoll)
	Video Output Multiplanar: Frame #029 (epoll)
	Video Output Multiplanar: Frame #030 (epoll)
	Video Output Multiplanar: Frame #031 (epoll)
	Video Output Multiplanar: Frame #032 (epoll)
	Video Output Multiplanar: Frame #033 (epoll)
	Video Output Multiplanar: Frame #034 (epoll)
	Video Output Multiplanar: Frame #035 (epoll)
	Video Output Multiplanar: Frame #036 (epoll)
	Video Output Multiplanar: Frame #037 (epoll)
	Video Output Multiplanar: Frame #038 (epoll)
	Video Output Multiplanar: Frame #039 (epoll)
	Video Output Multiplanar: Frame #040 (epoll)
	Video Output Multiplanar: Frame #041 (epoll)
	Video Output Multiplanar: Frame #042 (epoll)
	Video Output Multiplanar: Frame #043 (epoll)
	Video Output Multiplanar: Frame #044 (epoll)
	Video Output Multiplanar: Frame #045 (epoll)
	Video Output Multiplanar: Frame #046 (epoll)
	Video Output Multiplanar: Frame #047 (epoll)
	Video Output Multiplanar: Frame #048 (epoll)
	Video Output Multiplanar: Frame #049 (epoll)
	Video Output Multiplanar: Frame #050 (epoll)
	Video Output Multiplanar: Frame #051 (epoll)
	Video Output Multiplanar: Frame #052 (epoll)
	Video Output Multiplanar: Frame #053 (epoll)
	Video Output Multiplanar: Frame #054 (epoll)
	Video Output Multiplanar: Frame #055 (epoll)
	Video Output Multiplanar: Frame #056 (epoll)
	Video Output Multiplanar: Frame #057 (epoll)
	Video Output Multiplanar: Frame #058 (epoll)
	Video Output Multiplanar: Frame #059 (epoll)

	Video Capture Multiplanar: Captured 58 buffers
	test MMAP (epoll): OK
	test USERPTR (no poll): OK (Not Supported)
	test USERPTR (select): OK (Not Supported)
	test DMABUF: Cannot test, specify --expbuf-device

Total for mtk-mdp3 device /dev/video2: 53, Succeeded: 53, Failed: 0,
Warnings: 0

Signed-off-by: Ping-Hsun Wu <redacted>
Signed-off-by: daoyuan huang <redacted>
Signed-off-by: Moudy Ho <redacted>
---
 drivers/media/platform/mediatek/Kconfig       |   1 +
 drivers/media/platform/mediatek/Makefile      |   1 +
 drivers/media/platform/mediatek/mdp3/Kconfig  |  20 +
 drivers/media/platform/mediatek/mdp3/Makefile |   6 +
 .../platform/mediatek/mdp3/mdp_reg_ccorr.h    |  19 +
 .../platform/mediatek/mdp3/mdp_reg_rdma.h     |  65 ++
 .../platform/mediatek/mdp3/mdp_reg_rsz.h      |  39 +
 .../platform/mediatek/mdp3/mdp_reg_wdma.h     |  47 +
 .../platform/mediatek/mdp3/mdp_reg_wrot.h     |  55 +
 .../platform/mediatek/mdp3/mtk-img-ipi.h      | 290 +++++
 .../platform/mediatek/mdp3/mtk-mdp3-cmdq.c    | 486 +++++++++
 .../platform/mediatek/mdp3/mtk-mdp3-cmdq.h    |  48 +
 .../platform/mediatek/mdp3/mtk-mdp3-comp.c    | 987
++++++++++++++++++
 .../platform/mediatek/mdp3/mtk-mdp3-comp.h    | 185 ++++
 .../platform/mediatek/mdp3/mtk-mdp3-core.c    | 379 +++++++
 .../platform/mediatek/mdp3/mtk-mdp3-core.h    |  95 ++
 .../platform/mediatek/mdp3/mtk-mdp3-m2m.c     | 772 ++++++++++++++
 .../platform/mediatek/mdp3/mtk-mdp3-m2m.h     |  48 +
 .../platform/mediatek/mdp3/mtk-mdp3-regs.c    | 736 +++++++++++++
 .../platform/mediatek/mdp3/mtk-mdp3-regs.h    | 370 +++++++
 .../platform/mediatek/mdp3/mtk-mdp3-vpu.c     | 312 ++++++
 .../platform/mediatek/mdp3/mtk-mdp3-vpu.h     |  78 ++
 22 files changed, 5039 insertions(+)
 create mode 100644 drivers/media/platform/mediatek/mdp3/Kconfig
 create mode 100644 drivers/media/platform/mediatek/mdp3/Makefile
 create mode 100644
drivers/media/platform/mediatek/mdp3/mdp_reg_ccorr.h
 create mode 100644
drivers/media/platform/mediatek/mdp3/mdp_reg_rdma.h
 create mode 100644
drivers/media/platform/mediatek/mdp3/mdp_reg_rsz.h
 create mode 100644
drivers/media/platform/mediatek/mdp3/mdp_reg_wdma.h
 create mode 100644
drivers/media/platform/mediatek/mdp3/mdp_reg_wrot.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mtk-img-
ipi.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mtk-mdp3-
cmdq.c
 create mode 100644 drivers/media/platform/mediatek/mdp3/mtk-mdp3-
cmdq.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mtk-mdp3-
comp.c
 create mode 100644 drivers/media/platform/mediatek/mdp3/mtk-mdp3-
comp.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mtk-mdp3-
core.c
 create mode 100644 drivers/media/platform/mediatek/mdp3/mtk-mdp3-
core.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mtk-mdp3-
m2m.c
 create mode 100644 drivers/media/platform/mediatek/mdp3/mtk-mdp3-
m2m.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mtk-mdp3-
regs.c
 create mode 100644 drivers/media/platform/mediatek/mdp3/mtk-mdp3-
regs.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mtk-mdp3-
vpu.c
 create mode 100644 drivers/media/platform/mediatek/mdp3/mtk-mdp3-
vpu.h
diff --git a/drivers/media/platform/mediatek/Kconfig
b/drivers/media/platform/mediatek/Kconfig
index af47d9888552..84104e2cd024 100644
--- a/drivers/media/platform/mediatek/Kconfig
+++ b/drivers/media/platform/mediatek/Kconfig
@@ -6,3 +6,4 @@ source "drivers/media/platform/mediatek/jpeg/Kconfig"
 source "drivers/media/platform/mediatek/mdp/Kconfig"
 source "drivers/media/platform/mediatek/vcodec/Kconfig"
 source "drivers/media/platform/mediatek/vpu/Kconfig"
+source "drivers/media/platform/mediatek/mdp3/Kconfig"
diff --git a/drivers/media/platform/mediatek/Makefile
b/drivers/media/platform/mediatek/Makefile
index d3850a13f128..38e6ba917fe5 100644
--- a/drivers/media/platform/mediatek/Makefile
+++ b/drivers/media/platform/mediatek/Makefile
@@ -3,3 +3,4 @@ obj-y += jpeg/
 obj-y += mdp/
 obj-y += vcodec/
 obj-y += vpu/
+obj-y += mdp3/
diff --git a/drivers/media/platform/mediatek/mdp3/Kconfig
b/drivers/media/platform/mediatek/mdp3/Kconfig
new file mode 100644
index 000000000000..6640763c7c5e
--- /dev/null
+++ b/drivers/media/platform/mediatek/mdp3/Kconfig
@@ -0,0 +1,20 @@
+# SPDX-License-Identifier: GPL-2.0-only
+config VIDEO_MEDIATEK_MDP3
+	tristate "Mediatek MDP v3 driver"
+	depends on MTK_IOMMU || COMPLIE_TEST
+	depends on VIDEO_DEV
+	depends on ARCH_MEDIATEK || COMPILE_TEST
+	depends on MTK_MMSYS
+	depends on HAS_DMA
+	select VIDEOBUF2_DMA_CONTIG
+	select V4L2_MEM2MEM_DEV
+	select VIDEO_MEDIATEK_VPU
+	select MTK_CMDQ
+	select MTK_SCP
+	default n
+	help
+	    It is a v4l2 driver and present in Mediatek MT8183 SoC.
+	    The driver supports for scaling and color space conversion.
+
+	    To compile this driver as a module, choose M here: the
+	    module will be called mtk-mdp3.
diff --git a/drivers/media/platform/mediatek/mdp3/Makefile
b/drivers/media/platform/mediatek/mdp3/Makefile
new file mode 100644
index 000000000000..8772f5ac2867
--- /dev/null
+++ b/drivers/media/platform/mediatek/mdp3/Makefile
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
+mtk-mdp3-y += mtk-mdp3-core.o mtk-mdp3-vpu.o mtk-mdp3-regs.o
+mtk-mdp3-y += mtk-mdp3-m2m.o
+mtk-mdp3-y += mtk-mdp3-comp.o mtk-mdp3-cmdq.o
+
+obj-$(CONFIG_VIDEO_MEDIATEK_MDP3) += mtk-mdp3.o
\ No newline at end of file
Hello Moudy,

I think you should fix "\ No newline at end of file".

BRs,
Rex
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help