On 13 November 2023 at 01:48 pm, Geert
Uytterhoeven wrote:
Thanks for your report!Geert,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 -- 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
Your patch works! :-) Thanks a lot!
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.
Tested-by: Christian Zigotzky <chzigotzky@xxxxxxxxxxx>
Cheers,
Christian