* [PATCH] drm/solomon: Fix page start when updating rectangle in page addressing mode
@ 2026-02-10 18:09 Francesco Lavra
2026-02-26 7:58 ` Javier Martinez Canillas
2026-02-26 12:44 ` Javier Martinez Canillas
0 siblings, 2 replies; 3+ messages in thread
From: Francesco Lavra @ 2026-02-10 18:09 UTC (permalink / raw)
To: Javier Martinez Canillas, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Chen-Yu Tsai,
dri-devel, linux-kernel
In page addressing mode, the pixel values of a dirty rectangle must be sent
to the display controller one page at a time. The range of pages
corresponding to a given rectangle is being incorrectly calculated as if
the Y value of the top left coordinate of the rectangle was 0. This can
result in rectangle updates being displayed on wrong parts of the screen.
Fix the above issue by consolidating the start page calculation in a single
place at the beginning of the update_rect function, and using the
calculated value for all addressing modes.
Fixes: b0daaa5cfaa5 ("drm/ssd130x: Support page addressing mode")
Signed-off-by: Francesco Lavra <flavra@baylibre.com>
---
drivers/gpu/drm/solomon/ssd130x.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c
index 96cf39320137..33ceed86ed36 100644
--- a/drivers/gpu/drm/solomon/ssd130x.c
+++ b/drivers/gpu/drm/solomon/ssd130x.c
@@ -737,6 +737,7 @@ static int ssd130x_update_rect(struct ssd130x_device *ssd130x,
unsigned int height = drm_rect_height(rect);
unsigned int line_length = DIV_ROUND_UP(width, 8);
unsigned int page_height = SSD130X_PAGE_HEIGHT;
+ u8 page_start = ssd130x->page_offset + y / page_height;
unsigned int pages = DIV_ROUND_UP(height, page_height);
struct drm_device *drm = &ssd130x->drm;
u32 array_idx = 0;
@@ -774,14 +775,11 @@ static int ssd130x_update_rect(struct ssd130x_device *ssd130x,
*/
if (!ssd130x->page_address_mode) {
- u8 page_start;
-
/* Set address range for horizontal addressing mode */
ret = ssd130x_set_col_range(ssd130x, ssd130x->col_offset + x, width);
if (ret < 0)
return ret;
- page_start = ssd130x->page_offset + y / page_height;
ret = ssd130x_set_page_range(ssd130x, page_start, pages);
if (ret < 0)
return ret;
@@ -813,7 +811,7 @@ static int ssd130x_update_rect(struct ssd130x_device *ssd130x,
*/
if (ssd130x->page_address_mode) {
ret = ssd130x_set_page_pos(ssd130x,
- ssd130x->page_offset + i,
+ page_start + i,
ssd130x->col_offset + x);
if (ret < 0)
return ret;
--
2.39.5
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] drm/solomon: Fix page start when updating rectangle in page addressing mode
2026-02-10 18:09 [PATCH] drm/solomon: Fix page start when updating rectangle in page addressing mode Francesco Lavra
@ 2026-02-26 7:58 ` Javier Martinez Canillas
2026-02-26 12:44 ` Javier Martinez Canillas
1 sibling, 0 replies; 3+ messages in thread
From: Javier Martinez Canillas @ 2026-02-26 7:58 UTC (permalink / raw)
To: Francesco Lavra, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Chen-Yu Tsai,
dri-devel, linux-kernel
Francesco Lavra <flavra@baylibre.com> writes:
Hello Francesco,
Thanks for the patch!
> In page addressing mode, the pixel values of a dirty rectangle must be sent
> to the display controller one page at a time. The range of pages
> corresponding to a given rectangle is being incorrectly calculated as if
> the Y value of the top left coordinate of the rectangle was 0. This can
> result in rectangle updates being displayed on wrong parts of the screen.
>
> Fix the above issue by consolidating the start page calculation in a single
> place at the beginning of the update_rect function, and using the
> calculated value for all addressing modes.
>
> Fixes: b0daaa5cfaa5 ("drm/ssd130x: Support page addressing mode")
> Signed-off-by: Francesco Lavra <flavra@baylibre.com>
> ---
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
--
Best regards,
Javier Martinez Canillas
Core Platforms
Red Hat
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] drm/solomon: Fix page start when updating rectangle in page addressing mode
2026-02-10 18:09 [PATCH] drm/solomon: Fix page start when updating rectangle in page addressing mode Francesco Lavra
2026-02-26 7:58 ` Javier Martinez Canillas
@ 2026-02-26 12:44 ` Javier Martinez Canillas
1 sibling, 0 replies; 3+ messages in thread
From: Javier Martinez Canillas @ 2026-02-26 12:44 UTC (permalink / raw)
To: Francesco Lavra, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Chen-Yu Tsai,
dri-devel, linux-kernel
Francesco Lavra <flavra@baylibre.com> writes:
> In page addressing mode, the pixel values of a dirty rectangle must be sent
> to the display controller one page at a time. The range of pages
> corresponding to a given rectangle is being incorrectly calculated as if
> the Y value of the top left coordinate of the rectangle was 0. This can
> result in rectangle updates being displayed on wrong parts of the screen.
>
> Fix the above issue by consolidating the start page calculation in a single
> place at the beginning of the update_rect function, and using the
> calculated value for all addressing modes.
>
> Fixes: b0daaa5cfaa5 ("drm/ssd130x: Support page addressing mode")
> Signed-off-by: Francesco Lavra <flavra@baylibre.com>
> ---
Pushed to drm-misc (drm-misc-fixes). Thanks!
--
Best regards,
Javier Martinez Canillas
Core Platforms
Red Hat
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-02-26 12:44 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-02-10 18:09 [PATCH] drm/solomon: Fix page start when updating rectangle in page addressing mode Francesco Lavra
2026-02-26 7:58 ` Javier Martinez Canillas
2026-02-26 12:44 ` 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®