The purpose of this page is to describe how the ARM MALI driver is integrated into Xilinx
static const struct dev_pm_ops mali_dev_pm_ops = { #ifdef CONFIG_PM_RUNTIME .runtime_suspend = mali_driver_runtime_suspend, .runtime_resume = mali_driver_runtime_resume, .runtime_idle = mali_driver_runtime_idle, #endif .suspend = mali_driver_suspend_scheduler, .resume = mali_driver_resume_scheduler, .freeze = mali_driver_suspend_scheduler, .thaw = mali_driver_resume_scheduler, .poweroff = mali_driver_suspend_scheduler, }; #endif |
mali_platform_device_register() { ... pm_runtime_set_autosuspend_delay(&&(mali_gpu_device.dev), 1000); pm_runtime_use_autosuspend(&&(mali_gpu_device.dev)); #endif pm_runtime_enable(&&(mali_gpu_device.dev)); ... } |
mali_scheduler_queue_gp_job() { ... _mali_osk_pm_dev_ref_get_async() ... } mali_scheduler_complete_gp_job() { ... _mali_osk_pm_dev_ref_pet_async() ... } |
mali_pm_common_suspend() { ... if (0 < num_groups_down) { mali_executor_group_power_down(groups_down, num_groups_down); } for (i = 0; i < num_l2_down; i++) { mali_l2_cache_power_down(l2_down[i]); } ... } |
Mali headless egl backend now supports pixmap surface (particularly arm specific handle for dmabuf).
Should see incremental performance change over render to texture.
Customers can fetch the binaries from github repo: https://github.com/Xilinx/mali-userspace-binaries/tree/rel-v2020.1
Upgrade to r9p0-01rel0:
Kernel patches can be found here: https://github.com/Xilinx/meta-xilinx/tree/rel-v2019.2/meta-xilinx-bsp/recipes-graphics/mali/kernel-module-mali
Note: From 2019.2 onwards Xilinx will not host the binaries in the lounge
Customers can fetch the binaries from github repo: https://github.com/Xilinx/mali-userspace-binaries/tree/rel-v2019.2
2019.1:
From 2019.1 release, selecting Mali backend is decoupled from 'DISTRO_FEATURES', another variable is introduced 'MALI_BACKEND_DEFAULT' to create proper link. By default, plnx build system will try to package all the backends in the rootfs and depending upon the value of 'MALI_BACKEND_DEFAULT' we create a link to the correct backend. Fbdev, X11, wayland and headless are the choices we have, assigning incorrect name would yield a link to headless.
For example: Once you have selected libmali through 'petalinux-config -c rootfs', add following parameters to <plnx-proj-root>/project-spec/meta-user/conf/petalinuxbsp.conf to select wayland.
MALI_BACKEND_DEFAULT = "wayland" |
Users can still modify DISTRO_FEATURES, in order to reduce the size of rootfs, but remember selecting Mali backend wont be impacted.
2018.3:
From 2018.3 release, Mali will support wayland/GBM backend in addition to fbdev and X11.
For example: Once you have selected libmali through 'petalinux-config -c rootfs' unselect 'packagegroup-petalinux-matchbox' and 'packagegroup-petalinux-x11' and add following parameters to <plnx-proj-root>/project-spec/meta-user/conf/petalinuxbsp.conf
DISTRO_FEATURES_append = " wayland" IMAGE_INSTALL_append = " packagegroup-petalinux-weston" |
This packagegroup ensures all the essential wayland/weston packages are packaged into the rootfs for having a wayland/weston application work out of the box. On boot, export following parameter in your terminal console.
export XDG_RUNTIME_DIR=/run/user/0/ |
Now, you can run sample benchmarking application glmark2-es2-wayland and glmark2-es2-drm.
By default, Mali supports X11 backend. Just select libmali-xlnx package from 'petalinux-config -c rootfs'. The root filesystem should now have libmali with X11 support. Also, please select at least one window manager.
For example: packagegroup-petalinux-matchbox.
2019.1:
From 2019.1 release,to select fbdev, Just select libmali-xlnx package from 'petalinux-config -c rootfs' and add the following lines to <plnx-proj-root>/project-spec/meta-user/conf/petalinuxbsp.conf
MALI_BACKEND_DEFAULT = "fbdev" |
2018.3:
Up to 2018.3, in order to have Mali fbdev backend, please add following lines to <plnx-proj-root>/project-spec/meta-user/conf/petalinuxbsp.conf
DISTRO_FEATURES_remove = "x11" |
2019.1:
From 2019.1 onwards, please add following lines to <plnx-proj-root>/project-spec/meta-user/conf/petalinuxbsp.conf.
MALI_BACKEND_DEFAULT = "headless" |
2018.3:
This backend is available from 2018.3 release, please add following lines to <plnx-proj-root>/project-spec/meta-user/conf/petalinuxbsp.conf.
DISTRO_FEATURES_remove = "x11 fbdev" |
Benchmark:
To run a benchmark example for any backend (except headless-egl) please add below lines to build/conf/local.conf
IMAGE_INSTALL_append = " glmark2" |
In addition to enable Wayland Mali backend support above, select 'packagegroup-petalinux-qt' in 'petalinux-config -c rootfs' and perform a petalinux-build.
Wayland plugin:
Once weston shows up, export the following environment variables for wayland plugins.
export XDG_RUNTIME_DIR=/run/user/0/ && export QT_QPA_PLATFORM=wayland && export QT_WAYLAND_SHELL_INTEGRATION=wl-shell |
Now you can run any example applications like /usr/share/qt5/examples/opengl/textures/textures
KMS/GBM plugin:
For this plugin ensure that weston is not running and export the following environment variables
export QT_QPA_PLATFORM=eglfs && EGLFS_DEVICE_INTEGRATION=eglfs_kms |
Now you can run any example applications like /usr/share/qt5/examples/opengl/textures/textures.
2019.1:
If DISTRO_FEATURES are not modified you should have all backends packaged in the rootfs. Now, you can switch between muliple backends using update-alternatives commands as follows:
To Update a link:
update-alternatives --install /usr/lib/libMali.so.8.0 libmali /usr/lib/fbdev/libMali.so.8.0 90 |
To remove a link:
update-alternatives --remove libmali /usr/lib/fbdev/libMali.so.8.0 |
For more info, perform update-alternatives --help
Alternate solution: Users can always modify links using "ln" commands