Raspberry Pi GPU Driver Turns Out To Be Crap
Up to this point the graphics driver for the BCM2835 and its VideoCore processor found in the Raspberry Pi was backed by an open-source kernel driver but a closed-source user-space. Today -- through cooperation with Broadcom -- the Raspberry Pi Foundation was able to release the user-space bits to to this driver. Therefore there was then a full open-source ARM graphics driver with OpenGL ES 2.0, EGL, OpenMAX IL, etc. The one caveat though was that a firmware blob must be loaded at boot.
For Radeon hardware and other GPUs this isn't too much of a big deal to load firmware/microcode at boot time, but for this Broadcom VideoCore driver it's a different story. It turns out that Broadcom shoved much more into their firmware binary blob than just some basic setup routines and other non-critical tasks. Broadcom's OpenGL ES (GLES) implementation is even lodged within this GPU driver firmware.
Luc Verhaegen, the former RadeonHD driver developer as well as VIA Unichrome driver developer and now working on reverse-engineering the ARM Mali graphics through the Lima driver project, was quick to point out in a Raspberry Pi comment the shortcomings of this open-source driver. "Erm… Isn’t all the magic in the videocore blob? Isn’t the userland code you just made available the simple shim that passes messages and data back and forth to the huge blob running on the highly proprietary videocore dsp?"
David Airlie has written a blog post also writing about how this open-source Raspberry Pi graphics driver isn't too good due to the big firmware blob. This is one rare topic where David Airlie and Luc Verhaegen actually agree on something: with shoving so much into this firmware blob, including the OpenGL ES implementation, you really aren't left to be able to do much. Airlie writes on his blog, "You cannot make any improvements to their GLES implementation, you cannot add any new extensions, you can't fix any bugs, you can't do anything with it. You can't write a Mesa/Gallium driver for it. In other words you just can't."
David Airlie, who also acts as the Linux kernel DRM maintainer, said via this blog post that the Broadcom driver will not be merged into the mainline Linux kernel. "This is like Ethernet cards with TCP offload, where the full TCP/IP stack is run on the Ethernet card firmware. These cards seem like a good plan until you find bugs in their firmware stack or find out their TCP/IP implementation isn't actually any good. The same problem will occur with this. I would take bets the GLES implementation sucks, because they all do, but the whole point of open sourcing something is to allow other to improve it something that can't be done in this case. So really Rasberry Pi and Broadcom - get a big FAIL for even bothering to make a press release for this, if they'd just stuck the code out there and gone on with things it would have been fine, nobody would have been any happier, but some idiot thought this crappy shim layer deserved a press release, pointless."