* [PATCH 00/70] drm/crtc: Convert all drivers to atomic_create_state and remove reset
@ 2026-08-21 14:38 ` Maxime Ripard
0 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Janne Grunau, Sasha Finkelstein, asahi,
Christian König, Alex Deucher, amd-gfx, Liviu Dudau,
Russell King, Alim Akhtar, Inki Dae, Krzysztof Kozlowski,
Kyungmin Park, Peter Griffin, Seung-Woo Kim, linux-samsung-soc,
Alison Wang, Stefan Agner, Ruben Wauters, Tian Tao, Xinwei Kong,
Yongbang Shi, John Stultz, Sumit Semwal, Xinliang Liu,
Yongqin Liu, Dexuan Cui, Long Li, Saurabh Sengar, linux-hyperv,
Fabio Estevam, Frank Li, Liu Ying, Pengutronix Kernel Team,
Sascha Hauer, imx, Laurentiu Palcu, Lucas Stach, Paul Cercueil,
linux-mips, Anitha Chrisanthus, Paul Kocialkowski, Jerome Brunet,
Kevin Hilman, Martin Blumenstingl, linux-amlogic, Abhinav Kumar,
Dmitry Baryshkov, Jessica Zhang, Marijn Suijten, Rob Clark,
Sean Paul, freedreno, linux-arm-msm, Marek Vasut, Dave Airlie,
Gerd Hoffmann, spice-devel, virtualization, Geert Uytterhoeven,
linux-renesas-soc, Marcus Folkesson, Baolin Wang, Chunyan Zhang,
Orson Zhai, Alain Volmat, Raphael Gallais-Pou, Alexandre Torgue,
Maxime Coquelin, Philippe Cornu, Raphael Gallais-Pou,
Yannick Fertre, Chen-Yu Tsai, Samuel Holland, linux-sunxi,
Jyri Sarha, Tomi Valkeinen, Aditya Garg, Aun-Ali Zaidi,
LiangCheng Wang, Alex Lanzano, Hans de Goede, Icenowy Zheng,
Chia-I Wu, Dmitry Osipenko, Gurchetan Singh, Michal Simek,
Javier Martinez Canillas, Harry Wentland, Leo Li,
Rodrigo Siqueira, Jocelyn Falempe, Alexandre Belloni,
Claudiu Beznea, Dharma Balasubiramani, Manikandan Muralidharan,
Nicolas Ferre, Philipp Zabel, Huacai Chen, Jianmin Lv,
Mingcong Bai, Qianhai Wu, Xi Ruoyao, AngeloGioacchino Del Regno,
Chun-Kuang Hu, Matthias Brugger, Danilo Krummrich, nouveau,
Kieran Bingham, Laurent Pinchart, Magnus Damm, Tomi Valkeinen,
Biju Das, Heiko Stübner, Andy Yan, Sandy Huang,
linux-rockchip, Iker Pedrosa, Mikko Perttunen, Thierry Reding,
linux-tegra, Maíra Canal, Raspberry Pi Kernel Maintenance,
Haneen Mohammed, Louis Chauvet, Melissa Wen,
Broadcom internal kernel review list, Zack Rusin
This is a follow-up to the plane reset removal series, and part of a
larger effort to remove the reset hook from all KMS objects.
The CRTC reset hook is overloaded: it is called both at probe time to
create the initial software state and during suspend/resume to reset
hardware and software state. These two roles have different
requirements, and the reset hook is not fallible, making error
handling difficult for the initial state allocation path.
While reset has the semantics to reset both the software and hardware
state, the vast majority of implementations and all the helpers only
reset the software state, making them equivalent to
atomic_create_state in practice. The atomic_create_state hook makes
this explicit: it only allocates and initializes a pristine state
without any side effect, and returns the state pointer or an ERR_PTR
on failure.
This series converts all CRTC drivers tree-wide from the reset hook to
atomic_create_state, then removes the reset hook from struct
drm_crtc_funcs entirely. Two drivers (tilcdc and loongson) had actual
hardware reset logic mixed into their reset hook; those are moved to
CRTC creation instead. The conversions were done using a combination of
Coccinelle semantic patches and manual adjustments.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Maxime Ripard (70):
drm/adp: Switch to drm_atomic_helper_crtc_create_state
drm/amdgpu: vkms: Switch to drm_atomic_helper_crtc_create_state
drm/arm: hdlcd: Switch to drm_atomic_helper_crtc_create_state
drm/armada: Switch to drm_atomic_helper_crtc_create_state
drm/exynos: Switch to drm_atomic_helper_crtc_create_state
drm/fsl-dcu: Switch to drm_atomic_helper_crtc_create_state
drm/gud: Switch to drm_atomic_helper_crtc_create_state
drm/hisilicon: hibmc: Switch to drm_atomic_helper_crtc_create_state
drm/hisilicon: kirin: Switch to drm_atomic_helper_crtc_create_state
drm/hyperv: Switch to drm_atomic_helper_crtc_create_state
drm/imx: dc: Switch to drm_atomic_helper_crtc_create_state
drm/imx: dcss: Switch to drm_atomic_helper_crtc_create_state
drm/ingenic: Switch to drm_atomic_helper_crtc_create_state
drm/kmb: Switch to drm_atomic_helper_crtc_create_state
drm/logicvc: Switch to drm_atomic_helper_crtc_create_state
drm/meson: Switch to drm_atomic_helper_crtc_create_state
drm/msm: mdp4: Switch to drm_atomic_helper_crtc_create_state
drm/mxs: mxsfb: Switch to drm_atomic_helper_crtc_create_state
drm/qxl: Switch to drm_atomic_helper_crtc_create_state
drm/renesas: shmobile: Switch to drm_atomic_helper_crtc_create_state
drm/simple-kms: Remove unused reset_crtc hook
drm/simple-kms: Switch to drm_atomic_helper_crtc_create_state
drm/sitronix: st7571: Switch to drm_atomic_helper_crtc_create_state
drm/sprd: Switch to drm_atomic_helper_crtc_create_state
drm/sti: Switch to drm_atomic_helper_crtc_create_state
drm/stm: Switch to drm_atomic_helper_crtc_create_state
drm/sun4i: Switch to drm_atomic_helper_crtc_create_state
drm/tests: Switch to drm_atomic_helper_crtc_create_state
drm/tilcdc: Move hardware reset to CRTC creation
drm/tilcdc: Switch to drm_atomic_helper_crtc_create_state
drm/tiny: appletbdrm: Switch to drm_atomic_helper_crtc_create_state
drm/tiny: bochs: Switch to drm_atomic_helper_crtc_create_state
drm/tiny: cirrus: Switch to drm_atomic_helper_crtc_create_state
drm/tiny: pixpaper: Switch to drm_atomic_helper_crtc_create_state
drm/tiny: sharp: Switch to drm_atomic_helper_crtc_create_state
drm/udl: Switch to drm_atomic_helper_crtc_create_state
drm/vbox: Switch to drm_atomic_helper_crtc_create_state
drm/verisilicon: Switch to drm_atomic_helper_crtc_create_state
drm/virtio: Switch to drm_atomic_helper_crtc_create_state
drm/xlnx: Switch to drm_atomic_helper_crtc_create_state
drm/mipi-dbi: Switch to drm_atomic_helper_crtc_create_state
drm/atomic-helper: Remove drm_atomic_helper_crtc_reset
sysfb: Convert to create_state
drm/amdgpu: dm: Convert to atomic_create_state
drm/komeda: Convert to atomic_create_state
drm/malidp: Convert to atomic_create_state
drm/ast: Convert to atomic_create_state
drm/atmel-hlcdc: Convert to atomic_create_state
drm/imx: ipuv3: Convert to atomic_create_state
drm/loongsoon: Move hardware reset to CRTC creation
drm/loongson: Convert to atomic_create_state
drm/mediatek: Convert to atomic_create_state
drm/mgag200: Convert to atomic_create_state
drm/msm: dpu1: Convert to atomic_create_state
drm/msm: mdp5: Convert to atomic_create_state
drm/mxsfb: lcdif: Convert to atomic_create_state
drm/nouveau: Convert to atomic_create_state
drm/omapdrm: Convert to atomic_create_state
drm/rcar-du: Convert to atomic_create_state
drm/rzg2l-du: Convert to atomic_create_state
drm/rockchip: vop: Convert to atomic_create_state
drm/rockchip: vop2: Convert to atomic_create_state
drm/sitronix: st7920: Convert to atomic_create_state
drm/solomon: ssd130x: Convert to atomic_create_state
drm/tegra: Convert to atomic_create_state
drm/vc4: Convert to atomic_create_state
drm/vkms: Convert to atomic_create_state
drm/vmwgfx: Convert to atomic_create_state
drm/atomic-helper: Remove __drm_atomic_helper_crtc_reset
drm/crtc: Remove reset
drivers/gpu/drm/adp/adp_drv.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c | 2 +-
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 17 ++++----
drivers/gpu/drm/arm/display/komeda/komeda_crtc.c | 18 ++++----
drivers/gpu/drm/arm/hdlcd_crtc.c | 2 +-
drivers/gpu/drm/arm/malidp_crtc.c | 18 ++++----
drivers/gpu/drm/armada/armada_crtc.c | 2 +-
drivers/gpu/drm/ast/ast_mode.c | 18 ++++----
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 19 ++++-----
drivers/gpu/drm/drm_atomic_state_helper.c | 45 --------------------
drivers/gpu/drm/drm_mode_config.c | 4 +-
drivers/gpu/drm/drm_simple_kms_helper.c | 13 +-----
drivers/gpu/drm/exynos/exynos_drm_crtc.c | 2 +-
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c | 2 +-
drivers/gpu/drm/gud/gud_drv.c | 2 +-
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c | 2 +-
drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 2 +-
drivers/gpu/drm/hyperv/hyperv_drm_modeset.c | 2 +-
drivers/gpu/drm/imx/dc/dc-crtc.c | 2 +-
drivers/gpu/drm/imx/dcss/dcss-crtc.c | 2 +-
drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c | 18 ++++----
drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 2 +-
drivers/gpu/drm/kmb/kmb_crtc.c | 2 +-
drivers/gpu/drm/logicvc/logicvc_crtc.c | 2 +-
drivers/gpu/drm/loongson/lsdc_crtc.c | 26 ++++++------
drivers/gpu/drm/mediatek/mtk_crtc.c | 18 ++++----
drivers/gpu/drm/meson/meson_crtc.c | 2 +-
drivers/gpu/drm/mgag200/mgag200_drv.h | 4 +-
drivers/gpu/drm/mgag200/mgag200_mode.c | 15 ++++---
drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 18 ++++----
drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c | 2 +-
drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 20 ++++-----
drivers/gpu/drm/mxsfb/lcdif_kms.c | 17 ++++----
drivers/gpu/drm/mxsfb/mxsfb_kms.c | 4 +-
drivers/gpu/drm/nouveau/dispnv50/head.c | 14 +++----
drivers/gpu/drm/omapdrm/omap_crtc.c | 17 ++++----
drivers/gpu/drm/qxl/qxl_display.c | 2 +-
drivers/gpu/drm/renesas/rcar-du/rcar_du_crtc.c | 17 ++++----
drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c | 15 +++----
drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c | 2 +-
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 18 ++++----
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 18 ++++----
drivers/gpu/drm/sitronix/st7571.c | 2 +-
drivers/gpu/drm/sitronix/st7920.c | 10 +++--
drivers/gpu/drm/solomon/ssd130x.c | 10 +++--
drivers/gpu/drm/sprd/sprd_dpu.c | 2 +-
drivers/gpu/drm/sti/sti_crtc.c | 2 +-
drivers/gpu/drm/stm/ltdc.c | 4 +-
drivers/gpu/drm/sun4i/sun4i_crtc.c | 2 +-
drivers/gpu/drm/sysfb/drm_sysfb_helper.h | 4 +-
drivers/gpu/drm/sysfb/drm_sysfb_modeset.c | 20 ++++-----
drivers/gpu/drm/tegra/dc.c | 18 ++++----
drivers/gpu/drm/tests/drm_kunit_helpers.c | 2 +-
drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 49 +++++++++-------------
drivers/gpu/drm/tiny/appletbdrm.c | 2 +-
drivers/gpu/drm/tiny/bochs.c | 2 +-
drivers/gpu/drm/tiny/cirrus-qemu.c | 2 +-
drivers/gpu/drm/tiny/pixpaper.c | 2 +-
drivers/gpu/drm/tiny/sharp-memory.c | 2 +-
drivers/gpu/drm/udl/udl_modeset.c | 2 +-
drivers/gpu/drm/vboxvideo/vbox_mode.c | 2 +-
drivers/gpu/drm/vc4/tests/vc4_mock_crtc.c | 2 +-
drivers/gpu/drm/vc4/vc4_crtc.c | 14 +++----
drivers/gpu/drm/vc4/vc4_drv.h | 2 +-
drivers/gpu/drm/vc4/vc4_txp.c | 2 +-
drivers/gpu/drm/verisilicon/vs_crtc.c | 2 +-
drivers/gpu/drm/virtio/virtgpu_display.c | 2 +-
drivers/gpu/drm/vkms/vkms_crtc.c | 18 ++++----
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 22 ++++------
drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 2 +-
drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 2 +-
drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 2 +-
drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 2 +-
drivers/gpu/drm/xlnx/zynqmp_kms.c | 2 +-
include/drm/drm_atomic_state_helper.h | 3 --
include/drm/drm_crtc.h | 12 ------
include/drm/drm_mipi_dbi.h | 2 +-
include/drm/drm_simple_kms_helper.h | 1 -
78 files changed, 275 insertions(+), 385 deletions(-)
---
base-commit: 7ea58b9ddb52264a4ed36bccb975062ada32c62d
change-id: 20260709-drm-no-more-crtc-reset-14a4d5bc8d41
Best regards,
--
Maxime Ripard <mripard@kernel.org>
^ permalink raw reply [flat|nested] 98+ messages in thread* [PATCH 01/70] drm/adp: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
2026-08-21 14:55 ` sashiko-bot
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Janne Grunau, Sasha Finkelstein, asahi
The adp crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Janne Grunau <j@jannau.net>
Cc: Sasha Finkelstein <k@chaosmail.tech>
Cc: asahi@lists.linux.dev
---
drivers/gpu/drm/adp/adp_drv.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/adp/adp_drv.c b/drivers/gpu/drm/adp/adp_drv.c
index ce9dd6222634..fdf0e6316175 100644
--- a/drivers/gpu/drm/adp/adp_drv.c
+++ b/drivers/gpu/drm/adp/adp_drv.c
@@ -349,11 +349,11 @@ static void adp_crtc_atomic_flush(struct drm_crtc *crtc,
static const struct drm_crtc_funcs adp_crtc_funcs = {
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = adp_crtc_enable_vblank,
.disable_vblank = adp_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 01/70] drm/adp: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` [PATCH 01/70] drm/adp: Switch to drm_atomic_helper_crtc_create_state Maxime Ripard
@ 2026-08-21 14:55 ` sashiko-bot
0 siblings, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 14:55 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
Pre-existing issues:
- [High] Missing NULL check for `dma_alloc_coherent` and potential integer overflow in `new_size` calculation.
- [High] Calling `dma_alloc_coherent()` with `GFP_KERNEL` during `atomic_flush` violates DRM atomic context constraints.
--
--- Patch [1]: [PATCH 01/70] drm/adp: Switch to drm_atomic_helper_crtc_create_state ---
commit 3f2217690a441eaa2502ebbe2a7e5840385ac1e3
Author: Maxime Ripard <mripard@kernel.org>
drm/adp: Switch to drm_atomic_helper_crtc_create_state
The adp crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
> diff --git a/drivers/gpu/drm/adp/adp_drv.c b/drivers/gpu/drm/adp/adp_drv.c
> index ce9dd6222634d..fdf0e63161756 100644
> --- a/drivers/gpu/drm/adp/adp_drv.c
> +++ b/drivers/gpu/drm/adp/adp_drv.c
> @@ -351,7 +351,7 @@ static const struct drm_crtc_funcs adp_crtc_funcs = {
> .destroy = drm_crtc_cleanup,
> .set_config = drm_atomic_helper_set_config,
> .page_flip = drm_atomic_helper_page_flip,
> - .reset = drm_atomic_helper_crtc_reset,
> + .atomic_create_state = drm_atomic_helper_crtc_create_state,
> .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
> .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
> .enable_vblank = adp_crtc_enable_vblank,
[Severity: High]
This is a pre-existing issue, but does calling dma_alloc_coherent() with
GFP_KERNEL in adp_crtc_atomic_flush() violate DRM atomic context constraints?
drivers/gpu/drm/adp/adp_drv.c:adp_crtc_atomic_flush() {
...
if (new_size != 0) {
adp->mask_buf = dma_alloc_coherent(crtc->dev->dev, new_size,
&adp->mask_iova, GFP_KERNEL);
adp_crtc_atomic_flush() executes during the hardware programming phase of
drm_atomic_helper_commit_tail(), which is an atomic context where sleeping
is forbidden.
dma_alloc_coherent() with GFP_KERNEL can sleep, potentially causing kernel
warnings and deadlocks.
[Severity: High]
This isn't a bug introduced by this patch, but what happens if
dma_alloc_coherent() returns NULL?
drivers/gpu/drm/adp/adp_drv.c:adp_crtc_atomic_flush() {
...
if (new_size != 0) {
adp->mask_buf = dma_alloc_coherent(crtc->dev->dev, new_size,
&adp->mask_iova, GFP_KERNEL);
memset(adp->mask_buf, 0xFF, new_size);
The immediate memset() would dereference the NULL pointer.
Additionally, does the calculation of new_size in adp_crtc_atomic_flush() run
the risk of a 32-bit integer overflow for maliciously large resolutions?
u64 new_size = ALIGN(new_state->mode.hdisplay *
new_state->mode.vdisplay * 4, PAGE_SIZE);
Is there a chance hdisplay * vdisplay * 4 could overflow before being cast
to u64?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=1
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 02/70] drm/amdgpu: vkms: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
(?)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Christian König, Alex Deucher,
amd-gfx
The amdgpu vkms crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: "Christian König" <christian.koenig@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: amd-gfx@lists.freedesktop.org
---
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
index 170adaf7e76a..6c37ba7e5259 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
@@ -45,11 +45,11 @@ static const u32 amdgpu_vkms_formats[] = {
static const struct drm_crtc_funcs amdgpu_vkms_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.destroy = drm_crtc_cleanup,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
DRM_CRTC_VBLANK_TIMER_FUNCS,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 03/70] drm/arm: hdlcd: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (2 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Liviu Dudau
The hdlcd crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Liviu Dudau <liviu.dudau@arm.com>
---
drivers/gpu/drm/arm/hdlcd_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
index 8565749a3e48..e394464efbb4 100644
--- a/drivers/gpu/drm/arm/hdlcd_crtc.c
+++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
@@ -65,11 +65,11 @@ static void hdlcd_crtc_disable_vblank(struct drm_crtc *crtc)
static const struct drm_crtc_funcs hdlcd_crtc_funcs = {
.destroy = hdlcd_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = hdlcd_crtc_enable_vblank,
.disable_vblank = hdlcd_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 04/70] drm/armada: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (3 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Russell King
The armada crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Russell King <linux@armlinux.org.uk>
---
drivers/gpu/drm/armada/armada_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
index 5e006212fea0..d349beaa2990 100644
--- a/drivers/gpu/drm/armada/armada_crtc.c
+++ b/drivers/gpu/drm/armada/armada_crtc.c
@@ -815,11 +815,11 @@ static void armada_drm_crtc_disable_vblank(struct drm_crtc *crtc)
armada_drm_crtc_disable_irq(dcrtc, VSYNC_IRQ_ENA);
spin_unlock_irqrestore(&dcrtc->irq_lock, flags);
}
static const struct drm_crtc_funcs armada_crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.cursor_set = armada_drm_crtc_cursor_set,
.cursor_move = armada_drm_crtc_cursor_move,
.destroy = armada_drm_crtc_destroy,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 05/70] drm/exynos: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (4 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Alim Akhtar, Inki Dae,
Krzysztof Kozlowski, Kyungmin Park, Peter Griffin, Seung-Woo Kim,
linux-samsung-soc
The exynos crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Alim Akhtar <alim.akhtar@samsung.com>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Krzysztof Kozlowski <krzk@kernel.org>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Peter Griffin <peter.griffin@linaro.org>
Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
Cc: linux-samsung-soc@vger.kernel.org
---
drivers/gpu/drm/exynos/exynos_drm_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
index b071c019670d..458cad64bd07 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
@@ -161,11 +161,11 @@ static void exynos_drm_crtc_disable_vblank(struct drm_crtc *crtc)
static const struct drm_crtc_funcs exynos_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.destroy = exynos_drm_crtc_destroy,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = exynos_drm_crtc_enable_vblank,
.disable_vblank = exynos_drm_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 06/70] drm/fsl-dcu: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (5 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Alison Wang, Stefan Agner
The fsl-dcu crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Alison Wang <alison.wang@nxp.com>
Cc: Stefan Agner <stefan@agner.ch>
---
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
index 9ef16f5eb613..73c0675e6c54 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
@@ -159,11 +159,11 @@ static void fsl_dcu_drm_crtc_disable_vblank(struct drm_crtc *crtc)
static const struct drm_crtc_funcs fsl_dcu_drm_crtc_funcs = {
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.destroy = drm_crtc_cleanup,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.set_config = drm_atomic_helper_set_config,
.enable_vblank = fsl_dcu_drm_crtc_enable_vblank,
.disable_vblank = fsl_dcu_drm_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 07/70] drm/gud: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (6 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
2026-08-23 16:36 ` Ruben Wauters
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Ruben Wauters
The gud crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Ruben Wauters <rubenru09@aol.com>
---
drivers/gpu/drm/gud/gud_drv.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/gud/gud_drv.c b/drivers/gpu/drm/gud/gud_drv.c
index 89bd6ca36003..83a036c6e41d 100644
--- a/drivers/gpu/drm/gud/gud_drv.c
+++ b/drivers/gpu/drm/gud/gud_drv.c
@@ -343,11 +343,11 @@ static const struct drm_crtc_helper_funcs gud_crtc_helper_funcs = {
.atomic_enable = gud_crtc_atomic_enable,
.atomic_disable = gud_crtc_atomic_disable,
};
static const struct drm_crtc_funcs gud_crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .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_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 07/70] drm/gud: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` [PATCH 07/70] drm/gud: " Maxime Ripard
@ 2026-08-23 16:36 ` Ruben Wauters
0 siblings, 0 replies; 98+ messages in thread
From: Ruben Wauters @ 2026-08-23 16:36 UTC (permalink / raw)
To: Maxime Ripard, Maarten Lankhorst, Thomas Zimmermann, David Airlie,
Simona Vetter
Cc: dri-devel
[-- Attachment #1: Type: text/plain, Size: 1310 bytes --]
On Fri, 2026-08-21 at 16:38 +0200, Maxime Ripard wrote:
> The gud crtc implementation uses the deprecated
> drm_atomic_helper_crtc_reset() as its reset hook.
>
> Switch to drm_atomic_helper_crtc_create_state() instead.
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
Acked-by: Ruben Wauters <rubenru09@aol.com>
> ---
> Cc: Ruben Wauters <rubenru09@aol.com>
> ---
> drivers/gpu/drm/gud/gud_drv.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/gud/gud_drv.c b/drivers/gpu/drm/gud/gud_drv.c
> index 89bd6ca36003..83a036c6e41d 100644
> --- a/drivers/gpu/drm/gud/gud_drv.c
> +++ b/drivers/gpu/drm/gud/gud_drv.c
> @@ -343,11 +343,11 @@ static const struct drm_crtc_helper_funcs gud_crtc_helper_funcs = {
> .atomic_enable = gud_crtc_atomic_enable,
> .atomic_disable = gud_crtc_atomic_disable,
> };
>
> static const struct drm_crtc_funcs gud_crtc_funcs = {
> - .reset = drm_atomic_helper_crtc_reset,
> + .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_atomic_helper_crtc_duplicate_state,
> .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 870 bytes --]
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 08/70] drm/hisilicon: hibmc: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (7 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Tian Tao, Xinwei Kong, Yongbang Shi
The hibmc crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Tian Tao <tiantao6@hisilicon.com>
Cc: Xinwei Kong <kong.kongxinwei@hisilicon.com>
Cc: Yongbang Shi <shiyongbang@huawei.com>
---
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
index b4ab53db1c08..33402cf54072 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
@@ -489,11 +489,11 @@ static int hibmc_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
static const struct drm_crtc_funcs hibmc_crtc_funcs = {
.page_flip = drm_atomic_helper_page_flip,
.set_config = drm_atomic_helper_set_config,
.destroy = drm_crtc_cleanup,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = hibmc_crtc_enable_vblank,
.disable_vblank = hibmc_crtc_disable_vblank,
.gamma_set = hibmc_crtc_gamma_set,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 09/70] drm/hisilicon: kirin: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (8 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
2026-08-21 20:06 ` John Stultz
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, John Stultz, Sumit Semwal, Xinliang Liu,
Yongqin Liu
The kirin crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: John Stultz <jstultz@google.com>
Cc: Sumit Semwal <sumit.semwal@linaro.org>
Cc: Xinliang Liu <xinliang.liu@linaro.org>
Cc: Yongqin Liu <yongqin.liu@linaro.org>
---
drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
index 902c5dace4ff..5f4e738bc94e 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
@@ -538,11 +538,11 @@ static const struct drm_crtc_helper_funcs ade_crtc_helper_funcs = {
static const struct drm_crtc_funcs ade_crtc_funcs = {
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = ade_crtc_enable_vblank,
.disable_vblank = ade_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 09/70] drm/hisilicon: kirin: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` [PATCH 09/70] drm/hisilicon: kirin: " Maxime Ripard
@ 2026-08-21 20:06 ` John Stultz
0 siblings, 0 replies; 98+ messages in thread
From: John Stultz @ 2026-08-21 20:06 UTC (permalink / raw)
To: Maxime Ripard
Cc: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter,
dri-devel, Sumit Semwal, Xinliang Liu, Yongqin Liu
On Fri, Aug 21, 2026 at 7:39 AM Maxime Ripard <mripard@kernel.org> wrote:
>
> The kirin crtc implementation uses the deprecated
> drm_atomic_helper_crtc_reset() as its reset hook.
>
> Switch to drm_atomic_helper_crtc_create_state() instead.
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
I no longer have hardware access, but looks ok.
Acked-by: John Stultz <jstultz@google.com>
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 10/70] drm/hyperv: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (9 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Dexuan Cui, Long Li, Saurabh Sengar,
linux-hyperv
The hyperv crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Dexuan Cui <decui@microsoft.com>
Cc: Long Li <longli@microsoft.com>
Cc: Saurabh Sengar <ssengar@linux.microsoft.com>
Cc: linux-hyperv@vger.kernel.org
---
drivers/gpu/drm/hyperv/hyperv_drm_modeset.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/hyperv/hyperv_drm_modeset.c b/drivers/gpu/drm/hyperv/hyperv_drm_modeset.c
index 1855749c1e41..3261e730c69d 100644
--- a/drivers/gpu/drm/hyperv/hyperv_drm_modeset.c
+++ b/drivers/gpu/drm/hyperv/hyperv_drm_modeset.c
@@ -124,11 +124,11 @@ static const struct drm_crtc_helper_funcs hv_drm_crtc_helper_funcs = {
.atomic_enable = hv_drm_crtc_helper_atomic_enable,
.atomic_disable = drm_crtc_vblank_atomic_disable,
};
static const struct drm_crtc_funcs hv_drm_crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .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_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 11/70] drm/imx: dc: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (10 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
2026-08-21 15:00 ` sashiko-bot
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Fabio Estevam, Frank Li, Liu Ying,
Pengutronix Kernel Team, Sascha Hauer, imx
The imx dc crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Fabio Estevam <festevam@gmail.com>
Cc: Frank Li <Frank.Li@nxp.com>
Cc: Liu Ying <victor.liu@nxp.com>
Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: imx@lists.linux.dev
---
drivers/gpu/drm/imx/dc/dc-crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/imx/dc/dc-crtc.c b/drivers/gpu/drm/imx/dc/dc-crtc.c
index 764510ff90a4..0d64186a9901 100644
--- a/drivers/gpu/drm/imx/dc/dc-crtc.c
+++ b/drivers/gpu/drm/imx/dc/dc-crtc.c
@@ -96,11 +96,11 @@ static void dc_crtc_disable_vblank(struct drm_crtc *crtc)
/* nosync due to atomic context */
disable_irq_nosync(dc_crtc->irq_dec_framecomplete);
}
static const struct drm_crtc_funcs dc_crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .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_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 11/70] drm/imx: dc: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` [PATCH 11/70] drm/imx: dc: " Maxime Ripard
@ 2026-08-21 15:00 ` sashiko-bot
0 siblings, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 15:00 UTC (permalink / raw)
To: Maxime Ripard; +Cc: Frank.Li, imx, dri-devel
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] CRTC atomic callbacks call sleeping functions in atomic context.
--
--- Patch [11]: [PATCH 11/70] drm/imx: dc: Switch to drm_atomic_helper_crtc_create_state ---
commit 81ac70d774e55256bc7f69e9538e45aed1e198c8
Author: Maxime Ripard <mripard@kernel.org>
drm/imx: dc: Switch to drm_atomic_helper_crtc_create_state
The imx dc crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook. Switch to
drm_atomic_helper_crtc_create_state() instead.
> diff --git a/drivers/gpu/drm/imx/dc/dc-crtc.c b/drivers/gpu/drm/imx/dc/dc-crtc.c
> index 764510ff90a4a..0d64186a99018 100644
> --- a/drivers/gpu/drm/imx/dc/dc-crtc.c
> +++ b/drivers/gpu/drm/imx/dc/dc-crtc.c
> @@ -98,7 +98,7 @@ static void dc_crtc_disable_vblank(struct drm_crtc *crtc)
> }
>
> static const struct drm_crtc_funcs dc_crtc_funcs = {
> - .reset = drm_atomic_helper_crtc_reset,
> + .atomic_create_state = drm_atomic_helper_crtc_create_state,
[Severity: High]
This isn't a bug introduced by this patch, but while reviewing the CRTC
implementation in this file, I noticed that several atomic callbacks might be
calling sleeping functions.
For example, does dc_crtc_atomic_enable() call pm_runtime_resume_and_get(),
which can sleep?
Additionally, it looks like dc_crtc_atomic_enable(), dc_crtc_atomic_flush(),
and dc_crtc_atomic_disable() all use DC_CRTC_WAIT_FOR_COMPLETION_TIMEOUT(),
which waits for a completion and puts the task to sleep.
According to DRM subsystem guidelines, CRTC atomic enable, disable, and update
callbacks run in an atomic context where sleeping is forbidden. Could this
cause scheduling while atomic panics or warnings during non-blocking commits
and page flips?
> .destroy = drm_crtc_cleanup,
> .set_config = drm_atomic_helper_set_config,
> .page_flip = drm_atomic_helper_page_flip,
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=11
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 12/70] drm/imx: dcss: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (11 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Fabio Estevam, Frank Li,
Laurentiu Palcu, Lucas Stach, Pengutronix Kernel Team,
Sascha Hauer, imx
The imx dcss crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Fabio Estevam <festevam@gmail.com>
Cc: Frank Li <Frank.Li@nxp.com>
Cc: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: imx@lists.linux.dev
---
drivers/gpu/drm/imx/dcss/dcss-crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/imx/dcss/dcss-crtc.c b/drivers/gpu/drm/imx/dcss/dcss-crtc.c
index ab41759a9f52..5e9ee3f09d51 100644
--- a/drivers/gpu/drm/imx/dcss/dcss-crtc.c
+++ b/drivers/gpu/drm/imx/dcss/dcss-crtc.c
@@ -43,11 +43,11 @@ static void dcss_disable_vblank(struct drm_crtc *crtc)
static const struct drm_crtc_funcs dcss_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.destroy = drm_crtc_cleanup,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = dcss_enable_vblank,
.disable_vblank = dcss_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 13/70] drm/ingenic: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (12 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Paul Cercueil, linux-mips
The ingenic crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Paul Cercueil <paul@crapouillou.net>
Cc: linux-mips@vger.kernel.org
---
drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
index 738a80b2550f..67374c611583 100644
--- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
+++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
@@ -995,11 +995,11 @@ static const struct drm_plane_funcs ingenic_drm_primary_plane_funcs = {
};
static const struct drm_crtc_funcs ingenic_drm_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.destroy = drm_crtc_cleanup,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 14/70] drm/kmb: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (13 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Anitha Chrisanthus
The kmb crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Anitha Chrisanthus <anitha.chrisanthus@intel.com>
---
drivers/gpu/drm/kmb/kmb_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/kmb/kmb_crtc.c b/drivers/gpu/drm/kmb/kmb_crtc.c
index 1dcdc55b0069..06cf5ad60b81 100644
--- a/drivers/gpu/drm/kmb/kmb_crtc.c
+++ b/drivers/gpu/drm/kmb/kmb_crtc.c
@@ -56,11 +56,11 @@ static void kmb_crtc_disable_vblank(struct drm_crtc *crtc)
static const struct drm_crtc_funcs kmb_crtc_funcs = {
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = kmb_crtc_enable_vblank,
.disable_vblank = kmb_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 15/70] drm/logicvc: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (14 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Paul Kocialkowski
The logicvc crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Paul Kocialkowski <paulk@sys-base.io>
---
drivers/gpu/drm/logicvc/logicvc_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/logicvc/logicvc_crtc.c b/drivers/gpu/drm/logicvc/logicvc_crtc.c
index 81e5b80736fa..3fcebd6af6f4 100644
--- a/drivers/gpu/drm/logicvc/logicvc_crtc.c
+++ b/drivers/gpu/drm/logicvc/logicvc_crtc.c
@@ -211,11 +211,11 @@ static void logicvc_crtc_disable_vblank(struct drm_crtc *drm_crtc)
regmap_write_bits(logicvc->regmap, LOGICVC_INT_MASK_REG,
LOGICVC_INT_MASK_V_SYNC, LOGICVC_INT_MASK_V_SYNC);
}
static const struct drm_crtc_funcs logicvc_crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .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_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 16/70] drm/meson: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Jerome Brunet, Kevin Hilman,
Martin Blumenstingl, linux-amlogic
The meson crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Jerome Brunet <jbrunet@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Cc: linux-amlogic@lists.infradead.org
---
drivers/gpu/drm/meson/meson_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c
index b77d2d24ead1..056dbea8deec 100644
--- a/drivers/gpu/drm/meson/meson_crtc.c
+++ b/drivers/gpu/drm/meson/meson_crtc.c
@@ -72,11 +72,11 @@ static void meson_crtc_disable_vblank(struct drm_crtc *crtc)
static const struct drm_crtc_funcs meson_crtc_funcs = {
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.destroy = drm_crtc_cleanup,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.set_config = drm_atomic_helper_set_config,
.enable_vblank = meson_crtc_enable_vblank,
.disable_vblank = meson_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 16/70] drm/meson: Switch to drm_atomic_helper_crtc_create_state
@ 2026-08-21 14:38 ` Maxime Ripard
0 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Jerome Brunet, Kevin Hilman,
Martin Blumenstingl, linux-amlogic
The meson crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Jerome Brunet <jbrunet@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Cc: linux-amlogic@lists.infradead.org
---
drivers/gpu/drm/meson/meson_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c
index b77d2d24ead1..056dbea8deec 100644
--- a/drivers/gpu/drm/meson/meson_crtc.c
+++ b/drivers/gpu/drm/meson/meson_crtc.c
@@ -72,11 +72,11 @@ static void meson_crtc_disable_vblank(struct drm_crtc *crtc)
static const struct drm_crtc_funcs meson_crtc_funcs = {
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.destroy = drm_crtc_cleanup,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.set_config = drm_atomic_helper_set_config,
.enable_vblank = meson_crtc_enable_vblank,
.disable_vblank = meson_crtc_disable_vblank,
};
--
2.55.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply related [flat|nested] 98+ messages in thread
* [PATCH 17/70] drm/msm: mdp4: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (16 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
2026-08-22 7:51 ` Dmitry Baryshkov
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Abhinav Kumar, Dmitry Baryshkov,
Jessica Zhang, Marijn Suijten, Rob Clark, Sean Paul, freedreno,
linux-arm-msm
The mdp4 crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Abhinav Kumar <abhinav.kumar@linux.dev>
Cc: Dmitry Baryshkov <lumag@kernel.org>
Cc: Jessica Zhang <jesszhan0024@gmail.com>
Cc: Marijn Suijten <marijn.suijten@somainline.org>
Cc: Rob Clark <robin.clark@oss.qualcomm.com>
Cc: Sean Paul <sean@poorly.run>
Cc: freedreno@lists.freedesktop.org
Cc: linux-arm-msm@vger.kernel.org
---
drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c
index 57dfce58450b..93050b3c3548 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c
@@ -475,11 +475,11 @@ static int mdp4_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
static const struct drm_crtc_funcs mdp4_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.cursor_set = mdp4_crtc_cursor_set,
.cursor_move = mdp4_crtc_cursor_move,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = msm_crtc_enable_vblank,
.disable_vblank = msm_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 17/70] drm/msm: mdp4: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` [PATCH 17/70] drm/msm: mdp4: " Maxime Ripard
@ 2026-08-22 7:51 ` Dmitry Baryshkov
0 siblings, 0 replies; 98+ messages in thread
From: Dmitry Baryshkov @ 2026-08-22 7:51 UTC (permalink / raw)
To: Maxime Ripard
Cc: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter,
dri-devel, Abhinav Kumar, Dmitry Baryshkov, Jessica Zhang,
Marijn Suijten, Rob Clark, Sean Paul, freedreno, linux-arm-msm
On Fri, Aug 21, 2026 at 04:38:53PM +0200, Maxime Ripard wrote:
> The mdp4 crtc implementation uses the deprecated
> drm_atomic_helper_crtc_reset() as its reset hook.
>
> Switch to drm_atomic_helper_crtc_create_state() instead.
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
> ---
> Cc: Abhinav Kumar <abhinav.kumar@linux.dev>
> Cc: Dmitry Baryshkov <lumag@kernel.org>
> Cc: Jessica Zhang <jesszhan0024@gmail.com>
> Cc: Marijn Suijten <marijn.suijten@somainline.org>
> Cc: Rob Clark <robin.clark@oss.qualcomm.com>
> Cc: Sean Paul <sean@poorly.run>
> Cc: freedreno@lists.freedesktop.org
> Cc: linux-arm-msm@vger.kernel.org
> ---
> drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
For this and other msm commits, Ack to merge them through drm-misc
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 18/70] drm/mxs: mxsfb: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (17 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
2026-08-21 15:12 ` sashiko-bot
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Fabio Estevam, Frank Li, Marek Vasut,
Pengutronix Kernel Team, Sascha Hauer, Stefan Agner, imx
The mxsfb crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Fabio Estevam <festevam@gmail.com>
Cc: Frank Li <Frank.Li@nxp.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Stefan Agner <stefan@agner.ch>
Cc: imx@lists.linux.dev
---
drivers/gpu/drm/mxsfb/mxsfb_kms.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
index d8ebebc5314b..36ea285182b4 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
+++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
@@ -482,22 +482,22 @@ static const struct drm_crtc_helper_funcs mxsfb_crtc_helper_funcs = {
.atomic_enable = mxsfb_crtc_atomic_enable,
.atomic_disable = mxsfb_crtc_atomic_disable,
};
static const struct drm_crtc_funcs mxsfb_crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .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_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = mxsfb_crtc_enable_vblank,
.disable_vblank = mxsfb_crtc_disable_vblank,
};
static const struct drm_crtc_funcs mxsfb_crtc_with_crc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .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_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 18/70] drm/mxs: mxsfb: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` [PATCH 18/70] drm/mxs: mxsfb: " Maxime Ripard
@ 2026-08-21 15:12 ` sashiko-bot
0 siblings, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 15:12 UTC (permalink / raw)
To: Maxime Ripard; +Cc: Frank.Li, dri-devel, imx
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Use-After-Free in DRM cleanup paths on driver unbind due to devm_kzalloc allocated driver private data.
--
--- Patch [18]: [PATCH 18/70] drm/mxs: mxsfb: Switch to drm_atomic_helper_crtc_create_state ---
commit 176787b6391787b0d414456f33f183b472ea7c41
Author: Maxime Ripard <mripard@kernel.org>
drm/mxs: mxsfb: Switch to drm_atomic_helper_crtc_create_state
This commit replaces the deprecated drm_atomic_helper_crtc_reset() hook
with drm_atomic_helper_crtc_create_state() for the mxsfb CRTC implementation.
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> index d8ebebc5314bb..36ea285182b48 100644
> --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> @@ -484,7 +484,7 @@ static const struct drm_crtc_helper_funcs mxsfb_crtc_helper_funcs = {
> };
>
> static const struct drm_crtc_funcs mxsfb_crtc_funcs = {
> - .reset = drm_atomic_helper_crtc_reset,
> + .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,
[Severity: High]
This isn't a bug introduced by this patch, but while reviewing the mxsfb
driver, I noticed a potential use-after-free during driver unbind.
The driver private structure is allocated with devm_kzalloc() in mxsfb_load()
in drivers/gpu/drm/mxsfb/mxsfb_drv.c:
mxsfb = devm_kzalloc(&pdev->dev, sizeof(*mxsfb), GFP_KERNEL);
And the DRM device is allocated independently via drm_dev_alloc() in
mxsfb_probe():
drm = drm_dev_alloc(&mxsfb_driver, &pdev->dev);
During driver unbind, mxsfb_remove() calls drm_dev_put(drm). If user space
currently holds an open file descriptor for the DRM device, the DRM device's
refcount is > 0 and it will not be freed immediately.
When mxsfb_remove() returns, devres cleanup will free the mxsfb_drm_private
structure. Later, when user space closes the file descriptor,
drm_dev_release() will trigger drmm_mode_config_cleanup().
Since drmm_mode_config_cleanup() will access CRTCs and planes embedded
within the already-freed mxsfb_drm_private structure, could this result in
a use-after-free?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=18
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 19/70] drm/qxl: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (18 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Dave Airlie, Gerd Hoffmann, spice-devel,
virtualization
The qxl crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Dave Airlie <airlied@redhat.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: spice-devel@lists.freedesktop.org
Cc: virtualization@lists.linux.dev
---
drivers/gpu/drm/qxl/qxl_display.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index 7f4178800afd..7654575bcf00 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -416,11 +416,11 @@ static void qxl_crtc_destroy(struct drm_crtc *crtc)
static const struct drm_crtc_funcs qxl_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.destroy = qxl_crtc_destroy,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
DRM_CRTC_VBLANK_TIMER_FUNCS,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 20/70] drm/renesas: shmobile: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (19 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Geert Uytterhoeven, linux-renesas-soc
The shmobile crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: linux-renesas-soc@vger.kernel.org
---
drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
index 1a2b9b68af6f..2ea510cbc55c 100644
--- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
+++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
@@ -362,11 +362,11 @@ static void shmob_drm_disable_vblank(struct drm_crtc *crtc)
shmob_drm_crtc_enable_vblank(sdev, false);
}
static const struct drm_crtc_funcs crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = shmob_drm_crtc_page_flip,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 21/70] drm/simple-kms: Remove unused reset_crtc hook
2026-08-21 14:38 ` Maxime Ripard
` (20 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard
The reset_crtc hook in drm_simple_display_pipe_funcs allows simple
KMS drivers to provide a custom CRTC reset implementation. However,
no driver ever implemented it.
Remove the hook and the wrapper function, and use
drm_atomic_helper_crtc_reset() directly.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/drm_simple_kms_helper.c | 13 +------------
include/drm/drm_simple_kms_helper.h | 1 -
2 files changed, 1 insertion(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
index 8e1d07b9f1e3..6c77154dc54e 100644
--- a/drivers/gpu/drm/drm_simple_kms_helper.c
+++ b/drivers/gpu/drm/drm_simple_kms_helper.c
@@ -100,21 +100,10 @@ static const struct drm_crtc_helper_funcs drm_simple_kms_crtc_helper_funcs = {
.atomic_check = drm_simple_kms_crtc_check,
.atomic_enable = drm_simple_kms_crtc_enable,
.atomic_disable = drm_simple_kms_crtc_disable,
};
-static void drm_simple_kms_crtc_reset(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->reset_crtc)
- return drm_atomic_helper_crtc_reset(crtc);
-
- return pipe->funcs->reset_crtc(pipe);
-}
-
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);
@@ -156,11 +145,11 @@ static void drm_simple_kms_crtc_disable_vblank(struct drm_crtc *crtc)
pipe->funcs->disable_vblank(pipe);
}
static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
- .reset = drm_simple_kms_crtc_reset,
+ .reset = drm_atomic_helper_crtc_reset,
.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,
diff --git a/include/drm/drm_simple_kms_helper.h b/include/drm/drm_simple_kms_helper.h
index cb672ce0e856..8421af764f02 100644
--- a/include/drm/drm_simple_kms_helper.h
+++ b/include/drm/drm_simple_kms_helper.h
@@ -37,11 +37,10 @@ struct drm_simple_display_pipe_funcs {
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);
- void (*reset_crtc)(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);
void (*reset_plane)(struct drm_simple_display_pipe *pipe);
struct drm_plane_state * (*duplicate_plane_state)(struct drm_simple_display_pipe *pipe);
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 22/70] drm/simple-kms: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (21 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard
The simple KMS crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/drm_simple_kms_helper.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
index 6c77154dc54e..cc19039ec641 100644
--- a/drivers/gpu/drm/drm_simple_kms_helper.c
+++ b/drivers/gpu/drm/drm_simple_kms_helper.c
@@ -145,11 +145,11 @@ static void drm_simple_kms_crtc_disable_vblank(struct drm_crtc *crtc)
pipe->funcs->disable_vblank(pipe);
}
static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .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,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 23/70] drm/sitronix: st7571: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (22 preceding siblings ...)
(?)
@ 2026-08-21 14:38 ` Maxime Ripard
2026-08-21 15:14 ` sashiko-bot
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:38 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Marcus Folkesson
The st7571 crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Marcus Folkesson <marcus.folkesson@gmail.com>
---
drivers/gpu/drm/sitronix/st7571.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/sitronix/st7571.c b/drivers/gpu/drm/sitronix/st7571.c
index 20954c33eca9..fc3ba5e8600f 100644
--- a/drivers/gpu/drm/sitronix/st7571.c
+++ b/drivers/gpu/drm/sitronix/st7571.c
@@ -422,11 +422,11 @@ static const struct drm_crtc_helper_funcs st7571_crtc_helper_funcs = {
.atomic_check = drm_crtc_helper_atomic_check,
.mode_valid = st7571_crtc_mode_valid,
};
static const struct drm_crtc_funcs st7571_crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .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_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 23/70] drm/sitronix: st7571: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` [PATCH 23/70] drm/sitronix: st7571: " Maxime Ripard
@ 2026-08-21 15:14 ` sashiko-bot
0 siblings, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 15:14 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
Pre-existing issues:
- [High] Unconditional 8-line page iterations in `st7571_transform_xy` cause an out-of-bounds read when `nlines` is not a multiple of 8.
- [High] Mismatch between framebuffer pitch during conversion and reading causes display corruption and invalid reads from `hwbuf`.
--
--- Patch [23]: [PATCH 23/70] drm/sitronix: st7571: Switch to drm_atomic_helper_crtc_create_state ---
commit cf528fe94124a1e49e93edb3680754d3976e2864
Author: Maxime Ripard <mripard@kernel.org>
drm/sitronix: st7571: Switch to drm_atomic_helper_crtc_create_state
The st7571 crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook. Switch to
drm_atomic_helper_crtc_create_state() instead.
> diff --git a/drivers/gpu/drm/sitronix/st7571.c b/drivers/gpu/drm/sitronix/st7571.c
> index 20954c33eca93..fc3ba5e8600f6 100644
> --- a/drivers/gpu/drm/sitronix/st7571.c
> +++ b/drivers/gpu/drm/sitronix/st7571.c
> @@ -424,7 +424,7 @@ static const struct drm_crtc_helper_funcs st7571_crtc_helper_funcs = {
> };
>
> static const struct drm_crtc_funcs st7571_crtc_funcs = {
> - .reset = drm_atomic_helper_crtc_reset,
> + .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,
[Severity: High]
This isn't a bug introduced by this patch, but does this code cause an
out-of-bounds read when nlines is not a multiple of 8?
In drivers/gpu/drm/sitronix/st7571.c:st7571_probe():
st7571->hwbuf = devm_kzalloc(st7571->dev,
(st7571->nlines * st7571->ncols * st7571->bpp) / 8,
GFP_KERNEL);
If nlines is not a multiple of 8, hwbuf is allocated strictly based on the
unaligned nlines value.
During a display update:
drivers/gpu/drm/sitronix/st7571.c:st7571_fb_update_rect_monochrome():
for (int y = rect->y1; y < rect->y2; y += ST7571_PAGE_HEIGHT) {
drivers/gpu/drm/sitronix/st7571.c:st7571_transform_xy():
for (int i = 0; i < 8; i++) {
int row_idx = y + i;
u8 byte = p[row_idx * row_len + x];
This iterates 8 times vertically, which could read beyond the allocated buffer
if nlines is smaller than the assumed 8-line page height.
[Severity: High]
This is a pre-existing issue, but does a mismatch between the framebuffer
pitch during conversion and reading cause invalid reads from hwbuf?
In drivers/gpu/drm/sitronix/st7571.c:st7571_prepare_buffer_monochrome():
dst_pitch = DIV_ROUND_UP(drm_rect_width(rect), 8);
iosys_map_set_vaddr(&dst, st7571->hwbuf);
drm_fb_xrgb8888_to_mono(&dst, &dst_pitch, vmap, fb, rect, fmtcnv_state);
The converted partial damage is tightly packed at offset 0 of hwbuf with a
dynamic pitch.
However, when reading the data:
drivers/gpu/drm/sitronix/st7571.c:st7571_fb_update_rect_monochrome():
row[x] = st7571_transform_xy(st7571->hwbuf, x, y, 1);
drivers/gpu/drm/sitronix/st7571.c:st7571_transform_xy():
u8 row_len = 16 * bpp;
...
int row_idx = y + i;
u8 byte = p[row_idx * row_len + x];
st7571_transform_xy() accesses hwbuf using absolute coordinates and assumes a
full-screen layout with a fixed pitch, which seems to completely miss the
packed damage data.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=23
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 24/70] drm/sprd: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (23 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Baolin Wang, Chunyan Zhang, Orson Zhai
The sprd crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: Chunyan Zhang <zhang.lyra@gmail.com>
Cc: Orson Zhai <orsonzhai@gmail.com>
---
drivers/gpu/drm/sprd/sprd_dpu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/sprd/sprd_dpu.c b/drivers/gpu/drm/sprd/sprd_dpu.c
index 66990398b903..7f0bc1e31076 100644
--- a/drivers/gpu/drm/sprd/sprd_dpu.c
+++ b/drivers/gpu/drm/sprd/sprd_dpu.c
@@ -705,11 +705,11 @@ static const struct drm_crtc_helper_funcs sprd_crtc_helper_funcs = {
static const struct drm_crtc_funcs sprd_crtc_funcs = {
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = sprd_crtc_enable_vblank,
.disable_vblank = sprd_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 25/70] drm/sti: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (24 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Alain Volmat, Raphael Gallais-Pou
The sti crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Alain Volmat <alain.volmat@foss.st.com>
Cc: Raphael Gallais-Pou <rgallaispou@gmail.com>
---
drivers/gpu/drm/sti/sti_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/sti/sti_crtc.c b/drivers/gpu/drm/sti/sti_crtc.c
index f0e98653d35a..c69612728f2b 100644
--- a/drivers/gpu/drm/sti/sti_crtc.c
+++ b/drivers/gpu/drm/sti/sti_crtc.c
@@ -326,11 +326,11 @@ static int sti_crtc_late_register(struct drm_crtc *crtc)
static const struct drm_crtc_funcs sti_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.destroy = sti_crtc_destroy,
.set_property = sti_crtc_set_property,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.late_register = sti_crtc_late_register,
.enable_vblank = sti_crtc_enable_vblank,
.disable_vblank = sti_crtc_disable_vblank,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 26/70] drm/stm: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (25 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Alexandre Torgue, Maxime Coquelin,
Philippe Cornu, Raphael Gallais-Pou, Yannick Fertre
The stm crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Philippe Cornu <philippe.cornu@foss.st.com>
Cc: Raphael Gallais-Pou <raphael.gallais-pou@foss.st.com>
Cc: Yannick Fertre <yannick.fertre@foss.st.com>
---
drivers/gpu/drm/stm/ltdc.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
index 8818dcf98da7..775846bb502b 100644
--- a/drivers/gpu/drm/stm/ltdc.c
+++ b/drivers/gpu/drm/stm/ltdc.c
@@ -1207,11 +1207,11 @@ static void ltdc_crtc_atomic_print_state(struct drm_printer *p,
}
static const struct drm_crtc_funcs ltdc_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = ltdc_crtc_enable_vblank,
.disable_vblank = ltdc_crtc_disable_vblank,
.get_vblank_timestamp = drm_crtc_vblank_helper_get_vblank_timestamp,
@@ -1219,11 +1219,11 @@ static const struct drm_crtc_funcs ltdc_crtc_funcs = {
};
static const struct drm_crtc_funcs ltdc_crtc_with_crc_support_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = ltdc_crtc_enable_vblank,
.disable_vblank = ltdc_crtc_disable_vblank,
.get_vblank_timestamp = drm_crtc_vblank_helper_get_vblank_timestamp,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 27/70] drm/sun4i: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (26 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Chen-Yu Tsai, Samuel Holland,
linux-sunxi
The sun4i crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Chen-Yu Tsai <wens@kernel.org>
Cc: Samuel Holland <samuel@sholland.org>
Cc: linux-sunxi@lists.linux.dev
---
drivers/gpu/drm/sun4i/sun4i_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c
index 3fa1f4fda0f0..e6a20e2f0ade 100644
--- a/drivers/gpu/drm/sun4i/sun4i_crtc.c
+++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c
@@ -181,11 +181,11 @@ static void sun4i_crtc_disable_vblank(struct drm_crtc *crtc)
static const struct drm_crtc_funcs sun4i_crtc_funcs = {
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.destroy = drm_crtc_cleanup,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.set_config = drm_atomic_helper_set_config,
.enable_vblank = sun4i_crtc_enable_vblank,
.disable_vblank = sun4i_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 28/70] drm/tests: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (27 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard
The KUnit test helpers use the deprecated
drm_atomic_helper_crtc_reset() as their reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/tests/drm_kunit_helpers.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tests/drm_kunit_helpers.c b/drivers/gpu/drm/tests/drm_kunit_helpers.c
index 727766444d63..1afa9b162355 100644
--- a/drivers/gpu/drm/tests/drm_kunit_helpers.c
+++ b/drivers/gpu/drm/tests/drm_kunit_helpers.c
@@ -215,11 +215,11 @@ static const struct drm_crtc_helper_funcs default_crtc_helper_funcs = {
};
static const struct drm_crtc_funcs default_crtc_funcs = {
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
};
/**
* drm_kunit_helper_create_crtc - Creates a mock CRTC for a KUnit test
* @test: The test context object
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 29/70] drm/tilcdc: Move hardware reset to CRTC creation
2026-08-21 14:38 ` Maxime Ripard
` (28 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
2026-08-21 15:13 ` sashiko-bot
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Jyri Sarha, Tomi Valkeinen
The tilcdc crtc reset hook performs both atomic state initialization
using drm_atomic_helper_crtc_reset() and hardware-level register
writes to disable the raster and clear IRQ status.
The hardware reset is not related to atomic state initialization, and
the reset hook is being converted to atomic_create_state which only
deals with state allocation. Move the hardware reset to the CRTC
creation path instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Jyri Sarha <jyri.sarha@iki.fi>
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 49 +++++++++++++++---------------------
1 file changed, 20 insertions(+), 29 deletions(-)
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index e07ecb36a27a..910580c4dada 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -683,42 +683,14 @@ static void tilcdc_crtc_disable_vblank(struct drm_crtc *crtc)
LCDC_V2_END_OF_FRAME0_INT_ENA);
spin_unlock_irqrestore(&tilcdc_crtc->irq_lock, flags);
}
-static void tilcdc_crtc_reset(struct drm_crtc *crtc)
-{
- struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
- struct drm_device *dev = crtc->dev;
- int ret;
-
- drm_atomic_helper_crtc_reset(crtc);
-
- /* Turn the raster off if it for some reason is on. */
- pm_runtime_get_sync(dev->dev);
- if (tilcdc_read(dev, LCDC_RASTER_CTRL_REG) & LCDC_RASTER_ENABLE) {
- /* Enable DMA Frame Done Interrupt */
- tilcdc_write(dev, LCDC_INT_ENABLE_SET_REG, LCDC_FRAME_DONE);
- tilcdc_clear_irqstatus(dev, 0xffffffff);
-
- tilcdc_crtc->frame_done = false;
- tilcdc_clear(dev, LCDC_RASTER_CTRL_REG, LCDC_RASTER_ENABLE);
-
- ret = wait_event_timeout(tilcdc_crtc->frame_done_wq,
- tilcdc_crtc->frame_done,
- msecs_to_jiffies(500));
- if (ret == 0)
- drm_err(dev, "%s: timeout waiting for framedone\n",
- __func__);
- }
- pm_runtime_put_sync(dev->dev);
-}
-
static const struct drm_crtc_funcs tilcdc_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = tilcdc_crtc_reset,
+ .reset = drm_atomic_helper_crtc_reset,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = tilcdc_crtc_enable_vblank,
.disable_vblank = tilcdc_crtc_disable_vblank,
};
@@ -1003,7 +975,26 @@ int tilcdc_crtc_create(struct drm_device *dev)
spin_lock_init(&tilcdc_crtc->irq_lock);
INIT_WORK(&tilcdc_crtc->recover_work, tilcdc_crtc_recover_work);
drm_crtc_helper_add(crtc, &tilcdc_crtc_helper_funcs);
+ /* Turn the raster off if it for some reason is on. */
+ pm_runtime_get_sync(dev->dev);
+ if (tilcdc_read(dev, LCDC_RASTER_CTRL_REG) & LCDC_RASTER_ENABLE) {
+ /* Enable DMA Frame Done Interrupt */
+ tilcdc_write(dev, LCDC_INT_ENABLE_SET_REG, LCDC_FRAME_DONE);
+ tilcdc_clear_irqstatus(dev, 0xffffffff);
+
+ tilcdc_crtc->frame_done = false;
+ tilcdc_clear(dev, LCDC_RASTER_CTRL_REG, LCDC_RASTER_ENABLE);
+
+ ret = wait_event_timeout(tilcdc_crtc->frame_done_wq,
+ tilcdc_crtc->frame_done,
+ msecs_to_jiffies(500));
+ if (ret == 0)
+ drm_err(dev, "%s: timeout waiting for framedone\n",
+ __func__);
+ }
+ pm_runtime_put_sync(dev->dev);
+
return 0;
}
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 29/70] drm/tilcdc: Move hardware reset to CRTC creation
2026-08-21 14:39 ` [PATCH 29/70] drm/tilcdc: Move hardware reset to CRTC creation Maxime Ripard
@ 2026-08-21 15:13 ` sashiko-bot
0 siblings, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 15:13 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
New issues:
- [High] Moving the hardware reset logic to `tilcdc_crtc_create()` causes an unconditional 500ms timeout and a potential fatal bus fault if the bootloader left the display enabled, because it waits for an interrupt before the IRQ handler is registered.
Pre-existing issues:
- [High] The hardware reset sequence unconditionally writes to a V2-only interrupt enable register, which fails to enable the framedone interrupt on V1 hardware and can cause register corruption.
--
--- Patch [29]: [PATCH 29/70] drm/tilcdc: Move hardware reset to CRTC creation ---
commit d53692ddb744ac620f653bb0b29134bf757b3e82
Author: Maxime Ripard <mripard@kernel.org>
drm/tilcdc: Move hardware reset to CRTC creation
The tilcdc crtc reset hook performs both atomic state initialization
and hardware-level register writes. This patch moves the hardware
reset sequence to the CRTC creation path since it is not related to
atomic state initialization.
[ ... ]
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> index e07ecb36a27a8..910580c4dada6 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
[ ... ]
> @@ -1005,5 +977,24 @@ int tilcdc_crtc_create(struct drm_device *dev)
>
> drm_crtc_helper_add(crtc, &tilcdc_crtc_helper_funcs);
>
> + /* Turn the raster off if it for some reason is on. */
> + pm_runtime_get_sync(dev->dev);
> + if (tilcdc_read(dev, LCDC_RASTER_CTRL_REG) & LCDC_RASTER_ENABLE) {
> + /* Enable DMA Frame Done Interrupt */
> + tilcdc_write(dev, LCDC_INT_ENABLE_SET_REG, LCDC_FRAME_DONE);
[Severity: High]
This is a pre-existing issue, but does this write corrupt V1 hardware?
The LCDC_INT_ENABLE_SET_REG is specific to V2 hardware. On V1 hardware,
writing to this register accesses an undefined register address.
For V1, shouldn't the framedone interrupt be enabled via
LCDC_V1_FRAME_DONE_INT_ENA within LCDC_RASTER_CTRL_REG instead? This
unconditional write might fail to enable the interrupt on V1 controllers,
leading to a guaranteed timeout in the wait_event_timeout() call below.
> + tilcdc_clear_irqstatus(dev, 0xffffffff);
> +
> + tilcdc_crtc->frame_done = false;
> + tilcdc_clear(dev, LCDC_RASTER_CTRL_REG, LCDC_RASTER_ENABLE);
> +
> + ret = wait_event_timeout(tilcdc_crtc->frame_done_wq,
> + tilcdc_crtc->frame_done,
> + msecs_to_jiffies(500));
[Severity: High]
Will this unconditionally time out during boot if the bootloader left the
display enabled?
In the driver initialization sequence, tilcdc_crtc_create() executes before
the IRQ handler is registered in tilcdc_pdev_probe():
tilcdc_pdev_probe()
...
ret = tilcdc_crtc_create(ddev);
...
ret = tilcdc_irq_install(ddev, priv->irq);
Since the IRQ handler isn't registered yet when this code runs,
wait_event_timeout() will wait for an interrupt that cannot be handled,
causing a 500ms boot delay.
Could this also cause a kernel panic once the IRQ is finally registered?
When the timeout finishes, pm_runtime_put_sync() disables the device clocks,
leaving the unhandled interrupt pending in hardware. When
tilcdc_irq_install() later requests the IRQ, the handler will fire
immediately and attempt to read the status register while the IP's clocks
are gated, leading to an imprecise external abort.
> + if (ret == 0)
> + drm_err(dev, "%s: timeout waiting for framedone\n",
> + __func__);
> + }
> + pm_runtime_put_sync(dev->dev);
> +
> return 0;
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=29
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 30/70] drm/tilcdc: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (29 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Jyri Sarha, Tomi Valkeinen
The tilcdc crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Jyri Sarha <jyri.sarha@iki.fi>
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index 910580c4dada..b84baccb0b9a 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -686,11 +686,11 @@ static void tilcdc_crtc_disable_vblank(struct drm_crtc *crtc)
}
static const struct drm_crtc_funcs tilcdc_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = tilcdc_crtc_enable_vblank,
.disable_vblank = tilcdc_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 31/70] drm/tiny: appletbdrm: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (30 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
2026-08-21 15:16 ` sashiko-bot
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Aditya Garg, Aun-Ali Zaidi
The appletbdrm crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Aditya Garg <gargaditya08@proton.me>
Cc: Aun-Ali Zaidi <admin@kodeit.net>
---
drivers/gpu/drm/tiny/appletbdrm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tiny/appletbdrm.c b/drivers/gpu/drm/tiny/appletbdrm.c
index cdd35af49892..94bad6dc720e 100644
--- a/drivers/gpu/drm/tiny/appletbdrm.c
+++ b/drivers/gpu/drm/tiny/appletbdrm.c
@@ -596,11 +596,11 @@ static const struct drm_connector_helper_funcs appletbdrm_connector_helper_funcs
static const struct drm_crtc_helper_funcs appletbdrm_crtc_helper_funcs = {
.mode_valid = appletbdrm_crtc_helper_mode_valid,
};
static const struct drm_crtc_funcs appletbdrm_crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .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_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 31/70] drm/tiny: appletbdrm: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:39 ` [PATCH 31/70] drm/tiny: appletbdrm: " Maxime Ripard
@ 2026-08-21 15:16 ` sashiko-bot
0 siblings, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 15:16 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] appletbdrm_flush_damage constructs malformed USB packets and uses mismatched coordinate spaces for clipping.
--
--- Patch [31]: [PATCH 31/70] drm/tiny: appletbdrm: Switch to drm_atomic_helper_crtc_create_state ---
commit c5a19cb22088517bba7b18adab2a528f848a790f
Author: Maxime Ripard <mripard@kernel.org>
drm/tiny: appletbdrm: Switch to drm_atomic_helper_crtc_create_state
The appletbdrm crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
> diff --git a/drivers/gpu/drm/tiny/appletbdrm.c b/drivers/gpu/drm/tiny/appletbdrm.c
> index cdd35af498920..94bad6dc720ef 100644
> --- a/drivers/gpu/drm/tiny/appletbdrm.c
> +++ b/drivers/gpu/drm/tiny/appletbdrm.c
> @@ -598,7 +598,7 @@ static const struct drm_crtc_helper_funcs appletbdrm_crtc_helper_funcs = {
> };
>
> static const struct drm_crtc_funcs appletbdrm_crtc_funcs = {
> - .reset = drm_atomic_helper_crtc_reset,
> + .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,
[Severity: High]
This is a pre-existing issue, but I noticed a potential problem in
appletbdrm_flush_damage() in this same file.
When damage (in framebuffer coordinates) is intersected with state->dst (in
CRTC coordinates), could this produce incorrect clipping results if the plane
is not placed at (0,0)?
Also, because buf_size is calculated before the intersection, but the frame
dimensions use the mutated damage:
drivers/gpu/drm/tiny/appletbdrm.c:appletbdrm_flush_damage() {
...
u32 buf_size = rect_size(&damage);
if (!drm_rect_intersect(&dst_clip, &damage))
continue;
/* ... */
frame->width = cpu_to_le16(drm_rect_height(&damage));
frame->height = cpu_to_le16(drm_rect_width(&damage));
frame->buf_size = cpu_to_le32(buf_size);
...
}
If the damage rectangle is partially outside the destination bounds, will
this cause buf_size to be larger than the actual frame dimensions? Does this
lead to malformed USB frames with uninitialized memory gaps before the footer,
violating the hardware USB protocol?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=31
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 32/70] drm/tiny: bochs: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (31 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Gerd Hoffmann, virtualization
The bochs crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: virtualization@lists.linux.dev
---
drivers/gpu/drm/tiny/bochs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c
index e2d957e51505..524d387f1d53 100644
--- a/drivers/gpu/drm/tiny/bochs.c
+++ b/drivers/gpu/drm/tiny/bochs.c
@@ -548,11 +548,11 @@ static const struct drm_crtc_helper_funcs bochs_crtc_helper_funcs = {
.atomic_enable = bochs_crtc_helper_atomic_enable,
.atomic_disable = bochs_crtc_helper_atomic_disable,
};
static const struct drm_crtc_funcs bochs_crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .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_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 33/70] drm/tiny: cirrus: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (32 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Dave Airlie, Gerd Hoffmann,
virtualization
The cirrus crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Dave Airlie <airlied@redhat.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: virtualization@lists.linux.dev
---
drivers/gpu/drm/tiny/cirrus-qemu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tiny/cirrus-qemu.c b/drivers/gpu/drm/tiny/cirrus-qemu.c
index 075221b431d3..73516f631e0b 100644
--- a/drivers/gpu/drm/tiny/cirrus-qemu.c
+++ b/drivers/gpu/drm/tiny/cirrus-qemu.c
@@ -417,11 +417,11 @@ static const struct drm_crtc_helper_funcs cirrus_crtc_helper_funcs = {
.atomic_enable = cirrus_crtc_helper_atomic_enable,
.atomic_disable = drm_crtc_vblank_atomic_disable,
};
static const struct drm_crtc_funcs cirrus_crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .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_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 34/70] drm/tiny: pixpaper: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (33 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
2026-08-21 15:26 ` sashiko-bot
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, LiangCheng Wang
The pixpaper crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: LiangCheng Wang <zaq14760@gmail.com>
---
drivers/gpu/drm/tiny/pixpaper.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tiny/pixpaper.c b/drivers/gpu/drm/tiny/pixpaper.c
index d02ac26d007c..b69e7c30607e 100644
--- a/drivers/gpu/drm/tiny/pixpaper.c
+++ b/drivers/gpu/drm/tiny/pixpaper.c
@@ -961,11 +961,11 @@ static const struct drm_plane_helper_funcs pixpaper_plane_helper_funcs = {
};
static const struct drm_crtc_funcs pixpaper_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.destroy = drm_crtc_cleanup,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 34/70] drm/tiny: pixpaper: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:39 ` [PATCH 34/70] drm/tiny: pixpaper: " Maxime Ripard
@ 2026-08-21 15:26 ` sashiko-bot
0 siblings, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 15:26 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] This problem wasn't introduced by this patch, but the plane and CRTC atomic callbacks call sleeping functions in atomic context, violating DRM subsystem rules.
--
--- Patch [34]: [PATCH 34/70] drm/tiny: pixpaper: Switch to drm_atomic_helper_crtc_create_state ---
commit 0c05f2d46ff22e1262b7a7c99b4dd00d2c48ebfe
Author: Maxime Ripard <mripard@kernel.org>
drm/tiny: pixpaper: Switch to drm_atomic_helper_crtc_create_state
This commit switches the pixpaper crtc implementation from using the
deprecated drm_atomic_helper_crtc_reset() hook to using
drm_atomic_helper_crtc_create_state().
> diff --git a/drivers/gpu/drm/tiny/pixpaper.c b/drivers/gpu/drm/tiny/pixpaper.c
> index d02ac26d007c1..b69e7c30607e7 100644
> --- a/drivers/gpu/drm/tiny/pixpaper.c
> +++ b/drivers/gpu/drm/tiny/pixpaper.c
> @@ -963,7 +963,7 @@ static const struct drm_plane_helper_funcs pixpaper_plane_helper_funcs = {
> static const struct drm_crtc_funcs pixpaper_crtc_funcs = {
> .set_config = drm_atomic_helper_set_config,
> .page_flip = drm_atomic_helper_page_flip,
> - .reset = drm_atomic_helper_crtc_reset,
> + .atomic_create_state = drm_atomic_helper_crtc_create_state,
[Severity: High]
This isn't a bug introduced by this patch, but while reviewing the atomic
state changes I noticed a pre-existing issue. Does pixpaper_wait_for_panel()
call sleeping functions while in an atomic context?
Looking at pixpaper_crtc_atomic_enable() and pixpaper_plane_atomic_update(),
these are DRM atomic callbacks and execute in atomic context where sleeping
is forbidden. However, both of them call pixpaper_wait_for_panel():
pixpaper_wait_for_panel() {
...
usleep_range(1000, 1500);
while (gpiod_get_value_cansleep(panel->busy) != 1) {
...
}
Could this trigger scheduling while atomic oopses or deadlocks during
non-blocking commits? Should this be modified to use non-sleeping delays
and GPIO reads instead?
> .destroy = drm_crtc_cleanup,
> .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
> .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
> };
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=34
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 35/70] drm/tiny: sharp: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (34 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
2026-08-21 15:25 ` sashiko-bot
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Alex Lanzano
The sharp crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Alex Lanzano <lanzano.alex@gmail.com>
---
drivers/gpu/drm/tiny/sharp-memory.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tiny/sharp-memory.c b/drivers/gpu/drm/tiny/sharp-memory.c
index 7efd7b567f3b..434e73bd25a5 100644
--- a/drivers/gpu/drm/tiny/sharp-memory.c
+++ b/drivers/gpu/drm/tiny/sharp-memory.c
@@ -343,11 +343,11 @@ static const struct drm_crtc_helper_funcs sharp_memory_crtc_helper_funcs = {
.atomic_enable = sharp_memory_crtc_enable,
.atomic_disable = sharp_memory_crtc_disable,
};
static const struct drm_crtc_funcs sharp_memory_crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .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_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 35/70] drm/tiny: sharp: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:39 ` [PATCH 35/70] drm/tiny: sharp: " Maxime Ripard
@ 2026-08-21 15:25 ` sashiko-bot
0 siblings, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 15:25 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
Pre-existing issues:
- [High] The background kthread or PWM signal is not stopped on probe error paths, leading to Use-After-Free when the device memory is freed.
- [High] The driver does not check the return value of kthread_run(), which causes a kernel panic in the remove path if thread creation fails.
- [High] Plane atomic update callback calls sleeping functions (mutex_lock and spi_write) in an atomic context.
--
--- Patch [35]: [PATCH 35/70] drm/tiny: sharp: Switch to drm_atomic_helper_crtc_create_state ---
commit d365eb0228322a04306eb8553f60a438b3220d14
Author: Maxime Ripard <mripard@kernel.org>
drm/tiny: sharp: Switch to drm_atomic_helper_crtc_create_state
The sharp crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook. Switch to
drm_atomic_helper_crtc_create_state() instead.
> diff --git a/drivers/gpu/drm/tiny/sharp-memory.c b/drivers/gpu/drm/tiny/sharp-memory.c
> index 7efd7b567f3b2..434e73bd25a58 100644
> --- a/drivers/gpu/drm/tiny/sharp-memory.c
> +++ b/drivers/gpu/drm/tiny/sharp-memory.c
> @@ -345,7 +345,7 @@ static const struct drm_crtc_helper_funcs sharp_memory_crtc_helper_funcs = {
> };
>
> static const struct drm_crtc_funcs sharp_memory_crtc_funcs = {
> - .reset = drm_atomic_helper_crtc_reset,
> + .atomic_create_state = drm_atomic_helper_crtc_create_state,
[Severity: High]
This isn't a bug introduced by this patch, but does the plane atomic update
callback call sleeping functions in an atomic context?
The DRM subsystem executes plane atomic update callbacks in an atomic
context where sleeping is forbidden, but sharp_memory_plane_atomic_update()
invokes the display update flow:
drivers/gpu/drm/tiny/sharp-memory.c:sharp_memory_plane_atomic_update() {
...
sharp_memory_fb_dirty(plane_state->fb, shadow_plane_state->data,
&rect, &shadow_plane_state->fmtcnv_state);
...
}
which then calls sleeping functions unconditionally:
drivers/gpu/drm/tiny/sharp-memory.c:sharp_memory_update_display() {
...
mutex_lock(&smd->tx_mutex);
/* Populate the transmit buffer with frame data */
...
ret = sharp_memory_spi_write(smd->spi, tx_buffer, tx_buffer_size);
...
}
Could this lead to kernel splats and potential deadlocks on any atomic
plane update from userspace?
[Severity: High]
This is a pre-existing issue, but does the probe error path return directly
without stopping the kthread or PWM?
In sharp_memory_probe(), the background kthread is started, but if subsequent
initialization steps fail, the function returns directly:
drivers/gpu/drm/tiny/sharp-memory.c:sharp_memory_probe() {
...
smd->sw_vcom_signal = kthread_run(sharp_memory_sw_vcom_signal_thread,
smd, "sw_vcom_signal");
...
if (ret)
return dev_err_probe(dev, ret, "Failed to initialize display pipeline.\n");
...
}
Can this lead to a Use-After-Free memory corruption if the smd structure is
freed by devres while the running kthread continues executing and
dereferencing the freed memory?
[Severity: High]
This is also a pre-existing issue, but is the return value of kthread_run()
used without checking IS_ERR()?
If kthread creation fails in sharp_memory_probe(), smd->sw_vcom_signal would
hold an ERR_PTR:
drivers/gpu/drm/tiny/sharp-memory.c:sharp_memory_probe() {
...
smd->sw_vcom_signal = kthread_run(sharp_memory_sw_vcom_signal_thread,
smd, "sw_vcom_signal");
...
}
Would this cause a kernel panic due to an invalid pointer dereference when
the driver is removed and kthread_stop() is unconditionally called?
drivers/gpu/drm/tiny/sharp-memory.c:sharp_memory_remove() {
...
kthread_stop(smd->sw_vcom_signal);
...
}
> .destroy = drm_crtc_cleanup,
> .set_config = drm_atomic_helper_set_config,
> .page_flip = drm_atomic_helper_page_flip,
> .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
> .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
> };
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=35
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 36/70] drm/udl: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (35 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Dave Airlie, Sean Paul
The udl crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Dave Airlie <airlied@redhat.com>
Cc: Sean Paul <sean@poorly.run>
---
drivers/gpu/drm/udl/udl_modeset.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/udl/udl_modeset.c b/drivers/gpu/drm/udl/udl_modeset.c
index 289711035b67..dee085406ac2 100644
--- a/drivers/gpu/drm/udl/udl_modeset.c
+++ b/drivers/gpu/drm/udl/udl_modeset.c
@@ -398,11 +398,11 @@ static const struct drm_crtc_helper_funcs udl_crtc_helper_funcs = {
.atomic_enable = udl_crtc_helper_atomic_enable,
.atomic_disable = udl_crtc_helper_atomic_disable,
};
static const struct drm_crtc_funcs udl_crtc_funcs = {
- .reset = drm_atomic_helper_crtc_reset,
+ .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_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 37/70] drm/vbox: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (36 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Hans de Goede
The vbox crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Hans de Goede <hansg@kernel.org>
---
drivers/gpu/drm/vboxvideo/vbox_mode.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/vboxvideo/vbox_mode.c b/drivers/gpu/drm/vboxvideo/vbox_mode.c
index 8e4e5fc9d3c5..d2d75367b077 100644
--- a/drivers/gpu/drm/vboxvideo/vbox_mode.c
+++ b/drivers/gpu/drm/vboxvideo/vbox_mode.c
@@ -248,11 +248,11 @@ static void vbox_crtc_destroy(struct drm_crtc *crtc)
static const struct drm_crtc_funcs vbox_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
/* .gamma_set = vbox_crtc_gamma_set, */
.destroy = vbox_crtc_destroy,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
};
static int vbox_primary_atomic_check(struct drm_plane *plane,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 38/70] drm/verisilicon: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (37 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Icenowy Zheng
The verisilicon crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Icenowy Zheng <zhengxingda@iscas.ac.cn>
---
drivers/gpu/drm/verisilicon/vs_crtc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/verisilicon/vs_crtc.c b/drivers/gpu/drm/verisilicon/vs_crtc.c
index 0b8a35d09cd2..c24c1588cbe6 100644
--- a/drivers/gpu/drm/verisilicon/vs_crtc.c
+++ b/drivers/gpu/drm/verisilicon/vs_crtc.c
@@ -147,11 +147,11 @@ static void vs_crtc_disable_vblank(struct drm_crtc *crtc)
static const struct drm_crtc_funcs vs_crtc_funcs = {
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.set_config = drm_atomic_helper_set_config,
.enable_vblank = vs_crtc_enable_vblank,
.disable_vblank = vs_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 39/70] drm/virtio: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (38 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Chia-I Wu, David Airlie,
Dmitry Osipenko, Gerd Hoffmann, Gurchetan Singh, virtualization
The virtio crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Chia-I Wu <olvaffe@gmail.com>
Cc: David Airlie <airlied@redhat.com>
Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Gurchetan Singh <gurchetansingh@chromium.org>
Cc: virtualization@lists.linux.dev
---
drivers/gpu/drm/virtio/virtgpu_display.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index 44ffffec550f..c0b71fdae330 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -53,11 +53,11 @@
static const struct drm_crtc_funcs virtio_gpu_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.destroy = drm_crtc_cleanup,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
DRM_CRTC_VBLANK_TIMER_FUNCS,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 40/70] drm/xlnx: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (39 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Michal Simek, Tomi Valkeinen
The xlnx crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Michal Simek <michal.simek@amd.com>
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/xlnx/zynqmp_kms.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xlnx/zynqmp_kms.c b/drivers/gpu/drm/xlnx/zynqmp_kms.c
index d5f922450565..966a9243f1c7 100644
--- a/drivers/gpu/drm/xlnx/zynqmp_kms.c
+++ b/drivers/gpu/drm/xlnx/zynqmp_kms.c
@@ -306,11 +306,11 @@ static void zynqmp_dpsub_crtc_disable_vblank(struct drm_crtc *crtc)
static const struct drm_crtc_funcs zynqmp_dpsub_crtc_funcs = {
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = zynqmp_dpsub_crtc_enable_vblank,
.disable_vblank = zynqmp_dpsub_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 41/70] drm/mipi-dbi: Switch to drm_atomic_helper_crtc_create_state
2026-08-21 14:38 ` Maxime Ripard
` (40 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard
The mipi-dbi crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
include/drm/drm_mipi_dbi.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/drm/drm_mipi_dbi.h b/include/drm/drm_mipi_dbi.h
index 78ab23d844ce..d93e25fdc2e1 100644
--- a/include/drm/drm_mipi_dbi.h
+++ b/include/drm/drm_mipi_dbi.h
@@ -232,11 +232,11 @@ void drm_mipi_dbi_plane_helper_atomic_update(struct drm_plane *plane,
/*
* CRTC
*/
#define DRM_MIPI_DBI_CRTC_FUNCS \
- .reset = drm_atomic_helper_crtc_reset, \
+ .atomic_create_state = drm_atomic_helper_crtc_create_state, \
.set_config = drm_atomic_helper_set_config, \
.page_flip = drm_atomic_helper_page_flip, \
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state, \
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 42/70] drm/atomic-helper: Remove drm_atomic_helper_crtc_reset
2026-08-21 14:38 ` Maxime Ripard
` (41 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard
All users of drm_atomic_helper_crtc_reset() have been converted to
drm_atomic_helper_crtc_create_state().
Remove the now unused helper.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/drm_atomic_state_helper.c | 19 -------------------
include/drm/drm_atomic_state_helper.h | 1 -
include/drm/drm_crtc.h | 2 --
3 files changed, 22 deletions(-)
diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/drm_atomic_state_helper.c
index d90d1d7c9cf9..b592b7f5f264 100644
--- a/drivers/gpu/drm/drm_atomic_state_helper.c
+++ b/drivers/gpu/drm/drm_atomic_state_helper.c
@@ -103,29 +103,10 @@ __drm_atomic_helper_crtc_reset(struct drm_crtc *crtc,
crtc->state = crtc_state;
}
EXPORT_SYMBOL(__drm_atomic_helper_crtc_reset);
-/**
- * drm_atomic_helper_crtc_reset - default &drm_crtc_funcs.reset hook for CRTCs
- * @crtc: drm CRTC
- *
- * Resets the atomic state for @crtc by freeing the state pointer (which might
- * be NULL, e.g. at driver load time) and allocating a new empty state object.
- */
-void drm_atomic_helper_crtc_reset(struct drm_crtc *crtc)
-{
- struct drm_crtc_state *crtc_state =
- kzalloc_obj(*crtc->state);
-
- if (crtc->state)
- crtc->funcs->atomic_destroy_state(crtc, crtc->state);
-
- __drm_atomic_helper_crtc_reset(crtc, crtc_state);
-}
-EXPORT_SYMBOL(drm_atomic_helper_crtc_reset);
-
/**
* drm_atomic_helper_crtc_create_state - default &drm_crtc_funcs.atomic_create_state hook for crtcs
* @crtc: crtc object
*
* Allocates and initializes pristine @drm_crtc_state.
diff --git a/include/drm/drm_atomic_state_helper.h b/include/drm/drm_atomic_state_helper.h
index 34a599c3d86d..df70817c94fc 100644
--- a/include/drm/drm_atomic_state_helper.h
+++ b/include/drm/drm_atomic_state_helper.h
@@ -42,11 +42,10 @@ struct drm_device;
void __drm_atomic_helper_crtc_state_init(struct drm_crtc_state *state,
struct drm_crtc *crtc);
void __drm_atomic_helper_crtc_reset(struct drm_crtc *crtc,
struct drm_crtc_state *state);
-void drm_atomic_helper_crtc_reset(struct drm_crtc *crtc);
struct drm_crtc_state *
drm_atomic_helper_crtc_create_state(struct drm_crtc *crtc);
void __drm_atomic_helper_crtc_duplicate_state(struct drm_crtc *crtc,
struct drm_crtc_state *state);
struct drm_crtc_state *
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 152349f973e3..12f43253f059 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -428,12 +428,10 @@ struct drm_crtc_funcs {
*
* Reset CRTC hardware and software state to off. This function isn't
* called by the core directly, only through drm_mode_config_reset().
* It's not a helper hook only for historical reasons.
*
- * Atomic drivers can use drm_atomic_helper_crtc_reset() to reset
- * atomic state using this hook.
*/
void (*reset)(struct drm_crtc *crtc);
/**
* @cursor_set:
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 43/70] sysfb: Convert to create_state
2026-08-21 14:38 ` Maxime Ripard
` (42 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Javier Martinez Canillas
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Javier Martinez Canillas <javierm@redhat.com>
---
drivers/gpu/drm/sysfb/drm_sysfb_helper.h | 4 ++--
drivers/gpu/drm/sysfb/drm_sysfb_modeset.c | 20 +++++++++-----------
2 files changed, 11 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/sysfb/drm_sysfb_helper.h b/drivers/gpu/drm/sysfb/drm_sysfb_helper.h
index 547f2327af5e..445eb5b5ca06 100644
--- a/drivers/gpu/drm/sysfb/drm_sysfb_helper.h
+++ b/drivers/gpu/drm/sysfb/drm_sysfb_helper.h
@@ -169,16 +169,16 @@ int drm_sysfb_crtc_helper_atomic_check(struct drm_crtc *crtc, struct drm_atomic_
#define DRM_SYSFB_CRTC_HELPER_FUNCS \
.mode_valid = drm_sysfb_crtc_helper_mode_valid, \
.atomic_check = drm_sysfb_crtc_helper_atomic_check
-void drm_sysfb_crtc_reset(struct drm_crtc *crtc);
+struct drm_crtc_state *drm_sysfb_crtc_create_state(struct drm_crtc *crtc);
struct drm_crtc_state *drm_sysfb_crtc_atomic_duplicate_state(struct drm_crtc *crtc);
void drm_sysfb_crtc_atomic_destroy_state(struct drm_crtc *crtc, struct drm_crtc_state *crtc_state);
#define DRM_SYSFB_CRTC_FUNCS \
- .reset = drm_sysfb_crtc_reset, \
+ .atomic_create_state = drm_sysfb_crtc_create_state, \
.set_config = drm_atomic_helper_set_config, \
.page_flip = drm_atomic_helper_page_flip, \
.atomic_duplicate_state = drm_sysfb_crtc_atomic_duplicate_state, \
.atomic_destroy_state = drm_sysfb_crtc_atomic_destroy_state
diff --git a/drivers/gpu/drm/sysfb/drm_sysfb_modeset.c b/drivers/gpu/drm/sysfb/drm_sysfb_modeset.c
index d2de29caf89e..ce11ac32fae4 100644
--- a/drivers/gpu/drm/sysfb/drm_sysfb_modeset.c
+++ b/drivers/gpu/drm/sysfb/drm_sysfb_modeset.c
@@ -513,27 +513,25 @@ int drm_sysfb_crtc_helper_atomic_check(struct drm_crtc *crtc, struct drm_atomic_
return 0;
}
EXPORT_SYMBOL(drm_sysfb_crtc_helper_atomic_check);
-void drm_sysfb_crtc_reset(struct drm_crtc *crtc)
+struct drm_crtc_state *drm_sysfb_crtc_create_state(struct drm_crtc *crtc)
{
struct drm_sysfb_device *sysfb = to_drm_sysfb_device(crtc->dev);
struct drm_sysfb_crtc_state *sysfb_crtc_state;
- if (crtc->state)
- drm_sysfb_crtc_state_destroy(to_drm_sysfb_crtc_state(crtc->state));
-
sysfb_crtc_state = kzalloc_obj(*sysfb_crtc_state);
- if (sysfb_crtc_state) {
- sysfb_crtc_state->format = sysfb->fb_format;
- __drm_atomic_helper_crtc_reset(crtc, &sysfb_crtc_state->base);
- } else {
- __drm_atomic_helper_crtc_reset(crtc, NULL);
- }
+ if (!sysfb_crtc_state)
+ return ERR_PTR(-ENOMEM);
+
+ sysfb_crtc_state->format = sysfb->fb_format;
+ __drm_atomic_helper_crtc_state_init(&sysfb_crtc_state->base, crtc);
+
+ return &sysfb_crtc_state->base;
}
-EXPORT_SYMBOL(drm_sysfb_crtc_reset);
+EXPORT_SYMBOL(drm_sysfb_crtc_create_state);
struct drm_crtc_state *drm_sysfb_crtc_atomic_duplicate_state(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
struct drm_crtc_state *crtc_state = crtc->state;
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 44/70] drm/amdgpu: dm: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (43 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
2026-08-21 15:28 ` sashiko-bot
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Christian König, Alex Deucher,
Harry Wentland, Leo Li, Rodrigo Siqueira, amd-gfx
The amdgpu display manager crtc implementation provides a custom reset
hook. However, this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: "Christian König" <christian.koenig@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Harry Wentland <harry.wentland@amd.com>
Cc: Leo Li <sunpeng.li@amd.com>
Cc: Rodrigo Siqueira <siqueira@igalia.com>
Cc: amd-gfx@lists.freedesktop.org
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
index 0ad7704800d9..42a908c9d4a9 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
@@ -438,22 +438,21 @@ static void amdgpu_dm_crtc_destroy(struct drm_crtc *crtc)
drm_crtc_cleanup(crtc);
kfree(crtc);
}
-static void amdgpu_dm_crtc_reset_state(struct drm_crtc *crtc)
+static struct drm_crtc_state *amdgpu_dm_crtc_create_state(struct drm_crtc *crtc)
{
struct dm_crtc_state *state;
state = kzalloc_obj(*state);
if (!state)
- return;
+ return ERR_PTR(-ENOMEM);
- if (crtc->state)
- amdgpu_dm_crtc_destroy_state(crtc, crtc->state);
+ __drm_atomic_helper_crtc_state_init(&state->base, crtc);
- __drm_atomic_helper_crtc_reset(crtc, &state->base);
+ return &state->base;
}
#ifdef CONFIG_DEBUG_FS
static int amdgpu_dm_crtc_late_register(struct drm_crtc *crtc)
{
@@ -527,11 +526,11 @@ amdgpu_dm_atomic_crtc_get_property(struct drm_crtc *crtc,
}
#endif
/* Implemented only the options currently available for the driver */
static const struct drm_crtc_funcs amdgpu_dm_crtc_funcs = {
- .reset = amdgpu_dm_crtc_reset_state,
+ .atomic_create_state = amdgpu_dm_crtc_create_state,
.destroy = amdgpu_dm_crtc_destroy,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = amdgpu_dm_crtc_duplicate_state,
.atomic_destroy_state = amdgpu_dm_crtc_destroy_state,
@@ -741,13 +740,13 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
amdgpu_dm_ism_init(&acrtc->ism, &default_ism_config);
drm_crtc_helper_add(&acrtc->base, &amdgpu_dm_crtc_helper_funcs);
- /* Create (reset) the plane state */
- if (acrtc->base.funcs->reset)
- acrtc->base.funcs->reset(&acrtc->base);
+ /* Create the plane state */
+ if (acrtc->base.funcs->atomic_create_state)
+ acrtc->base.funcs->atomic_create_state(&acrtc->base);
acrtc->max_cursor_width = dm->adev->dm.dc->caps.max_cursor_size;
acrtc->max_cursor_height = dm->adev->dm.dc->caps.max_cursor_size;
acrtc->crtc_id = crtc_index;
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 44/70] drm/amdgpu: dm: Convert to atomic_create_state
2026-08-21 14:39 ` [PATCH 44/70] drm/amdgpu: dm: Convert to atomic_create_state Maxime Ripard
@ 2026-08-21 15:28 ` sashiko-bot
0 siblings, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 15:28 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] The return value of `atomic_create_state()` is completely discarded during CRTC initialization, causing a memory leak and leaving `crtc->state` uninitialized (NULL).
--
--- Patch [44]: [PATCH 44/70] drm/amdgpu: dm: Convert to atomic_create_state ---
commit 680651b77d5bb2911f7b94020aa95ffc0ffde185
Author: Maxime Ripard <mripard@kernel.org>
drm/amdgpu: dm: Convert to atomic_create_state
The amdgpu display manager crtc implementation provides a custom reset hook.
This converts the implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
> index d63688b9d93dd..e1cc74ba7a434 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
[ ... ]
> @@ -757,9 +756,9 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
>
> drm_crtc_helper_add(&acrtc->base, &amdgpu_dm_crtc_helper_funcs);
>
> - /* Create (reset) the plane state */
> - if (acrtc->base.funcs->reset)
> - acrtc->base.funcs->reset(&acrtc->base);
> + /* Create the plane state */
> + if (acrtc->base.funcs->atomic_create_state)
> + acrtc->base.funcs->atomic_create_state(&acrtc->base);
[Severity: High]
Does this drop the newly allocated state and leave acrtc->base.state
uninitialized (NULL)?
Previously, amdgpu_dm_crtc_reset_state() called
__drm_atomic_helper_crtc_reset(), which internally assigns the newly
allocated state to the crtc:
void __drm_atomic_helper_crtc_reset(struct drm_crtc *crtc,
struct drm_crtc_state *crtc_state)
{
if (crtc_state)
__drm_atomic_helper_crtc_state_init(crtc_state, crtc);
crtc->state = crtc_state;
}
With the new conversion, amdgpu_dm_crtc_create_state() allocates and returns
the state pointer:
static struct drm_crtc_state *amdgpu_dm_crtc_create_state(struct drm_crtc *crtc)
{
struct dm_crtc_state *state;
state = kzalloc_obj(*state);
if (!state)
return ERR_PTR(-ENOMEM);
__drm_atomic_helper_crtc_state_init(&state->base, crtc);
return &state->base;
}
However, amdgpu_dm_crtc_init() ignores the return value of
atomic_create_state() and does not assign it to the crtc.
Could this result in a memory leak of the returned dm_crtc_state object, as
well as a regression due to NULL pointer dereferences when crtc->state is
accessed later during driver initialization?
>
> acrtc->max_cursor_width = dm->adev->dm.dc->caps.max_cursor_size;
> acrtc->max_cursor_height = dm->adev->dm.dc->caps.max_cursor_size;
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=44
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 45/70] drm/komeda: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (44 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Liviu Dudau
The komeda crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Liviu Dudau <liviu.dudau@arm.com>
---
drivers/gpu/drm/arm/display/komeda/komeda_crtc.c | 18 ++++++++----------
1 file changed, 8 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_crtc.c b/drivers/gpu/drm/arm/display/komeda/komeda_crtc.c
index e8cb782a6f8e..e1165b6d8bfd 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_crtc.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_crtc.c
@@ -491,23 +491,21 @@ static const struct drm_crtc_helper_funcs komeda_crtc_helper_funcs = {
.atomic_disable = komeda_crtc_atomic_disable,
.mode_valid = komeda_crtc_mode_valid,
.mode_fixup = komeda_crtc_mode_fixup,
};
-static void komeda_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *komeda_crtc_create_state(struct drm_crtc *crtc)
{
struct komeda_crtc_state *state;
- if (crtc->state)
- __drm_atomic_helper_crtc_destroy_state(crtc->state);
-
- kfree(to_kcrtc_st(crtc->state));
- crtc->state = NULL;
-
state = kzalloc_obj(*state);
- if (state)
- __drm_atomic_helper_crtc_reset(crtc, &state->base);
+ if (!state)
+ return ERR_PTR(-ENOMEM);
+
+ __drm_atomic_helper_crtc_state_init(&state->base, crtc);
+
+ return &state->base;
}
static struct drm_crtc_state *
komeda_crtc_atomic_duplicate_state(struct drm_crtc *crtc)
{
@@ -553,11 +551,11 @@ static void komeda_crtc_vblank_disable(struct drm_crtc *crtc)
static const struct drm_crtc_funcs komeda_crtc_funcs = {
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = komeda_crtc_reset,
+ .atomic_create_state = komeda_crtc_create_state,
.atomic_duplicate_state = komeda_crtc_atomic_duplicate_state,
.atomic_destroy_state = komeda_crtc_atomic_destroy_state,
.enable_vblank = komeda_crtc_vblank_enable,
.disable_vblank = komeda_crtc_vblank_disable,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 46/70] drm/malidp: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (45 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Liviu Dudau
The malidp crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Liviu Dudau <liviu.dudau@arm.com>
---
drivers/gpu/drm/arm/malidp_crtc.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/arm/malidp_crtc.c b/drivers/gpu/drm/arm/malidp_crtc.c
index ebe8e1078777..157ff148efe7 100644
--- a/drivers/gpu/drm/arm/malidp_crtc.c
+++ b/drivers/gpu/drm/arm/malidp_crtc.c
@@ -474,21 +474,21 @@ static void malidp_crtc_destroy_state(struct drm_crtc *crtc,
}
kfree(mali_state);
}
-static void malidp_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *malidp_crtc_create_state(struct drm_crtc *crtc)
{
- struct malidp_crtc_state *state = kzalloc_obj(*state);
+ struct malidp_crtc_state *state;
- if (crtc->state)
- malidp_crtc_destroy_state(crtc, crtc->state);
+ state = kzalloc_obj(*state);
+ if (!state)
+ return ERR_PTR(-ENOMEM);
- if (state)
- __drm_atomic_helper_crtc_reset(crtc, &state->base);
- else
- __drm_atomic_helper_crtc_reset(crtc, NULL);
+ __drm_atomic_helper_crtc_state_init(&state->base, crtc);
+
+ return &state->base;
}
static int malidp_crtc_enable_vblank(struct drm_crtc *crtc)
{
struct malidp_drm *malidp = crtc_to_malidp_device(crtc);
@@ -509,11 +509,11 @@ static void malidp_crtc_disable_vblank(struct drm_crtc *crtc)
}
static const struct drm_crtc_funcs malidp_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = malidp_crtc_reset,
+ .atomic_create_state = malidp_crtc_create_state,
.atomic_duplicate_state = malidp_crtc_duplicate_state,
.atomic_destroy_state = malidp_crtc_destroy_state,
.enable_vblank = malidp_crtc_enable_vblank,
.disable_vblank = malidp_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 47/70] drm/ast: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (46 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Dave Airlie, Jocelyn Falempe
The ast crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Dave Airlie <airlied@redhat.com>
Cc: Jocelyn Falempe <jfalempe@redhat.com>
---
drivers/gpu/drm/ast/ast_mode.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
index d5ed8c5c7925..ea0ef8096aa9 100644
--- a/drivers/gpu/drm/ast/ast_mode.c
+++ b/drivers/gpu/drm/ast/ast_mode.c
@@ -886,21 +886,21 @@ static const struct drm_crtc_helper_funcs ast_crtc_helper_funcs = {
.atomic_flush = ast_crtc_helper_atomic_flush,
.atomic_enable = ast_crtc_helper_atomic_enable,
.atomic_disable = ast_crtc_helper_atomic_disable,
};
-static void ast_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *ast_crtc_create_state(struct drm_crtc *crtc)
{
- struct ast_crtc_state *ast_state = kzalloc_obj(*ast_state);
+ struct ast_crtc_state *ast_state;
- if (crtc->state)
- crtc->funcs->atomic_destroy_state(crtc, crtc->state);
+ ast_state = kzalloc_obj(*ast_state);
+ if (!ast_state)
+ return ERR_PTR(-ENOMEM);
- if (ast_state)
- __drm_atomic_helper_crtc_reset(crtc, &ast_state->base);
- else
- __drm_atomic_helper_crtc_reset(crtc, NULL);
+ __drm_atomic_helper_crtc_state_init(&ast_state->base, crtc);
+
+ return &ast_state->base;
}
static struct drm_crtc_state *
ast_crtc_atomic_duplicate_state(struct drm_crtc *crtc)
{
@@ -932,11 +932,11 @@ static void ast_crtc_atomic_destroy_state(struct drm_crtc *crtc,
__drm_atomic_helper_crtc_destroy_state(&ast_state->base);
kfree(ast_state);
}
static const struct drm_crtc_funcs ast_crtc_funcs = {
- .reset = ast_crtc_reset,
+ .atomic_create_state = ast_crtc_create_state,
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = ast_crtc_atomic_duplicate_state,
.atomic_destroy_state = ast_crtc_atomic_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 48/70] drm/atmel-hlcdc: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (47 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Alexandre Belloni, Claudiu Beznea,
Dharma Balasubiramani, Manikandan Muralidharan, Nicolas Ferre
The atmel-hlcdc crtc implementation provides a custom reset hook.
However, this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Claudiu Beznea <claudiu.beznea@tuxon.dev>
Cc: Dharma Balasubiramani <dharma.b@microchip.com>
Cc: Manikandan Muralidharan <manikandan.m@microchip.com>
Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
---
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 19 ++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
index 9dbac2def333..c2c4c9c3086b 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
@@ -527,24 +527,21 @@ void atmel_hlcdc_crtc_irq(struct drm_crtc *c)
{
drm_crtc_handle_vblank(c);
atmel_hlcdc_crtc_finish_page_flip(drm_crtc_to_atmel_hlcdc_crtc(c));
}
-static void atmel_hlcdc_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *atmel_hlcdc_crtc_create_state(struct drm_crtc *crtc)
{
struct atmel_hlcdc_crtc_state *state;
- if (crtc->state) {
- __drm_atomic_helper_crtc_destroy_state(crtc->state);
- state = drm_crtc_state_to_atmel_hlcdc_crtc_state(crtc->state);
- kfree(state);
- crtc->state = NULL;
- }
-
state = kzalloc_obj(*state);
- if (state)
- __drm_atomic_helper_crtc_reset(crtc, &state->base);
+ if (!state)
+ return ERR_PTR(-ENOMEM);
+
+ __drm_atomic_helper_crtc_state_init(&state->base, crtc);
+
+ return &state->base;
}
static struct drm_crtc_state *
atmel_hlcdc_crtc_duplicate_state(struct drm_crtc *crtc)
{
@@ -597,11 +594,11 @@ static void atmel_hlcdc_crtc_disable_vblank(struct drm_crtc *c)
}
static const struct drm_crtc_funcs atmel_hlcdc_crtc_funcs = {
.page_flip = drm_atomic_helper_page_flip,
.set_config = drm_atomic_helper_set_config,
- .reset = atmel_hlcdc_crtc_reset,
+ .atomic_create_state = atmel_hlcdc_crtc_create_state,
.atomic_duplicate_state = atmel_hlcdc_crtc_duplicate_state,
.atomic_destroy_state = atmel_hlcdc_crtc_destroy_state,
.enable_vblank = atmel_hlcdc_crtc_enable_vblank,
.disable_vblank = atmel_hlcdc_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 49/70] drm/imx: ipuv3: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (48 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Fabio Estevam, Frank Li,
Pengutronix Kernel Team, Philipp Zabel, Sascha Hauer, imx
The ipuv3 crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Fabio Estevam <festevam@gmail.com>
Cc: Frank Li <Frank.Li@nxp.com>
Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: imx@lists.linux.dev
---
drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c | 18 ++++++++----------
1 file changed, 8 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c
index 1405e50ee56b..f4fe1842cfae 100644
--- a/drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c
+++ b/drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c
@@ -105,23 +105,21 @@ static void ipu_crtc_atomic_disable(struct drm_crtc *crtc,
crtc->state->event = NULL;
}
spin_unlock_irq(&crtc->dev->event_lock);
}
-static void imx_drm_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *imx_drm_crtc_create_state(struct drm_crtc *crtc)
{
struct imx_crtc_state *state;
- if (crtc->state)
- __drm_atomic_helper_crtc_destroy_state(crtc->state);
-
- kfree(to_imx_crtc_state(crtc->state));
- crtc->state = NULL;
-
state = kzalloc_obj(*state);
- if (state)
- __drm_atomic_helper_crtc_reset(crtc, &state->base);
+ if (!state)
+ return ERR_PTR(-ENOMEM);
+
+ __drm_atomic_helper_crtc_state_init(&state->base, crtc);
+
+ return &state->base;
}
static struct drm_crtc_state *imx_drm_crtc_duplicate_state(struct drm_crtc *crtc)
{
struct imx_crtc_state *state;
@@ -162,11 +160,11 @@ static void ipu_disable_vblank(struct drm_crtc *crtc)
}
static const struct drm_crtc_funcs ipu_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = imx_drm_crtc_reset,
+ .atomic_create_state = imx_drm_crtc_create_state,
.atomic_duplicate_state = imx_drm_crtc_duplicate_state,
.atomic_destroy_state = imx_drm_crtc_destroy_state,
.enable_vblank = ipu_enable_vblank,
.disable_vblank = ipu_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 50/70] drm/loongsoon: Move hardware reset to CRTC creation
2026-08-21 14:38 ` Maxime Ripard
` (49 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
2026-08-21 15:36 ` sashiko-bot
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Huacai Chen, Icenowy Zheng, Jianmin Lv,
Mingcong Bai, Qianhai Wu, Xi Ruoyao
The loongsoon crtc reset hook performs both atomic state initialization
using __drm_atomic_helper_crtc_reset() and hardware-level register
writes to reset the CRTC.
The hardware reset is not related to atomic state initialization, and
the reset hook is being converted to atomic_create_state which only
deals with state allocation. Move the hardware reset to the CRTC
creation path instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Icenowy Zheng <zhengxingda@iscas.ac.cn>
Cc: Jianmin Lv <lvjianmin@loongson.cn>
Cc: Mingcong Bai <jeffbai@aosc.io>
Cc: Qianhai Wu <wuqianhai@loongson.cn>
Cc: Xi Ruoyao <xry111@xry111.site>
---
drivers/gpu/drm/loongson/lsdc_crtc.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/loongson/lsdc_crtc.c b/drivers/gpu/drm/loongson/lsdc_crtc.c
index 16b8f36a4071..97a3443739e1 100644
--- a/drivers/gpu/drm/loongson/lsdc_crtc.c
+++ b/drivers/gpu/drm/loongson/lsdc_crtc.c
@@ -388,12 +388,10 @@ static const struct lsdc_crtc_hw_ops ls7a2000_crtc_hw_ops[2] = {
},
};
static void lsdc_crtc_reset(struct drm_crtc *crtc)
{
- struct lsdc_crtc *lcrtc = to_lsdc_crtc(crtc);
- const struct lsdc_crtc_hw_ops *ops = lcrtc->hw_ops;
struct lsdc_crtc_state *priv_crtc_state;
if (crtc->state)
crtc->funcs->atomic_destroy_state(crtc, crtc->state);
@@ -401,13 +399,10 @@ static void lsdc_crtc_reset(struct drm_crtc *crtc)
if (!priv_crtc_state)
__drm_atomic_helper_crtc_reset(crtc, NULL);
else
__drm_atomic_helper_crtc_reset(crtc, &priv_crtc_state->base);
-
- /* Reset the CRTC hardware, this is required for S3 support */
- ops->reset(lcrtc);
}
static void lsdc_crtc_atomic_destroy_state(struct drm_crtc *crtc,
struct drm_crtc_state *state)
{
@@ -981,10 +976,13 @@ int ls7a1000_crtc_init(struct drm_device *ddev,
if (ret)
return ret;
drm_crtc_enable_color_mgmt(crtc, 0, false, 256);
+ /* Reset the CRTC hardware, this is required for S3 support */
+ lcrtc->hw_ops->reset(lcrtc);
+
return 0;
}
int ls7a2000_crtc_init(struct drm_device *ddev,
struct drm_crtc *crtc,
@@ -1020,7 +1018,10 @@ int ls7a2000_crtc_init(struct drm_device *ddev,
if (ret)
return ret;
drm_crtc_enable_color_mgmt(crtc, 0, false, 256);
+ /* Reset the CRTC hardware, this is required for S3 support */
+ lcrtc->hw_ops->reset(lcrtc);
+
return 0;
}
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 50/70] drm/loongsoon: Move hardware reset to CRTC creation
2026-08-21 14:39 ` [PATCH 50/70] drm/loongsoon: Move hardware reset to CRTC creation Maxime Ripard
@ 2026-08-21 15:36 ` sashiko-bot
0 siblings, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 15:36 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Broken S3 Resume due to missing CRTC hardware reset
--
--- Patch [50]: [PATCH 50/70] drm/loongsoon: Move hardware reset to CRTC creation ---
commit 841a0290c125afb8611341788938204f1fca139c
Author: Maxime Ripard <mripard@kernel.org>
drm/loongsoon: Move hardware reset to CRTC creation
This commit moves the hardware-level CRTC reset out of the atomic reset
hook and into the CRTC initialization functions.
> diff --git a/drivers/gpu/drm/loongson/lsdc_crtc.c b/drivers/gpu/drm/loongson/lsdc_crtc.c
> --- a/drivers/gpu/drm/loongson/lsdc_crtc.c
> +++ b/drivers/gpu/drm/loongson/lsdc_crtc.c
> @@ -403,9 +401,6 @@ static void lsdc_crtc_reset(struct drm_crtc *crtc)
> __drm_atomic_helper_crtc_reset(crtc, NULL);
> else
> __drm_atomic_helper_crtc_reset(crtc, &priv_crtc_state->base);
> -
> - /* Reset the CRTC hardware, this is required for S3 support */
> - ops->reset(lcrtc);
> }
[Severity: High]
Since drm_mode_config_reset() is typically called via drm_atomic_helper_resume()
during system resume, does removing the hardware reset from this hook prevent
the CRTC from being correctly reinitialized after waking from sleep?
[ ... ]
> @@ -983,6 +978,9 @@ int ls7a1000_crtc_init(struct drm_device *ddev,
>
> drm_crtc_enable_color_mgmt(crtc, 0, false, 256);
>
> + /* Reset the CRTC hardware, this is required for S3 support */
> + lcrtc->hw_ops->reset(lcrtc);
> +
> return 0;
> }
[Severity: High]
The comment explicitly notes this reset is required for S3 support, but
ls7a1000_crtc_init() only executes during device probe.
During S3 resume, the hardware registers will likely contain garbage values. If
the hardware reset is no longer called during resume, and the atomic commit
path merely performs a read-modify-write to enable the output, won't this
preserve those garbage bits and cause the display hardware to hang or fail
to resume?
(The same question applies to the identical change in ls7a2000_crtc_init below).
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=50
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 51/70] drm/loongson: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (50 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
2026-08-21 15:35 ` sashiko-bot
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Huacai Chen, Icenowy Zheng, Jianmin Lv,
Mingcong Bai, Qianhai Wu, Xi Ruoyao
The loongsoon crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It does
not perform any hardware reset.
Since the atomic_create_state hook is only meant to deal with state
allocation and initialization, convert it accordingly. The hardware
reset through ops->reset() is kept as part of the state creation
since the core currently calls atomic_create_state in the same
context where the reset hook was called.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Icenowy Zheng <zhengxingda@iscas.ac.cn>
Cc: Jianmin Lv <lvjianmin@loongson.cn>
Cc: Mingcong Bai <jeffbai@aosc.io>
Cc: Qianhai Wu <wuqianhai@loongson.cn>
Cc: Xi Ruoyao <xry111@xry111.site>
---
drivers/gpu/drm/loongson/lsdc_crtc.c | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/loongson/lsdc_crtc.c b/drivers/gpu/drm/loongson/lsdc_crtc.c
index 97a3443739e1..2815366abc14 100644
--- a/drivers/gpu/drm/loongson/lsdc_crtc.c
+++ b/drivers/gpu/drm/loongson/lsdc_crtc.c
@@ -386,23 +386,22 @@ static const struct lsdc_crtc_hw_ops ls7a2000_crtc_hw_ops[2] = {
.get_vblank_counter = lsdc_crtc1_get_vblank_count,
.reset = lsdc_crtc1_reset,
},
};
-static void lsdc_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *lsdc_crtc_create_state(struct drm_crtc *crtc)
{
struct lsdc_crtc_state *priv_crtc_state;
- if (crtc->state)
- crtc->funcs->atomic_destroy_state(crtc, crtc->state);
-
priv_crtc_state = kzalloc_obj(*priv_crtc_state);
if (!priv_crtc_state)
- __drm_atomic_helper_crtc_reset(crtc, NULL);
- else
- __drm_atomic_helper_crtc_reset(crtc, &priv_crtc_state->base);
+ return ERR_PTR(-ENOMEM);
+
+ __drm_atomic_helper_crtc_state_init(&priv_crtc_state->base, crtc);
+
+ return &priv_crtc_state->base;
}
static void lsdc_crtc_atomic_destroy_state(struct drm_crtc *crtc,
struct drm_crtc_state *state)
{
@@ -705,11 +704,11 @@ static void lsdc_crtc_atomic_print_state(struct drm_printer *p,
drm_printf(p, "\tMedium clock multiplier = %u\n", pparms->loopc);
drm_printf(p, "\tOutput clock divider = %u\n", pparms->div_out);
}
static const struct drm_crtc_funcs ls7a1000_crtc_funcs = {
- .reset = lsdc_crtc_reset,
+ .atomic_create_state = lsdc_crtc_create_state,
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = lsdc_crtc_atomic_duplicate_state,
.atomic_destroy_state = lsdc_crtc_atomic_destroy_state,
@@ -719,11 +718,11 @@ static const struct drm_crtc_funcs ls7a1000_crtc_funcs = {
.get_vblank_timestamp = drm_crtc_vblank_helper_get_vblank_timestamp,
.atomic_print_state = lsdc_crtc_atomic_print_state,
};
static const struct drm_crtc_funcs ls7a2000_crtc_funcs = {
- .reset = lsdc_crtc_reset,
+ .atomic_create_state = lsdc_crtc_create_state,
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = lsdc_crtc_atomic_duplicate_state,
.atomic_destroy_state = lsdc_crtc_atomic_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 51/70] drm/loongson: Convert to atomic_create_state
2026-08-21 14:39 ` [PATCH 51/70] drm/loongson: Convert to atomic_create_state Maxime Ripard
@ 2026-08-21 15:35 ` sashiko-bot
0 siblings, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 15:35 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Meaningful code and commit message mismatch regarding hardware reset.
--
--- Patch [51]: [PATCH 51/70] drm/loongson: Convert to atomic_create_state ---
commit 242c1e9da80c08d14806505d193ccb1acbb378d8
Author: Maxime Ripard <mripard@kernel.org>
drm/loongson: Convert to atomic_create_state
This commit converts the drm_crtc_funcs.reset hook to atomic_create_state for the loongson driver. The change is made because the original hook only handled state allocation and initialization without performing a hardware reset.
> The loongsoon crtc implementation provides a custom reset hook. However,
> this hook only allocates the state, initializes it with
> __drm_atomic_helper_crtc_reset(), and frees the previous state. It does
> not perform any hardware reset.
>
> Since the atomic_create_state hook is only meant to deal with state
> allocation and initialization, convert it accordingly. The hardware
> reset through ops->reset() is kept as part of the state creation
> since the core currently calls atomic_create_state in the same
> context where the reset hook was called.
[Severity: Medium]
Is the second paragraph of the commit message accurate for the loongson driver?
The first paragraph correctly notes that the original reset hook "does not
perform any hardware reset", but the second paragraph claims that "The
hardware reset through ops->reset() is kept". Since neither the old code nor
the new lsdc_crtc_create_state() function performs a hardware reset, could
this be a copy-paste error from another patch in the series?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=51
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 52/70] drm/mediatek: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (51 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, AngeloGioacchino Del Regno,
Chun-Kuang Hu, Matthias Brugger, Philipp Zabel
The mediatek crtc implementation provides a custom reset hook.
However, this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Cc: Chun-Kuang Hu <chunkuang.hu@kernel.org>
Cc: Matthias Brugger <matthias.bgg@gmail.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
---
drivers/gpu/drm/mediatek/mtk_crtc.c | 18 ++++++++----------
1 file changed, 8 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/mediatek/mtk_crtc.c b/drivers/gpu/drm/mediatek/mtk_crtc.c
index 8e552cdc3b53..fd4b19efee52 100644
--- a/drivers/gpu/drm/mediatek/mtk_crtc.c
+++ b/drivers/gpu/drm/mediatek/mtk_crtc.c
@@ -148,23 +148,21 @@ static void mtk_crtc_destroy(struct drm_crtc *crtc)
}
drm_crtc_cleanup(crtc);
}
-static void mtk_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *mtk_crtc_create_state(struct drm_crtc *crtc)
{
struct mtk_crtc_state *state;
- if (crtc->state)
- __drm_atomic_helper_crtc_destroy_state(crtc->state);
-
- kfree(to_mtk_crtc_state(crtc->state));
- crtc->state = NULL;
-
state = kzalloc_obj(*state);
- if (state)
- __drm_atomic_helper_crtc_reset(crtc, &state->base);
+ if (!state)
+ return ERR_PTR(-ENOMEM);
+
+ __drm_atomic_helper_crtc_state_init(&state->base, crtc);
+
+ return &state->base;
}
static struct drm_crtc_state *mtk_crtc_duplicate_state(struct drm_crtc *crtc)
{
struct mtk_crtc_state *state;
@@ -884,11 +882,11 @@ static void mtk_crtc_atomic_flush(struct drm_crtc *crtc,
static const struct drm_crtc_funcs mtk_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.destroy = mtk_crtc_destroy,
- .reset = mtk_crtc_reset,
+ .atomic_create_state = mtk_crtc_create_state,
.atomic_duplicate_state = mtk_crtc_duplicate_state,
.atomic_destroy_state = mtk_crtc_destroy_state,
.enable_vblank = mtk_crtc_enable_vblank,
.disable_vblank = mtk_crtc_disable_vblank,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 53/70] drm/mgag200: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (52 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Dave Airlie, Jocelyn Falempe
The mgag200 crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Dave Airlie <airlied@redhat.com>
Cc: Jocelyn Falempe <jfalempe@redhat.com>
---
drivers/gpu/drm/mgag200/mgag200_drv.h | 4 ++--
drivers/gpu/drm/mgag200/mgag200_mode.c | 15 +++++++--------
2 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.h b/drivers/gpu/drm/mgag200/mgag200_drv.h
index 3732c62351bb..bccc70983d28 100644
--- a/drivers/gpu/drm/mgag200/mgag200_drv.h
+++ b/drivers/gpu/drm/mgag200/mgag200_drv.h
@@ -405,19 +405,19 @@ void mgag200_crtc_helper_atomic_disable(struct drm_crtc *crtc, struct drm_atomic
.atomic_check = mgag200_crtc_helper_atomic_check, \
.atomic_flush = mgag200_crtc_helper_atomic_flush, \
.atomic_enable = mgag200_crtc_helper_atomic_enable, \
.atomic_disable = mgag200_crtc_helper_atomic_disable
-void mgag200_crtc_reset(struct drm_crtc *crtc);
+struct drm_crtc_state *mgag200_crtc_atomic_create_state(struct drm_crtc *crtc);
struct drm_crtc_state *mgag200_crtc_atomic_duplicate_state(struct drm_crtc *crtc);
void mgag200_crtc_atomic_destroy_state(struct drm_crtc *crtc, struct drm_crtc_state *crtc_state);
#define MGAG200_CRTC_FUNCS \
- .reset = mgag200_crtc_reset, \
.destroy = drm_crtc_cleanup, \
.set_config = drm_atomic_helper_set_config, \
.page_flip = drm_atomic_helper_page_flip, \
+ .atomic_create_state = mgag200_crtc_atomic_create_state, \
.atomic_duplicate_state = mgag200_crtc_atomic_duplicate_state, \
.atomic_destroy_state = mgag200_crtc_atomic_destroy_state
void mgag200_set_mode_regs(struct mga_device *mdev, const struct drm_display_mode *mode,
bool set_vidrst);
diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
index 7e07fc3f1a60..4e952655e4f5 100644
--- a/drivers/gpu/drm/mgag200/mgag200_mode.c
+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
@@ -677,22 +677,21 @@ void mgag200_crtc_helper_atomic_disable(struct drm_crtc *crtc, struct drm_atomic
struct mga_device *mdev = to_mga_device(crtc->dev);
mgag200_disable_display(mdev);
}
-void mgag200_crtc_reset(struct drm_crtc *crtc)
+struct drm_crtc_state *mgag200_crtc_atomic_create_state(struct drm_crtc *crtc)
{
struct mgag200_crtc_state *mgag200_crtc_state;
- if (crtc->state)
- crtc->funcs->atomic_destroy_state(crtc, crtc->state);
-
mgag200_crtc_state = kzalloc_obj(*mgag200_crtc_state);
- if (mgag200_crtc_state)
- __drm_atomic_helper_crtc_reset(crtc, &mgag200_crtc_state->base);
- else
- __drm_atomic_helper_crtc_reset(crtc, NULL);
+ if (!mgag200_crtc_state)
+ return ERR_PTR(-ENOMEM);
+
+ __drm_atomic_helper_crtc_state_init(&mgag200_crtc_state->base, crtc);
+
+ return &mgag200_crtc_state->base;
}
struct drm_crtc_state *mgag200_crtc_atomic_duplicate_state(struct drm_crtc *crtc)
{
struct drm_crtc_state *crtc_state = crtc->state;
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 54/70] drm/msm: dpu1: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (53 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
2026-08-22 8:14 ` Dmitry Baryshkov
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Abhinav Kumar, Dmitry Baryshkov,
Jessica Zhang, Marijn Suijten, Rob Clark, Sean Paul, freedreno,
linux-arm-msm
The dpu1 crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Abhinav Kumar <abhinav.kumar@linux.dev>
Cc: Dmitry Baryshkov <lumag@kernel.org>
Cc: Jessica Zhang <jesszhan0024@gmail.com>
Cc: Marijn Suijten <marijn.suijten@somainline.org>
Cc: Rob Clark <robin.clark@oss.qualcomm.com>
Cc: Sean Paul <sean@poorly.run>
Cc: freedreno@lists.freedesktop.org
Cc: linux-arm-msm@vger.kernel.org
---
drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
index 42d0a529b4d5..77a2d1f6700d 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
@@ -1138,21 +1138,21 @@ void dpu_crtc_commit_kickoff(struct drm_crtc *crtc)
end:
DPU_ATRACE_END("crtc_commit");
}
-static void dpu_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *dpu_crtc_create_state(struct drm_crtc *crtc)
{
- struct dpu_crtc_state *cstate = kzalloc_obj(*cstate);
+ struct dpu_crtc_state *cstate;
- if (crtc->state)
- dpu_crtc_destroy_state(crtc, crtc->state);
+ cstate = kzalloc_obj(*cstate);
+ if (!cstate)
+ return ERR_PTR(-ENOMEM);
- if (cstate)
- __drm_atomic_helper_crtc_reset(crtc, &cstate->base);
- else
- __drm_atomic_helper_crtc_reset(crtc, NULL);
+ __drm_atomic_helper_crtc_state_init(&cstate->base, crtc);
+
+ return &cstate->base;
}
/**
* dpu_crtc_duplicate_state - state duplicate hook
* @crtc: Pointer to drm crtc structure
@@ -1841,11 +1841,11 @@ static int dpu_crtc_late_register(struct drm_crtc *crtc)
}
static const struct drm_crtc_funcs dpu_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = dpu_crtc_reset,
+ .atomic_create_state = dpu_crtc_create_state,
.atomic_duplicate_state = dpu_crtc_duplicate_state,
.atomic_destroy_state = dpu_crtc_destroy_state,
.atomic_print_state = dpu_crtc_atomic_print_state,
.late_register = dpu_crtc_late_register,
.verify_crc_source = dpu_crtc_verify_crc_source,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 54/70] drm/msm: dpu1: Convert to atomic_create_state
2026-08-21 14:39 ` [PATCH 54/70] drm/msm: dpu1: " Maxime Ripard
@ 2026-08-22 8:14 ` Dmitry Baryshkov
0 siblings, 0 replies; 98+ messages in thread
From: Dmitry Baryshkov @ 2026-08-22 8:14 UTC (permalink / raw)
To: Maxime Ripard
Cc: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter,
dri-devel, Abhinav Kumar, Dmitry Baryshkov, Jessica Zhang,
Marijn Suijten, Rob Clark, Sean Paul, freedreno, linux-arm-msm
On Fri, Aug 21, 2026 at 04:39:30PM +0200, Maxime Ripard wrote:
> The dpu1 crtc implementation provides a custom reset hook. However,
> this hook only allocates the state, initializes it with
> __drm_atomic_helper_crtc_reset(), and frees the previous state. It
> does not perform any hardware reset.
>
> Since this is exactly what the atomic_create_state hook is meant to
> do, minus the old state cleanup which the caller handles, convert the
> implementation to use atomic_create_state with
> __drm_atomic_helper_crtc_state_init() instead.
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
> ---
> Cc: Abhinav Kumar <abhinav.kumar@linux.dev>
> Cc: Dmitry Baryshkov <lumag@kernel.org>
> Cc: Jessica Zhang <jesszhan0024@gmail.com>
> Cc: Marijn Suijten <marijn.suijten@somainline.org>
> Cc: Rob Clark <robin.clark@oss.qualcomm.com>
> Cc: Sean Paul <sean@poorly.run>
> Cc: freedreno@lists.freedesktop.org
> Cc: linux-arm-msm@vger.kernel.org
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 18 +++++++++---------
> 1 file changed, 9 insertions(+), 9 deletions(-)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 55/70] drm/msm: mdp5: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (54 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
2026-08-22 8:47 ` Dmitry Baryshkov
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Abhinav Kumar, Dmitry Baryshkov,
Jessica Zhang, Marijn Suijten, Rob Clark, Sean Paul, freedreno,
linux-arm-msm
The mdp5 crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Abhinav Kumar <abhinav.kumar@linux.dev>
Cc: Dmitry Baryshkov <lumag@kernel.org>
Cc: Jessica Zhang <jesszhan0024@gmail.com>
Cc: Marijn Suijten <marijn.suijten@somainline.org>
Cc: Rob Clark <robin.clark@oss.qualcomm.com>
Cc: Sean Paul <sean@poorly.run>
Cc: freedreno@lists.freedesktop.org
Cc: linux-arm-msm@vger.kernel.org
---
drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
index 4c4a897fc1ee..1e1fff37380c 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
@@ -1126,27 +1126,27 @@ static void mdp5_crtc_destroy_state(struct drm_crtc *crtc, struct drm_crtc_state
__drm_atomic_helper_crtc_destroy_state(state);
kfree(mdp5_cstate);
}
-static void mdp5_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *mdp5_crtc_create_state(struct drm_crtc *crtc)
{
- struct mdp5_crtc_state *mdp5_cstate = kzalloc_obj(*mdp5_cstate);
+ struct mdp5_crtc_state *mdp5_cstate;
- if (crtc->state)
- mdp5_crtc_destroy_state(crtc, crtc->state);
+ mdp5_cstate = kzalloc_obj(*mdp5_cstate);
+ if (!mdp5_cstate)
+ return ERR_PTR(-ENOMEM);
- if (mdp5_cstate)
- __drm_atomic_helper_crtc_reset(crtc, &mdp5_cstate->base);
- else
- __drm_atomic_helper_crtc_reset(crtc, NULL);
+ __drm_atomic_helper_crtc_state_init(&mdp5_cstate->base, crtc);
+
+ return &mdp5_cstate->base;
}
static const struct drm_crtc_funcs mdp5_crtc_no_lm_cursor_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = mdp5_crtc_reset,
+ .atomic_create_state = mdp5_crtc_create_state,
.atomic_duplicate_state = mdp5_crtc_duplicate_state,
.atomic_destroy_state = mdp5_crtc_destroy_state,
.atomic_print_state = mdp5_crtc_atomic_print_state,
.get_vblank_counter = mdp5_crtc_get_vblank_counter,
.enable_vblank = msm_crtc_enable_vblank,
@@ -1155,11 +1155,11 @@ static const struct drm_crtc_funcs mdp5_crtc_no_lm_cursor_funcs = {
};
static const struct drm_crtc_funcs mdp5_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = mdp5_crtc_reset,
+ .atomic_create_state = mdp5_crtc_create_state,
.atomic_duplicate_state = mdp5_crtc_duplicate_state,
.atomic_destroy_state = mdp5_crtc_destroy_state,
.cursor_set = mdp5_crtc_cursor_set,
.cursor_move = mdp5_crtc_cursor_move,
.atomic_print_state = mdp5_crtc_atomic_print_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 55/70] drm/msm: mdp5: Convert to atomic_create_state
2026-08-21 14:39 ` [PATCH 55/70] drm/msm: mdp5: " Maxime Ripard
@ 2026-08-22 8:47 ` Dmitry Baryshkov
0 siblings, 0 replies; 98+ messages in thread
From: Dmitry Baryshkov @ 2026-08-22 8:47 UTC (permalink / raw)
To: Maxime Ripard
Cc: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter,
dri-devel, Abhinav Kumar, Dmitry Baryshkov, Jessica Zhang,
Marijn Suijten, Rob Clark, Sean Paul, freedreno, linux-arm-msm
On Fri, Aug 21, 2026 at 04:39:31PM +0200, Maxime Ripard wrote:
> The mdp5 crtc implementation provides a custom reset hook. However,
> this hook only allocates the state, initializes it with
> __drm_atomic_helper_crtc_reset(), and frees the previous state. It
> does not perform any hardware reset.
>
> Since this is exactly what the atomic_create_state hook is meant to
> do, minus the old state cleanup which the caller handles, convert the
> implementation to use atomic_create_state with
> __drm_atomic_helper_crtc_state_init() instead.
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
> ---
> Cc: Abhinav Kumar <abhinav.kumar@linux.dev>
> Cc: Dmitry Baryshkov <lumag@kernel.org>
> Cc: Jessica Zhang <jesszhan0024@gmail.com>
> Cc: Marijn Suijten <marijn.suijten@somainline.org>
> Cc: Rob Clark <robin.clark@oss.qualcomm.com>
> Cc: Sean Paul <sean@poorly.run>
> Cc: freedreno@lists.freedesktop.org
> Cc: linux-arm-msm@vger.kernel.org
> ---
> drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 20 ++++++++++----------
> 1 file changed, 10 insertions(+), 10 deletions(-)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 56/70] drm/mxsfb: lcdif: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (55 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Fabio Estevam, Frank Li, Marek Vasut,
Pengutronix Kernel Team, Sascha Hauer, Stefan Agner, imx
The lcdif crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Fabio Estevam <festevam@gmail.com>
Cc: Frank Li <Frank.Li@nxp.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Stefan Agner <stefan@agner.ch>
Cc: imx@lists.linux.dev
---
drivers/gpu/drm/mxsfb/lcdif_kms.c | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/mxsfb/lcdif_kms.c b/drivers/gpu/drm/mxsfb/lcdif_kms.c
index 79e0f483ca20..5f0fbec3a390 100644
--- a/drivers/gpu/drm/mxsfb/lcdif_kms.c
+++ b/drivers/gpu/drm/mxsfb/lcdif_kms.c
@@ -594,22 +594,21 @@ static void lcdif_crtc_atomic_destroy_state(struct drm_crtc *crtc,
{
__drm_atomic_helper_crtc_destroy_state(state);
kfree(to_lcdif_crtc_state(state));
}
-static void lcdif_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *lcdif_crtc_create_state(struct drm_crtc *crtc)
{
struct lcdif_crtc_state *state;
- if (crtc->state)
- lcdif_crtc_atomic_destroy_state(crtc, crtc->state);
-
- crtc->state = NULL;
-
state = kzalloc_obj(*state);
- if (state)
- __drm_atomic_helper_crtc_reset(crtc, &state->base);
+ if (!state)
+ return ERR_PTR(-ENOMEM);
+
+ __drm_atomic_helper_crtc_state_init(&state->base, crtc);
+
+ return &state->base;
}
static struct drm_crtc_state *
lcdif_crtc_atomic_duplicate_state(struct drm_crtc *crtc)
{
@@ -657,11 +656,11 @@ static const struct drm_crtc_helper_funcs lcdif_crtc_helper_funcs = {
.atomic_enable = lcdif_crtc_atomic_enable,
.atomic_disable = lcdif_crtc_atomic_disable,
};
static const struct drm_crtc_funcs lcdif_crtc_funcs = {
- .reset = lcdif_crtc_reset,
+ .atomic_create_state = lcdif_crtc_create_state,
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = lcdif_crtc_atomic_duplicate_state,
.atomic_destroy_state = lcdif_crtc_atomic_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 57/70] drm/nouveau: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Danilo Krummrich, Lyude Paul, nouveau
The nouveau nv50 head implementation provides a custom reset hook.
However, this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Lyude Paul <lyude@redhat.com>
Cc: nouveau@lists.freedesktop.org
---
drivers/gpu/drm/nouveau/dispnv50/head.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/dispnv50/head.c b/drivers/gpu/drm/nouveau/dispnv50/head.c
index 1affa0378bd0..6a3a93de0cbf 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/head.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/head.c
@@ -489,22 +489,20 @@ nv50_head_atomic_duplicate_state(struct drm_crtc *crtc)
asyh->clr.mask = 0;
asyh->set.mask = 0;
return &asyh->state;
}
-static void
-nv50_head_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *nv50_head_create_state(struct drm_crtc *crtc)
{
struct nv50_head_atom *asyh;
if (WARN_ON(!(asyh = kzalloc_obj(*asyh))))
- return;
+ return ERR_PTR(-ENOMEM);
- if (crtc->state)
- nv50_head_atomic_destroy_state(crtc, crtc->state);
+ __drm_atomic_helper_crtc_state_init(&asyh->state, crtc);
- __drm_atomic_helper_crtc_reset(crtc, &asyh->state);
+ return &asyh->state;
}
static int
nv50_head_late_register(struct drm_crtc *crtc)
{
@@ -523,11 +521,11 @@ nv50_head_destroy(struct drm_crtc *crtc)
kfree(head);
}
static const struct drm_crtc_funcs
nv50_head_func = {
- .reset = nv50_head_reset,
+ .atomic_create_state = nv50_head_create_state,
.destroy = nv50_head_destroy,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = nv50_head_atomic_duplicate_state,
.atomic_destroy_state = nv50_head_atomic_destroy_state,
@@ -537,11 +535,11 @@ nv50_head_func = {
.late_register = nv50_head_late_register,
};
static const struct drm_crtc_funcs
nvd9_head_func = {
- .reset = nv50_head_reset,
+ .atomic_create_state = nv50_head_create_state,
.destroy = nv50_head_destroy,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = nv50_head_atomic_duplicate_state,
.atomic_destroy_state = nv50_head_atomic_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 57/70] drm/nouveau: Convert to atomic_create_state
@ 2026-08-21 14:39 ` Maxime Ripard
0 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Danilo Krummrich, nouveau
The nouveau nv50 head implementation provides a custom reset hook.
However, this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Lyude Paul <lyude@redhat.com>
Cc: nouveau@lists.freedesktop.org
---
drivers/gpu/drm/nouveau/dispnv50/head.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/dispnv50/head.c b/drivers/gpu/drm/nouveau/dispnv50/head.c
index 1affa0378bd0..6a3a93de0cbf 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/head.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/head.c
@@ -489,22 +489,20 @@ nv50_head_atomic_duplicate_state(struct drm_crtc *crtc)
asyh->clr.mask = 0;
asyh->set.mask = 0;
return &asyh->state;
}
-static void
-nv50_head_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *nv50_head_create_state(struct drm_crtc *crtc)
{
struct nv50_head_atom *asyh;
if (WARN_ON(!(asyh = kzalloc_obj(*asyh))))
- return;
+ return ERR_PTR(-ENOMEM);
- if (crtc->state)
- nv50_head_atomic_destroy_state(crtc, crtc->state);
+ __drm_atomic_helper_crtc_state_init(&asyh->state, crtc);
- __drm_atomic_helper_crtc_reset(crtc, &asyh->state);
+ return &asyh->state;
}
static int
nv50_head_late_register(struct drm_crtc *crtc)
{
@@ -523,11 +521,11 @@ nv50_head_destroy(struct drm_crtc *crtc)
kfree(head);
}
static const struct drm_crtc_funcs
nv50_head_func = {
- .reset = nv50_head_reset,
+ .atomic_create_state = nv50_head_create_state,
.destroy = nv50_head_destroy,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = nv50_head_atomic_duplicate_state,
.atomic_destroy_state = nv50_head_atomic_destroy_state,
@@ -537,11 +535,11 @@ nv50_head_func = {
.late_register = nv50_head_late_register,
};
static const struct drm_crtc_funcs
nvd9_head_func = {
- .reset = nv50_head_reset,
+ .atomic_create_state = nv50_head_create_state,
.destroy = nv50_head_destroy,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = nv50_head_atomic_duplicate_state,
.atomic_destroy_state = nv50_head_atomic_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 57/70] drm/nouveau: Convert to atomic_create_state
2026-08-21 14:39 ` Maxime Ripard
(?)
@ 2026-08-21 20:51 ` lyude
-1 siblings, 0 replies; 98+ messages in thread
From: lyude @ 2026-08-21 20:51 UTC (permalink / raw)
To: Maxime Ripard, Maarten Lankhorst, Thomas Zimmermann, David Airlie,
Simona Vetter
Cc: dri-devel, Danilo Krummrich, nouveau
Reviewed-by: Lyude Paul <lyude@redhat.com>
On Fri, 2026-08-21 at 16:39 +0200, Maxime Ripard wrote:
> The nouveau nv50 head implementation provides a custom reset hook.
> However, this hook only allocates the state, initializes it with
> __drm_atomic_helper_crtc_reset(), and frees the previous state. It
> does not perform any hardware reset.
>
> Since this is exactly what the atomic_create_state hook is meant to
> do, minus the old state cleanup which the caller handles, convert the
> implementation to use atomic_create_state with
> __drm_atomic_helper_crtc_state_init() instead.
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
> ---
> Cc: Danilo Krummrich <dakr@kernel.org>
> Cc: Lyude Paul <lyude@redhat.com>
> Cc: nouveau@lists.freedesktop.org
> ---
> drivers/gpu/drm/nouveau/dispnv50/head.c | 14 ++++++--------
> 1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/nouveau/dispnv50/head.c
> b/drivers/gpu/drm/nouveau/dispnv50/head.c
> index 1affa0378bd0..6a3a93de0cbf 100644
> --- a/drivers/gpu/drm/nouveau/dispnv50/head.c
> +++ b/drivers/gpu/drm/nouveau/dispnv50/head.c
> @@ -489,22 +489,20 @@ nv50_head_atomic_duplicate_state(struct
> drm_crtc *crtc)
> asyh->clr.mask = 0;
> asyh->set.mask = 0;
> return &asyh->state;
> }
>
> -static void
> -nv50_head_reset(struct drm_crtc *crtc)
> +static struct drm_crtc_state *nv50_head_create_state(struct drm_crtc
> *crtc)
> {
> struct nv50_head_atom *asyh;
>
> if (WARN_ON(!(asyh = kzalloc_obj(*asyh))))
> - return;
> + return ERR_PTR(-ENOMEM);
>
> - if (crtc->state)
> - nv50_head_atomic_destroy_state(crtc, crtc->state);
> + __drm_atomic_helper_crtc_state_init(&asyh->state, crtc);
>
> - __drm_atomic_helper_crtc_reset(crtc, &asyh->state);
> + return &asyh->state;
> }
>
> static int
> nv50_head_late_register(struct drm_crtc *crtc)
> {
> @@ -523,11 +521,11 @@ nv50_head_destroy(struct drm_crtc *crtc)
> kfree(head);
> }
>
> static const struct drm_crtc_funcs
> nv50_head_func = {
> - .reset = nv50_head_reset,
> + .atomic_create_state = nv50_head_create_state,
> .destroy = nv50_head_destroy,
> .set_config = drm_atomic_helper_set_config,
> .page_flip = drm_atomic_helper_page_flip,
> .atomic_duplicate_state = nv50_head_atomic_duplicate_state,
> .atomic_destroy_state = nv50_head_atomic_destroy_state,
> @@ -537,11 +535,11 @@ nv50_head_func = {
> .late_register = nv50_head_late_register,
> };
>
> static const struct drm_crtc_funcs
> nvd9_head_func = {
> - .reset = nv50_head_reset,
> + .atomic_create_state = nv50_head_create_state,
> .destroy = nv50_head_destroy,
> .set_config = drm_atomic_helper_set_config,
> .page_flip = drm_atomic_helper_page_flip,
> .atomic_duplicate_state = nv50_head_atomic_duplicate_state,
> .atomic_destroy_state = nv50_head_atomic_destroy_state,
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 58/70] drm/omapdrm: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (57 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Tomi Valkeinen
The omap crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/omapdrm/omap_crtc.c | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
index c1b41e010a00..a9f6a76ebb5e 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -705,22 +705,21 @@ static int omap_crtc_atomic_get_property(struct drm_crtc *crtc,
return -EINVAL;
return 0;
}
-static void omap_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *omap_crtc_create_state(struct drm_crtc *crtc)
{
struct omap_crtc_state *state;
- if (crtc->state)
- __drm_atomic_helper_crtc_destroy_state(crtc->state);
-
- kfree(crtc->state);
-
state = kzalloc_obj(*state);
- if (state)
- __drm_atomic_helper_crtc_reset(crtc, &state->base);
+ if (!state)
+ return ERR_PTR(-ENOMEM);
+
+ __drm_atomic_helper_crtc_state_init(&state->base, crtc);
+
+ return &state->base;
}
static struct drm_crtc_state *
omap_crtc_duplicate_state(struct drm_crtc *crtc)
{
@@ -743,11 +742,11 @@ omap_crtc_duplicate_state(struct drm_crtc *crtc)
return &state->base;
}
static const struct drm_crtc_funcs omap_crtc_funcs = {
- .reset = omap_crtc_reset,
+ .atomic_create_state = omap_crtc_create_state,
.set_config = drm_atomic_helper_set_config,
.destroy = omap_crtc_destroy,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = omap_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 59/70] drm/rcar-du: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (58 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Geert Uytterhoeven, Kieran Bingham,
Laurent Pinchart, Magnus Damm, Tomi Valkeinen, linux-renesas-soc
The rcar-du crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), sets driver-specific default values
for the CRC source and index, and frees the previous state. It does
not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Cc: Magnus Damm <magnus.damm@gmail.com>
Cc: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>
Cc: linux-renesas-soc@vger.kernel.org
---
drivers/gpu/drm/renesas/rcar-du/rcar_du_crtc.c | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/renesas/rcar-du/rcar_du_crtc.c
index 6c07c406f725..59c2a4b76137 100644
--- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_crtc.c
+++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_crtc.c
@@ -995,27 +995,24 @@ static void rcar_du_crtc_cleanup(struct drm_crtc *crtc)
rcar_du_crtc_crc_cleanup(rcrtc);
drm_crtc_cleanup(crtc);
}
-static void rcar_du_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *rcar_du_crtc_create_state(struct drm_crtc *crtc)
{
struct rcar_du_crtc_state *state;
- if (crtc->state) {
- rcar_du_crtc_atomic_destroy_state(crtc, crtc->state);
- crtc->state = NULL;
- }
-
state = kzalloc_obj(*state);
if (state == NULL)
- return;
+ return ERR_PTR(-ENOMEM);
state->crc.source = VSP1_DU_CRC_NONE;
state->crc.index = 0;
- __drm_atomic_helper_crtc_reset(crtc, &state->state);
+ __drm_atomic_helper_crtc_state_init(&state->state, crtc);
+
+ return &state->state;
}
static int rcar_du_crtc_enable_vblank(struct drm_crtc *crtc)
{
struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
@@ -1153,22 +1150,22 @@ static int rcar_du_crtc_set_crc_source(struct drm_crtc *crtc,
return ret;
}
static const struct drm_crtc_funcs crtc_funcs_gen2 = {
- .reset = rcar_du_crtc_reset,
+ .atomic_create_state = rcar_du_crtc_create_state,
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = rcar_du_crtc_atomic_duplicate_state,
.atomic_destroy_state = rcar_du_crtc_atomic_destroy_state,
.enable_vblank = rcar_du_crtc_enable_vblank,
.disable_vblank = rcar_du_crtc_disable_vblank,
};
static const struct drm_crtc_funcs crtc_funcs_gen3 = {
- .reset = rcar_du_crtc_reset,
+ .atomic_create_state = rcar_du_crtc_create_state,
.destroy = rcar_du_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = rcar_du_crtc_atomic_duplicate_state,
.atomic_destroy_state = rcar_du_crtc_atomic_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 60/70] drm/rzg2l-du: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (59 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Biju Das, linux-renesas-soc
The rzg2l-du crtc implementation provides a custom reset hook.
However, this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Biju Das <biju.das.jz@bp.renesas.com>
Cc: linux-renesas-soc@vger.kernel.org
---
drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c
index d0f01aa642a7..ab2f24cc7683 100644
--- a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c
+++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c
@@ -330,24 +330,21 @@ static void rzg2l_du_crtc_atomic_destroy_state(struct drm_crtc *crtc,
{
__drm_atomic_helper_crtc_destroy_state(state);
kfree(to_rzg2l_crtc_state(state));
}
-static void rzg2l_du_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *rzg2l_du_crtc_create_state(struct drm_crtc *crtc)
{
struct rzg2l_du_crtc_state *state;
- if (crtc->state) {
- rzg2l_du_crtc_atomic_destroy_state(crtc, crtc->state);
- crtc->state = NULL;
- }
-
state = kzalloc_obj(*state);
if (!state)
- return;
+ return ERR_PTR(-ENOMEM);
- __drm_atomic_helper_crtc_reset(crtc, &state->state);
+ __drm_atomic_helper_crtc_state_init(&state->state, crtc);
+
+ return &state->state;
}
static int rzg2l_du_crtc_enable_vblank(struct drm_crtc *crtc)
{
struct rzg2l_du_crtc *rcrtc = to_rzg2l_crtc(crtc);
@@ -363,11 +360,11 @@ static void rzg2l_du_crtc_disable_vblank(struct drm_crtc *crtc)
rcrtc->vblank_enable = false;
}
static const struct drm_crtc_funcs crtc_funcs_rz = {
- .reset = rzg2l_du_crtc_reset,
+ .atomic_create_state = rzg2l_du_crtc_create_state,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = rzg2l_du_crtc_atomic_duplicate_state,
.atomic_destroy_state = rzg2l_du_crtc_atomic_destroy_state,
.enable_vblank = rzg2l_du_crtc_enable_vblank,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 61/70] drm/rockchip: vop: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Heiko Stübner, Andy Yan,
Sandy Huang, linux-rockchip
The rockchip vop crtc implementation provides a custom reset hook.
However, this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Andy Yan <andy.yan@rock-chips.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: linux-rockchip@lists.infradead.org
---
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index 0090d8ff0c79..bd02597dc2d7 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -1654,21 +1654,21 @@ static void vop_crtc_destroy_state(struct drm_crtc *crtc,
__drm_atomic_helper_crtc_destroy_state(&s->base);
kfree(s);
}
-static void vop_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *vop_crtc_create_state(struct drm_crtc *crtc)
{
- struct rockchip_crtc_state *crtc_state = kzalloc_obj(*crtc_state);
+ struct rockchip_crtc_state *crtc_state;
- if (crtc->state)
- vop_crtc_destroy_state(crtc, crtc->state);
+ crtc_state = kzalloc_obj(*crtc_state);
+ if (!crtc_state)
+ return ERR_PTR(-ENOMEM);
- if (crtc_state)
- __drm_atomic_helper_crtc_reset(crtc, &crtc_state->base);
- else
- __drm_atomic_helper_crtc_reset(crtc, NULL);
+ __drm_atomic_helper_crtc_state_init(&crtc_state->base, crtc);
+
+ return &crtc_state->base;
}
#ifdef CONFIG_DRM_ANALOGIX_DP
static struct drm_connector *vop_get_edp_connector(struct vop *vop)
{
@@ -1736,11 +1736,11 @@ vop_crtc_verify_crc_source(struct drm_crtc *crtc, const char *source_name,
static const struct drm_crtc_funcs vop_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.destroy = drm_crtc_cleanup,
- .reset = vop_crtc_reset,
+ .atomic_create_state = vop_crtc_create_state,
.atomic_duplicate_state = vop_crtc_duplicate_state,
.atomic_destroy_state = vop_crtc_destroy_state,
.enable_vblank = vop_crtc_enable_vblank,
.disable_vblank = vop_crtc_disable_vblank,
.set_crc_source = vop_crtc_set_crc_source,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 61/70] drm/rockchip: vop: Convert to atomic_create_state
@ 2026-08-21 14:39 ` Maxime Ripard
0 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Heiko Stübner, Andy Yan,
Sandy Huang, linux-rockchip
The rockchip vop crtc implementation provides a custom reset hook.
However, this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Andy Yan <andy.yan@rock-chips.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: linux-rockchip@lists.infradead.org
---
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index 0090d8ff0c79..bd02597dc2d7 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -1654,21 +1654,21 @@ static void vop_crtc_destroy_state(struct drm_crtc *crtc,
__drm_atomic_helper_crtc_destroy_state(&s->base);
kfree(s);
}
-static void vop_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *vop_crtc_create_state(struct drm_crtc *crtc)
{
- struct rockchip_crtc_state *crtc_state = kzalloc_obj(*crtc_state);
+ struct rockchip_crtc_state *crtc_state;
- if (crtc->state)
- vop_crtc_destroy_state(crtc, crtc->state);
+ crtc_state = kzalloc_obj(*crtc_state);
+ if (!crtc_state)
+ return ERR_PTR(-ENOMEM);
- if (crtc_state)
- __drm_atomic_helper_crtc_reset(crtc, &crtc_state->base);
- else
- __drm_atomic_helper_crtc_reset(crtc, NULL);
+ __drm_atomic_helper_crtc_state_init(&crtc_state->base, crtc);
+
+ return &crtc_state->base;
}
#ifdef CONFIG_DRM_ANALOGIX_DP
static struct drm_connector *vop_get_edp_connector(struct vop *vop)
{
@@ -1736,11 +1736,11 @@ vop_crtc_verify_crc_source(struct drm_crtc *crtc, const char *source_name,
static const struct drm_crtc_funcs vop_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.destroy = drm_crtc_cleanup,
- .reset = vop_crtc_reset,
+ .atomic_create_state = vop_crtc_create_state,
.atomic_duplicate_state = vop_crtc_duplicate_state,
.atomic_destroy_state = vop_crtc_destroy_state,
.enable_vblank = vop_crtc_enable_vblank,
.disable_vblank = vop_crtc_disable_vblank,
.set_crc_source = vop_crtc_set_crc_source,
--
2.55.0
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 98+ messages in thread
* [PATCH 62/70] drm/rockchip: vop2: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Heiko Stübner, Andy Yan,
Sandy Huang, linux-rockchip
The rockchip vop2 crtc implementation provides a custom reset hook.
However, this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Andy Yan <andy.yan@rock-chips.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: linux-rockchip@lists.infradead.org
---
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
index 4cce3e336f5b..b2f3a579bbe5 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
@@ -2298,28 +2298,28 @@ static void vop2_crtc_destroy_state(struct drm_crtc *crtc,
__drm_atomic_helper_crtc_destroy_state(&vcstate->base);
kfree(vcstate);
}
-static void vop2_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *vop2_crtc_create_state(struct drm_crtc *crtc)
{
- struct rockchip_crtc_state *vcstate = kzalloc_obj(*vcstate);
+ struct rockchip_crtc_state *vcstate;
- if (crtc->state)
- vop2_crtc_destroy_state(crtc, crtc->state);
+ vcstate = kzalloc_obj(*vcstate);
+ if (!vcstate)
+ return ERR_PTR(-ENOMEM);
- if (vcstate)
- __drm_atomic_helper_crtc_reset(crtc, &vcstate->base);
- else
- __drm_atomic_helper_crtc_reset(crtc, NULL);
+ __drm_atomic_helper_crtc_state_init(&vcstate->base, crtc);
+
+ return &vcstate->base;
}
static const struct drm_crtc_funcs vop2_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.destroy = drm_crtc_cleanup,
- .reset = vop2_crtc_reset,
+ .atomic_create_state = vop2_crtc_create_state,
.atomic_duplicate_state = vop2_crtc_duplicate_state,
.atomic_destroy_state = vop2_crtc_destroy_state,
.enable_vblank = vop2_crtc_enable_vblank,
.disable_vblank = vop2_crtc_disable_vblank,
.late_register = vop2_crtc_late_register,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 62/70] drm/rockchip: vop2: Convert to atomic_create_state
@ 2026-08-21 14:39 ` Maxime Ripard
0 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Heiko Stübner, Andy Yan,
Sandy Huang, linux-rockchip
The rockchip vop2 crtc implementation provides a custom reset hook.
However, this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Andy Yan <andy.yan@rock-chips.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: linux-rockchip@lists.infradead.org
---
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
index 4cce3e336f5b..b2f3a579bbe5 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
@@ -2298,28 +2298,28 @@ static void vop2_crtc_destroy_state(struct drm_crtc *crtc,
__drm_atomic_helper_crtc_destroy_state(&vcstate->base);
kfree(vcstate);
}
-static void vop2_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *vop2_crtc_create_state(struct drm_crtc *crtc)
{
- struct rockchip_crtc_state *vcstate = kzalloc_obj(*vcstate);
+ struct rockchip_crtc_state *vcstate;
- if (crtc->state)
- vop2_crtc_destroy_state(crtc, crtc->state);
+ vcstate = kzalloc_obj(*vcstate);
+ if (!vcstate)
+ return ERR_PTR(-ENOMEM);
- if (vcstate)
- __drm_atomic_helper_crtc_reset(crtc, &vcstate->base);
- else
- __drm_atomic_helper_crtc_reset(crtc, NULL);
+ __drm_atomic_helper_crtc_state_init(&vcstate->base, crtc);
+
+ return &vcstate->base;
}
static const struct drm_crtc_funcs vop2_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.destroy = drm_crtc_cleanup,
- .reset = vop2_crtc_reset,
+ .atomic_create_state = vop2_crtc_create_state,
.atomic_duplicate_state = vop2_crtc_duplicate_state,
.atomic_destroy_state = vop2_crtc_destroy_state,
.enable_vblank = vop2_crtc_enable_vblank,
.disable_vblank = vop2_crtc_disable_vblank,
.late_register = vop2_crtc_late_register,
--
2.55.0
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 98+ messages in thread
* [PATCH 63/70] drm/sitronix: st7920: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (62 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
2026-08-21 15:41 ` sashiko-bot
-1 siblings, 1 reply; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Iker Pedrosa
The st7920 crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Iker Pedrosa <ikerpedrosam@gmail.com>
---
drivers/gpu/drm/sitronix/st7920.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/sitronix/st7920.c b/drivers/gpu/drm/sitronix/st7920.c
index d320391801f3..debbdb55fdc1 100644
--- a/drivers/gpu/drm/sitronix/st7920.c
+++ b/drivers/gpu/drm/sitronix/st7920.c
@@ -573,21 +573,23 @@ static void st7920_crtc_atomic_disable(struct drm_crtc *crtc,
drm_dev_exit(idx);
}
/* Called during init to allocate the CRTC's atomic state. */
-static void st7920_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *st7920_crtc_create_state(struct drm_crtc *crtc)
{
struct st7920_crtc_state *st7920_state;
drm_WARN_ON_ONCE(crtc->dev, crtc->state);
st7920_state = kzalloc_obj(*st7920_state);
if (!st7920_state)
- return;
+ return ERR_PTR(-ENOMEM);
- __drm_atomic_helper_crtc_reset(crtc, &st7920_state->base);
+ __drm_atomic_helper_crtc_state_init(&st7920_state->base, crtc);
+
+ return &st7920_state->base;
}
static struct drm_crtc_state *st7920_crtc_duplicate_state(struct drm_crtc *crtc)
{
struct st7920_crtc_state *st7920_state;
@@ -627,11 +629,11 @@ static const struct drm_crtc_helper_funcs st7920_crtc_helper_funcs = {
.atomic_enable = st7920_crtc_atomic_enable,
.atomic_disable = st7920_crtc_atomic_disable,
};
static const struct drm_crtc_funcs st7920_crtc_funcs = {
- .reset = st7920_crtc_reset,
+ .atomic_create_state = st7920_crtc_create_state,
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = st7920_crtc_duplicate_state,
.atomic_destroy_state = st7920_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 63/70] drm/sitronix: st7920: Convert to atomic_create_state
2026-08-21 14:39 ` [PATCH 63/70] drm/sitronix: st7920: " Maxime Ripard
@ 2026-08-21 15:41 ` sashiko-bot
0 siblings, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 15:41 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The commit message falsely claims that the old `st7920_crtc_reset` freed the previous state.
--
--- Patch [63]: [PATCH 63/70] drm/sitronix: st7920: Convert to atomic_create_state ---
commit 51126b7e2261e0176cf52ba6e5a5273dcbb0592e
Author: Maxime Ripard <mripard@kernel.org>
drm/sitronix: st7920: Convert to atomic_create_state
This commit converts the st7920 CRTC implementation to use the
atomic_create_state hook rather than a custom reset hook.
> The st7920 crtc implementation provides a custom reset hook. However,
> this hook only allocates the state, initializes it with
> __drm_atomic_helper_crtc_reset(), and frees the previous state. It
> does not perform any hardware reset.
[Severity: Medium]
Is this description accurate regarding the previous state being freed?
Looking at the original st7920_crtc_reset() implementation before this
patch, it warns if crtc->state is non-NULL but does not appear to free
the old state memory:
drm_WARN_ON_ONCE(crtc->dev, crtc->state);
st7920_state = kzalloc_obj(*st7920_state);
if (!st7920_state)
return;
__drm_atomic_helper_crtc_reset(crtc, &st7920_state->base);
Could the commit message be updated to clarify that the old hook was not
actually freeing the previous state?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=63
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 64/70] drm/solomon: ssd130x: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (63 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Javier Martinez Canillas
The ssd130x crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Javier Martinez Canillas <javierm@redhat.com>
---
drivers/gpu/drm/solomon/ssd130x.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c
index 0b0fc6fe3df2..ff112d8094c3 100644
--- a/drivers/gpu/drm/solomon/ssd130x.c
+++ b/drivers/gpu/drm/solomon/ssd130x.c
@@ -1465,21 +1465,23 @@ static int ssd133x_crtc_atomic_check(struct drm_crtc *crtc,
return 0;
}
/* Called during init to allocate the CRTC's atomic state. */
-static void ssd130x_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *ssd130x_crtc_create_state(struct drm_crtc *crtc)
{
struct ssd130x_crtc_state *ssd130x_state;
drm_WARN_ON_ONCE(crtc->dev, crtc->state);
ssd130x_state = kzalloc_obj(*ssd130x_state);
if (!ssd130x_state)
- return;
+ return ERR_PTR(-ENOMEM);
- __drm_atomic_helper_crtc_reset(crtc, &ssd130x_state->base);
+ __drm_atomic_helper_crtc_state_init(&ssd130x_state->base, crtc);
+
+ return &ssd130x_state->base;
}
static struct drm_crtc_state *ssd130x_crtc_duplicate_state(struct drm_crtc *crtc)
{
struct ssd130x_crtc_state *old_ssd130x_state;
@@ -1532,11 +1534,11 @@ static const struct drm_crtc_helper_funcs ssd130x_crtc_helper_funcs[] = {
.atomic_check = ssd133x_crtc_atomic_check,
},
};
static const struct drm_crtc_funcs ssd130x_crtc_funcs = {
- .reset = ssd130x_crtc_reset,
+ .atomic_create_state = ssd130x_crtc_create_state,
.destroy = drm_crtc_cleanup,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = ssd130x_crtc_duplicate_state,
.atomic_destroy_state = ssd130x_crtc_destroy_state,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 65/70] drm/tegra: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (64 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Jonathan Hunter, Mikko Perttunen,
Thierry Reding, linux-tegra
The tegra crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Jonathan Hunter <jonathanh@nvidia.com>
Cc: Mikko Perttunen <mperttunen@nvidia.com>
Cc: Thierry Reding <thierry.reding@kernel.org>
Cc: linux-tegra@vger.kernel.org
---
drivers/gpu/drm/tegra/dc.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
index 0b3fcc7011b3..6acf49f69903 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
@@ -1484,21 +1484,21 @@ static struct drm_plane *tegra_dc_add_planes(struct drm_device *drm,
static void tegra_dc_destroy(struct drm_crtc *crtc)
{
drm_crtc_cleanup(crtc);
}
-static void tegra_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *tegra_crtc_create_state(struct drm_crtc *crtc)
{
- struct tegra_dc_state *state = kzalloc_obj(*state);
+ struct tegra_dc_state *state;
- if (crtc->state)
- tegra_crtc_atomic_destroy_state(crtc, crtc->state);
+ state = kzalloc_obj(*state);
+ if (!state)
+ return ERR_PTR(-ENOMEM);
- if (state)
- __drm_atomic_helper_crtc_reset(crtc, &state->base);
- else
- __drm_atomic_helper_crtc_reset(crtc, NULL);
+ __drm_atomic_helper_crtc_state_init(&state->base, crtc);
+
+ return &state->base;
}
static struct drm_crtc_state *
tegra_crtc_atomic_duplicate_state(struct drm_crtc *crtc)
{
@@ -1903,11 +1903,11 @@ static void tegra_dc_disable_vblank(struct drm_crtc *crtc)
static const struct drm_crtc_funcs tegra_crtc_funcs = {
.page_flip = drm_atomic_helper_page_flip,
.set_config = drm_atomic_helper_set_config,
.destroy = tegra_dc_destroy,
- .reset = tegra_crtc_reset,
+ .atomic_create_state = tegra_crtc_create_state,
.atomic_duplicate_state = tegra_crtc_atomic_duplicate_state,
.atomic_destroy_state = tegra_crtc_atomic_destroy_state,
.late_register = tegra_dc_late_register,
.early_unregister = tegra_dc_early_unregister,
.get_vblank_counter = tegra_dc_get_vblank_counter,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 66/70] drm/vc4: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (65 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Maíra Canal, Dave Stevenson,
Raspberry Pi Kernel Maintenance
The vc4 crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), sets the assigned_channel field to
VC4_HVS_CHANNEL_DISABLED, and frees the previous state. It does not
perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: "Maíra Canal" <mcanal@igalia.com>
Cc: Dave Stevenson <dave.stevenson@raspberrypi.com>
Cc: Raspberry Pi Kernel Maintenance <kernel-list@raspberrypi.com>
---
drivers/gpu/drm/vc4/tests/vc4_mock_crtc.c | 2 +-
drivers/gpu/drm/vc4/vc4_crtc.c | 14 ++++++--------
drivers/gpu/drm/vc4/vc4_drv.h | 2 +-
drivers/gpu/drm/vc4/vc4_txp.c | 2 +-
4 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/vc4/tests/vc4_mock_crtc.c b/drivers/gpu/drm/vc4/tests/vc4_mock_crtc.c
index ade3309ae042..247863f8e2c5 100644
--- a/drivers/gpu/drm/vc4/tests/vc4_mock_crtc.c
+++ b/drivers/gpu/drm/vc4/tests/vc4_mock_crtc.c
@@ -12,11 +12,11 @@ static const struct drm_crtc_helper_funcs vc4_dummy_crtc_helper_funcs = {
};
static const struct drm_crtc_funcs vc4_dummy_crtc_funcs = {
.atomic_destroy_state = vc4_crtc_destroy_state,
.atomic_duplicate_state = vc4_crtc_duplicate_state,
- .reset = vc4_crtc_reset,
+ .atomic_create_state = vc4_crtc_create_state,
};
struct vc4_dummy_crtc *vc4_mock_pv(struct kunit *test,
struct drm_device *drm,
struct drm_plane *plane,
diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
index 4572b0b9bae1..f42cd5353230 100644
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
@@ -1133,25 +1133,23 @@ void vc4_crtc_destroy_state(struct drm_crtc *crtc,
}
drm_atomic_helper_crtc_destroy_state(crtc, state);
}
-void vc4_crtc_reset(struct drm_crtc *crtc)
+struct drm_crtc_state *vc4_crtc_create_state(struct drm_crtc *crtc)
{
struct vc4_crtc_state *vc4_crtc_state;
- if (crtc->state)
- vc4_crtc_destroy_state(crtc, crtc->state);
-
vc4_crtc_state = kzalloc_obj(*vc4_crtc_state);
if (!vc4_crtc_state) {
- crtc->state = NULL;
- return;
+ return ERR_PTR(-ENOMEM);
}
vc4_crtc_state->assigned_channel = VC4_HVS_CHANNEL_DISABLED;
- __drm_atomic_helper_crtc_reset(crtc, &vc4_crtc_state->base);
+ __drm_atomic_helper_crtc_state_init(&vc4_crtc_state->base, crtc);
+
+ return &vc4_crtc_state->base;
}
int vc4_crtc_late_register(struct drm_crtc *crtc)
{
struct drm_device *drm = crtc->dev;
@@ -1168,11 +1166,11 @@ static const struct drm_crtc_funcs vc4_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = vc4_page_flip,
.set_property = NULL,
.cursor_set = NULL, /* handled by drm_mode_cursor_universal */
.cursor_move = NULL, /* handled by drm_mode_cursor_universal */
- .reset = vc4_crtc_reset,
+ .atomic_create_state = vc4_crtc_create_state,
.atomic_duplicate_state = vc4_crtc_duplicate_state,
.atomic_destroy_state = vc4_crtc_destroy_state,
.enable_vblank = vc4_enable_vblank,
.disable_vblank = vc4_disable_vblank,
.get_vblank_timestamp = drm_crtc_vblank_helper_get_vblank_timestamp,
diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
index 0f5958c1e6b6..649032174dbd 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.h
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
@@ -947,11 +947,11 @@ int vc4_page_flip(struct drm_crtc *crtc,
int vc4_crtc_atomic_check(struct drm_crtc *crtc,
struct drm_atomic_commit *state);
struct drm_crtc_state *vc4_crtc_duplicate_state(struct drm_crtc *crtc);
void vc4_crtc_destroy_state(struct drm_crtc *crtc,
struct drm_crtc_state *state);
-void vc4_crtc_reset(struct drm_crtc *crtc);
+struct drm_crtc_state *vc4_crtc_create_state(struct drm_crtc *crtc);
void vc4_crtc_handle_vblank(struct vc4_crtc *crtc);
void vc4_crtc_send_vblank(struct drm_crtc *crtc);
int vc4_crtc_late_register(struct drm_crtc *crtc);
void vc4_crtc_get_margins(struct drm_crtc_state *state,
unsigned int *left, unsigned int *right,
diff --git a/drivers/gpu/drm/vc4/vc4_txp.c b/drivers/gpu/drm/vc4/vc4_txp.c
index bc3f366fc3e6..c469f8b1068b 100644
--- a/drivers/gpu/drm/vc4/vc4_txp.c
+++ b/drivers/gpu/drm/vc4/vc4_txp.c
@@ -423,11 +423,11 @@ static int vc4_txp_enable_vblank(struct drm_crtc *crtc)
static void vc4_txp_disable_vblank(struct drm_crtc *crtc) {}
static const struct drm_crtc_funcs vc4_txp_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = vc4_page_flip,
- .reset = vc4_crtc_reset,
+ .atomic_create_state = vc4_crtc_create_state,
.atomic_duplicate_state = vc4_crtc_duplicate_state,
.atomic_destroy_state = vc4_crtc_destroy_state,
.enable_vblank = vc4_txp_enable_vblank,
.disable_vblank = vc4_txp_disable_vblank,
.late_register = vc4_crtc_late_register,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 67/70] drm/vkms: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (66 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Haneen Mohammed, Louis Chauvet,
Melissa Wen
The vkms crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), initializes the composer work
struct, and frees the previous state. It does not perform any hardware
reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Haneen Mohammed <hamohammed.sa@gmail.com>
Cc: Louis Chauvet <louis.chauvet@bootlin.com>
Cc: Melissa Wen <melissa.srw@gmail.com>
---
drivers/gpu/drm/vkms/vkms_crtc.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c
index 079abfba427d..fe17f49305a9 100644
--- a/drivers/gpu/drm/vkms/vkms_crtc.c
+++ b/drivers/gpu/drm/vkms/vkms_crtc.c
@@ -84,26 +84,28 @@ static void vkms_atomic_crtc_destroy_state(struct drm_crtc *crtc,
WARN_ON(work_pending(&vkms_state->composer_work));
kfree(vkms_state->active_planes);
kfree(vkms_state);
}
-static void vkms_atomic_crtc_reset(struct drm_crtc *crtc)
+static struct drm_crtc_state *vkms_atomic_crtc_create_state(struct drm_crtc *crtc)
{
- struct vkms_crtc_state *vkms_state = kzalloc_obj(*vkms_state);
+ struct vkms_crtc_state *vkms_state;
- if (crtc->state)
- vkms_atomic_crtc_destroy_state(crtc, crtc->state);
+ vkms_state = kzalloc_obj(*vkms_state);
+ if (!vkms_state)
+ return ERR_PTR(-ENOMEM);
- __drm_atomic_helper_crtc_reset(crtc, &vkms_state->base);
- if (vkms_state)
- INIT_WORK(&vkms_state->composer_work, vkms_composer_worker);
+ __drm_atomic_helper_crtc_state_init(&vkms_state->base, crtc);
+ INIT_WORK(&vkms_state->composer_work, vkms_composer_worker);
+
+ return &vkms_state->base;
}
static const struct drm_crtc_funcs vkms_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
- .reset = vkms_atomic_crtc_reset,
+ .atomic_create_state = vkms_atomic_crtc_create_state,
.atomic_duplicate_state = vkms_atomic_crtc_duplicate_state,
.atomic_destroy_state = vkms_atomic_crtc_destroy_state,
DRM_CRTC_VBLANK_TIMER_FUNCS,
.get_crc_sources = vkms_get_crc_sources,
.set_crc_source = vkms_set_crc_source,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 68/70] drm/vmwgfx: Convert to atomic_create_state
2026-08-21 14:38 ` Maxime Ripard
` (67 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
-1 siblings, 0 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Broadcom internal kernel review list,
Zack Rusin
The vmwgfx crtc implementation provides a custom reset hook. However,
this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
Cc: Zack Rusin <zack.rusin@broadcom.com>
---
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 22 +++++++---------------
drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 2 +-
drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 2 +-
drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 2 +-
drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 2 +-
5 files changed, 11 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index 1b407b61f683..0b470809661c 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -204,36 +204,28 @@ vmw_du_crtc_duplicate_state(struct drm_crtc *crtc)
return state;
}
/**
- * vmw_du_crtc_reset - creates a blank vmw crtc state
+ * vmw_du_crtc_create_state - creates a blank vmw crtc state
* @crtc: DRM crtc
*
- * Resets the atomic state for @crtc by freeing the state pointer (which
- * might be NULL, e.g. at driver load time) and allocating a new empty state
- * object.
+ * Allocates a new empty state object for @crtc.
*/
-void vmw_du_crtc_reset(struct drm_crtc *crtc)
+struct drm_crtc_state *vmw_du_crtc_create_state(struct drm_crtc *crtc)
{
struct vmw_crtc_state *vcs;
-
- if (crtc->state) {
- __drm_atomic_helper_crtc_destroy_state(crtc->state);
-
- kfree(vmw_crtc_state_to_vcs(crtc->state));
- }
-
vcs = kzalloc_obj(*vcs);
-
if (!vcs) {
DRM_ERROR("Cannot allocate vmw_crtc_state\n");
- return;
+ return ERR_PTR(-ENOMEM);
}
- __drm_atomic_helper_crtc_reset(crtc, &vcs->base);
+ __drm_atomic_helper_crtc_state_init(&vcs->base, crtc);
+
+ return &vcs->base;
}
/**
* vmw_du_crtc_destroy_state - destroy crtc state
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
index 2224d7d91d1b..e641f33341e6 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
@@ -419,11 +419,11 @@ void vmw_du_plane_unpin_surf(struct vmw_plane_state *vps);
int vmw_du_crtc_atomic_check(struct drm_crtc *crtc,
struct drm_atomic_commit *state);
void vmw_du_crtc_atomic_begin(struct drm_crtc *crtc,
struct drm_atomic_commit *state);
-void vmw_du_crtc_reset(struct drm_crtc *crtc);
+struct drm_crtc_state *vmw_du_crtc_create_state(struct drm_crtc *crtc);
struct drm_crtc_state *vmw_du_crtc_duplicate_state(struct drm_crtc *crtc);
void vmw_du_crtc_destroy_state(struct drm_crtc *crtc,
struct drm_crtc_state *state);
void vmw_du_connector_reset(struct drm_connector *connector);
struct drm_connector_state *
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
index af3e32174563..a4b28341f622 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
@@ -247,11 +247,11 @@ static void vmw_ldu_crtc_mode_set_nofb(struct drm_crtc *crtc)
}
static const struct drm_crtc_funcs vmw_legacy_crtc_funcs = {
.gamma_set = vmw_du_crtc_gamma_set,
.destroy = vmw_ldu_crtc_destroy,
- .reset = vmw_du_crtc_reset,
+ .atomic_create_state = vmw_du_crtc_create_state,
.atomic_duplicate_state = vmw_du_crtc_duplicate_state,
.atomic_destroy_state = vmw_du_crtc_destroy_state,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.enable_vblank = vmw_vkms_enable_vblank,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
index c83061cf7455..a05f935f1841 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
@@ -303,11 +303,11 @@ static void vmw_sou_crtc_atomic_disable(struct drm_crtc *crtc,
}
static const struct drm_crtc_funcs vmw_screen_object_crtc_funcs = {
.gamma_set = vmw_du_crtc_gamma_set,
.destroy = vmw_sou_crtc_destroy,
- .reset = vmw_du_crtc_reset,
+ .atomic_create_state = vmw_du_crtc_create_state,
.atomic_duplicate_state = vmw_du_crtc_duplicate_state,
.atomic_destroy_state = vmw_du_crtc_destroy_state,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.enable_vblank = vmw_vkms_enable_vblank,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
index 4139837f4caf..939da0e11dbb 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
@@ -776,11 +776,11 @@ int vmw_kms_stdu_surface_dirty(struct vmw_private *dev_priv,
* Screen Target CRTC dispatch table
*/
static const struct drm_crtc_funcs vmw_stdu_crtc_funcs = {
.gamma_set = vmw_du_crtc_gamma_set,
.destroy = vmw_stdu_crtc_destroy,
- .reset = vmw_du_crtc_reset,
+ .atomic_create_state = vmw_du_crtc_create_state,
.atomic_duplicate_state = vmw_du_crtc_duplicate_state,
.atomic_destroy_state = vmw_du_crtc_destroy_state,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.enable_vblank = vmw_vkms_enable_vblank,
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* [PATCH 69/70] drm/atomic-helper: Remove __drm_atomic_helper_crtc_reset
2026-08-21 14:38 ` Maxime Ripard
` (68 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
2026-08-21 15:45 ` sashiko-bot
2026-08-22 8:47 ` Dmitry Baryshkov
-1 siblings, 2 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard
All users of __drm_atomic_helper_crtc_reset() have been converted to use
drm_atomic_helper_crtc_state_init() and atomic_create_state.
Remove the now unused helper.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/drm_atomic_state_helper.c | 26 --------------------------
include/drm/drm_atomic_state_helper.h | 2 --
2 files changed, 28 deletions(-)
diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/drm_atomic_state_helper.c
index b592b7f5f264..354fa9c6aca8 100644
--- a/drivers/gpu/drm/drm_atomic_state_helper.c
+++ b/drivers/gpu/drm/drm_atomic_state_helper.c
@@ -77,36 +77,10 @@ __drm_atomic_helper_crtc_state_init(struct drm_crtc_state *crtc_state,
crtc_state->crtc = crtc;
crtc_state->background_color = DRM_ARGB64_PREP(0xffff, 0, 0, 0);
}
EXPORT_SYMBOL(__drm_atomic_helper_crtc_state_init);
-/**
- * __drm_atomic_helper_crtc_reset - reset state on CRTC
- * @crtc: drm CRTC
- * @crtc_state: CRTC state to assign
- *
- * Initializes the newly allocated @crtc_state and assigns it to
- * the &drm_crtc->state pointer of @crtc, usually required when
- * initializing the drivers or when called from the &drm_crtc_funcs.reset
- * hook.
- *
- * This is useful for drivers that subclass the CRTC state.
- */
-void
-__drm_atomic_helper_crtc_reset(struct drm_crtc *crtc,
- struct drm_crtc_state *crtc_state)
-{
- if (crtc_state)
- __drm_atomic_helper_crtc_state_init(crtc_state, crtc);
-
- if (drm_dev_has_vblank(crtc->dev))
- drm_crtc_vblank_reset(crtc);
-
- crtc->state = crtc_state;
-}
-EXPORT_SYMBOL(__drm_atomic_helper_crtc_reset);
-
/**
* drm_atomic_helper_crtc_create_state - default &drm_crtc_funcs.atomic_create_state hook for crtcs
* @crtc: crtc object
*
* Allocates and initializes pristine @drm_crtc_state.
diff --git a/include/drm/drm_atomic_state_helper.h b/include/drm/drm_atomic_state_helper.h
index df70817c94fc..480eaae42f45 100644
--- a/include/drm/drm_atomic_state_helper.h
+++ b/include/drm/drm_atomic_state_helper.h
@@ -40,12 +40,10 @@ struct drm_private_state;
struct drm_modeset_acquire_ctx;
struct drm_device;
void __drm_atomic_helper_crtc_state_init(struct drm_crtc_state *state,
struct drm_crtc *crtc);
-void __drm_atomic_helper_crtc_reset(struct drm_crtc *crtc,
- struct drm_crtc_state *state);
struct drm_crtc_state *
drm_atomic_helper_crtc_create_state(struct drm_crtc *crtc);
void __drm_atomic_helper_crtc_duplicate_state(struct drm_crtc *crtc,
struct drm_crtc_state *state);
struct drm_crtc_state *
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 69/70] drm/atomic-helper: Remove __drm_atomic_helper_crtc_reset
2026-08-21 14:39 ` [PATCH 69/70] drm/atomic-helper: Remove __drm_atomic_helper_crtc_reset Maxime Ripard
@ 2026-08-21 15:45 ` sashiko-bot
2026-08-22 8:47 ` Dmitry Baryshkov
1 sibling, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 15:45 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Memory leak and unassigned CRTC state due to ignored return value from `atomic_create_state`.
--
--- Patch [69]: [PATCH 69/70] drm/atomic-helper: Remove __drm_atomic_helper_crtc_reset ---
commit 9dc0ccd39531b9bf90d43caf9838f04ca43ed26d
Author: Maxime Ripard <mripard@kernel.org>
drm/atomic-helper: Remove __drm_atomic_helper_crtc_reset
This patch series converts users of __drm_atomic_helper_crtc_reset() to use
drm_atomic_helper_crtc_state_init() and atomic_create_state(). It then
removes the now unused __drm_atomic_helper_crtc_reset() helper entirely.
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
> index d63688b9d93dd..e1cc74ba7a434 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
[ ... ]
> @@ -757,9 +756,9 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
>
> drm_crtc_helper_add(&acrtc->base, &amdgpu_dm_crtc_helper_funcs);
>
> - /* Create (reset) the plane state */
> - if (acrtc->base.funcs->reset)
> - acrtc->base.funcs->reset(&acrtc->base);
> + /* Create the plane state */
> + if (acrtc->base.funcs->atomic_create_state)
> + acrtc->base.funcs->atomic_create_state(&acrtc->base);
[Severity: Medium]
Does this code leak the newly allocated state?
The old .reset() hook called __drm_atomic_helper_crtc_reset(), which internally
assigned crtc->state. The new .atomic_create_state() hook returns the allocated
state pointer, but the return value is ignored here.
Could this leave acrtc->base.state unassigned and leak the allocated
struct dm_crtc_state during driver initialization?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=69
^ permalink raw reply [flat|nested] 98+ messages in thread
* Re: [PATCH 69/70] drm/atomic-helper: Remove __drm_atomic_helper_crtc_reset
2026-08-21 14:39 ` [PATCH 69/70] drm/atomic-helper: Remove __drm_atomic_helper_crtc_reset Maxime Ripard
2026-08-21 15:45 ` sashiko-bot
@ 2026-08-22 8:47 ` Dmitry Baryshkov
1 sibling, 0 replies; 98+ messages in thread
From: Dmitry Baryshkov @ 2026-08-22 8:47 UTC (permalink / raw)
To: Maxime Ripard
Cc: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter,
dri-devel
On Fri, Aug 21, 2026 at 04:39:45PM +0200, Maxime Ripard wrote:
> All users of __drm_atomic_helper_crtc_reset() have been converted to use
> drm_atomic_helper_crtc_state_init() and atomic_create_state.
>
> Remove the now unused helper.
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
> ---
> drivers/gpu/drm/drm_atomic_state_helper.c | 26 --------------------------
> include/drm/drm_atomic_state_helper.h | 2 --
> 2 files changed, 28 deletions(-)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 98+ messages in thread
* [PATCH 70/70] drm/crtc: Remove reset
2026-08-21 14:38 ` Maxime Ripard
` (69 preceding siblings ...)
(?)
@ 2026-08-21 14:39 ` Maxime Ripard
2026-08-21 15:51 ` sashiko-bot
2026-08-23 21:19 ` Dmitry Baryshkov
-1 siblings, 2 replies; 98+ messages in thread
From: Maxime Ripard @ 2026-08-21 14:39 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard
All crtc drivers now implement the atomic_create_state hook instead of
the reset hook for initial state creation. The reset hook conflated
initial state allocation at probe time with hardware and software reset
during suspend/resume, making error handling difficult since it is not
fallible.
Remove the reset hook from struct drm_crtc_funcs and the associated
call in drm_mode_config_reset().
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/drm_mode_config.c | 4 +---
include/drm/drm_crtc.h | 10 ----------
2 files changed, 1 insertion(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
index 3bcc7bf0900c..9f4eb694e1fb 100644
--- a/drivers/gpu/drm/drm_mode_config.c
+++ b/drivers/gpu/drm/drm_mode_config.c
@@ -294,13 +294,11 @@ void drm_mode_config_reset(struct drm_device *dev)
else if (plane->funcs->atomic_create_state)
drm_mode_config_plane_reset_with_create_state(plane);
}
drm_for_each_crtc(crtc, dev) {
- if (crtc->funcs->reset)
- crtc->funcs->reset(crtc);
- else if (crtc->funcs->atomic_create_state)
+ if (crtc->funcs->atomic_create_state)
drm_mode_config_crtc_reset_with_create_state(crtc);
}
drm_for_each_encoder(encoder, dev)
if (encoder->funcs && encoder->funcs->reset)
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 12f43253f059..be5dca538d87 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -421,20 +421,10 @@ struct drm_crtc_state {
* Each driver is responsible for filling out this structure at startup time,
* in addition to providing other modesetting features, like i2c and DDC
* bus accessors.
*/
struct drm_crtc_funcs {
- /**
- * @reset:
- *
- * Reset CRTC hardware and software state to off. This function isn't
- * called by the core directly, only through drm_mode_config_reset().
- * It's not a helper hook only for historical reasons.
- *
- */
- void (*reset)(struct drm_crtc *crtc);
-
/**
* @cursor_set:
*
* Update the cursor image. The cursor position is relative to the CRTC
* and can be partially or fully outside of the visible area.
--
2.55.0
^ permalink raw reply related [flat|nested] 98+ messages in thread* Re: [PATCH 70/70] drm/crtc: Remove reset
2026-08-21 14:39 ` [PATCH 70/70] drm/crtc: Remove reset Maxime Ripard
@ 2026-08-21 15:51 ` sashiko-bot
2026-08-23 21:19 ` Dmitry Baryshkov
1 sibling, 0 replies; 98+ messages in thread
From: sashiko-bot @ 2026-08-21 15:51 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] The return value of the newly introduced `atomic_create_state` hook is ignored in `amdgpu_dm_crtc_init()`, causing a memory leak and leaving the CRTC state uninitialized.
--
--- Patch [70]: [PATCH 70/70] drm/crtc: Remove reset ---
commit de86d4e5c49ea36efff6debb8f1603e3e3c819b9
Author: Maxime Ripard <mripard@kernel.org>
drm/crtc: Remove reset
All crtc drivers now implement the atomic_create_state hook instead of
the reset hook for initial state creation. The reset hook conflated
initial state allocation at probe time with hardware and software reset
during suspend/resume, making error handling difficult since it is not
fallible.
Remove the reset hook from struct drm_crtc_funcs and the associated
call in drm_mode_config_reset().
> diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> index 3bcc7bf0900c4..9f4eb694e1fb2 100644
> --- a/drivers/gpu/drm/drm_mode_config.c
> +++ b/drivers/gpu/drm/drm_mode_config.c
> @@ -296,9 +296,7 @@ void drm_mode_config_reset(struct drm_device *dev)
> }
>
> drm_for_each_crtc(crtc, dev) {
> - if (crtc->funcs->reset)
> - crtc->funcs->reset(crtc);
> - else if (crtc->funcs->atomic_create_state)
> + if (crtc->funcs->atomic_create_state)
> drm_mode_config_crtc_reset_with_create_state(crtc);
> }
[Severity: High]
Does this transition leave the CRTC state uninitialized for AMD GPUs?
An earlier patch in this series switched amdgpu_dm_crtc_init() to call
atomic_create_state() instead of reset(), but the returned state pointer
is now ignored:
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c:amdgpu_dm_crtc_init() {
...
/* Create the plane state */
if (acrtc->base.funcs->atomic_create_state)
acrtc->base.funcs->atomic_create_state(&acrtc->base);
...
}
Since the returned struct drm_crtc_state pointer is not assigned to crtc->state,
and the AMDGPU driver doesn't call drm_mode_config_reset() during probe,
could this lead to a memory leak and a NULL pointer dereference when the
DRM core later accesses the uninitialized CRTC state?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-drm-no-more-crtc-reset-v1-0-fb793475c05a@kernel.org?part=70
^ permalink raw reply [flat|nested] 98+ messages in thread* Re: [PATCH 70/70] drm/crtc: Remove reset
2026-08-21 14:39 ` [PATCH 70/70] drm/crtc: Remove reset Maxime Ripard
2026-08-21 15:51 ` sashiko-bot
@ 2026-08-23 21:19 ` Dmitry Baryshkov
1 sibling, 0 replies; 98+ messages in thread
From: Dmitry Baryshkov @ 2026-08-23 21:19 UTC (permalink / raw)
To: Maxime Ripard
Cc: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter,
dri-devel
On Fri, Aug 21, 2026 at 04:39:46PM +0200, Maxime Ripard wrote:
> All crtc drivers now implement the atomic_create_state hook instead of
> the reset hook for initial state creation. The reset hook conflated
> initial state allocation at probe time with hardware and software reset
> during suspend/resume, making error handling difficult since it is not
> fallible.
>
> Remove the reset hook from struct drm_crtc_funcs and the associated
> call in drm_mode_config_reset().
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
> ---
> drivers/gpu/drm/drm_mode_config.c | 4 +---
> include/drm/drm_crtc.h | 10 ----------
> 2 files changed, 1 insertion(+), 13 deletions(-)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 98+ messages in thread