Kernel-Log – Was 2.6.33 bringt (3): Grafik
Die nächste Linux-Version bringt nicht nur erstmals den KMS-Grafiktreiber Nouveau für Nvidia-Grafikhardware mit, sondern auch eine Vielzahl von Verbesserungen für die AMD/ATI- und Intel-Grafiktreiber mit Unterstützung für Kernel-based Modesetting (KMS).
- Thorsten Leemhuis
Ende vergangener Woche hat Linus Torvalds mit Linux 2.6.33-rc6 die sechste Vorabversion der Ende Februar oder Anfang März erwarteten Linux-Version 2.6.33 veröffentlicht. Die Rate und der Umfang der Änderungen geht wie an diesem Abschnitt des Entwicklungszyklus üblich langsam zurück; Torvalds schreibt, dass die Entwicklung an einen Punkt gelange, wo die Dinge größtenteils funktionieren sollten ('[...]we're getting to that stage of the release cycle where things mostly should "just work"[...]')
Thema dieses dritten Teils der Mini-Serie "Was 2.6.33 bringt" sind die Neuheiten rund um die Unterstützung von Grafikhardware. Den bedeutsamsten Änderungen bei der Netzwerkunterstützung sowie bei Dateisystemen und dem Storage-Subsystem hatten sich der erste und zweite Teil der Serie gewidmet.
Neuer Treiber für Nvidia-GPUs
Wie bereits gemeldet, haben die Kernel-Entwickler nach heftigem Drängen von Linus Torvalds den Kernel-Teil des Nouveau-Treibers für GeForce-Grafikkerne als Staging-Treiber in den Linux-Kernel aufgenommen. Die Kernel-Version 2.6.33 wird daher das bislang nur bei GPUs von AMD/ATI und Intel unterstützte Kernel-based Mode-Setting (KMS) auch mit vielen Grafikchips von Nvidia beherrschen. Das ermöglicht einen flackerfreien Startvorgang, eine schnelle Umschaltung zwischen X-Server und Textkonsole sowie eine zuverlässigere Reinitialisierung der Grafikhardware beim Aufwachen aus systemweiten Schlafzuständen.
Der auf dem neuen Kernel-Code aufsetzende Nouveau-Treiber für X.org beherrscht bereits den via RandR konfigurierbaren Zweischirmbetrieb sowie mit neueren GeForce-Modellen Xvideo-Beschleunigung – der bislang von vielen Distributionen für Nvidia-Hardware verwendete X.org-Treiber "nv" (korrekt "xf86-video-nv") kann beides nicht. 3D-Beschleunigung bietet allerdings keiner der beiden Treiber; für den mittels Reverse Engineering entwickelten Nouveau-Treiber ist sie in Arbeit, aber derzeit noch hochgradig experimentell.
Für 3D-Unterstützung braucht man daher weiter den proprietären Grafiktreiber von Nvidia, der bei manchen Grafikkarten auch erforderlich ist, um die Lüftersteuerung zu aktivieren. Nvidias Treiber arbeiten allerdings nur, wenn man der Nouveau-KMS-Code nicht aktiv ist – das lässt sich etwa durch Angabe des Kernel-Parameter "nomodeset" beim Booten bewerkstelligen.
Kurz vor der Aufnahme von Nouveau hatten die Entwickler noch einige Änderungen vorgenommen, durch die der Treiber den zuvor integrierten und häufig als "Firmware" eingestuften Bestandteil ctxprogs bei Bedarf nachlädt. Einige Distributionen liefern diesen bei neueren GPUs benötigten, gelegentlich auch "Voodoo" genannten Nicht-Open-Source-Code mit aus; allerdings ist unklar, ob das überhaupt rechtmäßig ist, da dieser Code aus den proprietären Grafiktreibern extrahiert wurde.
Ein Entwickler nahm die Diskussionen um diese Problematik zum Anlass, Open-Source-Code zu entwickeln, der Ctxprogs ersetzt. Dieser Code wurde einige Tage nach der Aufnahme von Nouveau ebenfalls für Linux 2.6.33 eingepflegt – bislang unterstützt er allerdings nur die GPUs der NV40-Generation, die auf GeForce-Karten der Serien 6000 und 7000 sitzen.
KMS wird zum Standard
Mit der Aufnahme des KMS-Treiber-Codes in den Kernel entfernten die Nouveau-Entwickler Anfang Januar ungefähr fünfzehntausend Codezeilen im Nouveau-Treiber für X.org, die sich um das Setzen der Video-Modi ohne KMS gekümmert haben; das soll Wartung und Weiterentwicklung von Nouveau vereinfachen. Damit sind sie nicht alleine, denn auch aus dem Intel-Grafiktreiber für X.org ist in der Anfang Januar freigegeben Treiberversion 2.10 der Code zum "User-Modesetting" (UMS) entfernt. Diese und zukünftige Versionen der Treiber sind daher auf Kernel mit KMS-Unterstützung angewiesen, was für eine recht zügige Verbreitung der noch vergleichsweise jungen Technik führen dürfte.
Die Version 2.10 der Intel-Grafiktreiber bietet zusammen mit dem bei 2.6.33 neuen "drmmode overlay support" im KMS-Treiber für Intel-GPUs nun auch Unterstützung für Video Overlays. Zahlreiche Verbesserungen gab es für die Ironlake-Grafikkerne, die in Westmere-CPUs wie den Anfang des Jahres vorgestellten Dual-Core-Prozessoren der Core-Baureihen i3 und i5 stecken. Der Intel-KMS-Treiber bietet nun auch Unterstützung für Auflösungen mit 30-Bit-Farbtiefe.
Der von den KMS-Treibern genutzte DRM (Direct Rendering Manager) des Kernels und der darauf aufsetzende Intel-Treiber bieten jetzt ein Interface, durch das Grafiktreiber in Zukunft die Darstellung von neuem Bildschirminhalt besser mit dem Bildwechsel synchronisieren können. Das soll die "Tearing" genannten Bildverzerrungen reduzieren oder vermeiden, die besonders bei der Video-Wiedergabe störend sein können.
Damit der Kernel-seitige "Page Flipping Support" nutzbar ist, mussten die Entwickler das DRI2-Protokoll erweitern. Die Technik wird daher erst mit Mesa 7.8, X-Server 1.9 und der noch in Entwicklung befindlichen Version 2.11 des Intel-Grafiktreibers für X.org funktionieren – weitere Details zum Thema finden sich in einem ausführlichen Blog-Eintrag von PCI-Subsystem-Betreuer und Treiber-Entwickler Jesse Barnes.
Radeon-Treiber besser eingestuft
Der DRM- und KMS-Code des Kernels für Radeon-Grafikchips unterstützt nun die Monitoransteuerung via DisplayPort (1, 2) und eDP (embedded DisplayPort); zudem beherrscht er die Audio-Ausgabe über HDMI. Die ebenfalls neue IRQ-Unterstützung für r6xx- und r7xx-GPUs ermöglicht die Erkennung von Monitorwechseln ohne wiederkehrende Abfragen (Polling) und ist bei Radeon-Karten eine Voraussetzung für den oben erwähnten Page Flipping Support – das ganze funktioniert aber nur in Verbindung mit einer aktualisierten Firmware.
Darüber hinaus gab es zahlreiche kleinere Korrekturen und Verbesserungen am Radeon-KMS-Treiber. Durch die ist der Code nun so weit gereift, dass die Entwickler die Klassifizierung für den Staging-Bereich des Kernels, der unreife und minderwertige Treiber ausnimmt, entfernten und im Commit-Kommentar andeuten, dass der Treiber-Code stabil genug zum Einsatz in Linux-Distributionen sei.
Neu zum Kernel stieß auch der KMS-Treiber xmgfx für die virtuelle, in Gastsystemen sichtbare SVGA2-Grafikhardware einiger VMWare-Hypervisor. Auch dieser Treiber ist ähnlich wie die KMS-Treiber für GeForce- und Radeon-Grafikhardware anfangs als Staging-Treiber gekennzeichnet, weil mindestens die für 3D-Unterstützung zuständige Treiber-Schnittstellen noch Anpassungen benötigen. Über einen Nokia-Entwickler fanden zudem das Display-Subsystem und weitere Treiber für OMAP2/3-Prozessoren den Weg in den Kernel – solche ARM-CPUs kommen etwa bei Nokias n900 oder dem Beagle Board zum Einsatz.
Die kleinen Perlen
Viele weiteren nicht ganz so wichtige, aber keineswegs unbedeutende Neuerungen finden sich in der folgenden Liste mit den englischen Commit-Überschriften der jeweiligen Änderung. Die Einträge verlinken genau wie viele der Verweise im vorangegangenen Text auf das Webfrontend des von Linus Torvalds gepflegten Git-Zweigs mit den Kernel-Quellen auf Kernel.org. Im Webfrontend liefern normalerweise der Commit-Kommentar und der Patch selbst zahlreiche weitere Informationen zur jeweiligen Änderungen.
- backlight: mbp_nvidia_bl - add two more MacBookPro variants
- davinci: fb: add framebuffer blank operation
- davinci: fb : add suspend/resume suuport for DA8xx/OMAP-L1xx fb driver
- drm: Add async event synchronization for drmWaitVblank
- drm: Add dirty ioctl and property
- drm: Add eDP connector type
- drm: convert drm_ioctl to unlocked_ioctl
- drm/edid: Add new detailed block types from EDID 1.4
- drm/edid: Retry EDID fetch up to four times
- drm/i915: Add ACPI OpRegion support for Ironlake
- drm/i915: Add display hotplug event on Ironlake
- drm/i915: Add HP nx9020/SamsungSX20S to ACPI LID quirk list
- drm/i915: add render standby support
- drm/i915: Check whether the LVDS downclock is found in VBT
- drm/i915: debugfs interface to manually reset the GPU
- drm/i915: disable LVDS downclock by default
- drm/i915: enable 36bit physical address for hardware status page
- drm/i915: Enable/disable the dithering for LVDS based on VBT setting
- drm/i915: Enable LVDS downclock feature through EDID.
- drm/i915: enable self-refresh on 965
- drm/i915: execbuf2 support
- drm/i915: Replace DRM_DEBUG with DRM_DEBUG_DRIVER
- drm/i915: warn if Pineview CxSR can't be enabled
- drm: Keep disabled outputs disabled after suspend / resume
- drm/kms: properly handle fbdev blanking
- drm/modes: Fall back to 1024x768 instead of 800x600
- drm/modes: Limit fallback modes to 60Hz
- drm/nouveau: Pre-G80 tiling support.
- drm/nouveau: Pre-G80 tiling support.
- drm/radeon/kms: add 3DC compression support
- drm/radeon/kms: add additional safe regs for r4xx/rs6xx and r5xx
- drm/radeon/kms: add cvt mode if we only have lvds w/h and no edid (v4)
- drm/radeon/kms: add definitions for v4 power tables
- drm/radeon/kms: add HDP flushing for all GPUs.
- drm/radeon/kms: add hpd support for r1xx-r4xx asics
- drm/radeon/kms: add hpd support for r5xx/rs600/rs690/rs740 asics
- drm/radeon/kms: add hpd support for r6xx/r7xx/rs780/rs880 asics
- drm/radeon/kms: add irq mitigation code for sw interrupt.
- drm/radeon/kms: add quirk for Acer laptop
- drm/radeon/kms: Add quirk for HIS X1300 board
- drm/radeon/kms: add quirk for MSI S270
- drm/radeon/kms: add support for external tmds on legacy boards
- drm/radeon/kms: add tv standard property to tv connectors
- drm/radeon/kms: AGP systems need PCI bus mastering enabled
- drm/radeon/kms/avivo: add support for new pll selection algo
- drm/radeon/kms: enable hpd support
- drm/radeon/kms: fix r100->r500 CS checker for compressed textures. (v2)
- drm/radeon/kms: get HPD info for connectors
- drm/radeon/kms: init pm on all chipsets
- drm/radeon/kms: Workaround RV410/R420 CP errata (V3)
- drm/radeon: r6xx/r7xx possible security issue, system ram access
- drm/ttm: Add user-space objects.
- drm/ttm: Rework validation memory space allocation (V3)
- fbdev: bfin-lq035q1-fb: new Blackfin Landscape LCD EZ-Extender driver
- MAINTAINERS: Add OMAP2/3 DSS and OMAPFB maintainer
- mb862xxfb: add acceleration support for Coral-P/Coral-PA. * imageblt * copyarea * fillrect
- offb: Add support for framebuffer handoff to offb.
- OMAP: Add support for VRFB rotation engine
- OMAP: Add VRAM manager
- OMAP: DSS2: Add generic and Sharp panel drivers
- OMAP: DSS2: Add more core files
- OMAP: DSS2: DISPC
- OMAP: DSS2: Display Subsystem Driver core
- OMAP: DSS2: DSI driver
- OMAP: DSS2: omapfb driver
- OMAP: DSS2: RFBI driver
- OMAP: DSS2: Taal DSI command mode panel driver
- OMAP: DSS2: Video encoder driver
- OMAP: OMAPFB: add omapdss device
- vc: Add support for hiding the cursor when creating VTs
- vgacon: Add support for setting the default cursor state
- viafb: documentation update
- video: Allow selecting MSM framebuffer in Kconfig
- vt: make the default cursor shape configurable