AMD Versal AI Edge Series Gen 2 - Mali-G78AE Linux DDK
The purpose of this page is to describe how the ARM MALI-G78AE Linux driver and user-space drivers are integrated into AMD Versal AI Edge Series Gen 2 and Versal Prime Series Gen 2 devices.
GPU SW Stack Overview and Features
Versal AI Edge Series Gen 2 SoC uses Arm® Mali-G78AE GPU for 2D/3D graphics acceleration. Mali-G78AE is the second generation Valhall architecture-based GPU and first to be developed for autonomous use cases to suit both automotive and industrial applications.
Refer to UG1784 for more details about Software stack and IP features.
Driver Access & License Information
malig78ae-kbase/license.txt at r54p1-12eac0 · Xilinx/malig78ae-kbase
GitHub - Xilinx/malig78ae-arbitration
Yocto Build Steps
Create a Yocto repository by following the steps mentioned at AMD EDF Getting started.
Adding custom packages in yocto by adding below lines to build/conf/local.conf
Enabling linuxfb plugin for QT (This is optional step. Only needed to test linuxfb plugin)
IMAGE_INSTALL:append = "packagegroup-xilinx-qt” PACKAGECONFIG:append:pn-qtbase = " linuxfb"Enabling Virtual KMS in kernel configuration for running fbdev applications
Add config file with VKMS kernel config at meta-xilinx/meta-xilinx-core/recipes-kernel/linux/linux-xlnx/config_changes.cfg
CONFIG_DRM_VKMS=yAdd this config file in meta-xilinx/meta-xilinx-core/recipes-kernel/linux/linux-xlnx.inc
SRC_URI += "file://config_changes.cfg "Fbdev applications can also run on HDMI-based designs by enabling the HDMI modules
IMAGE_INSTALL:append = " kernel-module-hdmi21"
Enabling configs for generating gpu-unfied-sdk applications
EXTRA_IMAGE_FEATURES = "debug-tweaks dev-pkgs" IMAGE_INSTALL:append = " glmark2 packagegroup-core-weston kmscube wayland-protocols wayland vulkan-loader vulkan-headers libpng opencl-headers opencl-headers-dev opencl-icd-loader-dev libmali-xlnx-dev glm-dev vulkan-tools"For running fbdev applications, enable HDMI or VKMS.
Building Image and rootfs
MACHINE=amd-cortexa78-mali-common bitbake edf-linux-disk-imageGenerating SDK
MACHINE=amd-cortexa78-mali-common bitbake edf-linux-disk-image -c do_populate_sdk cd build/tmp/deploy/sdk/ ./amd-edf-glibc-x86_64-edf-linux-disk-image-cortexa72-cortexa53-amd-cortexa78-mali-common-toolchain-26.06+release-<...>.shGenerating boot.bin
Example GPU Applications
Prerequisites
GPU Unified SDK Application Development
SDK repo:
GitHub - Xilinx/gpu-unified-sdk
Source SDK
unset LD_LIBRARY_PATH source /yocto/build/tmp/deploy/sdk/environment-setup-cortexa72-cortexa53-amd-linuxConfigure and build
export AMD_SDK=<SDK_INSTALL_PATH> cmake -G Ninja \ -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_TOOLCHAIN_FILE=sdk.cmake \ -D SDK_Platform=<wayland/fbdev> \ -D SDK_PLATFORM_TARGET=versal-2ve-2vm \ -D CMAKE_MAKE_PROGRAM=ninja \ -D GLES_WINDOW_W=3840 \ -D GLES_WINDOW_H=2160 \ -B build_dir ninja -C build_dir
Running applications
Wayland backend
Weston will be launched based on above steps
Running glmark2
export XDG_RUNTIME_DIR=/run/ glmark2-es2-wayland
QT application
export DISPLAY=:0.0 export XDG_RUNTIME_DIR=/run/ export QT_QPA_PLATFORM=wayland export QT_WAYLAND_SHELL_INTEGRATION=xdg-shell cd /usr/share/examples/widgets/animation/animatedtiles/ ./animatedtiles cd /usr/share/examples/widgets/animation/stickman/ ./stickman cd /usr/share/examples/widgets/widgets/calculator/ ./calculator cd /usr/share/examples/widgets/widgets/analogclock ./analogclockFbdev backend (Need to run with VKMS or HDMI dual display design)
QT application
eglfs plugin
export DISPLAY=:0.0 export QT_QPA_EGLFS_INTEGRATION=eglfs_kms export QT_QPA_EGLFS_FB=/dev/fb0 export QT_QPA_PLATFORM=eglfs::fb=/dev/fb0 export QT_QPA_GENERIC_PLUGINS=evdevkeyboard,evdevmouselinuxfb plugin
export DISPLAY=:0.0 export QT_QPA_EGLFS_INTEGRATION=linuxfb export QT_QPA_PLATFORM=linuxfb::fb=/dev/fb0 export QT_QPA_EGLFS_FB=/dev/fb0 export QT_QPA_EGLFS_WIDTH=1920 export QT_QPA_EGLFS_HEIGHT=1080 export QT_QPA_GENERIC_PLUGINS=evdevmouse,evdevkeyboard export QT_QPA_ENABLE_TERMINAL_KEYBOARD=1 export QT_QPA_FONTDIR=/usr/share/fonts/ export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/plugins export QML2_IMPORT_PATH=/usr/lib/qmlRunning application
cd /usr/share/examples/widgets/animation/animatedtiles/ ./animatedtiles cd /usr/share/examples/widgets/animation/stickman/ ./stickman cd /usr/share/examples/widgets/widgets/calculator/ ./calculator cd /usr/share/examples/widgets/widgets/analogclock ./analogclock
eglfbdev
export DISPLAY=:0.0 ./eglfbdev -p -f 100000eglfbdev_gears
export DISPLAY=:0.0 ./eglfbdev_gears -p -f 100000
Headless
glmark2 application
glmark2-es2-gbm --winsys-options drm-device=/dev/dri/card0 --off-screen
Troubleshooting
If GPU kernel modules have not loaded properly.
Make sure kernel modules are loaded properly and /dev/mali0 node is populated before executing GPU applications; if not then try removing all GPU kernel modules and reloading again using the below commands:
rmmod /lib/modules/{kernel_version}/*.ko /usr/bin/load-mali-modules.sh
Make sure that the MMI-DC display is up before running GPU apps. You can run the modetest pattern to confirm display sanity, for example:
modetest -M mmi-dc -s 45:1920x1080-60@XR24
CTS Test results
Release Notes
2026.1
Features:
Upgrade to r54p1-12eac0
System shutdown handler support
Fixes:
Fixing EAM error observed on loading G78AE kernel modules
Launch weston by default on kmscon login.
Fix translation faults by using dma_alloc_pages for 40-bit GPU addressing
2025.2
Features:
Add support for selecting a specific /dev/dma_heap region.
Add support for updating max GPU clock without DVFS
VK_KHR_wayland_surface extension support for Vulkan applications
Fixes:
Fixing GPU modules autoload issue
Fixing GPU translation fault issues
Switch to OpenCL ICD Loader
Filter libs now referencing libmail with version suffix ".0" in FILTER dynamic section.
2025.1
Supports ARM Mali Linux DDK r51p0-00eac0
Supports OpenGLES 3.2, Vulkan 1.2 and OpenCL 3.0 APIs
Supports Wayland (Default), FBDev and Headless backends
GPU Multi-Partition support (2 partitions)