* [PATCH v2 0/5] drm/solomon: Code improvements and DRM helper adoption
@ 2025-09-20 9:45 Iker Pedrosa
2025-09-20 9:45 ` [PATCH v2 1/5] drm/solomon: Move calls to drm_gem_fb_end_cpu*() Iker Pedrosa
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Iker Pedrosa @ 2025-09-20 9:45 UTC (permalink / raw)
To: Javier Martinez Canillas, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, linux-kernel, Iker Pedrosa
This patch series improves the Solomon SSD130x DRM driver by adopting
existing DRM helpers, improving code clarity, and following kernel
coding standards.
* Patch #1 moves DRM GEM framebuffer CPU access calls to make critical
sections more visible and maintainable.
* Patch #2 replaces WARN_ON with drm_WARN_ON_ONCE to prevent log spam.
* Patch #3 adopts drm_crtc_helper_mode_valid_fixed() for mode
validation.
* Patch #4 adopts drm_connector_helper_get_modes_fixed() for mode
management.
* Patch #5 enforces one assignment per line per kernel coding style.
These improvements reduce code duplication by leveraging existing DRM
infrastructure and enhance code readability without changing
functionality.
Signed-off-by: Iker Pedrosa <ikerpedrosam@gmail.com>
---
Changes in v2:
- Use a goto label to ensure drm_dev_exit() is called in the error path
of drm_gem_fb_begin_cpu_access().
- Link to v1: https://lore.kernel.org/r/20250912-improve-ssd130x-v1-0-bc9389ed299e@gmail.com
---
Iker Pedrosa (5):
drm/solomon: Move calls to drm_gem_fb_end_cpu*()
drm/solomon: Use drm_WARN_ON_ONCE instead of WARN_ON
drm/solomon: Simplify mode_valid() using DRM helper
drm/solomon: Simplify get_modes() using DRM helper
drm/solomon: Enforce one assignment per line
drivers/gpu/drm/solomon/ssd130x.c | 80 ++++++++++++++++-----------------------
1 file changed, 32 insertions(+), 48 deletions(-)
---
base-commit: c571cb70e1ed43ee543c70151e61a001ab2eefa2
change-id: 20250912-improve-ssd130x-b45b89ff4693
Best regards,
--
Iker Pedrosa <ikerpedrosam@gmail.com>
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v2 1/5] drm/solomon: Move calls to drm_gem_fb_end_cpu*() 2025-09-20 9:45 [PATCH v2 0/5] drm/solomon: Code improvements and DRM helper adoption Iker Pedrosa @ 2025-09-20 9:45 ` Iker Pedrosa 2025-09-20 9:45 ` [PATCH v2 2/5] drm/solomon: Use drm_WARN_ON_ONCE instead of WARN_ON Iker Pedrosa ` (4 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: Iker Pedrosa @ 2025-09-20 9:45 UTC (permalink / raw) To: Javier Martinez Canillas, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter Cc: dri-devel, linux-kernel, Iker Pedrosa Calls to drm_gem_fb_end_cpu*() should be between the calls to drm_dev*(), and not hidden inside some other function. This way the critical section code is visible at a glance, keeping it short and improving maintainability. Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Iker Pedrosa <ikerpedrosam@gmail.com> --- drivers/gpu/drm/solomon/ssd130x.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c index dd2006d51c7a2fc8501904565da806aa47333ad6..d98015d6d28505d028ee958831e3cefdb8a9c397 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -1016,15 +1016,9 @@ static int ssd130x_fb_blit_rect(struct drm_framebuffer *fb, dst_pitch = DIV_ROUND_UP(drm_rect_width(rect), 8); - ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE); - if (ret) - return ret; - iosys_map_set_vaddr(&dst, buf); drm_fb_xrgb8888_to_mono(&dst, &dst_pitch, vmap, fb, rect, fmtcnv_state); - drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE); - ssd130x_update_rect(ssd130x, rect, buf, data_array); return ret; @@ -1048,15 +1042,9 @@ static int ssd132x_fb_blit_rect(struct drm_framebuffer *fb, dst_pitch = drm_rect_width(rect); - ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE); - if (ret) - return ret; - iosys_map_set_vaddr(&dst, buf); drm_fb_xrgb8888_to_gray8(&dst, &dst_pitch, vmap, fb, rect, fmtcnv_state); - drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE); - ssd132x_update_rect(ssd130x, rect, buf, data_array); return ret; @@ -1078,15 +1066,9 @@ static int ssd133x_fb_blit_rect(struct drm_framebuffer *fb, dst_pitch = drm_format_info_min_pitch(fi, 0, drm_rect_width(rect)); - ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE); - if (ret) - return ret; - iosys_map_set_vaddr(&dst, data_array); drm_fb_xrgb8888_to_rgb332(&dst, &dst_pitch, vmap, fb, rect, fmtcnv_state); - drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE); - ssd133x_update_rect(ssd130x, rect, data_array, dst_pitch); return ret; @@ -1232,6 +1214,9 @@ static void ssd130x_primary_plane_atomic_update(struct drm_plane *plane, if (!drm_dev_enter(drm, &idx)) return; + if (drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE)) + goto out_drm_dev_exit; + drm_atomic_helper_damage_iter_init(&iter, old_plane_state, plane_state); drm_atomic_for_each_plane_damage(&iter, &damage) { dst_clip = plane_state->dst; @@ -1245,6 +1230,9 @@ static void ssd130x_primary_plane_atomic_update(struct drm_plane *plane, &shadow_plane_state->fmtcnv_state); } + drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE); + +out_drm_dev_exit: drm_dev_exit(idx); } @@ -1267,6 +1255,9 @@ static void ssd132x_primary_plane_atomic_update(struct drm_plane *plane, if (!drm_dev_enter(drm, &idx)) return; + if (drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE)) + goto out_drm_dev_exit; + drm_atomic_helper_damage_iter_init(&iter, old_plane_state, plane_state); drm_atomic_for_each_plane_damage(&iter, &damage) { dst_clip = plane_state->dst; @@ -1280,6 +1271,9 @@ static void ssd132x_primary_plane_atomic_update(struct drm_plane *plane, &shadow_plane_state->fmtcnv_state); } + drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE); + +out_drm_dev_exit: drm_dev_exit(idx); } @@ -1301,6 +1295,9 @@ static void ssd133x_primary_plane_atomic_update(struct drm_plane *plane, if (!drm_dev_enter(drm, &idx)) return; + if (drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE)) + goto out_drm_dev_exit; + drm_atomic_helper_damage_iter_init(&iter, old_plane_state, plane_state); drm_atomic_for_each_plane_damage(&iter, &damage) { dst_clip = plane_state->dst; @@ -1313,6 +1310,9 @@ static void ssd133x_primary_plane_atomic_update(struct drm_plane *plane, &shadow_plane_state->fmtcnv_state); } + drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE); + +out_drm_dev_exit: drm_dev_exit(idx); } -- 2.51.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 2/5] drm/solomon: Use drm_WARN_ON_ONCE instead of WARN_ON 2025-09-20 9:45 [PATCH v2 0/5] drm/solomon: Code improvements and DRM helper adoption Iker Pedrosa 2025-09-20 9:45 ` [PATCH v2 1/5] drm/solomon: Move calls to drm_gem_fb_end_cpu*() Iker Pedrosa @ 2025-09-20 9:45 ` Iker Pedrosa 2025-09-20 9:45 ` [PATCH v2 3/5] drm/solomon: Simplify mode_valid() using DRM helper Iker Pedrosa ` (3 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: Iker Pedrosa @ 2025-09-20 9:45 UTC (permalink / raw) To: Javier Martinez Canillas, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter Cc: dri-devel, linux-kernel, Iker Pedrosa To prevent log spam, convert all instances to the DRM-specific drm_WARN_ON_ONCE() macro. This ensures that a warning is emitted only the first time the condition is met for a given device instance, which is the desired behavior within the graphics subsystem. Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Iker Pedrosa <ikerpedrosam@gmail.com> --- drivers/gpu/drm/solomon/ssd130x.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c index d98015d6d28505d028ee958831e3cefdb8a9c397..5b0d5bbc7f9fabd8430226e88cdee9e22ac7ad96 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -1393,7 +1393,7 @@ static void ssd130x_primary_plane_reset(struct drm_plane *plane) { struct ssd130x_plane_state *ssd130x_state; - WARN_ON(plane->state); + drm_WARN_ON_ONCE(plane->dev, plane->state); ssd130x_state = kzalloc(sizeof(*ssd130x_state), GFP_KERNEL); if (!ssd130x_state) @@ -1408,7 +1408,7 @@ static struct drm_plane_state *ssd130x_primary_plane_duplicate_state(struct drm_ struct ssd130x_plane_state *old_ssd130x_state; struct ssd130x_plane_state *ssd130x_state; - if (WARN_ON(!plane->state)) + if (drm_WARN_ON_ONCE(plane->dev, !plane->state)) return NULL; old_ssd130x_state = to_ssd130x_plane_state(plane->state); @@ -1558,7 +1558,7 @@ static void ssd130x_crtc_reset(struct drm_crtc *crtc) { struct ssd130x_crtc_state *ssd130x_state; - WARN_ON(crtc->state); + drm_WARN_ON_ONCE(crtc->dev, crtc->state); ssd130x_state = kzalloc(sizeof(*ssd130x_state), GFP_KERNEL); if (!ssd130x_state) @@ -1572,7 +1572,7 @@ static struct drm_crtc_state *ssd130x_crtc_duplicate_state(struct drm_crtc *crtc struct ssd130x_crtc_state *old_ssd130x_state; struct ssd130x_crtc_state *ssd130x_state; - if (WARN_ON(!crtc->state)) + if (drm_WARN_ON_ONCE(crtc->dev, !crtc->state)) return NULL; old_ssd130x_state = to_ssd130x_crtc_state(crtc->state); -- 2.51.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 3/5] drm/solomon: Simplify mode_valid() using DRM helper 2025-09-20 9:45 [PATCH v2 0/5] drm/solomon: Code improvements and DRM helper adoption Iker Pedrosa 2025-09-20 9:45 ` [PATCH v2 1/5] drm/solomon: Move calls to drm_gem_fb_end_cpu*() Iker Pedrosa 2025-09-20 9:45 ` [PATCH v2 2/5] drm/solomon: Use drm_WARN_ON_ONCE instead of WARN_ON Iker Pedrosa @ 2025-09-20 9:45 ` Iker Pedrosa 2025-09-20 9:45 ` [PATCH v2 4/5] drm/solomon: Simplify get_modes() " Iker Pedrosa ` (2 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: Iker Pedrosa @ 2025-09-20 9:45 UTC (permalink / raw) To: Javier Martinez Canillas, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter Cc: dri-devel, linux-kernel, Iker Pedrosa The ssd130x_crtc_mode_valid() function contains a manual implementation to validate the display mode against the panel's single fixed resolution. This pattern is common for simple displays, and the DRM core already provides the drm_crtc_helper_mode_valid_fixed() helper for this exact use case. Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Iker Pedrosa <ikerpedrosam@gmail.com> --- drivers/gpu/drm/solomon/ssd130x.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c index 5b0d5bbc7f9fabd8430226e88cdee9e22ac7ad96..6083fd9e9e5e4def670961dc46df7e4adef7462d 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -1473,15 +1473,7 @@ static enum drm_mode_status ssd130x_crtc_mode_valid(struct drm_crtc *crtc, { struct ssd130x_device *ssd130x = drm_to_ssd130x(crtc->dev); - if (mode->hdisplay != ssd130x->mode.hdisplay && - mode->vdisplay != ssd130x->mode.vdisplay) - return MODE_ONE_SIZE; - else if (mode->hdisplay != ssd130x->mode.hdisplay) - return MODE_ONE_WIDTH; - else if (mode->vdisplay != ssd130x->mode.vdisplay) - return MODE_ONE_HEIGHT; - - return MODE_OK; + return drm_crtc_helper_mode_valid_fixed(crtc, mode, &ssd130x->mode); } static int ssd130x_crtc_atomic_check(struct drm_crtc *crtc, -- 2.51.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 4/5] drm/solomon: Simplify get_modes() using DRM helper 2025-09-20 9:45 [PATCH v2 0/5] drm/solomon: Code improvements and DRM helper adoption Iker Pedrosa ` (2 preceding siblings ...) 2025-09-20 9:45 ` [PATCH v2 3/5] drm/solomon: Simplify mode_valid() using DRM helper Iker Pedrosa @ 2025-09-20 9:45 ` Iker Pedrosa 2025-09-20 9:45 ` [PATCH v2 5/5] drm/solomon: Enforce one assignment per line Iker Pedrosa 2025-09-26 13:15 ` [PATCH v2 0/5] drm/solomon: Code improvements and DRM helper adoption Javier Martinez Canillas 5 siblings, 0 replies; 7+ messages in thread From: Iker Pedrosa @ 2025-09-20 9:45 UTC (permalink / raw) To: Javier Martinez Canillas, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter Cc: dri-devel, linux-kernel, Iker Pedrosa The ssd130x_connector_get_modes function contains a manual implementation to manage modes. This pattern is common for simple displays, and the DRM core already provides the drm_connector_helper_get_modes_fixed() helper for this exact use case. Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Iker Pedrosa <ikerpedrosam@gmail.com> --- drivers/gpu/drm/solomon/ssd130x.c | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c index 6083fd9e9e5e4def670961dc46df7e4adef7462d..50528a94cd3bcfa46517c6ffccf3f458e17cf816 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -1732,20 +1732,8 @@ static const struct drm_encoder_funcs ssd130x_encoder_funcs = { static int ssd130x_connector_get_modes(struct drm_connector *connector) { struct ssd130x_device *ssd130x = drm_to_ssd130x(connector->dev); - struct drm_display_mode *mode; - struct device *dev = ssd130x->dev; - - mode = drm_mode_duplicate(connector->dev, &ssd130x->mode); - if (!mode) { - dev_err(dev, "Failed to duplicated mode\n"); - return 0; - } - - drm_mode_probed_add(connector, mode); - drm_set_preferred_mode(connector, mode->hdisplay, mode->vdisplay); - /* There is only a single mode */ - return 1; + return drm_connector_helper_get_modes_fixed(connector, &ssd130x->mode); } static const struct drm_connector_helper_funcs ssd130x_connector_helper_funcs = { -- 2.51.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 5/5] drm/solomon: Enforce one assignment per line 2025-09-20 9:45 [PATCH v2 0/5] drm/solomon: Code improvements and DRM helper adoption Iker Pedrosa ` (3 preceding siblings ...) 2025-09-20 9:45 ` [PATCH v2 4/5] drm/solomon: Simplify get_modes() " Iker Pedrosa @ 2025-09-20 9:45 ` Iker Pedrosa 2025-09-26 13:15 ` [PATCH v2 0/5] drm/solomon: Code improvements and DRM helper adoption Javier Martinez Canillas 5 siblings, 0 replies; 7+ messages in thread From: Iker Pedrosa @ 2025-09-20 9:45 UTC (permalink / raw) To: Javier Martinez Canillas, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter Cc: dri-devel, linux-kernel, Iker Pedrosa The code contains several instances of chained assignments. The Linux kernel coding style generally favors clarity and simplicity over terse syntax. Refactor the code to use a separate line for each assignment. Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Iker Pedrosa <ikerpedrosam@gmail.com> --- drivers/gpu/drm/solomon/ssd130x.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c index 50528a94cd3bcfa46517c6ffccf3f458e17cf816..f3dd6982b293c74024f7d70a6ef1ebfb5889b0a1 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -1867,10 +1867,14 @@ static int ssd130x_init_modeset(struct ssd130x_device *ssd130x) mode->type = DRM_MODE_TYPE_DRIVER; mode->clock = 1; - mode->hdisplay = mode->htotal = ssd130x->width; - mode->hsync_start = mode->hsync_end = ssd130x->width; - mode->vdisplay = mode->vtotal = ssd130x->height; - mode->vsync_start = mode->vsync_end = ssd130x->height; + mode->hdisplay = ssd130x->width; + mode->htotal = ssd130x->width; + mode->hsync_start = ssd130x->width; + mode->hsync_end = ssd130x->width; + mode->vdisplay = ssd130x->height; + mode->vtotal = ssd130x->height; + mode->vsync_start = ssd130x->height; + mode->vsync_end = ssd130x->height; mode->width_mm = 27; mode->height_mm = 27; -- 2.51.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 0/5] drm/solomon: Code improvements and DRM helper adoption 2025-09-20 9:45 [PATCH v2 0/5] drm/solomon: Code improvements and DRM helper adoption Iker Pedrosa ` (4 preceding siblings ...) 2025-09-20 9:45 ` [PATCH v2 5/5] drm/solomon: Enforce one assignment per line Iker Pedrosa @ 2025-09-26 13:15 ` Javier Martinez Canillas 5 siblings, 0 replies; 7+ messages in thread From: Javier Martinez Canillas @ 2025-09-26 13:15 UTC (permalink / raw) To: Iker Pedrosa, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter Cc: dri-devel, linux-kernel, Iker Pedrosa Iker Pedrosa <ikerpedrosam@gmail.com> writes: Hello Iker, > This patch series improves the Solomon SSD130x DRM driver by adopting > existing DRM helpers, improving code clarity, and following kernel > coding standards. > > * Patch #1 moves DRM GEM framebuffer CPU access calls to make critical > sections more visible and maintainable. > * Patch #2 replaces WARN_ON with drm_WARN_ON_ONCE to prevent log spam. > * Patch #3 adopts drm_crtc_helper_mode_valid_fixed() for mode > validation. > * Patch #4 adopts drm_connector_helper_get_modes_fixed() for mode > management. > * Patch #5 enforces one assignment per line per kernel coding style. > > These improvements reduce code duplication by leveraging existing DRM > infrastructure and enhance code readability without changing > functionality. > > Signed-off-by: Iker Pedrosa <ikerpedrosam@gmail.com> > --- > Changes in v2: > - Use a goto label to ensure drm_dev_exit() is called in the error path > of drm_gem_fb_begin_cpu_access(). > - Link to v1: https://lore.kernel.org/r/20250912-improve-ssd130x-v1-0-bc9389ed299e@gmail.com > Pushed to drm-misc (drm-misc-next). Thanks! -- Best regards, Javier Martinez Canillas Core Platforms Red Hat ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-09-26 13:15 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-09-20 9:45 [PATCH v2 0/5] drm/solomon: Code improvements and DRM helper adoption Iker Pedrosa 2025-09-20 9:45 ` [PATCH v2 1/5] drm/solomon: Move calls to drm_gem_fb_end_cpu*() Iker Pedrosa 2025-09-20 9:45 ` [PATCH v2 2/5] drm/solomon: Use drm_WARN_ON_ONCE instead of WARN_ON Iker Pedrosa 2025-09-20 9:45 ` [PATCH v2 3/5] drm/solomon: Simplify mode_valid() using DRM helper Iker Pedrosa 2025-09-20 9:45 ` [PATCH v2 4/5] drm/solomon: Simplify get_modes() " Iker Pedrosa 2025-09-20 9:45 ` [PATCH v2 5/5] drm/solomon: Enforce one assignment per line Iker Pedrosa 2025-09-26 13:15 ` [PATCH v2 0/5] drm/solomon: Code improvements and DRM helper adoption Javier Martinez Canillas
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®