<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="moz-cite-prefix">On 13 November 2023 at 01:48 pm, Geert
Uytterhoeven wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAMuHMdU-8Fu55C2zu_XxmG8n5paOQYfqNA84JNvXo4c87D-kFw@mail.gmail.com"><span
style="white-space: pre-wrap">Thanks for your report!</span>
<pre class="moz-quote-pre" wrap="">
I can confirm there is no graphics output with m68k/virt, and
bisected this to my own commit 6ae2ff23aa43a0c4 ("drm/client: Convert
drm_client_buffer_addfb() to drm_mode_addfb2()"), ouch...
It turns out the old call to drm_mode_addfb() caused a translation
from a fourcc to a bpp/depth pair to a _different_ fourcc, due to the
quirk processing in drm_driver_legacy_fb_format().
I.e. on m68k/virt, the original requested format was XR24, which was
translated to BX24. The former doesn't work, the latter works.
The following (gmail-whitespace-damaged) patch fixed the issue for me:
--- a/drivers/gpu/drm/drm_client.c
+++ b/drivers/gpu/drm/drm_client.c
@@ -400,6 +400,16 @@ static int drm_client_buffer_addfb(struct
drm_client_buffer *buffer,
fb_req.width = width;
fb_req.height = height;
+ if (client->dev->mode_config.quirk_addfb_prefer_host_byte_order) {
+ if (format == DRM_FORMAT_XRGB8888)
+ format = DRM_FORMAT_HOST_XRGB8888;
+ if (format == DRM_FORMAT_ARGB8888)
+ format = DRM_FORMAT_HOST_ARGB8888;
+ if (format == DRM_FORMAT_RGB565)
+ format = DRM_FORMAT_HOST_RGB565;
+ if (format == DRM_FORMAT_XRGB1555)
+ format = DRM_FORMAT_HOST_XRGB1555;
+ }
fb_req.pixel_format = format;
fb_req.handles[0] = handle;
fb_req.pitches[0] = buffer->pitch;
However, I don't think we want to sprinkle more of these
translations around... So perhaps we should (re)add a call to
drm_driver_legacy_fb_format() to drm_client_buffer_addfb()?
Second, as I doubt you are using a big-endian system, you are probably
running into a slightly different issue.
Oh wait, you did CC linuxppc-dev, so perhaps you are running on a
big-endian machine?
If not, please add
pr_info("%s: format = %p4cc\n", __func__, &format);
to drivers/gpu/drm/drm_client.c:drm_client_buffer_addfb(), and,
after reverting commit 6ae2ff23aa43a0c4, add
pr_info("%s: bpp %u/depth %u => r.pixel_format = %p4cc\n",
__func__, or->bpp, or->depth, &r.pixel_format);
to drivers/gpu/drm/drm_framebuffer.c:drm_mode_addfb(), so we know the
translation in your case?
Thanks!
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- <a class="moz-txt-link-abbreviated" href="mailto:geert@linux-m68k.org">geert@linux-m68k.org</a>
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
</pre>
</blockquote>
Geert,<br>
<br>
Your patch works! :-) Thanks a lot!<br>
<br>
I tested it with the virtio-vga and with the virtio-gpu-pci device
in a virtual ppce500 QEMU/KVM HV machine with an e5500 CPU today.<br>
<br>
Tested-by: Christian Zigotzky <a class="moz-txt-link-rfc2396E" href="mailto:chzigotzky@xenosoft.de"><chzigotzky@xenosoft.de></a><br>
<br>
Cheers,<br>
Christian<br>
</body>
</html>