Mencegah driver Radeon dari melampirkan ke perangkat PCI tertentu?

13

Saya memiliki dua kartu Radeon di mesin ini, Radeon HD 6570 dan Radeon HD 6950 :

lspci | grep VGA

01: 00.0 Pengontrol yang kompatibel VGA: Advanced Micro Devices [AMD] dan ATI Turks [Radeon HD 6570]
02: 00.0 Pengontrol yang kompatibel VGA: Advanced Micro Devices [AMD] dan ATI Cayman PRO [Radeon HD 6950]

Saya mencoba untuk mendapatkan VGA passthrough untuk bekerja dengan KVM pada Debian 7 (Wheezy), melewati 6950 sebagai kartu video sekunder ke tamu Windows 7. Ini berfungsi dengan baik jika saya daftar hitam radeonmelalui modul kernel /etc/modprobe.d/.

Jika saya menghapus daftar hitam untuk menjalankan X11 (atau bahkan hanya konsol KMS ) pada 6570 radeonmodul tampaknya melekat pada kedua kartu:

dmesg | egrep "01: 00.0 | 02: 00.0 | radeon"

pci 0000: 01: 00.0: [1002: 6759] type 0 class 0x000300
pci 0000: 01: 00.0: reg 10: [mem 0xe0000000-0xefffffff 64bit pref]
pci 0000: 01: 00.0: reg 18: [mem 0xf7e20000-0xf7e3ff 64bit ]
pci 0000: 01: 00.0: reg 20: [io 0xe000-0xe0ff]
pci 0000: 01: 00.0: reg 30: [mem 0xf7e00000-0xf7e1ffff pref]
pci 0000: 01: 00.0: mendukung D1 D2
pci 0000: 02: 00.0: : [1002: 6719] ketik 0 kelas 0x000300
pci 0000: 02: 00.0: reg 10: [mem 0xd0000000-0xdfffffff 64bit pref]
pci 0000: 02: 00.0: reg 18: [mem 0xf7d20000-0xf7d3ffff 64bit]
pci 0000: 02: 00.0: reg 20: [io 0xd000-0xd0ff]
pci 0000: 02: 00.0: reg 30: [mem 0xf7d00000-0xf7d1ffff pref]
pci 0000: 02: 00.0: mendukung D1 D2
vgaarb: perangkat ditambahkan: PCI: 0000: 01: 00.0, decodes = io + mem, memiliki = io + mem, kunci = tidak ada
vgaarb: perangkat ditambahkan: PCI: 0000: 02: 00.0, decode = io + mem, memiliki = tidak ada , kunci = tidak ada
vgaarb: kontrol jembatan mungkin 0000: 02: 00.0
vgaarb: kontrol jembatan mungkin 0000: 01: 00.0
pci 0000: 01: 00.0: Boot perangkat video
[drm] mode pengaturan kernel radeon kernel diaktifkan.
radeon 0000: 01: 00.0: pengaturan waktu latency untuk 64
radeon 0000: 01: 00.0: VRAM: 1024M 0x0000000000000000 - 0x000000003FFFFFFF (1024M digunakan)
radeon 0000: 01: 00.0: GTT: 512M 0x0000000040000000 - 0x000000005FFFFFFF
[drm] radeon: 1024M VRAM siap memori
[drm] radeon: 512M memori siap GTT.
radeon 0000: 01: 00.0: irq 46 untuk MSI / MSI-X
radeon 0000: 01: 00.0: radeon: using MSI.
[drm] radeon: irq diinisialisasi.
radeon 0000: 01: 00.0: WB diaktifkan
[drm] radeon: ib pool ready.
[drm] radeon: manajemen daya yang diinisialisasi
fbcon: radeondrmfb (fb0) adalah perangkat utama
fb0: perangkat penyangga bingkai radeondrmfb
[drm] Inisialisasi radeon 2.12.0 20080528 untuk 0000: 01: 00.0 pada minor 0
radeon 0000: 02: 00.0: perangkat yang diaktifkan (0000 -> 0003)
radeon 0000: 02: 00.0: pengaturan waktu latency untuk 64
radeon 0000: 02: 00.0: VRAM: 2048M 0x0000000000000000 - 0x000000007FFFFFFF (2048M digunakan)
radeon 0000: 02: 00.0: GTT: 512M 0x0000000080000000 - 0x000000009FFFFFFF
[drm ] radeon: 2048M memori VRAM siap
[drm] radeon: 512M memori GTT siap.
radeon 0000: 02: 00.0: irq 49 untuk MSI / MSI-X
radeon 0000: 02: 00.0: radeon: using MSI.
[drm] radeon: irq diinisialisasi.
radeon 0000: 02: 00.0: WB diaktifkan
[drm] radeon: ib pool ready.
[drm] radeon: manajemen daya diinisialisasi
fb1: perangkat penyangga bingkai radeondrmfb
[drm] Inisialisasi radeon 2.12.0 20080528 untuk 0000: 02: 00.0 pada minor 1
[drm] radeon: perangkat finishing.
radeon 0000: 02: 00.0: ffff88041a941800 tidak perlu pinus
[drm] radeon: ttm finalized
pci-stub 0000: 02: 00.0: diklaim oleh stub
pci-stub 0000: 02: 00.0: irq 49 untuk MSI / MSI-X

Ini menyebabkan Windows 7 VM bluescreen saat boot.

Bagaimana saya bisa mengkonfigurasi hal-hal sehingga modul radeonhanya menempel pada 6570 dan bukan 6950?

genpfault
sumber

Jawaban:

14

Saya telah memiliki beberapa pci_stubbaris yang berhubungan dengan saya rc.localtetapi ini tampaknya terlambat dalam proses boot untuk membantu, berjalan setelah radeonmulai mengutak-atik hal-hal.

Saya memperbaiki beberapa hal dengan memindahkan pci_stubmodul kernel ke initramfs:

  1. lspci -nn | grep Caymanuntuk menemukan vendor:deviceangka (pada akhir baris) untuk 6950 dan port HDMI-nya:

    02:00.0 VGA compatible controller [0300]: Advanced Micro Devices [AMD] nee ATI Cayman PRO [Radeon HD 6950] [1002:6719]
    02:00.1 Audio device [0403]: Advanced Micro Devices [AMD] nee ATI Cayman/Antilles HDMI Audio [Radeon HD 6900 Series] [1002:aa80]
    
  2. Buka pop /etc/initramfs-tools/modulesdan tambahkan baris baru:

    pci_stub ids=1002:6719,1002:aa80
    
  3. Membangun kembali initramfs:

    sudo update-initramfs -u
    
  4. Nyalakan ulang dan amati pci_stubpemukulan radeon:

    dmesg | egrep "pci-stub|radeon"
    
    pci-stub: add 1002:6719 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
    pci-stub 0000:02:00.0: claimed by stub
    pci-stub: add 1002:AA80 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
    pci-stub 0000:02:00.1: claimed by stub
    [drm] radeon kernel modesetting enabled.
    radeon 0000:01:00.0: setting latency timer to 64
    radeon 0000:01:00.0: VRAM: 1024M 0x0000000000000000 - 0x000000003FFFFFFF (1024M used)
    radeon 0000:01:00.0: GTT: 512M 0x0000000040000000 - 0x000000005FFFFFFF
    
  5. Nikmati VGA bebas bluescreen passthrough!

genpfault
sumber
3
Di atas tidak bekerja untuk saya. Sebagai gantinya saya menambahkan pci_stub.ids=1002:6719,1002:aa80ke akhir baris perintah kernel dalam file konfigurasi grub. Saya menduga alasannya adalah bahwa pci-stubmodul dibangun ke dalam kernel pada pengaturan saya.
Mansour
5

Dengan menggunakan jawaban genpfault sebagai referensi, saya membuat jawaban lain, saya pikir lebih sederhana.

Langkah pertama sama dengan di atas:

Kemudian saya membuat file bernama /lib/modprobe.d/pci-stub.conf, dengan argumen yang saya temukan:

options pci-stub ids=1002:9715,1002:970f

Kemudian saya membuat file bernama /lib/modprobe.d/drm.conf, dengan softdep:

softdep drm pre: pci-stub

Dengan cara ini, ketika proses boot mencoba memuat drm, pertama-tama memuat pci-stub, yang menyimpan perangkat keras dari satu kartu video, dan mencegah drm untuk melampirkan ke beberapa perangkat.

Nanti Anda dapat menghapus reservasi di rc.local modprobe -r pci-stub,.

Secara opsional Anda dapat memuat modul lain modprobe another-moduleuntuk kartu itu.

Weber K.
sumber