Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/42] drm/mediatek: The Huge Restructuring and MT8196 support
@ 2026-07-01 12:20 AngeloGioacchino Del Regno
  2026-07-01 12:20 ` [PATCH 01/42] drm/mediatek: Rename OVL format naming AngeloGioacchino Del Regno
                   ` (41 more replies)
  0 siblings, 42 replies; 52+ messages in thread
From: AngeloGioacchino Del Regno @ 2026-07-01 12:20 UTC (permalink / raw)
  To: chunkuang.hu
  Cc: p.zabel, airlied, simona, maarten.lankhorst, mripard, tzimmermann,
	robh, krzk+dt, conor+dt, matthias.bgg, angelogioacchino.delregno,
	dri-devel, linux-mediatek, devicetree, linux-kernel,
	linux-arm-kernel, justin.yeh, jason-jh.lin, kernel

Okay, yes, this is very big. :-)

This series "only" does two things:
 1. Restructures mediatek-drm to optimize components discovery,
    pipeline building, changes components relationship, and to
    make use new-style trigger-sources for MuteX, other than
    paving the way for *easily* adding support for up to 31
    concurrent display outputs (of which, 6-8 are realistic now
    with newer SoCs); and
 2. Adds support for the new DirectLink architecture and for most
    of the new Display Controller components found in newer gen
    SoCs, like MT8196.

Note that, mixed in all this, there are some changes to the mediatek
MMSYS driver: those *cannot* be performed separately, and *must* land
in the same moment as the other changes, as otherwise it's all going
to break.
That was unavoidable, unless adding another ~10 (big) commits to keep
support for old code while introducing the new (not devicetree, just
code, mind you!) which is, at this point, completely unnecessary and
just big noise for no reason.

The two soc/mediatek commits already have my Acked-by tag for them to
be picked by a drm maintainer instead.

Important summary done, let's go deeper!

(from mtk-mmsys new-style series, important context)
As of now, all of the components in MediaTek DRM, hence also in the
MMSYS driver, are thrown in a catch-all enumeration that does not
make any distinction between Type-Instance relationship, and it is
like so (mock-up names ahead):

DISPLAY_DITHER0
DISPLAY_DITHER1
DISPLAY_DSI0
DISPLAY_DSI1

... and so on.

Since the number of components is now becoming uncontrollably large,
the catch-all enumeration poses a big issue as the mediatek-drm driver
is allocating a huge array that will be only half full (optimistically,
because usually it's way less than half full) and with repeated ops
assignment for each and every instance of the very same Sub-IP,
effectively treating every instance of a Sub-IP like it is completely
different from one another (for example, like DSI0 and DSI1 are as
different as DITHER0 and DSI1).

This has to change. It had to change months ago, but now it has become
not only a maintenance burden, but also a... (sorry) big mess.

And well, that... especially looking forward to add support for newer
SoCs, using even more components in one pipeline, and using different
and newer components (of new types...), making the catch-all enum to
grow of another ~20 entries or more.
(end of context paste)

This is the reason why the mediatek-drm driver now structures the HW
components in a different way, and specifically, it now makes a clear
distinction between HARDWARE TYPE and HARDWARE INSTANCE ID.

With this distinction is done, it also made sense to change the highly
unoptimized array search with a hashtable, making the entire components
discovery process faster (with or without MT8196 support), while using
less memory (compared to if this driver had MT8196 support without the
restructured code).

Moreover, the mediatek-drm driver now supports dynamic selection of the
DMA device, the VBLANK component and of the CONFIG component, necessary
for Multi-Controller Display Path (with DirectLink) architecture of new
SoCs (like MT8196), and also makes it possible for slightly older ones
to use multi-controller paths (though very restrictive due to the actual
hardware support).

Moving on to the MT8196 specific support...

This adds knowledge to mediatek-drm and hence introduces support for
the new concept of "Layer Stages", seen in MT6991/93, MT8196/8894 and
other new SoCs, where each (one) full layer is now composed of multiple
different hardware IPs and where, depending on the usecase (which is
BOARD specific!!!), can be set to have less, or more, capabilities in
terms of number of Blending stages, number of DMA stages, etc, so that
one board may choose to have up to 6-8 display outputs featuring lower
resolution displays, or 2-3 outputs supporting high resolution with high
framerates (like 4k120, 8k60 etc).

This also restructures the MediaTek DPI driver to be split in a common
library and HW version specific drivers, and on the base of this, adds
support for the new MediaTek Display Video Output (DVO) hardware, being
a revised and extended version of the previous DPI one.

Moreover, adds support for the Extended DMA (exDMA), Blender and Output
Processor engines, providing single stages of layers and forming one
layer when chained together.

More new-gen components include the 2D Sharpness Processor (TDSHP) and
the Display Image Resizer (effectively, a Scaler engine).

This also adds support for the Asynchronous DirectLink Controller, or
"DL_ASYNC", responsible for internally connecting different display
controllers to finally form one (or multiple) display path(s), which
may include a relatively infinite (real, and full) display controller
jumps or even intertwining (where jumps are fully supported in this
version of the driver, but intertwining is only partially supported).

In the case of paths using multiple display controllers, this is now
automatically calculating the order of those, important not only for
power management, but also for actually setting them up.

There's more to say, but this cover letter is already way too long now
so, well, if you want to know more about this, please the description
in the relevant commit from this series and feel free to ask for any
clarification.


All of this was manually tested on multiple MediaTek boards, both the
reference ones and partner boards, and that includes:
Acer Chromebook Elm (MT8173)
Acer Chromebook Corsola Steelix (MT8186)
Acer Chromebook Asurada (MT8192)
Acer Chromebook Cherry Tomato (MT8195)
Acer Chromebook Rauru Hylia (MT8196)

MediaTek Genio 510 EVK (MT8370)
MediaTek Genio 700 EVK (MT8390)
MediaTek Genio 1200 EVK (MT8395)
Radxa NIO-12L (MT8395)

Note: with this series, MT8196 support reaches a 95% done state for
DSI or eDP outputs, but needs some more code to work; the test that
was performed on the Hylia Chromebook had the rest of the required
code in place: said code is not perfectly clean yet and was not sent
for this exact reason. Cleanups to the remaining MT8196 code will
not change anything of what is introduced with this patch series.

AngeloGioacchino Del Regno (39):
  drm/mediatek: Move mtk_ddp_comp_type enumeration to mtk-mmsys.h
  drm/mediatek: Rename all display component type to have DISP_ prefix
  drm/mediatek: Use hashtable for components discovery and registration
  drm/mediatek: ddp_comp: Move internal component register in function
  drm/mediatek: De-duplicate internal component checks
  drm/mediatek: Introduce and use path/comp definition structures
  drm/mediatek: Create new mtk_drm_legacy and move deprecated code
  drm/mediatek: Add support for MuteX trigger-sources parsing
  drm/mediatek: ovl_adaptor: Add special MERGE component check
  drm/mediatek: mtk_hdmi_v2: Don't warn on RPM active during detach
  drm/mediatek: Add support for hardware multi-stage layers
  drm/mediatek: mtk_crtc: Complete documentation for struct mtk_crtc
  drm/mediatek: mtk_crtc: Minimize spinlocked time in cmdq callback
  drm/mediatek: mtk_crtc: Dynamically find vblank/cfg component indices
  soc: mediatek: mtk-mmsys: Migrate to new Multimedia DDP HW indexing
  drm/mediatek: Fully migrate to new Display Controller HW indexing
  drm/mediatek: mtk_dpi: Pass parameters with new mtk_dpi_sync structure
  drm/mediatek: mtk_dpi: Fully separate HW setup from common code
  drm/mediatek: Create new mtk_dpi_common lib and move mtk_dpi code
  dt-bindings: display: mediatek: Introduce Digital Video Output HW
  drm/mediatek: Add support for MediaTek Digital Video Output (DVO)
  drm/mediatek: Pass mtk_ddp_comp in clk and config callbacks
  dt-bindings: display: mediatek: Introduce MT8196 Layer Blender
  drm/mediatek: Add support for Display Layer Blender component
  dt-bindings: display: mediatek: Introduce MT8196 extended DMA Engine
  drm/mediatek: Add support for Display Controller exDMA component
  dt-bindings: display: mediatek: Introduce MT8196 Output Processor
  drm/mediatek: Add support for Display Output Processor component
  drm/mediatek: mtk_crtc: Dynamically find suitable CRTC DMA device
  drm/mediatek: Prepare path builder for multi-controller architecture
  drm/mediatek: Enable bring-up of multi-controller CRTC paths
  drm/mediatek: Introduce MediaTek Asynchronous DirectLink Controller
  drm/mediatek: Support registering disp controller device subnodes
  soc: mediatek: mtk-mmsys: Populate multimedia subsystem subdevices
  dt-bindings: display: mediatek: Introduce MT8196 2D Sharpness
    Processor
  drm/mediatek: Add Two-Dimension Sharpness Processor (TDSHP) driver
  dt-bindings: display: mediatek: Introduce MT8196 Image Resizer
  drm/mediatek: Add support for Display Image Resizer (Scaler)
  drm/mediatek: mtk_drm_drv: Fail init only if all paths are invalid

Nancy Lin (1):
  drm/mediatek: Export OVL formats definitions and format conversion API

Paul-pl Chen (2):
  drm/mediatek: Rename OVL format naming
  drm/mediatek: Export OVL Blend function

 .../mediatek/mediatek,mt8196-blender.yaml     |   97 ++
 .../display/mediatek/mediatek,mt8196-dvo.yaml |  142 +++
 .../mediatek/mediatek,mt8196-exdma.yaml       |  104 ++
 .../mediatek/mediatek,mt8196-outproc.yaml     |  107 ++
 .../display/mediatek/mediatek,mt8196-rsz.yaml |   97 ++
 .../mediatek/mediatek,mt8196-tdshp.yaml       |   98 ++
 drivers/gpu/drm/mediatek/Makefile             |    8 +
 drivers/gpu/drm/mediatek/mtk_crtc.c           |  978 ++++++++++----
 drivers/gpu/drm/mediatek/mtk_crtc.h           |    4 +-
 drivers/gpu/drm/mediatek/mtk_ddp_comp.c       |  457 ++++---
 drivers/gpu/drm/mediatek/mtk_ddp_comp.h       |  145 ++-
 drivers/gpu/drm/mediatek/mtk_disp_aal.c       |   12 +-
 drivers/gpu/drm/mediatek/mtk_disp_blender.c   |  318 +++++
 drivers/gpu/drm/mediatek/mtk_disp_ccorr.c     |   12 +-
 drivers/gpu/drm/mediatek/mtk_disp_color.c     |   12 +-
 .../gpu/drm/mediatek/mtk_disp_directlink.c    |  434 +++++++
 drivers/gpu/drm/mediatek/mtk_disp_drv.h       |  158 ++-
 drivers/gpu/drm/mediatek/mtk_disp_dsc.c       |    8 +-
 drivers/gpu/drm/mediatek/mtk_disp_exdma.c     |  344 +++++
 drivers/gpu/drm/mediatek/mtk_disp_gamma.c     |   12 +-
 drivers/gpu/drm/mediatek/mtk_disp_merge.c     |   18 +-
 drivers/gpu/drm/mediatek/mtk_disp_outproc.c   |  247 ++++
 drivers/gpu/drm/mediatek/mtk_disp_ovl.c       |  274 ++--
 drivers/gpu/drm/mediatek/mtk_disp_ovl.h       |   27 +
 .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   |  182 ++-
 drivers/gpu/drm/mediatek/mtk_disp_rdma.c      |   21 +-
 drivers/gpu/drm/mediatek/mtk_disp_tdshp.c     |  167 +++
 drivers/gpu/drm/mediatek/mtk_disp_wdma.c      |   14 +-
 drivers/gpu/drm/mediatek/mtk_dpi.c            |  760 ++---------
 drivers/gpu/drm/mediatek/mtk_dpi_common.c     |  473 +++++++
 drivers/gpu/drm/mediatek/mtk_dpi_common.h     |  299 +++++
 drivers/gpu/drm/mediatek/mtk_drm_drv.c        | 1121 ++++++++++-------
 drivers/gpu/drm/mediatek/mtk_drm_drv.h        |   34 +-
 drivers/gpu/drm/mediatek/mtk_drm_legacy.c     |  879 +++++++++++++
 drivers/gpu/drm/mediatek/mtk_drm_legacy.h     |   37 +
 drivers/gpu/drm/mediatek/mtk_dvo.c            |  682 ++++++++++
 drivers/gpu/drm/mediatek/mtk_dvo_regs.h       |  192 +++
 drivers/gpu/drm/mediatek/mtk_ethdr.c          |   10 +-
 drivers/gpu/drm/mediatek/mtk_ethdr.h          |    4 +-
 drivers/gpu/drm/mediatek/mtk_hdmi_v2.c        |    2 -
 drivers/gpu/drm/mediatek/mtk_mdp_rdma.c       |    8 +-
 drivers/gpu/drm/mediatek/mtk_padding.c        |    8 +-
 drivers/soc/mediatek/mtk-mmsys.c              |  111 +-
 drivers/soc/mediatek/mtk-mmsys.h              |   14 +-
 include/linux/soc/mediatek/mtk-mmsys.h        |   56 +-
 45 files changed, 7279 insertions(+), 1908 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/display/mediatek/mediatek,mt8196-blender.yaml
 create mode 100644 Documentation/devicetree/bindings/display/mediatek/mediatek,mt8196-dvo.yaml
 create mode 100644 Documentation/devicetree/bindings/display/mediatek/mediatek,mt8196-exdma.yaml
 create mode 100644 Documentation/devicetree/bindings/display/mediatek/mediatek,mt8196-outproc.yaml
 create mode 100644 Documentation/devicetree/bindings/display/mediatek/mediatek,mt8196-rsz.yaml
 create mode 100644 Documentation/devicetree/bindings/display/mediatek/mediatek,mt8196-tdshp.yaml
 create mode 100644 drivers/gpu/drm/mediatek/mtk_disp_blender.c
 create mode 100644 drivers/gpu/drm/mediatek/mtk_disp_directlink.c
 create mode 100644 drivers/gpu/drm/mediatek/mtk_disp_exdma.c
 create mode 100644 drivers/gpu/drm/mediatek/mtk_disp_outproc.c
 create mode 100644 drivers/gpu/drm/mediatek/mtk_disp_ovl.h
 create mode 100644 drivers/gpu/drm/mediatek/mtk_disp_tdshp.c
 create mode 100644 drivers/gpu/drm/mediatek/mtk_dpi_common.c
 create mode 100644 drivers/gpu/drm/mediatek/mtk_dpi_common.h
 create mode 100644 drivers/gpu/drm/mediatek/mtk_drm_legacy.c
 create mode 100644 drivers/gpu/drm/mediatek/mtk_drm_legacy.h
 create mode 100644 drivers/gpu/drm/mediatek/mtk_dvo.c
 create mode 100644 drivers/gpu/drm/mediatek/mtk_dvo_regs.h

-- 
2.54.0



^ permalink raw reply	[flat|nested] 52+ messages in thread

end of thread, other threads:[~2026-07-02  9:36 UTC | newest]

Thread overview: 52+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-01 12:20 [PATCH 00/42] drm/mediatek: The Huge Restructuring and MT8196 support AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 01/42] drm/mediatek: Rename OVL format naming AngeloGioacchino Del Regno
2026-07-02  7:30   ` CK Hu (胡俊光)
2026-07-01 12:20 ` [PATCH 02/42] drm/mediatek: Export OVL formats definitions and format conversion API AngeloGioacchino Del Regno
2026-07-02  9:36   ` CK Hu (胡俊光)
2026-07-01 12:20 ` [PATCH 03/42] drm/mediatek: Export OVL Blend function AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 04/42] drm/mediatek: Move mtk_ddp_comp_type enumeration to mtk-mmsys.h AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 05/42] drm/mediatek: Rename all display component type to have DISP_ prefix AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 06/42] drm/mediatek: Use hashtable for components discovery and registration AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 07/42] drm/mediatek: ddp_comp: Move internal component register in function AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 08/42] drm/mediatek: De-duplicate internal component checks AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 09/42] drm/mediatek: Introduce and use path/comp definition structures AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 10/42] drm/mediatek: Create new mtk_drm_legacy and move deprecated code AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 11/42] drm/mediatek: Add support for MuteX trigger-sources parsing AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 12/42] drm/mediatek: ovl_adaptor: Add special MERGE component check AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 13/42] drm/mediatek: mtk_hdmi_v2: Don't warn on RPM active during detach AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 14/42] drm/mediatek: Add support for hardware multi-stage layers AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 15/42] drm/mediatek: mtk_crtc: Complete documentation for struct mtk_crtc AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 16/42] drm/mediatek: mtk_crtc: Minimize spinlocked time in cmdq callback AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 17/42] drm/mediatek: mtk_crtc: Dynamically find vblank/cfg component indices AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 18/42] soc: mediatek: mtk-mmsys: Migrate to new Multimedia DDP HW indexing AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 19/42] drm/mediatek: Fully migrate to new Display Controller " AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 20/42] drm/mediatek: mtk_dpi: Pass parameters with new mtk_dpi_sync structure AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 21/42] drm/mediatek: mtk_dpi: Fully separate HW setup from common code AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 22/42] drm/mediatek: Create new mtk_dpi_common lib and move mtk_dpi code AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 23/42] dt-bindings: display: mediatek: Introduce Digital Video Output HW AngeloGioacchino Del Regno
2026-07-01 14:23   ` Rob Herring (Arm)
2026-07-01 16:53     ` AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 24/42] drm/mediatek: Add support for MediaTek Digital Video Output (DVO) AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 25/42] drm/mediatek: Pass mtk_ddp_comp in clk and config callbacks AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 26/42] dt-bindings: display: mediatek: Introduce MT8196 Layer Blender AngeloGioacchino Del Regno
2026-07-01 14:23   ` Rob Herring (Arm)
2026-07-01 12:20 ` [PATCH 27/42] drm/mediatek: Add support for Display Layer Blender component AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 28/42] dt-bindings: display: mediatek: Introduce MT8196 extended DMA Engine AngeloGioacchino Del Regno
2026-07-01 14:23   ` Rob Herring (Arm)
2026-07-01 12:20 ` [PATCH 29/42] drm/mediatek: Add support for Display Controller exDMA component AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 30/42] dt-bindings: display: mediatek: Introduce MT8196 Output Processor AngeloGioacchino Del Regno
2026-07-01 14:23   ` Rob Herring (Arm)
2026-07-01 12:20 ` [PATCH 31/42] drm/mediatek: Add support for Display Output Processor component AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 32/42] drm/mediatek: mtk_crtc: Dynamically find suitable CRTC DMA device AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 33/42] drm/mediatek: Prepare path builder for multi-controller architecture AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 34/42] drm/mediatek: Enable bring-up of multi-controller CRTC paths AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 35/42] drm/mediatek: Introduce MediaTek Asynchronous DirectLink Controller AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 36/42] drm/mediatek: Support registering disp controller device subnodes AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 37/42] soc: mediatek: mtk-mmsys: Populate multimedia subsystem subdevices AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 38/42] dt-bindings: display: mediatek: Introduce MT8196 2D Sharpness Processor AngeloGioacchino Del Regno
2026-07-01 14:23   ` Rob Herring (Arm)
2026-07-01 12:20 ` [PATCH 39/42] drm/mediatek: Add Two-Dimension Sharpness Processor (TDSHP) driver AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 40/42] dt-bindings: display: mediatek: Introduce MT8196 Image Resizer AngeloGioacchino Del Regno
2026-07-01 14:23   ` Rob Herring (Arm)
2026-07-01 12:20 ` [PATCH 41/42] drm/mediatek: Add support for Display Image Resizer (Scaler) AngeloGioacchino Del Regno
2026-07-01 12:20 ` [PATCH 42/42] drm/mediatek: mtk_drm_drv: Fail init only if all paths are invalid AngeloGioacchino Del Regno

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox