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]); } ... } |
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