ARM Mali Midgard GPU driver packages in Debian (work in progress)

This is a sub-page of MaliGraphics.

The ARM Mali Midgard GPU series include all the devices from Mali-T604 to Mali-T880.

More general information about the ARM Mali technology can be found on Wikipedia.

First phase: end-to-end support on a single platform

(completed April 2018)

The first phase is to get something that works on one platform. The original Firefly board (rk3288 SoC, ARMv7 Cortex-A17, Mali-T760 MP4) has been chosen for this purpose as user-space binary drivers are available for this GPU with a range of APIs and graphical windowing systems (X11, Wayland/DRM, GLES 3.1, OpenCL). It's also a platform of choice to cover the ARMv7 architecture. Other devices are based on the same RK3288 SoC (ASUS C201P Chromebook); the same drivers should in principle work with them, depending on the status of clock and regulator drivers, device trees...




1. Merge the device tree patches into mainline kernel


cover dt-bindings rk3288 merged in v4.13

2. Add backports for patches in step 1. to the Debian 4.9 and 4.11 kernel packages


#865646 Stretch sid

3. Create a mali-midgard-dkms r16p0 package for Debian kernel v4.9


mali-midgard.git mali-midgard-dkms in sid package tracker

4. Create a user-space non-free r12p0 package for RK3288 SoC (Mali-T760 armhf)


5. Update mali-midgard-dkms for unstable kernel (4.14, 4.15, 4.16).


Mainline kernel branch with Mali Midgard driver, tested on Firefly: linux-4.13-rc6-mali-firefly

Related bug fix, to get the GPU regulator driver module to load automatically during boot on Firefly: regulator driver fix for mainline

Second phase: arm64 platform

Then adding an arm64 platform such as Juno would make sense as a second phase:

  1. Merge the device tree GPU node for the Juno chip in mainline
  2. Update the mali-midgard-dkms package if needed so that it builds for arm64 (done)
  3. Add backport from step 1. to the Debian kernel package
  4. Create a user-space non-free package for the Juno SoC (Mali-T624 arm64, done)

Following that, new platforms and new versions of the kernel and user-space drivers can be added.

placeholder documentation

Linux kernel patches

Kernel patches in the device tree are required. A patch is needed on each platform type to describe the GPU hardware properties, for the mali_kbase driver to read. Some more patches are needed to get the driver to build with kernels newer then 4.9 (for r16p0) due to API and code changes. Newer releases already build against newer kernels.

Kernel module (dkms)

This is provided by the mali-midgard-dkms package. This single out-of-tree Linux kernel driver supports all the Midgard GPU device types.

User-space drivers (non-free)

These are provided by the mali-midgard-driver source package. Available binaries depend on what ARM releases. Each binary targets a specific GPU type, CPU architecture, display sub-system, windowing system (X11, Wayland, ...) and graphics or compute APIs (GLES, Vulkan, OpenCL...), and is tied to a particular version of the kernel driver (or a small range of versions). i.e. r16 of the user space driver needs r12-r16 of the kernel driver.

Binary packages are named GPUfamily-GPUtype-windowingsystem-driver. i.e. mali-t76x-x11-driver, mali-t62x-fbdev-driver etc.