понедельник, 10 декабря 2012 г.

Debian & intel GM965/GL960 Integrated Graphics Controller

Я являюсь "счастливым" обладателем интегрированного видеоадаптера GM965/GL960 Integrated Graphics Controller, а так как я пользуюсь только системой Linux на своем ноутбуке, то крайне болезненно принимаю некоторые глюки этого поделия когда приходится например обновлять ПО, в данный момент установил ядро версии 3.6.9, и начались странности..
периодически при непонятных но вычисляемых обстоятельствах ноут уходит в черный экран, при этом все продолжает работать, но изображение недоступно насмерть..
прикол в том что вызывает такое странное поведение именно тяжелые программы, например все от mozilla, иногда libreoffice, было и от virtualbox..
при очередном таком глюке, вслепую перешел в консоль и сделал dmesg|tail > err.txt
после перезагрузки увидел это:

[drm:i915_hangcheck_hung] *ERROR* Hangcheck timer elapsed... GPU hung
[drm:i915_reset] *ERROR* Failed to reset chip.
.. гм..
сделал запрос на модуль: modinfo i915

parm:           invert_brightness:Invert backlight brightness (-1 force normal, 0 machine defaults, 1 force inversion), please report PCI device ID, subsystem vendor and subsystem device ID to dri-devel@lists.freedesktop.org, if your machine needs it. It will then be included in an upcoming module version. (int)
parm:           modeset:Use kernel modesetting [KMS] (0=DRM_I915_KMS from .config, 1=on, -1=force vga console preference [default]) (int)
parm:           fbpercrtc:int
parm:           panel_ignore_lid:Override lid status (0=autodetect [default], 1=lid open, -1=lid closed) (int)
parm:           powersave:Enable powersavings, fbc, downclocking, etc. (default: true) (int)
parm:           semaphores:Use semaphores for inter-ring sync (default: -1 (use per-chip defaults)) (int)
parm:           i915_enable_rc6:Enable power-saving render C-state 6. Different stages can be selected via bitmask values (0 = disable; 1 = enable rc6; 2 = enable deep rc6; 4 = enable deepest rc6). For example, 3 would enable rc6 and deep rc6, and 7 would enable everything. default: -1 (use per-chip default) (int)
parm:           i915_enable_fbc:Enable frame buffer compression for power savings (default: -1 (use per-chip default)) (int)
parm:           lvds_downclock:Use panel (LVDS/eDP) downclocking for power savings (default: false) (int)
parm:           lvds_channel_mode:Specify LVDS channel mode (0=probe BIOS [default], 1=single-channel, 2=dual-channel) (int)
parm:           lvds_use_ssc:Use Spread Spectrum Clock with panels [LVDS/eDP] (default: auto from VBT) (int)
parm:           vbt_sdvo_panel_type:Override/Ignore selection of SDVO panel mode in the VBT (-2=ignore, -1=auto [default], index in VBT BIOS table) (int)
parm:           reset:Attempt GPU resets (default: true) (bool)
parm:           enable_hangcheck:Periodically check GPU activity for detecting hangs. WARNING: Disabling this can cause system wide hangs. (default: true) (bool)
parm:           i915_enable_ppgtt:Enable PPGTT (default: true) (int)
............. из всего этого богатства опций самые интересные:
1. lvds_channel_mode:
2. reset
3. enable_hangcheck
4. modeset:
немного "поигравшись" получил стабильное решение только так:
добавляем или создаем в /etc/modprobe/i915kms.conf
 options i915 modeset=1
 options i915 enable_hangcheck=1
 options i915 reset=0
 options lvds_channel_mode=1
.. обязательно качаем самую последнюю версию libdrm-intel1
качаем тут: http://intellinuxgraphics.org/download.html
нас интересует : http://cgit.freedesktop.org/mesa/drm/
тянем что-то типа  libdrm-2.4.40.tar.gz
распаковываем где нибудь..
в распакованном каталоге делаем autogen.sh
следом configure.sh
если просит чего, доустанавливаем...
после делаем make -j3 (компиляция в 3 потока, у кого мощнее можно больше по числу ядер процессора)
следом ставим пакет если его нет : apt-get install checkinstall
теперь в каталоге даем команду: checkinstall -D
отвечаем утвердительно, и везде названия вместо libdrm меняем на libdrm-intel1
затем запускаем сборку deb пакета нажимая enter ..
теперь ставим пакет, тем самым обновляемся в данном случае до libdrm-intel1-2.4.40
советую также обновить xserver-xorg-video-intel  до версии 2.2.15.0-3 из backports
.. после этого черный экран у меня перестал появляться..
я специально тут написал, так как заметил, что весь интернет обсуждает эту проблему, но к сожалению мало кто дает решение этого..