¿Evitar que el controlador Radeon se conecte a dispositivos PCI específicos?

¿Evitar que el controlador Radeon se conecte a dispositivos PCI específicos?

Tengo dos tarjetas Radeon en esta máquina, unaRadeon HD 6570y unRadeon HD 6950:

lspci | grep VGA

01:00.0 Controlador compatible con VGA: Advanced Micro Devices [AMD], de soltera ATI Turks [Radeon HD 6570]
02:00.0 Controlador compatible con VGA: Advanced Micro Devices [AMD], de soltera ATI Cayman PRO [Radeon HD 6950]

Estoy intentando que el paso VGA funcioneKVMenDebian 7(Wheezy), pasando por la 6950 como tarjeta de vídeo secundaria a un invitado de Windows 7. Esto funciona bien si incluyo en la lista negra el radeonmódulo del kernel a través de /etc/modprobe.d/.

Si elimino la lista negra para ejecutar X11 (o incluso solo unakmsconsola) en el 6570 radeonal que parece conectarse el móduloambostarjetas:

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

pci 0000:01:00.0: [1002:6759] tipo 0 clase 0x000300
pci 0000:01:00.0: reg 10: [mem 0xe0000000-0xefffffff 64bit pref]
pci 0000:01:00.0: reg 18: [mem 0xf7e2000 0-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: admite D1 D2
pci 0000:02:00.0 : [1002:6719] tipo 0 clase 0x000300
pci 0000:02:00.0: reg 10: [mem 0xd0000000-0xdfffffff 64bit pref]
pci 0000:02:00.0: reg 18: [mem 0xf7d20000-0xf7d3ffff ]
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: admite D1 D2
vgaarb: dispositivo agregado: PCI:0000:01:00.0 ,decodes=io+mem,owns=io+mem,locks=none
vgaarb: dispositivo agregado: PCI:0000:02:00.0,decodes=io+mem,owns=none,locks=none
vgaarb: control de puente posible 0000:02 :00.0
vgaarb: control de puente posible 0000:01:00.0
pci 0000:01:00.0:
Configuración del modo del kernel de radeon del dispositivo de vídeo de arranque [drm] habilitada.
radeon 0000:01:00.0: configuración del temporizador de latencia a 64
radeon 0000:01:00.0: VRAM: 1024M 0x0000000000000000 - 0x000000003FFFFFFF (1024M usados)
radeon 0000:01:00.0: GTT: 512M x0000000040000000 - 0x000000005FFFFFFF
[drm] radeon: 1024M de VRAM memoria lista
[drm] radeon: 512 M de memoria GTT listas.
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: ib pool listo.
[drm] radeon: administración de energía inicializada
fbcon: radeondrmfb (fb0) es el dispositivo principal
fb0: dispositivo frame buffer radeondrmfb
[drm] Radeon 2.12.0 inicializado 20080528 para 0000:01:00.0 en
radeon menor 0 0000:02:00.0: dispositivo de habilitación (0000 -> 0003)
radeon 0000:02:00.0: configuración del temporizador de latencia en 64
radeon 0000:02:00.0: VRAM: 2048M 0x0000000000000000 - 0x000000007FFFFFFF (2048M usados)
radeon 0000:02:00 .0: GTT: 512M 0x0000000080000000 - 0x000000009FFFFFFF
[drm ] radeon: 2048M de memoria VRAM listos
[drm] radeon: 512M de memoria GTT listos.
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: ib pool listo.
[drm] radeon: administración de energía inicializada
fb1: dispositivo frame buffer radeondrmfb
[drm] Radeon 2.12.0 inicializado 20080528 para 0000:02:00.0 en minor 1
[drm] radeon: dispositivo de acabado.
radeon 0000:02:00.0: ffff88041a941800 no es necesario desanclar
[drm] radeon: ttm
pci-stub finalizado 0000:02:00.0: reclamado por stub
pci-stub 0000:02:00.0: irq 49 para MSI/MSI-X

Esto hace que la máquina virtual con Windows 7 muestre una pantalla azul al arrancar.

¿Cómo puedo configurar cosas para que el módulo radeonsolo se conecte al 6570 y no al 6950?

Respuesta1

había tenido algunospci_stub-líneas relacionadasen mi rc.localcaso, pero aparentemente esto fue demasiado tarde en el proceso de arranque para ayudar, la ejecución después radeoncomenzó a jugar con las cosas.

Arreglé cosas moviendo el pci_stubmódulo del kernel a initramfs:

  1. lspci -nn | grep Caymanpara encontrar los vendor:devicenúmeros (al final de la línea) para el 6950 y su puerto 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/modulesy agregue una nueva línea:

    pci_stub ids=1002:6719,1002:aa80
    
  3. Reconstruir el initramfs:

    sudo update-initramfs -u
    
  4. Reinicie y observe pci_stubcómo golpea 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. ¡Disfruta del paso VGA sin pantalla azul!

Respuesta2

Usando la respuesta genpfault como referencia, creé otra respuesta, creo que es más simple.

El primer paso es el mismo que el anterior:

Luego creé un archivo llamado /lib/modprobe.d/pci-stub.conf, con los argumentos que encontré:

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

Luego creé un archivo llamado /lib/modprobe.d/drm.conf, con softdep:

softdep drm pre: pci-stub

De esta manera, cuando el proceso de arranque intenta cargar drm, primero carga pci-stub, que reserva el hardware de una tarjeta de video y evita que drm se conecte a algún dispositivo.

Posteriormente podrás eliminar la reserva en rc.local, modprobe -r pci-stub.

Opcionalmente puedes cargar otro módulo modprobe another-modulepara esa tarjeta.

información relacionada