* [PATCH 0/2] drm: Remove simple-display pipe
@ 2026-10-01 13:35 Thomas Zimmermann
2026-10-01 13:35 ` [PATCH 1/2] drm/hyperv: Add missing include statements Thomas Zimmermann
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Thomas Zimmermann @ 2026-10-01 13:35 UTC (permalink / raw)
To: maarten.lankhorst, mripard, airlied, simona, decui, longli,
ssengar, andy, gregkh
Cc: dri-devel, linux-kernel, linux-fbdev, linux-staging,
sashiko-reviews, Thomas Zimmermann
There are no drivers using struct drm_simple_display_pipe left. Remove
the related helpers from DRM and clear any TODO items. Hyperv-drm needs
a minor fix to include some additonal headers.
Thomas Zimmermann (2):
drm/hyperv: Add missing include statements
drm/kms-helper: Remove struct drm_simple_display_pipe and helpers
Documentation/gpu/todo.rst | 17 --
drivers/gpu/drm/drm_gem_atomic_helper.c | 92 -------
drivers/gpu/drm/drm_simple_kms_helper.c | 328 ------------------------
drivers/gpu/drm/hyperv/hyperv_drm.h | 5 +
drivers/staging/fbtft/TODO | 6 +-
include/drm/drm_gem_atomic_helper.h | 28 --
include/drm/drm_simple_kms_helper.h | 56 +---
7 files changed, 10 insertions(+), 522 deletions(-)
base-commit: 9ecc25f4cc83ac280099d6c39e044d911774018d
--
2.55.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] drm/hyperv: Add missing include statements
2026-10-01 13:35 [PATCH 0/2] drm: Remove simple-display pipe Thomas Zimmermann
@ 2026-10-01 13:35 ` Thomas Zimmermann
2026-10-01 13:35 ` [PATCH 2/2] drm/kms-helper: Remove struct drm_simple_display_pipe and helpers Thomas Zimmermann
2026-10-01 14:03 ` [PATCH 0/2] drm: Remove simple-display pipe Andy Shevchenko
2 siblings, 0 replies; 8+ messages in thread
From: Thomas Zimmermann @ 2026-10-01 13:35 UTC (permalink / raw)
To: maarten.lankhorst, mripard, airlied, simona, decui, longli,
ssengar, andy, gregkh
Cc: dri-devel, linux-kernel, linux-fbdev, linux-staging,
sashiko-reviews, Thomas Zimmermann
Hyperv-drm gets a number of headers via <drm/drm_simple_kms_helper.h>.
Include the files directly so that the simple-kms header doesn't have
to.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/gpu/drm/hyperv/hyperv_drm.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/gpu/drm/hyperv/hyperv_drm.h b/drivers/gpu/drm/hyperv/hyperv_drm.h
index 29e6f54af15f..f4262a37af36 100644
--- a/drivers/gpu/drm/hyperv/hyperv_drm.h
+++ b/drivers/gpu/drm/hyperv/hyperv_drm.h
@@ -6,6 +6,11 @@
#ifndef _HYPERV_DRM_H_
#define _HYPERV_DRM_H_
+#include <drm/drm_connector.h>
+#include <drm/drm_crtc.h>
+#include <drm/drm_encoder.h>
+#include <drm/drm_plane.h>
+
#define VMBUS_MAX_PACKET_SIZE 0x4000
struct hv_drm_device {
--
2.55.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/2] drm/kms-helper: Remove struct drm_simple_display_pipe and helpers
2026-10-01 13:35 [PATCH 0/2] drm: Remove simple-display pipe Thomas Zimmermann
2026-10-01 13:35 ` [PATCH 1/2] drm/hyperv: Add missing include statements Thomas Zimmermann
@ 2026-10-01 13:35 ` Thomas Zimmermann
2026-10-01 14:02 ` Andy Shevchenko
` (2 more replies)
2026-10-01 14:03 ` [PATCH 0/2] drm: Remove simple-display pipe Andy Shevchenko
2 siblings, 3 replies; 8+ messages in thread
From: Thomas Zimmermann @ 2026-10-01 13:35 UTC (permalink / raw)
To: maarten.lankhorst, mripard, airlied, simona, decui, longli,
ssengar, andy, gregkh
Cc: dri-devel, linux-kernel, linux-fbdev, linux-staging,
sashiko-reviews, Thomas Zimmermann
There are no drivers using struct drm_simple_display_pipe. Remove
the data type and all related helpers.
The idea behind struct drm_simple_display_pipe was to provide an
easier way for writing DRM drivers besides regular atomic helpers.
It turned out to be more complicated. With all drivers being updated
to use atomic helpers, it's time to remove simple-pipe. Also clean
up the related TODO items.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
Documentation/gpu/todo.rst | 17 --
drivers/gpu/drm/drm_gem_atomic_helper.c | 92 -------
drivers/gpu/drm/drm_simple_kms_helper.c | 328 ------------------------
drivers/staging/fbtft/TODO | 6 +-
include/drm/drm_gem_atomic_helper.h | 28 --
include/drm/drm_simple_kms_helper.h | 56 +---
6 files changed, 5 insertions(+), 522 deletions(-)
diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
index a437ae5c71f4..e6d36f8da086 100644
--- a/Documentation/gpu/todo.rst
+++ b/Documentation/gpu/todo.rst
@@ -29,23 +29,6 @@ refactorings already and are an expert in the specific area
Subsystem-wide refactorings
===========================
-Replace struct drm_simple_display_pipe with regular atomic helpers
-------------------------------------------------------------------
-
-The data type struct drm_simple_display_pipe and its helpers were supposed
-to simplify driver development. Instead they only added an intermediate layer
-between atomic modesetting and the DRM driver.
-
-There are still drivers that use drm_simple_display_pipe. The task here is to
-convert them to use regular atomic helpers. Search for a driver that calls
-drm_simple_display_pipe_init() and inline all helpers from drm_simple_kms_helper.c
-into the driver, such that no simple-KMS interfaces are required. Please also
-rename all inlined functions according to driver conventions.
-
-Contact: Thomas Zimmermann, respective driver maintainer
-
-Level: Easy
-
Remove custom dumb_map_offset implementations
---------------------------------------------
diff --git a/drivers/gpu/drm/drm_gem_atomic_helper.c b/drivers/gpu/drm/drm_gem_atomic_helper.c
index dd9efa7e3216..c952cfed84c1 100644
--- a/drivers/gpu/drm/drm_gem_atomic_helper.c
+++ b/drivers/gpu/drm/drm_gem_atomic_helper.c
@@ -10,7 +10,6 @@
#include <drm/drm_gem.h>
#include <drm/drm_gem_atomic_helper.h>
#include <drm/drm_gem_framebuffer_helper.h>
-#include <drm/drm_simple_kms_helper.h>
#include "drm_internal.h"
@@ -367,94 +366,3 @@ void drm_gem_end_shadow_fb_access(struct drm_plane *plane, struct drm_plane_stat
drm_gem_fb_vunmap(fb, shadow_plane_state->map);
}
EXPORT_SYMBOL(drm_gem_end_shadow_fb_access);
-
-/**
- * drm_gem_simple_kms_begin_shadow_fb_access - prepares shadow framebuffers for CPU access
- * @pipe: the simple display pipe
- * @plane_state: the plane state of type struct drm_shadow_plane_state
- *
- * This function implements struct drm_simple_display_funcs.begin_fb_access.
- *
- * See drm_gem_begin_shadow_fb_access() for details and
- * drm_gem_simple_kms_cleanup_shadow_fb() for cleanup.
- *
- * Returns:
- * 0 on success, or a negative errno code otherwise.
- */
-int drm_gem_simple_kms_begin_shadow_fb_access(struct drm_simple_display_pipe *pipe,
- struct drm_plane_state *plane_state)
-{
- return drm_gem_begin_shadow_fb_access(&pipe->plane, plane_state);
-}
-EXPORT_SYMBOL(drm_gem_simple_kms_begin_shadow_fb_access);
-
-/**
- * drm_gem_simple_kms_end_shadow_fb_access - releases shadow framebuffers from CPU access
- * @pipe: the simple display pipe
- * @plane_state: the plane state of type struct drm_shadow_plane_state
- *
- * This function implements struct drm_simple_display_funcs.end_fb_access.
- * It undoes all effects of drm_gem_simple_kms_begin_shadow_fb_access() in
- * reverse order.
- *
- * See drm_gem_simple_kms_begin_shadow_fb_access().
- */
-void drm_gem_simple_kms_end_shadow_fb_access(struct drm_simple_display_pipe *pipe,
- struct drm_plane_state *plane_state)
-{
- drm_gem_end_shadow_fb_access(&pipe->plane, plane_state);
-}
-EXPORT_SYMBOL(drm_gem_simple_kms_end_shadow_fb_access);
-
-/**
- * drm_gem_simple_kms_create_shadow_plane_state - creates shadow-buffered plane state
- * @pipe: the simple display pipe
- *
- * This function implements struct drm_simple_display_pipe_funcs.create_plane_state
- * for shadow-buffered planes.
- *
- * Returns:
- * A pointer to a new plane state on success, or an ERR_PTR()-encoded
- * error code otherwise.
- */
-struct drm_plane_state *
-drm_gem_simple_kms_create_shadow_plane_state(struct drm_simple_display_pipe *pipe)
-{
- return drm_gem_create_shadow_plane_state(&pipe->plane);
-}
-EXPORT_SYMBOL(drm_gem_simple_kms_create_shadow_plane_state);
-
-/**
- * drm_gem_simple_kms_duplicate_shadow_plane_state - duplicates shadow-buffered plane state
- * @pipe: the simple display pipe
- *
- * This function implements struct drm_simple_display_funcs.duplicate_plane_state
- * for shadow-buffered planes. It does not duplicate existing mappings of the shadow
- * buffers. Mappings are maintained during the atomic commit by the plane's prepare_fb
- * and cleanup_fb helpers.
- *
- * Returns:
- * A pointer to a new plane state on success, or NULL otherwise.
- */
-struct drm_plane_state *
-drm_gem_simple_kms_duplicate_shadow_plane_state(struct drm_simple_display_pipe *pipe)
-{
- return drm_gem_duplicate_shadow_plane_state(&pipe->plane);
-}
-EXPORT_SYMBOL(drm_gem_simple_kms_duplicate_shadow_plane_state);
-
-/**
- * drm_gem_simple_kms_destroy_shadow_plane_state - resets shadow-buffered plane state
- * @pipe: the simple display pipe
- * @plane_state: the plane state of type struct drm_shadow_plane_state
- *
- * This function implements struct drm_simple_display_funcs.destroy_plane_state
- * for shadow-buffered planes. It expects that mappings of shadow buffers
- * have been released already.
- */
-void drm_gem_simple_kms_destroy_shadow_plane_state(struct drm_simple_display_pipe *pipe,
- struct drm_plane_state *plane_state)
-{
- drm_gem_destroy_shadow_plane_state(&pipe->plane, plane_state);
-}
-EXPORT_SYMBOL(drm_gem_simple_kms_destroy_shadow_plane_state);
diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
index 5e324c77ad27..1d048282ed50 100644
--- a/drivers/gpu/drm/drm_simple_kms_helper.c
+++ b/drivers/gpu/drm/drm_simple_kms_helper.c
@@ -16,10 +16,6 @@
#include <drm/drm_probe_helper.h>
#include <drm/drm_simple_kms_helper.h>
-static const struct drm_encoder_funcs drm_simple_encoder_funcs_cleanup = {
- .destroy = drm_encoder_cleanup,
-};
-
void *__drmm_simple_encoder_alloc(struct drm_device *dev, size_t size,
size_t offset, int encoder_type)
{
@@ -28,329 +24,5 @@ void *__drmm_simple_encoder_alloc(struct drm_device *dev, size_t size,
}
EXPORT_SYMBOL(__drmm_simple_encoder_alloc);
-static enum drm_mode_status
-drm_simple_kms_crtc_mode_valid(struct drm_crtc *crtc,
- const struct drm_display_mode *mode)
-{
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(crtc, struct drm_simple_display_pipe, crtc);
- if (!pipe->funcs || !pipe->funcs->mode_valid)
- /* Anything goes */
- return MODE_OK;
-
- return pipe->funcs->mode_valid(pipe, mode);
-}
-
-static int drm_simple_kms_crtc_check(struct drm_crtc *crtc,
- struct drm_atomic_commit *state)
-{
- struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, crtc);
- int ret;
-
- if (!crtc_state->enable)
- goto out;
-
- ret = drm_atomic_helper_check_crtc_primary_plane(crtc_state);
- if (ret)
- return ret;
-
-out:
- return drm_atomic_add_affected_planes(state, crtc);
-}
-
-static void drm_simple_kms_crtc_enable(struct drm_crtc *crtc,
- struct drm_atomic_commit *state)
-{
- struct drm_plane *plane;
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(crtc, struct drm_simple_display_pipe, crtc);
- if (!pipe->funcs || !pipe->funcs->enable)
- return;
-
- plane = &pipe->plane;
- pipe->funcs->enable(pipe, crtc->state, plane->state);
-}
-
-static void drm_simple_kms_crtc_disable(struct drm_crtc *crtc,
- struct drm_atomic_commit *state)
-{
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(crtc, struct drm_simple_display_pipe, crtc);
- if (!pipe->funcs || !pipe->funcs->disable)
- return;
-
- pipe->funcs->disable(pipe);
-}
-
-static const struct drm_crtc_helper_funcs drm_simple_kms_crtc_helper_funcs = {
- .mode_valid = drm_simple_kms_crtc_mode_valid,
- .atomic_check = drm_simple_kms_crtc_check,
- .atomic_enable = drm_simple_kms_crtc_enable,
- .atomic_disable = drm_simple_kms_crtc_disable,
-};
-
-static struct drm_crtc_state *drm_simple_kms_crtc_duplicate_state(struct drm_crtc *crtc)
-{
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(crtc, struct drm_simple_display_pipe, crtc);
- if (!pipe->funcs || !pipe->funcs->duplicate_crtc_state)
- return drm_atomic_helper_crtc_duplicate_state(crtc);
-
- return pipe->funcs->duplicate_crtc_state(pipe);
-}
-
-static void drm_simple_kms_crtc_destroy_state(struct drm_crtc *crtc, struct drm_crtc_state *state)
-{
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(crtc, struct drm_simple_display_pipe, crtc);
- if (!pipe->funcs || !pipe->funcs->destroy_crtc_state)
- drm_atomic_helper_crtc_destroy_state(crtc, state);
- else
- pipe->funcs->destroy_crtc_state(pipe, state);
-}
-
-static int drm_simple_kms_crtc_enable_vblank(struct drm_crtc *crtc)
-{
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(crtc, struct drm_simple_display_pipe, crtc);
- if (!pipe->funcs || !pipe->funcs->enable_vblank)
- return 0;
-
- return pipe->funcs->enable_vblank(pipe);
-}
-
-static void drm_simple_kms_crtc_disable_vblank(struct drm_crtc *crtc)
-{
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(crtc, struct drm_simple_display_pipe, crtc);
- if (!pipe->funcs || !pipe->funcs->disable_vblank)
- return;
-
- pipe->funcs->disable_vblank(pipe);
-}
-
-static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
- .atomic_create_state = drm_atomic_helper_crtc_create_state,
- .destroy = drm_crtc_cleanup,
- .set_config = drm_atomic_helper_set_config,
- .page_flip = drm_atomic_helper_page_flip,
- .atomic_duplicate_state = drm_simple_kms_crtc_duplicate_state,
- .atomic_destroy_state = drm_simple_kms_crtc_destroy_state,
- .enable_vblank = drm_simple_kms_crtc_enable_vblank,
- .disable_vblank = drm_simple_kms_crtc_disable_vblank,
-};
-
-static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
- struct drm_atomic_commit *state)
-{
- struct drm_plane_state *plane_state = drm_atomic_get_new_plane_state(state,
- plane);
- struct drm_simple_display_pipe *pipe;
- struct drm_crtc_state *crtc_state;
- int ret;
-
- pipe = container_of(plane, struct drm_simple_display_pipe, plane);
- crtc_state = drm_atomic_get_new_crtc_state(state,
- &pipe->crtc);
-
- ret = drm_atomic_helper_check_plane_state(plane_state, crtc_state,
- DRM_PLANE_NO_SCALING,
- DRM_PLANE_NO_SCALING,
- false, false);
- if (ret)
- return ret;
-
- if (!plane_state->visible)
- return 0;
-
- if (!pipe->funcs || !pipe->funcs->check)
- return 0;
-
- return pipe->funcs->check(pipe, plane_state, crtc_state);
-}
-
-static void drm_simple_kms_plane_atomic_update(struct drm_plane *plane,
- struct drm_atomic_commit *state)
-{
- struct drm_plane_state *old_pstate = drm_atomic_get_old_plane_state(state,
- plane);
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(plane, struct drm_simple_display_pipe, plane);
- if (!pipe->funcs || !pipe->funcs->update)
- return;
-
- pipe->funcs->update(pipe, old_pstate);
-}
-
-static int drm_simple_kms_plane_prepare_fb(struct drm_plane *plane,
- struct drm_plane_state *state)
-{
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(plane, struct drm_simple_display_pipe, plane);
- if (!pipe->funcs || !pipe->funcs->prepare_fb) {
- if (WARN_ON_ONCE(!drm_core_check_feature(plane->dev, DRIVER_GEM)))
- return 0;
-
- WARN_ON_ONCE(pipe->funcs && pipe->funcs->cleanup_fb);
-
- return drm_gem_plane_helper_prepare_fb(plane, state);
- }
-
- return pipe->funcs->prepare_fb(pipe, state);
-}
-
-static void drm_simple_kms_plane_cleanup_fb(struct drm_plane *plane,
- struct drm_plane_state *state)
-{
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(plane, struct drm_simple_display_pipe, plane);
- if (!pipe->funcs || !pipe->funcs->cleanup_fb)
- return;
-
- pipe->funcs->cleanup_fb(pipe, state);
-}
-
-static int drm_simple_kms_plane_begin_fb_access(struct drm_plane *plane,
- struct drm_plane_state *new_plane_state)
-{
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(plane, struct drm_simple_display_pipe, plane);
- if (!pipe->funcs || !pipe->funcs->begin_fb_access)
- return 0;
-
- return pipe->funcs->begin_fb_access(pipe, new_plane_state);
-}
-
-static void drm_simple_kms_plane_end_fb_access(struct drm_plane *plane,
- struct drm_plane_state *new_plane_state)
-{
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(plane, struct drm_simple_display_pipe, plane);
- if (!pipe->funcs || !pipe->funcs->end_fb_access)
- return;
-
- pipe->funcs->end_fb_access(pipe, new_plane_state);
-}
-
-static bool drm_simple_kms_format_mod_supported(struct drm_plane *plane,
- uint32_t format,
- uint64_t modifier)
-{
- return modifier == DRM_FORMAT_MOD_LINEAR;
-}
-
-static const struct drm_plane_helper_funcs drm_simple_kms_plane_helper_funcs = {
- .prepare_fb = drm_simple_kms_plane_prepare_fb,
- .cleanup_fb = drm_simple_kms_plane_cleanup_fb,
- .begin_fb_access = drm_simple_kms_plane_begin_fb_access,
- .end_fb_access = drm_simple_kms_plane_end_fb_access,
- .atomic_check = drm_simple_kms_plane_atomic_check,
- .atomic_update = drm_simple_kms_plane_atomic_update,
-};
-
-static struct drm_plane_state *
-drm_simple_kms_plane_create_state(struct drm_plane *plane)
-{
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(plane, struct drm_simple_display_pipe, plane);
- if (!pipe->funcs || !pipe->funcs->create_plane_state)
- return drm_atomic_helper_plane_create_state(plane);
-
- return pipe->funcs->create_plane_state(pipe);
-}
-
-static struct drm_plane_state *drm_simple_kms_plane_duplicate_state(struct drm_plane *plane)
-{
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(plane, struct drm_simple_display_pipe, plane);
- if (!pipe->funcs || !pipe->funcs->duplicate_plane_state)
- return drm_atomic_helper_plane_duplicate_state(plane);
-
- return pipe->funcs->duplicate_plane_state(pipe);
-}
-
-static void drm_simple_kms_plane_destroy_state(struct drm_plane *plane,
- struct drm_plane_state *state)
-{
- struct drm_simple_display_pipe *pipe;
-
- pipe = container_of(plane, struct drm_simple_display_pipe, plane);
- if (!pipe->funcs || !pipe->funcs->destroy_plane_state)
- drm_atomic_helper_plane_destroy_state(plane, state);
- else
- pipe->funcs->destroy_plane_state(pipe, state);
-}
-
-static const struct drm_plane_funcs drm_simple_kms_plane_funcs = {
- .update_plane = drm_atomic_helper_update_plane,
- .disable_plane = drm_atomic_helper_disable_plane,
- .destroy = drm_plane_cleanup,
- .atomic_create_state = drm_simple_kms_plane_create_state,
- .atomic_duplicate_state = drm_simple_kms_plane_duplicate_state,
- .atomic_destroy_state = drm_simple_kms_plane_destroy_state,
- .format_mod_supported = drm_simple_kms_format_mod_supported,
-};
-
-int drm_simple_display_pipe_attach_bridge(struct drm_simple_display_pipe *pipe,
- struct drm_bridge *bridge)
-{
- return drm_bridge_attach(&pipe->encoder, bridge, NULL, 0);
-}
-EXPORT_SYMBOL(drm_simple_display_pipe_attach_bridge);
-
-int drm_simple_display_pipe_init(struct drm_device *dev,
- struct drm_simple_display_pipe *pipe,
- const struct drm_simple_display_pipe_funcs *funcs,
- const uint32_t *formats, unsigned int format_count,
- const uint64_t *format_modifiers,
- struct drm_connector *connector)
-{
- struct drm_encoder *encoder = &pipe->encoder;
- struct drm_plane *plane = &pipe->plane;
- struct drm_crtc *crtc = &pipe->crtc;
- int ret;
-
- pipe->connector = connector;
- pipe->funcs = funcs;
-
- drm_plane_helper_add(plane, &drm_simple_kms_plane_helper_funcs);
- ret = drm_universal_plane_init(dev, plane, 0,
- &drm_simple_kms_plane_funcs,
- formats, format_count,
- format_modifiers,
- DRM_PLANE_TYPE_PRIMARY, NULL);
- if (ret)
- return ret;
-
- drm_crtc_helper_add(crtc, &drm_simple_kms_crtc_helper_funcs);
- ret = drm_crtc_init_with_planes(dev, crtc, plane, NULL,
- &drm_simple_kms_crtc_funcs, NULL);
- if (ret)
- return ret;
-
- encoder->possible_crtcs = drm_crtc_mask(crtc);
- ret = drm_encoder_init(dev, encoder, &drm_simple_encoder_funcs_cleanup,
- DRM_MODE_ENCODER_NONE, NULL);
- if (ret || !connector)
- return ret;
-
- return drm_connector_attach_encoder(connector, encoder);
-}
-EXPORT_SYMBOL(drm_simple_display_pipe_init);
-
MODULE_DESCRIPTION("Helpers for drivers for simple display hardware");
MODULE_LICENSE("GPL");
diff --git a/drivers/staging/fbtft/TODO b/drivers/staging/fbtft/TODO
index e72a08bf221c..72df3ea3a52c 100644
--- a/drivers/staging/fbtft/TODO
+++ b/drivers/staging/fbtft/TODO
@@ -1,3 +1,3 @@
-* convert all these over to drm_simple_display_pipe and submit for inclusion
- into the DRM subsystem under drivers/gpu/drm - fbdev doesn't take any new
- drivers anymore.
+* convert all these over to DRM and submit thme for inclusion into
+ the DRM subsystem under drivers/gpu/drm - fbdev doesn't take any
+ new drivers anymore.
diff --git a/include/drm/drm_gem_atomic_helper.h b/include/drm/drm_gem_atomic_helper.h
index d41877f77b77..f605a8a7b017 100644
--- a/include/drm/drm_gem_atomic_helper.h
+++ b/include/drm/drm_gem_atomic_helper.h
@@ -9,8 +9,6 @@
#include <drm/drm_fourcc.h>
#include <drm/drm_plane.h>
-struct drm_simple_display_pipe;
-
/*
* Plane Helpers
*/
@@ -126,30 +124,4 @@ void drm_gem_end_shadow_fb_access(struct drm_plane *plane, struct drm_plane_stat
.begin_fb_access = drm_gem_begin_shadow_fb_access, \
.end_fb_access = drm_gem_end_shadow_fb_access
-int drm_gem_simple_kms_begin_shadow_fb_access(struct drm_simple_display_pipe *pipe,
- struct drm_plane_state *plane_state);
-void drm_gem_simple_kms_end_shadow_fb_access(struct drm_simple_display_pipe *pipe,
- struct drm_plane_state *plane_state);
-struct drm_plane_state *
-drm_gem_simple_kms_create_shadow_plane_state(struct drm_simple_display_pipe *pipe);
-struct drm_plane_state *
-drm_gem_simple_kms_duplicate_shadow_plane_state(struct drm_simple_display_pipe *pipe);
-void drm_gem_simple_kms_destroy_shadow_plane_state(struct drm_simple_display_pipe *pipe,
- struct drm_plane_state *plane_state);
-
-/**
- * DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS -
- * Initializes struct drm_simple_display_pipe_funcs for shadow-buffered planes
- *
- * Drivers may use GEM BOs as shadow buffers over the framebuffer memory. This
- * macro initializes struct drm_simple_display_pipe_funcs to use the rsp helper
- * functions.
- */
-#define DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS \
- .begin_fb_access = drm_gem_simple_kms_begin_shadow_fb_access, \
- .end_fb_access = drm_gem_simple_kms_end_shadow_fb_access, \
- .create_plane_state = drm_gem_simple_kms_create_shadow_plane_state, \
- .duplicate_plane_state = drm_gem_simple_kms_duplicate_shadow_plane_state, \
- .destroy_plane_state = drm_gem_simple_kms_destroy_shadow_plane_state
-
#endif /* __DRM_GEM_ATOMIC_HELPER_H__ */
diff --git a/include/drm/drm_simple_kms_helper.h b/include/drm/drm_simple_kms_helper.h
index 2b31c25c57a9..beb5c8a19bb7 100644
--- a/include/drm/drm_simple_kms_helper.h
+++ b/include/drm/drm_simple_kms_helper.h
@@ -11,61 +11,9 @@
#ifndef __LINUX_DRM_SIMPLE_KMS_HELPER_H
#define __LINUX_DRM_SIMPLE_KMS_HELPER_H
-#include <drm/drm_crtc.h>
-#include <drm/drm_encoder.h>
-#include <drm/drm_plane.h>
+#include <linux/types.h>
-struct drm_simple_display_pipe;
-
-struct drm_simple_display_pipe_funcs {
- enum drm_mode_status (*mode_valid)(struct drm_simple_display_pipe *pipe,
- const struct drm_display_mode *mode);
- void (*enable)(struct drm_simple_display_pipe *pipe,
- struct drm_crtc_state *crtc_state,
- struct drm_plane_state *plane_state);
- void (*disable)(struct drm_simple_display_pipe *pipe);
- int (*check)(struct drm_simple_display_pipe *pipe,
- struct drm_plane_state *plane_state,
- struct drm_crtc_state *crtc_state);
- void (*update)(struct drm_simple_display_pipe *pipe,
- struct drm_plane_state *old_plane_state);
- int (*prepare_fb)(struct drm_simple_display_pipe *pipe,
- struct drm_plane_state *plane_state);
- void (*cleanup_fb)(struct drm_simple_display_pipe *pipe,
- struct drm_plane_state *plane_state);
- int (*begin_fb_access)(struct drm_simple_display_pipe *pipe,
- struct drm_plane_state *new_plane_state);
- void (*end_fb_access)(struct drm_simple_display_pipe *pipe,
- struct drm_plane_state *plane_state);
- int (*enable_vblank)(struct drm_simple_display_pipe *pipe);
- void (*disable_vblank)(struct drm_simple_display_pipe *pipe);
- struct drm_crtc_state * (*duplicate_crtc_state)(struct drm_simple_display_pipe *pipe);
- void (*destroy_crtc_state)(struct drm_simple_display_pipe *pipe,
- struct drm_crtc_state *crtc_state);
- struct drm_plane_state * (*create_plane_state)(struct drm_simple_display_pipe *pipe);
- struct drm_plane_state * (*duplicate_plane_state)(struct drm_simple_display_pipe *pipe);
- void (*destroy_plane_state)(struct drm_simple_display_pipe *pipe,
- struct drm_plane_state *plane_state);
-};
-
-struct drm_simple_display_pipe {
- struct drm_crtc crtc;
- struct drm_plane plane;
- struct drm_encoder encoder;
- struct drm_connector *connector;
-
- const struct drm_simple_display_pipe_funcs *funcs;
-};
-
-int drm_simple_display_pipe_attach_bridge(struct drm_simple_display_pipe *pipe,
- struct drm_bridge *bridge);
-
-int drm_simple_display_pipe_init(struct drm_device *dev,
- struct drm_simple_display_pipe *pipe,
- const struct drm_simple_display_pipe_funcs *funcs,
- const uint32_t *formats, unsigned int format_count,
- const uint64_t *format_modifiers,
- struct drm_connector *connector);
+struct drm_device;
void *__drmm_simple_encoder_alloc(struct drm_device *dev, size_t size,
size_t offset, int encoder_type);
--
2.55.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] drm/kms-helper: Remove struct drm_simple_display_pipe and helpers
2026-10-01 13:35 ` [PATCH 2/2] drm/kms-helper: Remove struct drm_simple_display_pipe and helpers Thomas Zimmermann
@ 2026-10-01 14:02 ` Andy Shevchenko
2026-10-01 14:38 ` Javier Martinez Canillas
2026-10-01 14:46 ` Javier Martinez Canillas
2 siblings, 0 replies; 8+ messages in thread
From: Andy Shevchenko @ 2026-10-01 14:02 UTC (permalink / raw)
To: Thomas Zimmermann
Cc: maarten.lankhorst, mripard, airlied, simona, decui, longli,
ssengar, andy, gregkh, dri-devel, linux-kernel, linux-fbdev,
linux-staging, sashiko-reviews
On Thu, Oct 1, 2026 at 4:38 PM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
> There are no drivers using struct drm_simple_display_pipe. Remove
> the data type and all related helpers.
>
> The idea behind struct drm_simple_display_pipe was to provide an
> easier way for writing DRM drivers besides regular atomic helpers.
> It turned out to be more complicated. With all drivers being updated
> to use atomic helpers, it's time to remove simple-pipe. Also clean
> up the related TODO items.
...
> +++ b/drivers/staging/fbtft/TODO
> @@ -1,3 +1,3 @@
> -* convert all these over to drm_simple_display_pipe and submit for inclusion
> - into the DRM subsystem under drivers/gpu/drm - fbdev doesn't take any new
> - drivers anymore.
> +* convert all these over to DRM and submit thme for inclusion into
them
(spell checking?)
> + the DRM subsystem under drivers/gpu/drm - fbdev doesn't take any
> + new drivers anymore.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/2] drm: Remove simple-display pipe
2026-10-01 13:35 [PATCH 0/2] drm: Remove simple-display pipe Thomas Zimmermann
2026-10-01 13:35 ` [PATCH 1/2] drm/hyperv: Add missing include statements Thomas Zimmermann
2026-10-01 13:35 ` [PATCH 2/2] drm/kms-helper: Remove struct drm_simple_display_pipe and helpers Thomas Zimmermann
@ 2026-10-01 14:03 ` Andy Shevchenko
2 siblings, 0 replies; 8+ messages in thread
From: Andy Shevchenko @ 2026-10-01 14:03 UTC (permalink / raw)
To: Thomas Zimmermann
Cc: maarten.lankhorst, mripard, airlied, simona, decui, longli,
ssengar, andy, gregkh, dri-devel, linux-kernel, linux-fbdev,
linux-staging, sashiko-reviews
On Thu, Oct 1, 2026 at 4:37 PM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
> There are no drivers using struct drm_simple_display_pipe left. Remove
> the related helpers from DRM and clear any TODO items. Hyperv-drm needs
> a minor fix to include some additonal headers.
additional
...
Makes a lot of sense,
Reviewed-by: Andy Shevchenko <andy@kernel.org>
with the spelling fix in the patch 2/2.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] drm/kms-helper: Remove struct drm_simple_display_pipe and helpers
2026-10-01 13:35 ` [PATCH 2/2] drm/kms-helper: Remove struct drm_simple_display_pipe and helpers Thomas Zimmermann
2026-10-01 14:02 ` Andy Shevchenko
@ 2026-10-01 14:38 ` Javier Martinez Canillas
2026-10-01 14:46 ` Javier Martinez Canillas
2 siblings, 0 replies; 8+ messages in thread
From: Javier Martinez Canillas @ 2026-10-01 14:38 UTC (permalink / raw)
To: Thomas Zimmermann, maarten.lankhorst, mripard, airlied, simona,
decui, longli, ssengar, andy, gregkh
Cc: dri-devel, linux-kernel, linux-fbdev, linux-staging,
sashiko-reviews, Thomas Zimmermann
Thomas Zimmermann <tzimmermann@suse.de> writes:
> There are no drivers using struct drm_simple_display_pipe. Remove
> the data type and all related helpers.
>
> The idea behind struct drm_simple_display_pipe was to provide an
> easier way for writing DRM drivers besides regular atomic helpers.
> It turned out to be more complicated. With all drivers being updated
> to use atomic helpers, it's time to remove simple-pipe. Also clean
> up the related TODO items.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
--
Best regards,
Javier Martinez Canillas
Core Platforms
Red Hat
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] drm/kms-helper: Remove struct drm_simple_display_pipe and helpers
2026-10-01 13:35 ` [PATCH 2/2] drm/kms-helper: Remove struct drm_simple_display_pipe and helpers Thomas Zimmermann
2026-10-01 14:02 ` Andy Shevchenko
2026-10-01 14:38 ` Javier Martinez Canillas
@ 2026-10-01 14:46 ` Javier Martinez Canillas
2026-10-01 15:57 ` Thomas Zimmermann
2 siblings, 1 reply; 8+ messages in thread
From: Javier Martinez Canillas @ 2026-10-01 14:46 UTC (permalink / raw)
To: Thomas Zimmermann, maarten.lankhorst, mripard, airlied, simona,
decui, longli, ssengar, andy, gregkh
Cc: dri-devel, linux-kernel, linux-fbdev, linux-staging,
sashiko-reviews, Thomas Zimmermann
Thomas Zimmermann <tzimmermann@suse.de> writes:
Hello Thomas,
> There are no drivers using struct drm_simple_display_pipe. Remove
> the data type and all related helpers.
>
> The idea behind struct drm_simple_display_pipe was to provide an
> easier way for writing DRM drivers besides regular atomic helpers.
> It turned out to be more complicated. With all drivers being updated
> to use atomic helpers, it's time to remove simple-pipe. Also clean
> up the related TODO items.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
> Documentation/gpu/todo.rst | 17 --
> drivers/gpu/drm/drm_gem_atomic_helper.c | 92 -------
> drivers/gpu/drm/drm_simple_kms_helper.c | 328 ------------------------
> drivers/staging/fbtft/TODO | 6 +-
> include/drm/drm_gem_atomic_helper.h | 28 --
> include/drm/drm_simple_kms_helper.h | 56 +---
There are no more users of struct drm_simple_display_pipe but still some
drivers include the drm_simple_kms_helper.h header. Latest drm-misc-next:
git grep "drm_simple_kms_helper.h" -- drivers/gpu/drm/*/ | wc -l
21
So it seems you need more preparatory patches. For this patch though:
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
--
Best regards,
Javier Martinez Canillas
Core Platforms
Red Hat
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] drm/kms-helper: Remove struct drm_simple_display_pipe and helpers
2026-10-01 14:46 ` Javier Martinez Canillas
@ 2026-10-01 15:57 ` Thomas Zimmermann
0 siblings, 0 replies; 8+ messages in thread
From: Thomas Zimmermann @ 2026-10-01 15:57 UTC (permalink / raw)
To: Javier Martinez Canillas, maarten.lankhorst, mripard, airlied,
simona, decui, longli, ssengar, andy, gregkh
Cc: dri-devel, linux-kernel, linux-fbdev, linux-staging, sashiko-reviews
Hi Javier
Am 01.10.26 um 16:46 schrieb Javier Martinez Canillas:
> Thomas Zimmermann <tzimmermann@suse.de> writes:
>
> Hello Thomas,
>
>> There are no drivers using struct drm_simple_display_pipe. Remove
>> the data type and all related helpers.
>>
>> The idea behind struct drm_simple_display_pipe was to provide an
>> easier way for writing DRM drivers besides regular atomic helpers.
>> It turned out to be more complicated. With all drivers being updated
>> to use atomic helpers, it's time to remove simple-pipe. Also clean
>> up the related TODO items.
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> ---
>> Documentation/gpu/todo.rst | 17 --
>> drivers/gpu/drm/drm_gem_atomic_helper.c | 92 -------
>> drivers/gpu/drm/drm_simple_kms_helper.c | 328 ------------------------
>> drivers/staging/fbtft/TODO | 6 +-
>> include/drm/drm_gem_atomic_helper.h | 28 --
>> include/drm/drm_simple_kms_helper.h | 56 +---
> There are no more users of struct drm_simple_display_pipe but still some
> drivers include the drm_simple_kms_helper.h header. Latest drm-misc-next:
>
> git grep "drm_simple_kms_helper.h" -- drivers/gpu/drm/*/ | wc -l
> 21
>
> So it seems you need more preparatory patches. For this patch though:
I'll take another look at it, but there's another interface in this
header file that is (still) being used by several drivers. The header
file still remains in place for now.
Best regards
Thomas
>
> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Stefan Gaiser, Jochen Jaser, Abhinav Puri, (HRB 36809, AG Nürnberg)
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-10-01 15:57 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-01 13:35 [PATCH 0/2] drm: Remove simple-display pipe Thomas Zimmermann
2026-10-01 13:35 ` [PATCH 1/2] drm/hyperv: Add missing include statements Thomas Zimmermann
2026-10-01 13:35 ` [PATCH 2/2] drm/kms-helper: Remove struct drm_simple_display_pipe and helpers Thomas Zimmermann
2026-10-01 14:02 ` Andy Shevchenko
2026-10-01 14:38 ` Javier Martinez Canillas
2026-10-01 14:46 ` Javier Martinez Canillas
2026-10-01 15:57 ` Thomas Zimmermann
2026-10-01 14:03 ` [PATCH 0/2] drm: Remove simple-display pipe Andy Shevchenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®