[PATCH RESEND 00/17] drm/spacemit: add SpacemiT K3 display support
Cody Kang via B4 Relay
devnull+codykang.hk.gmail.com at kernel.org
Fri Jul 24 21:51:09 PDT 2026
This is a resend of today's earlier posting, which was only partially
delivered because of a mail failure on the sending side: the cover
letter and eight of the patches never reached the lists. The patches
are unchanged. Apologies for the duplicates.
This series adds display support for the SpacemiT K3 [2], a RISC-V SoC:
a new DRM driver, a new PHY driver and three new bindings.
The display path is three blocks deep:
Saturn DPU -> Innosilicon DP/eDP controller -> Innosilicon DP PHY
The Saturn DPU is SpacemiT's own display processing unit. It has a private
address translation unit and a command-list composer that replays a batch
of register writes when a flush is latched. It exposes one CRTC with one
primary plane. The K3 instantiates two DPUs, one per display path.
The DPU driver arrives as five staged patches to keep each one a
reasonable size. The driver only becomes buildable with that last patch.
Bisect safe.
The DP/eDP controller and its PHY are Innosilicon IP, also two instances
of each. An instance behaves as embedded DisplayPort or as external
DisplayPort purely according to what its output port is wired to, so the
bindings do not distinguish them. The PHY's registers are interleaved
with the controller's inside one MMIO window, which is why it is
described as a child node and shares the controller's regmap.
The pixel clock is generated by the DP PHY's PLL, and the SoC's APMU
pixel-clock mux takes that PLL as an input. Rather than let the display
driver reach into PHY registers, the PHY registers its PLL as a clock
provider and the APMU mux is parented to it through the clock framework.
That is what patches 2, 4, 5 and 6 are for, and it is also what keeps the
APMU and the DP/eDP controller out of a devicetree provider cycle.
As a first posting of the K3 display subsystem, this patchset supports:
a single primary plane per CRTC, linear RGB scanout (no plane scaling,
rotation, YUV or writeback). It does not support DSI, DSC or DP audio,
and link rates are capped at HBR2.
Based on drm-misc-next at commit 5b9af25f2d0b ("accel/ivpu: Remove
unnecessary min_t()/max_t() usage"), v7.2-rc2 based.
Testing this series needs a SpacemiT u-boot carrying display support
[1]. SpacemiT expects to add that support into an official u-boot
release in August 2026.
Tested on two K3 boards:
- Pico-ITX: an eDP panel and an external DisplayPort monitor.
- CoM260-IFX: DisplayPort only, no eDP.
Note: The eDP panel DTS enablement is not part of this series; a separate
series will follow showing how eDP can be verified.
What was run on both boards, with modetest from libdrm and with kmscube:
- modetest -s, looped over 1920x1080, 1280x720 and 3840x2160
on DisplayPort and 2560x1600 on eDP
- kmscube, on each head and on both at once
- hot-plug and sink swap on the DisplayPort connector
Both built-in and modular configurations were tested, and the runs above
were repeated in both. Patch 17 defconfig adds them as modules.
[1] https://github.com/spacemit-com/uboot-for-k3-display-verify/tree/k3-br-v1.0.y
[2] https://www.spacemit.com/community/document/info?lang=en&nodepath=hardware/key_stone/k3
Signed-off-by: Cody Kang <codykang.hk at gmail.com>
---
Cody Kang (17):
dt-bindings: display: spacemit: add K3 Saturn DPU controller
dt-bindings: phy: add SpacemiT K3 Innosilicon DP PHY
dt-bindings: display: spacemit: add K3 Innosilicon DP/eDP controller
dt-bindings: soc: spacemit: allow eDP/DP PHY PLL pixel clocks on K3 APMU
phy: spacemit: add Innosilicon DP TX PHY driver
clk: spacemit: k3: parent eDP/DP pixel clock to the PHY PLL
drm/spacemit: add Saturn DPU register model
drm/spacemit: add Saturn DPU core types, cmdlist and display MMU
drm/spacemit: add Saturn DPU hardware backend
drm/spacemit: add Saturn DPU KMS pipeline
drm/spacemit: add Saturn DPU DRM device driver
drm/spacemit: add Innosilicon DP/eDP controller bridge driver
MAINTAINERS: add SpacemiT K3 display driver entry
riscv: dts: spacemit: k3: add display nodes
riscv: dts: spacemit: k3-pico-itx: enable the DisplayPort output
riscv: dts: spacemit: k3-com260-ifx: enable the DisplayPort output
riscv: defconfig: spacemit: k3: enable display driver
.../display/spacemit/spacemit,k3-inno-dp.yaml | 140 ++
.../display/spacemit/spacemit,k3-saturn-dpu.yaml | 132 ++
.../bindings/phy/spacemit,k3-inno-dp-phy.yaml | 48 +
.../bindings/soc/spacemit/spacemit,k1-syscon.yaml | 30 +-
MAINTAINERS | 10 +
arch/riscv/boot/dts/spacemit/k3-com260-ifx.dts | 11 +
arch/riscv/boot/dts/spacemit/k3-display.dtsi | 156 ++
arch/riscv/boot/dts/spacemit/k3-pico-itx.dts | 11 +
arch/riscv/boot/dts/spacemit/k3-pinctrl.dtsi | 22 +
arch/riscv/configs/defconfig | 2 +
drivers/clk/spacemit/ccu-k3.c | 4 +-
drivers/gpu/drm/Kconfig | 1 +
drivers/gpu/drm/Makefile | 1 +
drivers/gpu/drm/spacemit/Kconfig | 37 +
drivers/gpu/drm/spacemit/Makefile | 15 +
drivers/gpu/drm/spacemit/dpu/dpu_saturn.c | 483 ++++
drivers/gpu/drm/spacemit/dpu/dpu_saturn.h | 35 +
drivers/gpu/drm/spacemit/dpu/dpu_saturn_hee.c | 896 +++++++
drivers/gpu/drm/spacemit/dpu/dpu_trace.h | 350 +++
drivers/gpu/drm/spacemit/dpu/saturn_fbcmem.c | 152 ++
drivers/gpu/drm/spacemit/dpu/saturn_fbcmem.h | 21 +
drivers/gpu/drm/spacemit/dpu/saturn_regs/dpu_int.h | 25 +
drivers/gpu/drm/spacemit/dpu/saturn_regs/ops_hee.h | 52 +
.../gpu/drm/spacemit/dpu/saturn_regs/reg_map_hee.h | 64 +
.../drm/spacemit/dpu/saturn_regs/saturn_fields.h | 298 +++
drivers/gpu/drm/spacemit/spacemit_cmdlist.c | 304 +++
drivers/gpu/drm/spacemit/spacemit_cmdlist.h | 146 ++
drivers/gpu/drm/spacemit/spacemit_crtc.c | 815 +++++++
drivers/gpu/drm/spacemit/spacemit_crtc.h | 259 +++
drivers/gpu/drm/spacemit/spacemit_dmmu.c | 103 +
drivers/gpu/drm/spacemit/spacemit_dmmu.h | 40 +
drivers/gpu/drm/spacemit/spacemit_dpu_ids.h | 22 +
drivers/gpu/drm/spacemit/spacemit_dpu_reg.h | 108 +
drivers/gpu/drm/spacemit/spacemit_drm.c | 132 ++
drivers/gpu/drm/spacemit/spacemit_drm.h | 68 +
drivers/gpu/drm/spacemit/spacemit_inno_dp.c | 2443 ++++++++++++++++++++
drivers/gpu/drm/spacemit/spacemit_inno_dp.h | 328 +++
drivers/gpu/drm/spacemit/spacemit_planes.c | 376 +++
drivers/phy/spacemit/Kconfig | 13 +
drivers/phy/spacemit/Makefile | 1 +
drivers/phy/spacemit/phy-k3-inno-dp.c | 948 ++++++++
41 files changed, 9099 insertions(+), 3 deletions(-)
---
base-commit: 5b9af25f2d0b574b4058c9f8c84486a597168116
change-id: 20260713-k3-display-e8ffed67e936
--
Cody Kang <codykang.hk at gmail.com>
More information about the linux-riscv
mailing list