Impede que o driver Radeon seja anexado a dispositivos PCI específicos?

13

Eu tenho duas placas Radeon nesta máquina, uma Radeon HD 6570 e uma Radeon HD 6950 :

lspci | grep VGA

01:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI Turks [Radeon HD 6570]
02:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI Cayman PRO [Radeon HD 6950]

Estou tentando fazer com que o VGA repasse para trabalhar com KVM em Debian 7 (Wheezy), passando pelo 6950 como uma placa de vídeo secundária para um convidado do Windows 7. Isso funciona bem se eu bloquear o módulo do kernel radeon via /etc/modprobe.d/ .

Se eu remover a lista negra para executar o X11 (ou mesmo apenas um console KMS ) no 6570, o% O móduloradeon parece anexar a ambos cartões:

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-0xf7e3ffff 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: supports D1 D2
pci 0000:02:00.0: [1002:6719] type 0 class 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: supports D1 D2
vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none
vgaarb: device added: PCI:0000:02:00.0,decodes=io+mem,owns=none,locks=none
vgaarb: bridge control possible 0000:02:00.0
vgaarb: bridge control possible 0000:01:00.0
pci 0000:01:00.0: Boot video device
[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
[drm] radeon: 1024M of VRAM memory ready
[drm] radeon: 512M of GTT memory ready.
radeon 0000:01:00.0: irq 46 for MSI/MSI-X
radeon 0000:01:00.0: radeon: using MSI.
[drm] radeon: irq initialized.
radeon 0000:01:00.0: WB enabled
[drm] radeon: ib pool ready.
[drm] radeon: power management initialized
fbcon: radeondrmfb (fb0) is primary device
fb0: radeondrmfb frame buffer device
[drm] Initialized radeon 2.12.0 20080528 for 0000:01:00.0 on minor 0
radeon 0000:02:00.0: enabling device (0000 -> 0003)
radeon 0000:02:00.0: setting latency timer to 64
radeon 0000:02:00.0: VRAM: 2048M 0x0000000000000000 - 0x000000007FFFFFFF (2048M used)
radeon 0000:02:00.0: GTT: 512M 0x0000000080000000 - 0x000000009FFFFFFF
[drm] radeon: 2048M of VRAM memory ready
[drm] radeon: 512M of GTT memory ready.
radeon 0000:02:00.0: irq 49 for MSI/MSI-X
radeon 0000:02:00.0: radeon: using MSI.
[drm] radeon: irq initialized.
radeon 0000:02:00.0: WB enabled
[drm] radeon: ib pool ready.
[drm] radeon: power management initialized
fb1: radeondrmfb frame buffer device
[drm] Initialized radeon 2.12.0 20080528 for 0000:02:00.0 on minor 1
[drm] radeon: finishing device.
radeon 0000:02:00.0: ffff88041a941800 unpin not necessary
[drm] radeon: ttm finalized
pci-stub 0000:02:00.0: claimed by stub
pci-stub 0000:02:00.0: irq 49 for MSI/MSI-X

Isso faz com que a VM do Windows 7 esteja na tela azul durante a inicialização.

Como posso configurar as coisas para que o módulo radeon seja anexado ao 6570 e não ao 6950?

    
por genpfault 10.11.2012 / 04:44

2 respostas

14

Eu tive algumas % linhas relacionadas apci_stub no meu rc.local , mas isso foi aparentemente muito tarde no processo de inicialização para ajudar, correndo após radeon começar a mexer nas coisas.

Eu consertei as coisas movendo o material do módulo pci_stub para o initramfs :

  1. lspci -nn | grep Cayman para encontrar os números vendor:device (no final da linha) para o 6950 e sua porta HDMI:

    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. Abra o pop-up /etc/initramfs-tools/modules e adicione uma nova linha:

    pci_stub ids=1002:6719,1002:aa80
    
  3. Reconstrua o initramfs :

    sudo update-initramfs -u
    
  4. Reinicialize e observe pci_stub vencendo 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. Desfrute de passagem VGA sem tela azul!

por 10.11.2012 / 06:33
5

Usando a resposta genpfault como referência, criei outra resposta, acho que é mais simples.

O primeiro passo é o mesmo que acima:

Em seguida, criei um arquivo chamado /lib/modprobe.d/pci-stub.conf, com os argumentos encontrados:

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

Então eu criei um arquivo chamado /lib/modprobe.d/drm.conf, com o softdep:

softdep drm pre: pci-stub

Desta forma, quando o processo de inicialização tenta carregar drm, primeiro carrega o pci-stub, que reserva o hardware de uma placa de vídeo, e impede que o drm se conecte a algum dispositivo.

Mais tarde, você poderá remover a reserva em rc.local, modprobe -r pci-stub .

Opcionalmente, você pode carregar outro módulo modprobe another-module para essa placa.

    
por 31.12.2012 / 18:17