Ubuntu 7.10 (linux kernel 2.6.22) vs NVIDIA 8600 GT

Категория: / DEV Блог / Разное
Решил поставить кубунту (kubuntu), увидеть красоты компиза (compiz fusion), насладится юникс окружением!
Но не тут то было. Моя видеокарта упорно не хотела работать с драйверами от nvidia (10,14.19-23).
Система загружалась, но как только в xorg.conf видела driver="nvidia" (вместо "nv"), сразу впадала в ступор и нагло зависала не подавая признаков жизни (экран гаснет, система в дед локе)

Вот что система выдавала в dmesg

# dmesg
[   20.393275] PCI: Cannot allocate resource region 3 of device 0000:05:00.0
[   20.480120] PCI: Failed to allocate mem resource #3:2000000@fe000000 for 0000:05:00.0
[   21.108511] Boot video device is 0000:05:00.0
[   39.067285] ACPI: PCI Interrupt 0000:05:00.0[A] -> Link [APC3] -> GSI 18 (level, low) -> IRQ 20
[   39.067387] PCI: Setting latency timer of device 0000:05:00.0 to 64


Понятно, что не может зарезервировать регион памяти, понятно что биос глючный, либо ядро косячит,
непонятно - почему!? Ибо в win xp все работает, Непорядок, Нужно разобраться.

Перерыв, как обычно, пол интернета, просмотрев кучу сообщений в баг репортах однозначного ответа не нашел.
Пошел читать книжки типа "understanding linux kernel", "compiling linux kernel modules for dummies", "linux device drivers 3 edition"..

В итоге пополняем наши знания:

- ядру можно передавать кучу опций, таких как apic=debug noapic lapic nolapic pci=nommconf pci=nobios vga=791
Результатов это не принесло, гораздо более интересна в моем случае опция reserve=, которая позволяет резервировать память,
не давая ядру возможности самостоятельно "попробовать" этот регион.
- можно управлять pci шиной/устройствами командой setpci. Читать данные можем той же командой или lspci, lshw, также низкоуровневая информация содержится в /proc, и /sys/pci

Несколько дней-недель зоопарка linux и танцов с бубнами (барабанами) и мы ее добили,

Делаем следующее (справедливо для моей системы)

1) Add all nvidia stuff to /etc/modprobe.d/blacklist
 
blacklist nv
blacklist nvidia
blacklist nvidia_new
 
2) Add kernel ooptions
reserve=0xCE000000,0x1FFFFFF reserve=0xFD000000,0x1FFFF


Перезагружаем систему, и - о чудо! Заставка nvidia и кдешный сплэш радуют нас своим присутствием.
Обнаруживаем рабочую конфигурацию системы с другими параметрами регионов памяти!

05:00.0 0300: 10de:0402 (rev a1) (prog-if 00 [VGA])
        Subsystem: 1462:0910
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Latency: 0
        Interrupt: pin A routed to IRQ 20
        Region 0: Memory at 8a000000 (32-bit, non-prefetchable) [size=16M]
        Region 1: Memory at 90000000 (64-bit, prefetchable) [size=256M]
        Region 3: Memory at 88000000 (64-bit, non-prefetchable) [size=32M]
        Region 5: I/O ports at 9f00 [size=128]
        [virtual] Expansion ROM at 8b000000 [disabled] [size=128K]
        Capabilities: [60] Power Management version 2
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [68] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable-
                Address: 0000000000000000  Data: 0000
        Capabilities: [78] Express Endpoint IRQ 0
                Device: Supported: MaxPayload 128 bytes, PhantFunc 0, ExtTag+
                Device: Latency L0s <512ns, L1 <4us
                Device: AtnBtn- AtnInd- PwrInd-
                Device: Errors: Correctable- Non-Fatal- Fatal- Unsupported-
                Device: RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
                Device: MaxPayload 128 bytes, MaxReadReq 512 bytes
                Link: Supported Speed 2.5Gb/s, Width x16, ASPM unknown, Port 0
                Link: Latency L0s <512ns, L1 <4us
                Link: ASPM Disabled RCB 128 bytes CommClk- ExtSynch-
                Link: Speed 2.5Gb/s, Width x16
        Capabilities: [100] Virtual Channel
        Capabilities: [128] Power Budgeting
        Capabilities: [600] Unknown (11)


И в результате -

glxinfo | grep direc
direct rendering: Yes


За это время было отослано баг репортов - 4
Получено подтверждений - 1
Получено способов устранения проблемы - 0