About RGB-Pi and Raspberry Pi4

From RGB-Pi Wiki
Jump to: navigation, search

RGB-Pi in Raspberry Pi4 and Beyond

As many of you are asking whether the RGB-Pi devices will be supporting the latest Raspberry Pi4 models, we wanted to clarify some points here:

  • From the GPIO specification point of view, all current RGB-Pi devices are 100% compatible with Raspberry Pi4.
  • From the software perspective, the introduction of the new VideoCore6 and FKMS/KMS video drivers are preventing us using from using the current on the fly resolution mode switch.

About Raspberry Video Drivers

  • Legacy - up to Pi3, Raspberry used a custom video driver that communicated directly to the firmware (which only had a custom implementation of OpenGL ES) and had direct access to the framebuffer. This is now legacy and not fully supported in Pi4 anymore.
  • FKMS (Fake/Firmware KMS) - uses the custom Dispmanx API to communicate with the firmware. It is the new default driver for Pi4 and does not support the use of framebuffer changes via fbset, tvservice or vcgencmd commands.
  • KMS - the kernel communicates directly to the hardware registers bypassing the firmware. As of today, this is the standard industry driver and the one that will become the default driver in all future Pi models once its development is fully finished.



  • The current frontend makes use of Pygame SDL1 and surface objects. Since the release of Pygame SDL2, the current UI performs terrible due to unknown reasons. This results in the UI barely running at 4 FPS and 100% of CPU use.
  • The ALSA audio drivers have been changed to make some of the internal virtual devices comply with the standard naming and configuration, resulting in some current audio features like EQ broken.
  • Raspberry USB PCI hub descriptors and sorting has also changed resulting in controller ordering not matching with Retroarch anymore.

Device Tree Overlay .dtbo

  • The current device descriptor is not compatible/working anymore in KMS/DRI mode

Video Driver and Timings

  • As stated by Raspberry Pi engineers, a full KMS driver for Pi4 is being worked on by a subcontractor, and will be mainlined in the future.
  • Pi4 still has the same DPI, DSI, and VEC blocks. The HVS and HDMI blocks have significant updates, and the pixel valve routing has been changed.
  • The I2C block connected to the HDMI ports is different from previous versions.
  • Using the old legacy driver in Pi4 results in the following issues:
    • fbset only works in 32 bit depth mode
    • fbset is not able to properly change the framebuffer size, hanging or setting a virtual resolution instead
    • tvservice/vcgencmd only works with composite and HDMI
  • Using the new KMS video driver results in the following issues:
    • Custom timings (drm modes) are not supported when using GPIO DPI
    • When using DPI, there is not edid information available
    • Neither tvservice nor vcgencmd are supported by any means

Additional Misc. Blocking Issues

  • SDL2 version provided by Raspbian not being compatible with SDL2 in CLI with no X
  • Image formats and True Type font modules not supported in SDL2 Pi version
  • Changes in config.txt

Current Status


  • A new fully refactored UI based on Sprites is being developed. Current pre-Alpha is working properly in both SDL1 software render, and SDL2 hardware accelerated mode. There is a bug in Pygame SDL2 that prevents us from reinit the video while the frontend is running that is already addressed by Pygame development team. Since Pygame SDL2 still has issues with software rendering, we will continue using the current Pygame SDL1 in soft. mode until the patch arrives and we can migrate to the new SDL2 hard. accel. version.
  • All issues with ALSA audio have been resolved.
  • USB ordering engine have been updated, so it is working properly again. When the migration to SDL2 is feasible, a refactor of this module will be required due to changes in the way SDL2 works with joysticks as compared with SDL1.

Device Tree Overlay .dtbo

  • A new universal custom .dtbo has been created to support all DPI RGB addons. The same is already working properly in KMS mode.

Video Driver and Timings

  • KMS driver is almost complete and working properly in Raspberry Pi4.
  • Retroarch is now also working properly with KMS video driver.
  • A new custom kernel module has been created to provide a bridge between KMS and DPI, and also provide a full timing database (due to edid lack).
  • A new kernel patch has been created to support interlaced (480i) resolutions.
  • A new feature was introduced in Retroarch to support manual video mode switch via special configuration file.

Additional Misc. Blocking Issues

  • Retropie SDL2 compilation is now fully working in pure CLI mode.
  • We now only use sprite based fonts and indexed BMP image formats so no more compatibility or performance issues will be faced in this regard in the future.
  • All config.txt issues were addressed.

Final Words

A lot of work and improvements have been done and still much more is still pending, but the current status looks promising. Do note that we are in direct discussions with many of top people in the scene for making all this things a reality in the mid term. Some of the people involved are Cpasjuste, Alphanu, Substring, Calamity, robertpfeiffer, digitalLumberjact and of course me (rTomas) and aTg from RGB-Pi team.

To be continued...