12 janv. 2013

Open source drivers for SoC GPUs

More and more ARM SoCs are targetted by OSS developpers in order to free their GPU from proprietary blobs. While the current free drivers are not fully functionnal, their development pace is quit fast and most of them should already be labeled "worth a look".

Let's dive in this world for a short while...

Known GPUs and drivers for ARM SoCs

The ARM SoC world is full of GPUs which are unknown to the public. They emmerge because of the success of the current generation of mobile platform. Let's cite a few to begin with :

  • SGX 5xx series, by Imagination : used within the OMAP4 line of processors as well as in other products (including some Intel APUs). No spec, no driver source, binary blob only. The same goes for other Imagination GPU - including the recent 543 MP4+ (PS Vita). No good news for the 6xx series. Texas Instrument was trying to negotiate with Imagination to release some source code but that discussion most likely failed (TI annouced they will not make any other CPU, meaning that Imagination has no incentive to free their source code).
  • VideoCore, by Broadcom : used (for example) by the Rapsberry Pi. An earlier announce said that the Rapsberry Pi foundation released a source version of the driver. This is not exactly true: the whole 3D logic is still hidden in closed binaries.
  • GeForce ULP, by NVIDIA : this GPU can be found in the Tegra line of SoCs. NVIDIA didn't release any source version of the driver but Erik Faye-Lund is doing a reverse engineering of the existing binary driver. So far, the results are good. See github.
  • MALI, by ARM : MALI cores are found in a large number of SoCs, including the Exynos 4 line by Samsung. This is a powerfull GPU and while ARM haven't released any source version of the driver, it has been reverse engineered and works quite well (nearly full 3D support with OpenGL ES 2.0 shaders). The open source driver has been code-named Limadriver. It's not yet production ready but it can probably be used on several baord - including the ODROID-U2.
  • Adreno, by Qualcomm : this GPU is found in the Snapdragon line of product. The vendor distributes binary blobs but Rob Clark (from TI) works on a reverse engineered open source version of the driver - named freedreno. The Adreno is based upon the Radeon architecture (hence the name, which is an anagram of Radeon).
  • Vivante, by Vivante Corp : the GPU is widely available. You can (for example) find them on a large number of Marvell SoCs. Again, Vivante Corp released a source version of the driver - and the community (lead by Wladimir J. van der Laan) is studying this. See github.

I migh have missed a few esoteric GPU here and there. Some of the listed drivers are restricted to only one SoC vendor (NVIDIA bundles the GeForce ULP with the Tegra SoCs; Broadcom ties the VideoCore GPUs with their own SoCs - both ARM and MIPS; Adreno is own by Qualcomm following the sell of the product line by ATI a few years ago). Others are sold to CPU founders as an IP block.

Conclusion: which GPU should I choose?

Assuming the question is solely based upon the availabilty of open source drivers, I would go with some Vivante GPU. The fact that the company released their GPU driver source code is of interest. The fact that the community is working hard to get these drivers to a good quality level is quite important too. The CuBox dev board uses a Marvell SoC that integrates a Vivante GPU[1].

After that, I would propose you to try any recent MALI GPU (the MALI 400 is ubuquitous in Cortex A9 processors). It's a very powerfull processor and the limadriver is in very good shape. Their is stille some work to do but the development is going fast. The ODROID-U2 is using an overclocked MALI 400 GPU.

I would place the Adreno and the GeForce ULP on par. Their drivers are quite good - a bit lighter than the limadriver. The problem lies in the fact that these processors are not that easy to find on low cost development boards. The OUYA console will ship with a Tegra 3 and should be easily rootable so the GeForce ULP might win.

Finaly, I would not use any SGX or VideoCore GPU unless I have no other choice. The SGX can be found on many low-cost dev board (Pandaboard, Beagleboard), and the Rapsberry Pi is powered by a VideoCore. I would treat these as bad news since there is no free (as in speech) 2D/3D driver for them. TI releases new binary blobs for the SGX540 - these might be used on other platforms but these blobs are inherently limited (want a specific hardware+software setup? too bad...).


[1] too bad I don't own one...


1. Le mercredi, février 13 2013, 11:28 par Wladimir


Here the developer of the Etnaviv driver (open source Vivante). I agree Vivante is one of the better choices (though freedreno/mali are far along too) for an open source SoC. And it is a wise choice to void Imgtec PowerVR at all costs, in addition to being hostile to open source they use a tower-of-shit sw/hw architecture.

I just wanted to add that Vivante did not release their full driver as open source. The kernel component is available as open source (GPL) however the user space components which consist of the GLES(2) implementations and a HAL library are not. These, however, contain the bulk of the driver logic. My work was to painstakingly find out and document the state bits, command stream, and shader ISA by studying how these blobs work by examining and manipulating command stream dumps. And now I am working on using this information to build a Gallium driver.

2. Le mercredi, février 20 2013, 17:10 par Emmanuel Deloget

I must add that I missed something important: HHH is working on an open source driver for the Broadcom Videocore GPU. On some SoC, the GPU is responsible for bringing the board up so this driver is clearly important to the Open Source community.

3. Le dimanche, mai 5 2013, 16:12 par Popolon

You forgot to mention the Cubieboard, an opensource hardware that use mali 400 too, a more powerfull cpu (cortex A9) than the raspberry pi and a sata connector and a good VPU that works on linux (with the help of allwinner SoC builder) and works with xmbc, for the same price than the rasb.pi. There are also som pc on stick with Rockchip with Mali 400MP GPU that works on some fine tuned linux distro. All these driver are half closed, but at least, works on linux.

4. Le lundi, mai 6 2013, 11:03 par Emmanuel Deloget

Hi Popolon,

I didn't forgot to cite the cubieboard - the article is not about board that uses a particular GPU but about the GPUs themselves and their corresponding drivers. But you're right: the cubieboard is definitely something to check. Allwinner CPUs are cheap and power some interesting devices (including low cost tablets - and by low cost, I mean low cost yet powerful Android tablets such as this one - Cortex A8 + Mali 400 + 9'' capacitive touchscreen, for less than 65€).

BTW the article is quite recent but already out-of-date. I'm going to write another article on the subject (I guess I'll write one every two or three month as everything moves quite fast).

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Fil des commentaires de ce billet