All of lore.kernel.org
 help / color / mirror / Atom feed
* drm/ssd130x: stale pixels when the GPU renders into the framebuffer
@ 2026-08-13  4:27 Fabio Piparo
  2026-08-14 18:34 ` Javier Martinez Canillas
  2026-09-14  8:43 ` Thomas Zimmermann
  0 siblings, 2 replies; 17+ messages in thread
From: Fabio Piparo @ 2026-08-13  4:27 UTC (permalink / raw)
  To: dri-devel; +Cc: Javier Martinez Canillas

The symptom
===========

I am working with a Raspberry Pi 5 driving a 128x32 SSD1306 over I2C
through ssd130x, brought up with dtoverlay=ssd1306, and a GLES client
rendering into it. The GPU renders straight into the panel's framebuffer.
The panel shows a blocky pattern that is affected by CPU load. The kernel
is 6.18.39.

A capture:

  https://files.fabiopiparo.com/ssd130-line-glitch.webp

This is a simple trail traveling left to right, and the busier the Pi is,
the shorter the trail (link above). On an idle machine the leftovers build
up into a blocky fog. That was the clue that pointed me at the CPU cache,
since the lifetime of the artifact tracks memory pressure.

The trace
=========

I made a test program that flips between two alternating solid frames
while i2c_write payloads are traced. 15 of the 31 flushes carry bytes
from both frames in one payload, mixed at 64 byte granularity.

What appears to happen
======================

My reading: the driver's XRGB conversion reads the framebuffer through a
cached mapping while the GPU writes the same memory directly, so what
reaches the panel is whatever lines the CPU still holds. The 64 byte
granularity and the load dependence both fit that, and write-combining
the mapping makes it stop.

What stops it
=============

Setting shmem->map_wc in a .gem_create_object hook makes all the traced
payloads come out as expected.

Whether the exporter is the right place for this, I do not know.

I am happy to test anything on this hardware and report back.

Disclosure
==========

The panel, the symptom and the i2c trace come from my own hardware. The
analysis above and the change came out of a long debugging session with
an AI assistant.

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2026-10-06  6:50 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-13  4:27 drm/ssd130x: stale pixels when the GPU renders into the framebuffer Fabio Piparo
2026-08-14 18:34 ` Javier Martinez Canillas
2026-09-14  8:43 ` Thomas Zimmermann
2026-09-23 16:00   ` Fabio Piparo
2026-09-29  9:04     ` Thomas Zimmermann
2026-09-29 21:50       ` Maíra Canal
2026-09-30  6:48         ` Thomas Zimmermann
2026-09-30  7:48           ` Javier Martinez Canillas
2026-09-30  8:32             ` Thomas Zimmermann
2026-09-30 13:49               ` Maíra Canal
2026-09-30 15:52                 ` Javier Martinez Canillas
2026-09-30 18:45                   ` Fabio Piparo
2026-10-02  8:18                     ` Thomas Zimmermann
2026-09-30 19:57                   ` Maíra Canal
2026-10-02  8:12                     ` Thomas Zimmermann
2026-10-02 21:13                       ` Maíra Canal
2026-10-06  6:50                         ` Thomas Zimmermann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.