Re: [PATCH 0/8] drm: fb-helper/ssd130x: Add support for DRM_FORMAT_R1

From: Geert Uytterhoeven
Date: Mon Jul 17 2023 - 04:08:23 EST


Hi Javier,

On Sun, Jul 16, 2023 at 3:30 PM Javier Martinez Canillas
<javierm@xxxxxxxxxx> wrote:
> Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> writes:
> > The native display format of ssd1306 OLED displays is monochrome
> > light-on-dark (R1). This patch series adds support for the R1 buffer
> > format to both the ssd130x DRM driver and the FB helpers, so monochrome
> > applications (including fbdev emulation and the text console) can avoid
> > the overhead of back-and-forth conversions between R1 and XR24.
>
> I've tested your series on a ssd1306 I2C OLED panel and fbcon did work for
> me, but had some issues when trying to run your fbtest suite. Because the

Thanks, due to the limited userspace environment on my RV32 test system,
I didn't run fbtest myself.

> test005 gets killed with a SIGSEGV.
>
> $ ./fbtest -d
> fb_init()
> fb_open()
> fb_get_var()
> fb_get_fix()
> fb_map()
> fb_start = 0, fb_offset = 0, fb_len = 1000

[...]

> Running test test005
> Caught signal 11. Exiting

Strange.

> Maybe more tests are missing the minimum num_colors requirement? Also, the

On monochrome, test005 should make the left half of the screen black,
and the right half white. It works on ARAnyM, and there don't seem
to be off-by-one errors in the call to fill_rect().
Can you please run this under gdb or valgrind?

> penguin in test004 is not displayed correctly. I was expecting that to be
> working correctly since you mentioned to be using the Linux logo on boot.

Linux has logos for displays using 2, 16, and 256 colors. Note that the
default logos are 80x80, which is larger than your display, so no logo
is drawn.
Fbtest has only the full color logo, so it will look bad on a monochrome
display.

> Another question, do you know if is possible to change the default format?

AFAIK DRM does not support that.

> I believe that fbset won't work because the DRM fbdev emulation layer does
> not implement mode settings but I thought that changing the mode using the

Correct.

> atomic KMS API would work.
>
> $ modetest -M ssd130x -P 31@33:128x64@XR24 -a
> $ echo $?
> 0
>
> but after that I still get:
>
> $ fbset -i
>
> mode "128x64"
> geometry 128 64 128 64 1
> timings 0 0 0 0 0 0 0
> rgba 1/0,1/0,1/0,0/0
> endmode
>
> Frame buffer device information:
> Name : ssd130xdrmfb
> Address : (nil)
> Size : 4096
> Type : PACKED PIXELS
> Visual : MONO10
> XPanStep : 1
> YPanStep : 1
> YWrapStep : 0
> LineLength : 16
> Accelerator : No
>
> Maybe I'm doing something wrong or misunderstading about how should work?

Do you need the "-d" option (drop master after mode set) of modetest?
Still, that would only impact DRM. The fbdev emulation on top of DRM has
already been initialized before, and is never reinitialized.


Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds