Thorsten Leemhuis, Krzysztof Sokołowski
Jądro Linux – co przyniesie wersja 2.6.32, cz. II: sterowniki dla kart graficznych i zintegrowanych chipsetów
Użytkownicy kart graficznych AMD/ATI będą mogli zrezygnować z własnościowych sterowników
Kolejna wersja kernela będzie w pełni obsługiwać akcelerację grafiki 3D w kartach Radeon z serii 2000, 3000 i 4000. Natomiast sterowniki dla układów graficznych Intela uwzględniają nowe funkcje oszczędzania energii i powinny lepiej działać przede wszystkim ze starszymi modelami chipsetów płyt głównych. Ponadto programiści ulepszyli także obsługę wyjść TV w układach AMD i Intela.
Na początku listopada Linus Torvalds opublikował wersję 2.6.32-rc6 – z uwagi na konferencję Kernel Summit szósta wersja przedwstępna ukazała się nie jak zazwyczaj tydzień, lecz dwa tygodnie po rc5. Na tym etapie rozwoju typowe jest, że integrowane z jądrem patche są raczej niewielkie, co ma zapewnić uniknięcie wprowadzania zmian mogących wywołać nowe błędy w okresie najbliższych trzech do sześciu tygodni, aż do momentu publikacji finalnego wydania kernela 2.6.32.
Po opisaniu w poprzednim artykule z serii Jądro Linux zmian w podsystemie sieci, niniejszy tekst jest poświęcony najważniejszym nowościom wokół obsługi urządzeń graficznych. Na niektóre z pewnością czeka wielu użytkowników, odkąd koncern AMD znów zaczął ściślej współpracować z programistami Open Source.
3D i KMS dla Radeonów
Kernel i Direct Rendering Manager (DRM) będą teraz obsługiwały funkcję 3D i tryb Kernel-based Mode Setting (KMS) dla układów graficznych AMD z serii R600 i R700. Dotyczy to modeli Radeonów z serii 2000, 3000 i 4000 – a więc najczęściej sprzedawanych w ostatnich dwóch, trzech latach kart Radeon, a także różnych chipsetów płyt głównych AMD z serii 700.
Aby jednak wspomniana obsługa funkcji 3D i trybu KMS mogła zadziałać, konieczna jest instalacja specjalnie dostosowanych wersji bibliotek libdrm i Mesa 3D, a także odpowiednich sterowników graficznych dla X.org. Poprawne skonfigurowanie takiego stosu programowego jest zadaniem przeznaczonym raczej dla bardziej zaawansowanych użytkowników – na szczęście projekt Fedora chce przygotować wszystkie potrzebne komponenty w eksperymentalnym pakiecie, który będzie zawarty w oczekiwanej w połowie listopada dystrybucji Fedora 12.
W sterowniku do obsługi trybu KMS w układach Radeon znajdziemy w przyszłości także podstawową obsługę aktywacji wyjść TV. Sterownik KMS dla układów graficznych Intela zapewniał to już wcześniej, ale teraz współpracuje z większą liczbą chipów SDVO, korzystając przy tym z nowych funkcji (1, 2, 3).
Począwszy od wersji 2.6.32, kod obsługi KMS w układach Intela kompresuje ponadto pamięć bufora ramki, co według obietnic programistów ma przynieść oszczędność w poborze mocy na poziomie do 0,5 W; z kolei nowa funkcja dynamicznego dostosowywania częstotliwości taktowania (Dynamic Clock Frequency Control) ma przy nieobciążonym systemie przyczynić się do dalszych oszczędności energii i wydłużenia czasu pracy baterii notebooków przez redukcję częstotliwości taktowania układu i pamięci. Ponadto intelowski sterownik wydajniej korzysta z pamięci graficznej (1, 2) i próbuje na nowo inicjalizować układy graficzne, w których wystąpiły błędy i np. zaprzestały działania.
Koordynacja
Programiści kernela wprowadzili do jądra także łaty mechanizmu VGA Arbitration (1, 2, dokumentacja). W systemach z większą liczbą kart graficznych i X-serwerem w wersji od 1.7 sprawiają one, że polecenia VGA X serwera zostaną zawsze skierowane do właściwej karty graficznej – ma to zagwarantować znacznie większą elastyczność w konfigurowaniu środowisk wielosesyjnych.
Poniżej lista dalszych zmian związanych z obsługą układów graficznych w kernelu:
- Za pośrednictwem wykorzystywanego w trybie KMS parametru video= będzie można definiować rozdzielczości ekranowe dla pojedynczych lub wszystkich monitorów.
- Powiązany dotychczas ściśle ze sterownikami do obsługi Radeonów kod firmware’u tych układów został wydzielony do osobnych plików i będzie ładowany za pomocą specjalnego tzw. loadera. Podobna zmiana zaszła także w kodzie sterowników dla kart graficznych Matrox.
- Nowością jest sterownik bufora ramki dla zintegrowanych (SoC) układów MSM/QSD firmy Qualcomm, które są stosowane np. w smartfonie HTC Dream.
- Programiści dokonali modyfikacji w ścieżkach kodu używanych przez sterowniki Radeon podczas inicjalizacji sprzętu. Ma to im ułatwić utrzymanie kodu, a także poprawić zachowanie mechanizmów usypiania (Suspend) i wybudzania (Resume) – wykaz konkretnych zmian w kodzie (commitów) znajduje się na liście na końcu tego artykułu. Utrzymanie sterowników powinno być też prostsze dzięki uwspólnieniu niektórych fragmentów kodu do obsługi trybu KMS dla układów AMD i Intela.
- Sterownik bufora ramki dla układów graficznych VIA obsługuje teraz także chipset VX855. Ponadto programiści przepisali na nowo silnik 2D sterownika VIA.
- Dzięki wprowadzeniu nowych punktów śledzenia kodu (tracepoints) możliwa będzie lepsza obserwacja zachowania kodu DRM przeznaczonego dla aktualnych układów graficznych Intela.
- Usunięte zostały liczne błędy związane z obsługą intelowskich układów z serii 8xx, które pojawiły się, począwszy od wprowadzenia do kernela w wersji 2.6.27 mechanizmu GEM.
- Kod KMS dla Radeonów obsługuje teraz tryb Surround View umożliwiający równoległe działanie karty graficznej Radeon wraz z GPU zintegrowanym na płycie głównej.
Inne zmiany
Poniżej znajduje się wykaz dalszych, nieco mniej ważnych, ale wciąż istotnych zmian. Poszczególne angielskojęzyczne odnośniki wskazują na opisy konkretnego wprowadzenia kodu (commita) w umieszczonym na stronie kernel.org interfejsie WWW nadzorowanej przez Linusa Torvaldsa gałęzi repozytorium Git ze źródłami jądra. Komentarze do commitów, a także same łaty dostarczają następnych informacji na temat konkretnych zmian.
- Add G33 series in VGA hotplug support category
- agp/intel: Add B43 chipset support
- davinci: fb: Frame Buffer driver for TI DA8xx/OMAP-L1xx
- drm: Add more standard TV properties.
- drm: Add the basic check for the detailed timing in EDID
- drm/edid: Fix standard timing parse for EDID <= 1.2
- drm/edid: Ignore bad standard timings.
- drm: Enable drm drivers to add drm sysfs devices.
- drm/i915: add B43 chipset support
- drm/i915: add FIFO watermark support for G4x
- drm/i915: disable powersave feature for Ironlake currently
- drm/i915: do dynamic clock freq control only in kernel modesetting
- drm/i915: Fix FDI M/N setting according with correct color depth
- drm/i915: fix startup hang on some non-mobile platforms
- drm/i915: force mode set at lid open time
- drm/i915: framebuffer compression for GM45+
- drm/i915: generate a KMS uevent at lid open/close time
- drm/i915: Ironlake suspend/resume support
- drm/i915: Save and restore the GM45 FBC regs on suspend and resume.
- drm/i915: Support IGD EOS
- drm/kms: add a function that can add the mode for the output device without EDID
- drm/kms: Add the default mode table
- drm/kms: fix kms helper license + Kconfig
- drm/kms/i915: Add the default mode for CRT output without EDID
- drm/kms/radeon: make kms default a runtime option
- drm/mode: add the CVT algorithm in kernel space
- drm/mode: add the GTF algorithm in kernel space
- drm/mode: get the modeline for standard timing in EDID by using CVT/GTF
- drm/r128: Use request_firmware() to load CCE microcode
- drm/radeon/kms: add 32/64 ioctl support.
- drm/radeon/kms: add common lvds modes in the ddc case
- drm/radeon/kms: add common scaled modes for TV and LVDS
- drm/radeon/kms: add initial connector properties
- drm/radeon/kms: add rn50/r100/r200 CS tracker.
- drm/radeon/kms: Convert R100 to new init path (V2)
- drm/radeon/kms: Convert R300 to new init path
- drm/radeon/kms: Convert RS400/RS480 to new init path
- drm/radeon/kms: Convert RS400/RS480 to new init path & fix legacy VGA (V3)
- drm/radeon/kms: Convert RS600 to new init path
- drm/radeon/kms: Convert RS690/RS740 to new init path (V2).
- drm/radeon/kms: enable r600 tv outputs.
- drm/radeon/kms: Fix AGP support for R600/RV770 family (v2)
- drm/radeon/kms: Remove old init path as no hw use it anymore
- drm: split crtc/fb helpers into a separate module
- drm/ttm: Add a virtual ttm sysfs device.
- drm/ttm: Memory accounting rework.
- ep93xx video driver
- i915: fix intel graphics suspend breakage due to resume/lid event confusion
- matroxfb: make CONFIG_FB_MATROX_MULTIHEAD=y mandatory
- omapfb: add FB manual update option to Kconfig
- omapfb: add support for rotation on the Blizzard LCD ctrl
- omapfb: add support for the 2430SDP LCD
- omapfb: add support for the 3430SDP LCD
- omapfb: add support for the Amstrad Delta LCD
- omapfb: add support for the Apollon LCD
- omapfb: add support for the OMAP2EVM LCD
- omapfb: add support for the OMAP3 Beagle DVI output
- omapfb: add support for the OMAP3 EVM LCD



