ARM Mali GPU

Upstream software, aka Lima/Panfrost
Kernel modules
Kernel modules are included from kernel 5.2+. But, you will need kernel 5.10+ for Bifrost: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=72ef7fe96fd20d3d0e538e165b393819f99870ad
But only few boards have GPU enabled in the device tree.
- Lima supports Utgard Mali GPU: Mali-400 / Mali-450 GPU
- Panfrost supports Bifrost and Midgard Mali GPU: Mali-Gxx GPU and Mali-T6xx / Mali-T7xx / Mali-T8xx GPU
User-space
For user-space, you need Mesa 19.2+ (19.1.x is not very stable nor usable for lima/panfrost) and kernel 5.2+. The package to install is Mesa-gallium.
You can install some test binaries to try it, such as kmscube, glmark2, Mesa-demo or Mesa-demo-x.
Mesa/Lima
Mesa/Lima supports Arm Mali Utgard 400/450 embedded GPUs.
For LIMA, you may need to tweak the xorg configuration by creating /etc/X11/xorg.conf.d/20-lima.conf file: (Source: https://gitlab.freedesktop.org/lima/web/-/blob/519a5b26596cfe46c3e4dc80d802780b2b3c61b1/README.md#xorgconf)
Section "ServerFlags" Option "AutoAddGPU" "off" Option "Debug" "dmabuf_capable" EndSection Section "OutputClass" Identifier "Lima" MatchDriver "<display DRM driver>" Driver "modesetting" Option "PrimaryGPU" "true" EndSection
Where you replace <display DRM driver> with the right DRM driver name, depending on your SoC:
- Allwinner: sun4i-drm
- Amlogic: meson
- Ericsson MCDE: mcde
- Exynos: exynos
- Rockchip: rockchip
- Tinydrm: tinydrm
Mesa/Panfrost
Mesa/Panfrost supports Arm Mali Midgard and Bifrost GPUs.
Mesa 19.2 and 19.3 panfrost support Mali T760, T820 and T860, which are found on RK3288, RK3399, and S912 SoC.
Mesa 20.0 panfrost adds support for Mali T720, which is found on Exynos 7580, MT6735, and MT6753 SoC.
Mesa 20.3 panfrost (and kernel 5.10) adds support for some Bifrost GPU:
- Mali G72 found in Exynos 7 9610, Exynos 9 9810, Helio P60/P70 and Kirin 970, SoC
- Mali G31 found in Amlogic S905, RK3326 and Allwinner H616 SoC
- Mali G52 found in Amlogic S922, RK3530, Kirin 810 and Helio P65/G70/G80/G85 SoC
Mesa 21.2 panfrost adds support for Bifrost GPU G52r1, found in Rockchip SoCs RK3566 and RK3568.
Mesa 22.0 panfrost adds support for:
- Midgard GPU:
- T830 found in Kirin 65x SoC
- T880 found in Kirin 95x and MediaTek Helio X20/X27 SoC
- Bifrost GPU:
- G71: found in Exynos 8895 SoC
- G51: found in Kirin 710 SoC
- G76: found in Helio G90T/G95 SoC
Mesa 22.2 panfrost adds support for:
- Bifrost GPU:
- G57: found in MediaTek MT8192 SoC (requires kernel 5.20+)
Mesa 22.3 panfrost adds support for:
- Midgard GPU:
- T620 found in Exynos 5420/5422/5430/5800 SoC
If you try to run it on an unsupported Mali version, you will get panfrost: Unsupported model %X error message. (See pan_props.c#L56).
Downstream software
Kernel modules
Installation
Mali kernel packages are available in devel:ARM:Factory:Contrib:Mali:
- mali-bifrost-kmp: Mali-Gxx GPU kernel modules
- mali-midgard-kmp: Mali-T6xx / Mali-T7xx / Mali-T8xx GPU kernel modules. Please note that mali-bifrost-kmp should also work on those plaforms as the kernel driver sources are shared so far
- mali-utgard-kmp: Mali-400 / Mali-450 GPU kernel modules
You may need to update your device tree to enable it. You can check if mali node is already in your Device Tree with:
sudo dtc -I fs /proc/device-tree | grep mali
For details to add the mali node, see driver/product/kernel/Documentation/devicetree/bindings/* files in packages sources: devel:ARM:Factory:Contrib:Mali
Here is an example how to add the mali node for HiKey960: https://git.linaro.org/people/manivannan.sadhasivam/hikey.git/commit/?id=a20633b159f885bc8a62234831e9b7a0151a151b
Parameters
You can set power_policy with /sys/module/mali_kbase/drivers/platform:mali/e82c0000.mali/power_policy on:
- coarse_demand (default)
- always_on
Binary user-space
Installation
See https://developer.arm.com/products/software/mali-drivers/user-space to download and install binaries libraries which depends on your board.
Enable OpenCL
Once kernel driver and user-space libraries are installed, you can enable OpenCL support with:
echo "libmali.so" | sudo tee /etc/OpenCL/vendors/mali.icd
And check it is found with:
sudo clinfo