11 April 2010 - My Google Summer of Code proposal

I've been involved with X.Org for a few months now. I want to increase my involvement, and at the same time learn the ropes. I also need something to do this summer–and that's why I've applied to the Google Summer of Code.

Also available at the SoC website.

KMS for Permedia3/4 as a method for Documenting the KMS driver writing process


The current trend in X11 graphics is to move mode-setting code into the kernel, allowing for faster and more graphical boots with fewer flickers. Only the big three drivers, Radeon, Intel, and Nouveau, support KMS, but there are many more X11 drivers that could benefit as well. Unfortunately, the big three drivers are large (smallest is 26,000 lines, largest is 65,000 lines) and complex, and is there no official documentation for writing KMS drivers. This project aims to provide the community with both documentation for writing KMS drivers and a basic, unaccelerated, reference KMS driver for Permedia3-series hardware.

Benefits to the Community

With a small reference KMS implementation and clear and detailed documentation, written from the perspective of a student not fluent in the world and process of writing graphics drivers, others should be able to write KMS drivers for other hardware much more easily and therefore improve the experience of users with such hardware.

Project Tasks

  1. Implement a shell driver that claims the hardware. Get my hands dirty with kernel code. Once this is completed,
  2. Implement basic mode-setting for the Permedia3. Although the Permedia4 (and Permedia2) are very similar, the mode-setting code on each chip could have its own bugs and headaches, so I am limiting the scope to only Permedia3.
  3. Implement basic memory management using TTM. Study the TTM API, documenting relevant parts. Once the memory manager is completed, polish the code into something others can read and follow. This stage will be complete when X11 can run on the KMS driver using fbdev.
  4. Write Documentation and Programming Guides for KMS, TTM, and other DRM interfaces.

Optional Tasks

  1. Implement some form of Command Submission.
    • Implement system for submitting commands to the kernel
    • Implement system for knowing when the commands have been completed
    • Improve the memory manager to handle command buffers
  2. Using command submission, accelerate some tasks of the KMS driver such as copy area and rectangle fills.
  3. Make the existing xf86-video-glint DDX capable of operating with the KMS driver.
  4. Make the existing xf86-video-glint DDX capable of making use of the memory manager.


  1. Shell driver that claims the hardware (1 week)
  2. Implement basic mode-setting (3 weeks)
  3. Implement basic memory management using TTM (3 weeks)
  4. Bug Fixes and polish - basic, unaccelerated KMS driver capable of providing fbdev with linear VRAM access. (2 weeks)
  5. Document the process, finish Documentation and Guides for writing KMS drivers (2~3 weeks)

Optional Tasks

  1. Command Submission (3 weeks, if time allows)
  2. Accelerated KMS driver (1 week, if time allows)

Eventual Tasks, outside the scope of GSoC

Related Work

Jesse Barnes proposed a work-in-progress patch to includes documentation that "provid[es] basic information about DRM interfaces, including TTM, GEM, KMS and vblank infrastructure."


Existing Permedia2/3 framebuffer drivers exist in the Linux Kernel, drivers/video/pm{2,3}fb.c.

Biographical Information

I am a senior at Lenoir-Rhyne University, with a major in Physics and minors in Mathematics and Computer Science. I work for the school's marketing department doing PHP/Drupal web development.

I'm a contributor to X.Org, the Linux Kernel, and Alpha/Linux (where I'm the de facto glibc maintainer).

For this summer, I plan to have a part-time internship, mostly unrelated to programming.

Skills and Qualifications

I'm experienced programming in C and x86/Alpha assembly. I'm also quite persistent and do not give up easily.

I've made close to 30 commits to the X server, for changes to between 1500 and 2000 lines of code. I've also made minor changes to the xf86-video-ati and xf86-video-intel drivers.

On the Kernel side, I run the alpha-2.6 git tree for collecting and funneling DEC Alpha patches that I and others write to Linus. I've made minor commits to the DRM kernel code.

I also maintain the AlphaLinux.Org Wiki, a community site documenting Alpha hardware, software, and the latest developments in open source affecting Alpha/Linux users.

Tags: glint gsoc kms linux xorg