Direct rendering support for ARM-based GPUs

Registered by Jesse Barker

* Kernel support for ARM-based GPUs
* Kernel memory management (GEM, TTM, UMP, etc.)
* DRM/DRI support for non-PCI attached GPUs
* Consolidated Xorg DRI framework for ARM GPUs

Blueprint information

Status:
Complete
Approver:
Jesse Barker
Priority:
High
Drafter:
Sachin Gupta
Direction:
Needs approval
Assignee:
Chunsang Jeong
Definition:
Approved
Series goal:
Accepted for 11.05
Implementation:
Implemented
Milestone target:
milestone icon 11.05-final
Started by
Jesse Barker
Completed by
Jesse Barker

Related branches

Sprints

Whiteboard

[asac Nov 22]: work items need to be flashed out still

[JesseBarker Oct 21 2010]
It seems like at a minimum, support for DRI2 and EXA would be a minimum.
With respect to the overall "framework" for an xorg video driver, does it make sense to switch to Gallium for better integration with OpenGL and ES? I have experimented with this on an Atom netbook (about a month ago), and while performance of the i915 xorg state tracker target from the Gallium tree did not meet that of the contemporary xf86-video-intel, it was certainly functional.

[ChrisHalseRogers (RAOF) 22 Oct 2010]
Gallium is absolutely what upstream mesa developers would suggest - it's a better match for modern shader-full GPUs and you get more useful infrastructure, in the form of the GL, GLES, OpenVG, and other state trackers for free.
The i915 gallium driver is probably not a good test-case, as it's the driver with the second least amount of work put into it (i965 has the least, and essentially doesn't work at all). I would expect a well-developed gallium driver to do significantly better.

[JesseBarker Oct 22 2010]
Good to know about i915. My plan was to do an apples-to-apples comparison between a current xorg video driver and a gallium based one, and the intersection of available hardware and software stacks made the i915 my only viable choice. I'd have preferred to use Nouveau, but in the ARM-based world, that wasn't possible at the time. The other topics in this discussion are there to let us see where we are and what needs to get done. At the time I did this experiment, only PCI-attached graphics would even be driven by the stack (DRM/DRI), so that suggests some additional work before we could even think about a Gallium-based xorg driver for any ARM-based graphics. Of course, it's possible that some of this has been done since my little experiment.

[jazh Oct 24 2010]
As I know, Qualcomm has implemented DRI/DRM support for their ARM based GPU. The links are given below for xf86-video-msm and drm support in kernel.
https://www.codeaurora.org/gitweb/quic/le/?p=graphics/xf86-video-msm.git;a=tree
https://www.codeaurora.org/gitweb/quic/le/?p=kernel/msm.git;a=tree;f=drivers/gpu;h=bd79a9e0a1fedb2fd42a8f393f83549388f13f2b;hb=refs/heads/msm-2.6.35

[JesseBarker Dec 23 2010]
For reference, here are what the upstream folks will want to see from the GPU vendors:
http://www.x.org/docs/AMD/
http://intellinuxgraphics.org/documentation.html
with respect to hardware specifications. Missing from the x.org AMD page, but here on the AMD site:
http://developer.amd.com/gpu_assets/R700-Family_Instruction_Set_Architecture.pdf
is the R700 ISA spec (the R600 version is at the x.org link).

[ChunsangJeong Jan 12 2011]
Here is Mali GPU(Mali400) kernel support driver with UMP
http://www.malideveloper.com/open-source-mali-gpus-linux-kernel-device-drivers.php
and Mali EXA/DRI2 modules as xf86-video-mali,
http://www.malideveloper.com/open-source-mali-gpus-linux-exadri2-and-x11-display-drivers.php
plus, here is gralloc module for Android which uses UMP instead of PMEM. It can be a reference how to use UMP in user space.
http://www.malideveloper.com/open-source-mali-gpus-android-gralloc-module.php

[rajeev-kapoor Jan 21 2011]
There are many work items but not yet assigned to any milestone. Please assign to milestone such as 11.01 (for 20th Jan delivery), 11.02 (for 17 Feb delivery), 11.03 (for 24 March delivery) etc. I.e. every milestone need to be finished before end of 2nd last thursday of every month.

[rajeev-kapoor Jan 21 2011]
There does not seem to be any progress on any work items because all work itrems are still in TODO state and not DONE. Where as task seems to be started few months back. Please update work items and change to DONE for the completed ones.

[ChunsangJeong Feb 25 2011]
Create repo for Mali, UMP and Mali_drm drivers
git://git.linaro.org/people/chunsangjeong/mali.git
Create repo for Mali x11 drivers
git://git.linaro.org/people/chunsangjeong/xf86-video-mali.git

[ChunsangJeong Mar 18 2011]
Removed 2 items below and will continue them for next release because UMPv2 won't be released in 11.05;
Study UMPv2 API scoping against TTM
Make sure UMP can be pushed upstream
Make sure xf86-video-mali can be pushed upstream

[ChunsangJeong Apr 11 2011]
Removed 2 items below, which will be continued in next release with further investigation.
Investigate the recent KMS source which allows KMS to allocate a buffer without using DRM
Update unified memory document with requirements and use cases if it needs
And, can anybody give the pointer of reference source which allows KMS to allocate a buffer without using DRM?

[ChunsangJeong Apr 13 2011]
Updated Mali&UMP driver with r2o1-05rel1 released at 1st Apr. from ARM
Mali kernel support driver with UMP
http://www.malideveloper.com/open-source-mali-gpus-linux-kernel-device-drivers.php
Updated mali.git in git.linaro.org
http://git.linaro.org/gitweb?p=people/chunsangjeong/mali.git;a=summary
There wasn't any change in Mali EXA/DRI2 module
http://www.malideveloper.com/open-source-mali-gpus-linux-exadri2-and-x11-display-drivers.php

[ChunsangJeong Apr 27 2011]
For reference, here is ION, a memory manager from Google.
https://review.source.android.com/#change,22239

(?)

Work Items

Work items for 11.01:
Get familiar to Linaro development environment and process: DONE
Study ARM's DRI/EXA and X11 EGL implementation on Mali driver: DONE

Work items for 11.02:
Study DRM driver API on Mesa: DONE
Study DRM standard specification: DONE
Study Mesa for implementations of DRI2: DONE
Setting up build environment for Orion board: DONE
Implement Mali DDK to kernel and verifying it with sample application: DONE
Implement UMP to kernel: DONE
Modify Makefiles and create Kconfigs for Mali and UMP: DONE

Work items for 11.03:
Study GEM's memory management API and architecture: DONE
Study ASHMEM memory management architecture: DONE
Study TTM's memory management API and architecture: DONE
Study UMP kernel driver architecture and user space driver on ARM Mali release: DONE
Make repository and upload source to git.linaro.org: DONE
Refactoring ARM’s GPU Drivers structure, especially Kconfig and platform dependent part: DONE
Study VCM & UMP architecture for MMU-based devices: DONE

Work items for 11.04:
Check if it needs to fix bug and update Mali/UMP: DONE
Study KMS architecture and functionality: DONE

Work items:
Study ION architecture from Google: DONE
Study UMPv1 API scoping against TTM: POSTPONED

Dependency tree

* Blueprints in grey have been implemented.