Impedir que o driver Radeon seja conectado a dispositivos PCI específicos?

Impedir que o driver Radeon seja conectado a dispositivos PCI específicos?

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

lspci | grep VGA

01:00.0 Controlador compatível com VGA: Advanced Micro Devices [AMD] nee ATI Turks [Radeon HD 6570]
02:00.0 Controlador compatível com VGA: Advanced Micro Devices [AMD] nee ATI Cayman PRO [Radeon HD 6950]

Estou tentando fazer com que a passagem VGA funcioneKVMsobreDebian 7(Wheezy), passando pelo 6950 como placa de vídeo secundária para um convidado do Windows 7. Isso funciona bem se eu colocar o radeonmódulo do kernel na lista negra via /etc/modprobe.d/.

Se eu remover a lista negra para executar o X11 (ou mesmo apenas umKMSconsole) no 6570 o radeonmódulo parece se conectar aoamboscartões:

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

pci 0000:01:00.0: [1002:6759] tipo 0 classe 0x000300
pci 0000:01:00.0: reg 10: [mem 0xe0000000-0xeffffff 64 bits pref]
pci 0000:01:00.0: reg 18: [mem 0xf7e200 00-0xf7e3ffff 64 bits ]
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: suporta D1 D2
pci 0000:02:00.0 : [1002:6719] tipo 0 classe 0x000300
pci 0000:02:00.0: reg 10: [mem 0xd0000000-0xdfffffff 64 bits pref]
pci 0000:02:00.0: reg 18: [mem 0xf7d20000-0xf7d3ffff 64 bits]
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: suporta D1 D2
vgaarb: dispositivo adicionado: PCI:0000:01:00.0 ,decodes=io+mem,owns=io+mem,locks=none
vgaarb: dispositivo adicionado: PCI:0000:02:00.0,decodes=io+mem,owns=none,locks=none
vgaarb: controle de ponte possível 0000:02 :00.0
vgaarb: controle de ponte possível 0000:01:00.0
pci 0000:01:00.0: Dispositivo de vídeo de inicialização
[drm] configuração de modo do kernel radeon habilitada.
radeon 0000:01:00.0: configurando o temporizador de latência para 64
radeon 0000:01:00.0: VRAM: 1024M 0x0000000000000000 - 0x000000003FFFFFFF (1024M usado)
radeon 0000:01:00.0: GTT: 512M x0000000040000000 - 0x000000005FFFFFFF
[drm] radeon: 1024M de VRAM memória pronta
[drm] radeon: 512M de memória GTT pronta.
radeon 0000:01:00.0: irq 46 para MSI/MSI-X
radeon 0000:01:00.0: radeon: usando MSI.
[drm] radeon: irq inicializado.
radeon 0000:01:00.0: WB habilitado
[drm] radeon: pool ib pronto.
[drm] radeon: gerenciamento de energia inicializado
fbcon: radeondrmfb (fb0) é o dispositivo primário
fb0: dispositivo de buffer de quadro radeondrmfb
[drm] Inicializado radeon 2.12.0 20080528 para 0000:01:00.0 em menor 0
radeon 0000:02:00.0: dispositivo de ativação (0000 -> 0003)
radeon 0000:02:00.0: configurando o temporizador de latência para 64
radeon 0000:02:00.0: VRAM: 2048M 0x0000000000000000 - 0x000000007FFFFFFF (2048M usado)
radeon 0000:02:00. 0: GTT: 512M 0x0000000080000000 - 0x000000009FFFFFFF
[drm ] radeon: 2.048M de memória VRAM pronta
[drm] radeon: 512M de memória GTT pronta.
radeon 0000:02:00.0: irq 49 para MSI/MSI-X
radeon 0000:02:00.0: radeon: usando MSI.
[drm] radeon: irq inicializado.
radeon 0000:02:00.0: WB habilitado
[drm] radeon: pool ib pronto.
[drm] radeon: gerenciamento de energia inicializado
fb1: dispositivo de buffer de quadro radeondrmfb
[drm] Radeon 2.12.0 20080528 inicializado para 0000:02:00.0 no menor 1
[drm] radeon: dispositivo de acabamento.
radeon 0000:02:00.0: ffff88041a941800 desafixar não é necessário
[drm] radeon: ttm finalizado
pci-stub 0000:02:00.0: reivindicado por stub
pci-stub 0000:02:00.0: irq 49 para MSI/MSI-X

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

Como posso configurar as coisas para que o módulo radeonseja conectado apenas ao 6570 e não ao 6950?

Responder1

eu tinha tido algunspci_stublinhas relacionadasna minha rc.localopinião, mas aparentemente era tarde demais no processo de inicialização para ajudar, correndo depois de radeoncomeçar a mexer nas coisas.

Eu consertei as coisas movendo o pci_stubmaterial do módulo do kernel para initramfs:

  1. lspci -nn | grep Caymanpara encontrar os vendor:devicenúmeros (no final da linha) do 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 /etc/initramfs-tools/modulese adicione uma nova linha:

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

    sudo update-initramfs -u
    
  4. Reinicie e observe pci_stuba batida 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!

Responder2

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

O primeiro passo é igual ao anterior:

Então criei um arquivo chamado /lib/modprobe.d/pci-stub.conf, com os argumentos que encontrei:

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

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

softdep drm pre: pci-stub

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

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

Opcionalmente você pode carregar outro módulo modprobe another-modulepara essa placa.

informação relacionada