Download raw body.
sysutils/u-boot/rpi: framebuffer fix
As reported by Justin Berthault on bugs@, the raspberrypi-firmware
update has resulted in a change of the pixel format of the framebuffer
on the Raspberry Pi 400. Instead of RGB it is now BGR. Unfortunately
the device tree still says that the pixel format is RGB. The same
thing happens on the Raspberry Pi 4B.
The situation is a bit of a mess. There is a firmware call to set the
pixel format, and U-Boot uses this call to request RGB. However it
seems that this firmware call wasn't actually implemented until
somewhere in 2024. The previous firmware we used was from 2021, so
the call didn't actually do anything. Luckily the firmware has been
using RGB as the default pixel format for almost a decade. Only
really old firmware used BGR.
Unfortunately when the call was implemented, it doesn't actually do
what it says on the tin. Accoring to the documentation here:
https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface#get-pixel-order
https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface#set-pixel-order
0 means BGR and 1 means RGB. However, in reality it seems that 0
means "do nothing" and 1 means "swap between BGR and RGB".
Unfortunately that also means that the call to get the pixel order
state also just tells us whether it is swapped or not.
For some reason this pixel format issue doesn't seem to affect the
Raspberry Pi 5.
I'm not sure I fully understand the issue yet. But the following diff
seems to yield the desired result, both with the old and the new
firmware. So I propose we use this as a workaround until we can
figure out what is really going on.
ok?
Index: sysutils/u-boot/rpi/Makefile
===================================================================
RCS file: /cvs/ports/sysutils/u-boot/rpi/Makefile,v
diff -u -p -r1.1 Makefile
--- sysutils/u-boot/rpi/Makefile 12 Aug 2025 12:24:48 -0000 1.1
+++ sysutils/u-boot/rpi/Makefile 27 Sep 2025 13:52:30 -0000
@@ -1,4 +1,5 @@
VERSION= 2025.07
+REVISION= 0
SOC= rpi
Index: sysutils/u-boot/rpi/patches/patch-drivers_video_bcm2835_c
===================================================================
RCS file: sysutils/u-boot/rpi/patches/patch-drivers_video_bcm2835_c
diff -N sysutils/u-boot/rpi/patches/patch-drivers_video_bcm2835_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ sysutils/u-boot/rpi/patches/patch-drivers_video_bcm2835_c 27 Sep 2025 13:52:30 -0000
@@ -0,0 +1,12 @@
+Index: drivers/video/bcm2835.c
+--- drivers/video/bcm2835.c.orig
++++ drivers/video/bcm2835.c
+@@ -24,7 +24,7 @@ static int bcm2835_video_probe(struct udevice *dev)
+ return -EIO;
+
+ debug("bcm2835: Setting up display for %d x %d\n", w, h);
+- ret = bcm2835_set_video_params(&w, &h, 32, BCM2835_MBOX_PIXEL_ORDER_RGB,
++ ret = bcm2835_set_video_params(&w, &h, 32, 0,
+ BCM2835_MBOX_ALPHA_MODE_IGNORED,
+ &fb_base, &fb_size, &pitch);
+ if (ret)
sysutils/u-boot/rpi: framebuffer fix